texlive[69110] Master/texmf-dist/tex/context: contest-legacy

commits+siepo at tug.org commits+siepo at tug.org
Wed Dec 13 11:03:52 CET 2023


Revision: 69110
          https://tug.org/svn/texlive?view=revision&revision=69110
Author:   siepo
Date:     2023-12-13 11:03:52 +0100 (Wed, 13 Dec 2023)
Log Message:
-----------
contest-legacy
.

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/context/base/mkii/anch-bar.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/anch-pgr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/anch-pos.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/anch-snc.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/bibl-tra.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/buff-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/buff-ver.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/catc-act.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/catc-ctx.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/catc-def.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/catc-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/catc-sym.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/catc-xml.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/colo-ema.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/colo-ext.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/colo-hex.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/colo-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/colo-rgb.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/colo-run.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/colo-x11.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/colo-xwi.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/cont-cs.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/cont-de.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/cont-en.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/cont-err.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/cont-fil.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/cont-fr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/cont-gb.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/cont-it.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/cont-log.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/cont-new.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/cont-nl.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/cont-ro.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/cont-sys.ori
    trunk/Master/texmf-dist/tex/context/base/mkii/context.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-con.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-ctx.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-def.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-env.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-fil.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-fnt.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-gen.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-job.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-mis.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-par.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-stg.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-sys.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-two.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-uti.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/core-var.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-032.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-037.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-acc.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-agr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-ans.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-cas.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-chi.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-com.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-cyr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-def.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-ec.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-ecm.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-el.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-fde.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-ffr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-fpl.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-fro.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-fsl.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-grk.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-heb.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-ibm.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-il2.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-l7x.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-lat.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-mis.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-pdf.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-pfr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-pol.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-qx.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-raw.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-run.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-t5.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-tbo.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-uc.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-vis.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-vna.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-win.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/enco-x5.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/filt-bas.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/filt-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/font-arb.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/font-bfm.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/font-chi.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/font-heb.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/font-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/font-jap.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/font-run.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/font-uni.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/font-unk.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/font-xtx.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/grph-fig.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/grph-inc.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/grph-trf.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/hand-def.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/hand-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/java-ans.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/java-exa.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/java-fil.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/java-fld.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/java-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/java-stp.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-alt.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-ana.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-art.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-bal.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-cel.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-chi.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-ctx.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-cyr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-dis.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-frd.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-frq.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-ger.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-grk.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-ind.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-ita.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-jap.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-lab.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-mis.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-run.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-sla.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-spa.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-spe.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-ura.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-url.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/lang-vn.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/math-ams.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/math-arr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/math-cow.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/math-eul.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/math-fou.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/math-frc.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/math-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/math-lbr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/math-pln.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/math-run.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/math-tex.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/math-tim.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/math-uni.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/meta-clp.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/meta-dum.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/meta-fig.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/meta-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/meta-mis.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/meta-nav.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/meta-pag.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/meta-pdf.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/meta-pre.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/meta-tex.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/meta-txt.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/meta-xml.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-aux.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-chk.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-com.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-con.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-cs.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-de.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-def.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-en.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-fr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-fst.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-it.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-mcs.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-mde.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-men.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-mfr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-mit.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-mnl.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-mno.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-mpe.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-mro.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-nl.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-pe.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-ro.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/mult-sys.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/norm-alo.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/norm-ctx.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/norm-etx.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/norm-ltx.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/norm-ptx.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/norm-tex.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/norm-xtx.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/pack-box.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/pack-lyr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/pack-obj.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/pack-rul.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-app.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-bck.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-flw.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-imp.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-ins.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-lay.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-lin.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-log.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-mak.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-mar.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-mis.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-mul.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-not.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-one.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-par.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-plg.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-run.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-set.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-sid.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-spr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-str.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/page-txt.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/pdfr-def.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/pdfr-ec.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/pdfr-il2.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/prop-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/prop-lay.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/prop-mis.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-8859-1.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-8859-10.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-8859-13.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-8859-15.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-8859-16.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-8859-2.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-8859-3.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-8859-4.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-8859-5.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-8859-7.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-8859-9.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-cp1250.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-cp1251.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-cp1252.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-cp1253.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-cp1254.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-cp1257.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-cyp.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-cyr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-def.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-ibm.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-mac.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-syn.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-uni.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-utf.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/regi-vis.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/scrn-fld.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/scrn-hlp.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/scrn-int.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/scrn-nav.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/sort-def.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/sort-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/sort-lan.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spac-gen.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spac-grd.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-def.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-dpm.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-dpx.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-dvi.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-fdf.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-mis.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-pdf.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-ps.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-tpd.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-tr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-tst.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-var.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-win.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-xet.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-xtx.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/spec-yy.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-blk.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-des.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-flt.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-itm.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-lnt.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-lst.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-mar.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-mat.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-not.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-num.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-pag.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-ref.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-reg.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-sec.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-swd.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/strc-syn.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-ali.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-box.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-dir.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-emp.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-eps.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-fil.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-fun.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-lat.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-mat.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-mis.tex
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-mpe.tex
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-mps.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-mrk.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-num.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-pat.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-pdf.tex
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-ran.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-spe.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-tpi.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/supp-vis.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/symb-cow.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/symb-eur.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/symb-glm.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/symb-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/symb-jmn.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/symb-mis.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/symb-mvs.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/symb-nav.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/symb-run.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/symb-uni.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/symb-was.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/syst-con.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/syst-ext.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/syst-fnt.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/syst-gen.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/syst-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/syst-new.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/syst-pln.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/syst-rtp.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/syst-str.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/tabl-com.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/tabl-ltb.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/tabl-ntb.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/tabl-nte.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/tabl-pln.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/tabl-tab.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/tabl-tbl.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/tabl-tsp.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/thrd-pic.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/thrd-ran.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/thrd-tab.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/thrd-trg.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/trac-vis.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/type-def.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/type-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/type-one.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/type-otf.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/type-run.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/type-set.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/type-siz.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/type-tmf.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/typo-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-000.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-001.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-002.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-003.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-004.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-005.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-030.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-031.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-032.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-033.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-034.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-035.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-037.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-039.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-251.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-cjk.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-exp.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/unic-run.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/verb-c.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/verb-eif.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/verb-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/verb-js.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/verb-jv.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/verb-mp.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/verb-pas.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/verb-pl.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/verb-raw.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/verb-sql.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/verb-tex.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/verb-xml.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xetx-chr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xetx-cls.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xetx-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xetx-utf.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-cml.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-ent.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-exp.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-ext.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-hyp.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-ini.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-map.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-mea.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-meb.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-mec.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-meh.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-men.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-meo.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-mer.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-mmc.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-mml.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-mmp.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-mxa.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-mxb.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-mxc.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-mxh.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-mxn.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-mxo.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-mxr.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-pml.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-pmu.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-pre.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-prs.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-raw.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-rng.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-run.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-stk.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-utf.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-xsd.mkii
    trunk/Master/texmf-dist/tex/context/base/mkii/xtag-xsl.mkii
    trunk/Master/texmf-dist/tex/context/bib/mkii/
    trunk/Master/texmf-dist/tex/context/bib/mkii/bibl-ams.tex
    trunk/Master/texmf-dist/tex/context/bib/mkii/bibl-apa-de.tex
    trunk/Master/texmf-dist/tex/context/bib/mkii/bibl-apa-fr.tex
    trunk/Master/texmf-dist/tex/context/bib/mkii/bibl-apa-it.tex
    trunk/Master/texmf-dist/tex/context/bib/mkii/bibl-apa.tex
    trunk/Master/texmf-dist/tex/context/bib/mkii/bibl-aps.tex
    trunk/Master/texmf-dist/tex/context/bib/mkii/bibl-num-fr.tex
    trunk/Master/texmf-dist/tex/context/bib/mkii/bibl-num.tex
    trunk/Master/texmf-dist/tex/context/bib/mkii/bibl-ssa.tex
    trunk/Master/texmf-dist/tex/context/fonts/mkii/
    trunk/Master/texmf-dist/tex/context/fonts/mkii/type-buy.mkii
    trunk/Master/texmf-dist/tex/context/fonts/mkii/type-cbg.mkii
    trunk/Master/texmf-dist/tex/context/fonts/mkii/type-cow.mkii
    trunk/Master/texmf-dist/tex/context/fonts/mkii/type-exp.mkii
    trunk/Master/texmf-dist/tex/context/fonts/mkii/type-fsf.mkii
    trunk/Master/texmf-dist/tex/context/fonts/mkii/type-ghz.mkii
    trunk/Master/texmf-dist/tex/context/fonts/mkii/type-hgz.mkii
    trunk/Master/texmf-dist/tex/context/fonts/mkii/type-mac.mkii
    trunk/Master/texmf-dist/tex/context/fonts/mkii/type-msw.mkii
    trunk/Master/texmf-dist/tex/context/fonts/mkii/type-pre.mkii
    trunk/Master/texmf-dist/tex/context/fonts/mkii/type-win.mkii
    trunk/Master/texmf-dist/tex/context/fonts/mkii/type-xtx.mkii
    trunk/Master/texmf-dist/tex/context/interface/mkii/
    trunk/Master/texmf-dist/tex/context/interface/mkii/cont-cs.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/cont-de.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/cont-fr.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/cont-it.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/cont-nl.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/cont-pe.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/cont-ro.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/keys-cs.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/keys-cz.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/keys-de.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/keys-en.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/keys-fr.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/keys-it.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/keys-nl.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/keys-pe.xml
    trunk/Master/texmf-dist/tex/context/interface/mkii/keys-ro.xml
    trunk/Master/texmf-dist/tex/context/modules/mkii/
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-arabtex.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-chart.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-chemic.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-cweb.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-database.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-dratex.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-edtsnc.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-educat.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-format.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-graph.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-layout.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-level.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-narrowtt.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-obsolete.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-pdfsnc.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-pictex.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-pstricks.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-quest.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-r.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-steps.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-streams.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-subsub.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-tex4ht.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-units.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/m-visual.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/ppchtex.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/rlxcache.rlx
    trunk/Master/texmf-dist/tex/context/modules/mkii/rlxtools.rlx
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-abr-01.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-abr-02.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-chi-00.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-fnt-01.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-fnt-02.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-grk-00.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-jap-00.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-mag-01.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-map-10.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-mod-00.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-mod-01.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-mod-02.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-01.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-02.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-03.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-04.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-05.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-09.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-10.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-11.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-14.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-15.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-17.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-19.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-30.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-60.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-61.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-62.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-63.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-64.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-68.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-pre-71.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-ptj-01.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/s-syntax.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-calcmath.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-chemml.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-chemml.xsd
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-contml.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-contml.xsd
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-corres.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-corres.rng
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-dir-01.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-dir-02.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-dir-05.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-fdf-00.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-fe.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-fig-00.dtd
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-fig-00.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-fig-00.xsd
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-fig-01.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-fig-02.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-fig-03.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-fo.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-foxet.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-mathml.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-mathml.xsd
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-newcml.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-newmme.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-newmml.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-newmmo.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-newpml.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-om2cml.xsl
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-openmath.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-openmath.xsl
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-physml.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-physml.xsd
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-res-00.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-res-01.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-res-02.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-res-03.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-res-04.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-res-08.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-res-09.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-res-10.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-res-11.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-res-12.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-res-20.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-res-50.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-sch-00.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-sch-01.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-set-01.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-set-02.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-set-11.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-set-12.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-sm2om.xsl
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-steps.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-xml-01.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-xml-02.mkii
    trunk/Master/texmf-dist/tex/context/modules/mkii/x-xml-11.mkii
    trunk/Master/texmf-dist/tex/context/patterns/mkii/
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-af.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-af.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-agr.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-agr.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-ala.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-ala.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-bg.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-bg.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-bn.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-bn.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-ca.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-ca.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-cs.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-cs.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-cy.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-cy.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-da.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-da.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-de.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-de.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-deo.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-deo.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-eo.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-eo.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-es.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-es.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-et.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-et.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-eu.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-eu.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-fi.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-fi.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-fr.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-fr.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-gb.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-gb.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-gr.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-gr.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-gu.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-gu.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-hi.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-hi.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-hr.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-hr.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-hu.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-hu.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-is.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-is.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-it.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-it.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-kn.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-kn.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-la.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-la.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-lt.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-lt.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-lv.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-lv.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-mk.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-mk.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-ml.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-ml.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-mn.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-mn.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-nb.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-nb.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-nl.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-nl.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-nn.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-nn.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-pl.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-pl.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-pt.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-pt.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-ro.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-ro.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-ru.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-ru.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-sa.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-sa.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-sk.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-sk.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-sl.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-sl.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-sq.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-sq.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-sr.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-sr.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-sv.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-sv.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-ta.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-ta.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-te.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-te.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-th.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-th.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-tk.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-tk.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-tr.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-tr.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-uk.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-uk.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-us.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-us.pat
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-zh.hyp
    trunk/Master/texmf-dist/tex/context/patterns/mkii/lang-zh.pat
    trunk/Master/texmf-dist/tex/context/user/
    trunk/Master/texmf-dist/tex/context/user/mkii/
    trunk/Master/texmf-dist/tex/context/user/mkii/cont-sys.rme

Added: trunk/Master/texmf-dist/tex/context/base/mkii/anch-bar.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/anch-bar.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/anch-bar.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,194 @@
+%D \module
+%D   [       file=anch-bar,
+%D        version=2003.03.16,
+%D          title=\CONTEXT\ Anchoring Macros,
+%D       subtitle=Margin Bars and alike,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Anchoring Macros / Margin Bars}
+
+\unprotect
+
+%D We will implement a sidebar mechanism using the
+%D functionality from \type {core-pos}.
+%D
+%D \starttyping
+%D \definesidebar[whow][rulecolor=green,distance=]
+%D
+%D \input tufte \par
+%D \startsidebar
+%D   \input tufte \par
+%D   \input tufte \par
+%D   \startsidebar[whow]
+%D     \input tufte \par
+%D     \input tufte \par
+%D     \input tufte
+%D   \stopsidebar \par
+%D   \input tufte \par
+%D   \input tufte
+%D \stopsidebar \par
+%D \input tufte \par
+%D \input tufte \par
+%D \startsidebar
+%D   \input tufte \par
+%D   \input tufte \par
+%D   \input tufte \par
+%D   \input tufte \par
+%D   \input tufte
+%D \stopsidebar \par
+%D \input tufte \par
+%D \input tufte \par
+%D \startsidebar
+%D   \input tufte
+%D   \input tufte
+%D   \input tufte
+%D   \input tufte
+%D   \input tufte
+%D \stopsidebar
+%D \stoptyping
+
+\newcount\currentsidebar
+\newdimen\sidebardistance
+
+\def\setupsidebars
+  {\dodoubleargument\dosetupsidebars}
+
+\def\dosetupsidebars[#1][#2]%
+  {\ifsecondargument
+     \getparameters[\??br#1][#2]%
+   \else
+     \getparameters[\??br][#1]%
+   \fi}
+
+% \setupMPvariables
+%   [mpos:bar]
+%   [linecolor=red,
+%    linewidth=2pt,
+%    distance=5pt]
+
+\setupsidebars
+  [\c!rulethickness=2pt,
+   \c!rulecolor=red,
+   \c!distance=.5\bodyfontsize]
+
+\def\definesidebar
+  {\dodoubleempty\dodefinesidebar}
+
+\def\dodefinesidebar[#1][#2]%
+  {\copyparameters
+     [\??br#1][\??br]
+     [\c!rulethickness,\c!rulecolor,\c!distance]%
+   \getparameters
+     [\??br#1][#2]}
+
+\def\startsidebar
+  {\dosingleempty\dostartsidebar}
+
+\def\dostartsidebar[#1]%
+  {\bgroup
+   \dontleavehmode
+   \checktextbackgrounds
+   \global\advance\currentsidebar\plusone
+   \doifelsenothing{#1}
+     {\advance\sidebardistance\@@brdistance}
+     {\doifelsevaluenothing{\??br#1\c!distance}
+        {\advance\sidebardistance\@@brdistance}
+        {\sidebardistance\getvalue{\??br#1\c!distance}}}%
+   \startpositionoverlay{text-1}%
+     \expanded{\setMPpositiongraphicrange
+       {b:side:\the\currentsidebar}%
+       {e:side:\the\currentsidebar}%
+       {mpos:bar}%
+       {self=side:\the\currentsidebar,
+        linewidth=\getvalue{\??br#1\c!rulethickness},
+        linecolor=\getvalue{\??br#1\c!rulecolor},
+        distance=\the\sidebardistance}}%
+   \stoppositionoverlay
+   \bpos{side:\the\currentsidebar}\ignorespaces}
+
+% \def\dostopsidebar#1%
+%   {\removelastspace\tpos{side:#1}\carryoverpar\egroup}
+
+\def\stopsidebar
+  {\removelastspace\tpos{side:\the\currentsidebar}\carryoverpar\egroup}
+
+\startMPpositionmethod{mpos:bar}
+  \startMPpositiongraphic{mpos:bar}{linecolor,linewidth,distance}%
+    StartPage ;
+      path p ; p :=
+      if \MPp\MPbself=\MPp\MPeself :
+        (xpart ulcorner Field[Text][Text],\MPy\MPbself+\MPh\MPbself) --
+        (xpart llcorner Field[Text][Text],\MPy\MPeself-\MPd\MPeself) ;
+      elseif RealPageNumber=\MPp\MPbself :
+        (xpart ulcorner Field[Text][Text],\MPy\MPbself+\MPh\MPbself) --
+        (llcorner Field[Text][Text]) ;
+      elseif RealPageNumber=\MPp\MPeself :
+        (ulcorner Field[Text][Text]) --
+        (xpart llcorner Field[Text][Text],\MPy\MPeself-\MPd\MPeself) ;
+      else :
+        (ulcorner Field[Text][Text]) --
+        (llcorner Field[Text][Text]) ;
+      fi ;
+      p := p shifted (-llcorner Field[Text][Text]-(\MPvar{distance},0)) ;
+      interim linecap := butt ;
+      draw p
+        withpen pencircle scaled \MPvar{linewidth}
+        withcolor \MPvar{linecolor} ;
+    StopPage ;
+  \stopMPpositiongraphic
+  \MPpositiongraphic{mpos:bar}{}%
+\stopMPpositionmethod
+
+%D We now reimplement the margin rules handler defined in
+%D \type {core-rul}:
+%D
+%D \setupmarginrules[level=5]
+%D
+%D \startmarginrule[1]
+%D First we set the level at~5. Next we typeset this first
+%D paragraph as a level~1 one. As expected no rule show up.
+%D \stopmarginrule
+%D
+%D \startmarginrule[5]
+%D The second paragraph is a level~5 one. As we can see here,
+%D the marginal rule gets a width according to its level.
+%D \stopmarginrule
+%D
+%D \startmarginrule[8]
+%D It will of course be no surprise that this third paragraph
+%D has a even thicker margin rule. This behavior can be
+%D overruled by specifying the width explictly.
+%D \stopmarginrule
+
+\definesidebar
+  [\v!margin]
+  [\c!rulecolor=\s!black,
+   \c!rulethickness=\@@karulethickness,
+   \c!distance=\dimexpr\leftmargindistance-\@@karulethickness/2\relax]
+
+\definecomplexorsimple\startmarginrule
+
+\def\simplestartmarginrule
+  {\complexstartmarginrule[1]}
+
+\def\complexstartmarginrule[#1]%
+  {\bgroup
+   \ifnum#1<\@@kalevel\relax
+     \let\stopmarginrule\egroup
+   \else
+     \def\@@kadefaultwidth{#1}%
+     \let\stopmarginrule\dostopmarginrule
+     \@EA\startsidebar\@EA[\@EA\v!margin\@EA]%
+   \fi}
+
+\def\dostopmarginrule
+  {\stopsidebar
+   \egroup}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/anch-pgr.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/anch-pgr.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/anch-pgr.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,1684 @@
+%D \module
+%D   [       file=anch-pgr, % split off core-pos
+%D        version=1999.08.01,
+%D          title=\CONTEXT\ Anchoring Macros,
+%D       subtitle=Positioning Graphics,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Anchoring Macros / Grapics}
+
+%D Before we come to graphics support, we have to make sure of
+%D the reference point on the page. The next macro does so and
+%D is hooked into the page building routine.
+
+\unprotect
+
+% in the future, the depth of tail will reflect page depth
+
+\ifx\textheight\undefined \def\textheight{\vsize} \fi
+
+%D The next macros so some housekeeping.
+
+\def\pageanchor{page:0} % for the moment only one pagesize
+\def\textanchor{text:\realfolio}
+\def\headanchor{head:\realfolio} % virtual position
+\def\tailanchor{tail:\realfolio} % virtual position
+
+%D Anchors:
+
+\def\dopresetpositionanchors % also mkii
+  {\bgroup
+   \!!dimena\ifdim\topskip>\strutht\topskip\else\strutht\fi
+   \!!dimenb\dimexpr\MPy\textanchor+\MPh\textanchor-\!!dimena\relax
+   \!!dimenc\dimexpr\MPy\textanchor+\strutdp\relax
+   \!!dimend\MPx\textanchor
+   \!!dimene\MPw\textanchor
+   \replacepospxywhd\headanchor\realfolio\!!dimend\!!dimenb\!!dimene\!!dimena\strutdp
+   \replacepospxywhd\tailanchor\realfolio\!!dimend\!!dimenc\!!dimene\strutht \strutdp
+   \egroup}
+
+\def\presetpositionanchors% compatibility hack (still needed?)
+  {\ifpositioning
+     \dopresetpositionanchors
+   \fi}
+
+%D The first version of this module implemented head and tail
+%D anchors. Currently we stick to just one anchor and derive
+%D the head and tail anchors from this one.
+
+\def\showanchor#1%
+  {\expanded{\writestatus{#1}
+     {\MPp{#1}\string|\MPx{#1}\string|\MPy{#1}\string|%
+      \MPw{#1}\string|\MPh{#1}\string|\MPd{#1}}}}
+
+%D We set these anchors before and after each page.
+
+\appendtoks \presetpositionanchors \to \beforeeverypage
+\appendtoks \presetpositionanchors \to \aftereverypage
+
+% todo: change with each page size change
+
+\def\registerpageposition#1% this one is flushed first !
+  {\ifpositioning\ifcase\realpageno\or
+     \ifdim\printpaperheight=\paperheight
+       \ifdim\printpaperwidth=\paperwidth
+         % not needed,
+       \else
+         \setbox#1\hbox{\hpos\pageanchor{\box#1}}%
+       \fi
+     \else
+       \setbox#1\ruledhbox{\hpos\pageanchor{\box#1}}%
+     \fi
+   \fi\fi}
+
+\def\placepositionanchors % todo : depth pagebox
+  {\ifpositioning
+     \setbox\scratchbox\vbox to \textheight
+       {\simpletopskipcorrection
+        \hbox{\strut\dopositionaction\headanchor}%
+        \vfill
+        \hbox{\strut\dopositionaction\tailanchor}}%
+     \dp\scratchbox\zeropoint
+     \wd\scratchbox\makeupwidth % not \zeropoint, else wrong text backgrounds
+     \hpos\textanchor{\box\scratchbox}%
+   \else
+     \vskip\textheight
+   \fi}
+

+%D \macros
+%D   {positionoverlay,startpositionoverlay}
+%D
+%D As long as we're dealing with graphics it makes much sense
+%D to use the available overlay mechanism. For this purpose, we
+%D define some dedicated overlay extensions.
+%D
+%D \startbuffer[sample]
+%D \defineoverlay [sample] [\positionoverlay{sample}]
+%D
+%D \startpositionoverlay{sample}
+%D   \setMPpositiongraphic{A-1}{connectcenter}{from=A-1,to=A-2}
+%D \stoppositionoverlay
+%D \stopbuffer
+%D
+%D \typebuffer[sample]
+%D
+%D \startbuffer[graphic]
+%D \startMPpositiongraphic{connectcenter}
+%D   path pa, pb ; pair ca, cb ;
+%D   initialize_box(\MPpos{\MPvar{from}}) ; pa := pxy ; ca := cxy ;
+%D   initialize_box(\MPpos{\MPvar{to}}) ; pb := pxy ; cb := cxy ;
+%D   draw pa withcolor red ;
+%D   draw pb withcolor red ;
+%D   draw ca -- cb withcolor blue ;
+%D   anchor_box(\MPanchor{\MPvar{from}}) ;
+%D \stopMPpositiongraphic
+%D \stopbuffer
+%D
+%D We can best demonstrate this in an example, say:
+%D
+%D \startbuffer[text]
+%D \framed
+%D   [backgroundachtergrond=sample,align=middle,width=7cm]
+%D   {We want to connect \hpos {A-1} {this} word with its
+%D    grammatical cousin \hpos {A-2} {that}.}
+%D \stopbuffer
+%D
+%D \typebuffer[text]
+%D
+%D \startlinecorrection
+%D %\getbuffer[graphic,sample,text]
+%D \stoplinecorrection
+%D
+%D The graphic is defined in the following way, using some
+%D macros defined in an auxiliary \METAPOST\ module that is
+%D preloaded.
+%D
+%D \typebuffer[graphic]
+
+\def\MPanchoridentifier{mpa} % {mp-anchor}
+\def\MPoverlayposprefix{MO::}
+
+% obsolete and wrong anyway
+%
+% \long\def\defineMPpositiongraphic#1%
+%   {\long\setvalue{\MPoverlayposprefix#1}}
+
+%D The rest of the definitions concerning such overlays may
+%D look complicated,
+
+\let\currentpositionoverlay\empty
+
+%D Position actions are automatically executed when a position
+%D is set.
+
+\let\MPanchornumber\realfolio
+
+\def\positionoverlay#1% the test prevents too many redundant positions
+  {\ifpositioning     % in (not used) text* position layers
+     \vbox to \overlayheight
+       {\doifpositionactionelse{#1::\MPanchoridentifier}%
+          {\edef\MPanchorid{#1::\MPanchoridentifier:\MPanchornumber}%
+           \edef\MPanchor##1{\MPpos{\MPanchorid}}%
+           \the\everyinsertpositionaction
+           \copyposition{#1::\MPanchoridentifier}{#1::\MPanchoridentifier:\MPanchornumber}%
+           \hpos
+             {#1::\MPanchoridentifier:\MPanchornumber}%
+            % this is ok
+            %{\hbox to \overlaywidth{\dopositionaction{#1::\MPanchoridentifier}\hss}}}%
+            % but this one prevents cyclic runs due to
+            % rounding errors
+             {\setbox\scratchbox\hbox to \overlaywidth{\dopositionaction{#1::\MPanchoridentifier}\hss}%
+              \ht\scratchbox\overlayheight
+              \dp\scratchbox\zeropoint
+              \box\scratchbox}}%
+          {\hbox to \overlaywidth{\hss}}%
+        \vfill}%
+   \fi}
+
+\def\startpositionoverlay#1%
+  {\iftrialtypesetting % we don't want redundant entries in the list
+     \@EA\gobbleuntil\@EA\stoppositionoverlay
+   \else
+     \def\currentpositionoverlay{#1}%
+   \fi}
+
+\def\stoppositionoverlay
+  {\let\currentpositionoverlay\empty}
+
+\def\resetpositionoverlay#1%
+  {\dosetpositionaction{#1::\MPanchoridentifier::}{}}
+
+%D Here the complication has to do with collecting actions
+%D for later execution. This collection is especially handy
+%D when we want to move actions to a specific layer.
+%D Such series of actions are stored in a macro (the one
+%D with the funny \type {++}) which is cleaned up after each
+%D invocation.
+
+\newtoks\everycleanpositionaction
+\newtoks\everyinsertpositionaction
+
+\def\cleanuppositionaction#1% not in trialtypesetting
+  {\ifcsname\POSactionprefix#1++\endcsname % \ifundefined{\POSactionprefix#1++}\else
+     \the\everycleanpositionaction
+     \iflocalpositioning
+       \letgvalue{\POSactionprefix#1++}\empty
+     \else
+       \setxvalue{\POSactionprefix#1++}{\getvalue{\POSactionprefix#1++}}%
+     \fi
+   \fi}
+
+% \def\cleanuppositionaction#1% not in trialtypesetting
+%   {\ifcsname\POSactionprefix#1++\endcsname
+%      \the\everycleanpositionaction
+%      \iflocalpositioning
+%        \global\expandafter\let\csname\POSactionprefix#1++\endcsname\empty
+%      \else
+%        \global\expandafter\let\csname\POSactionprefix#1++\expandafter\endcsname\csname\POSactionprefix#1++\endcsname
+%      \fi
+%    \fi}
+
+\def\handlepositionaction#1\with#2\on#3%
+  {\bgroup
+   \ifx\currentpositionoverlay\empty
+     \edef\!!stringa{#3}% no layer, just pos itself as anchor
+   \else
+     \edef\!!stringa{\currentpositionoverlay::\MPanchoridentifier}%
+   \fi
+   \edef\!!stringc{\POSactionprefix\!!stringa++}%
+   \expanded{\dosetpositionaction{\!!stringa}{\noexpand\getvalue{\!!stringc}}}%
+   \global\let#1\relax
+   \edef\!!stringb{\executeifdefined\!!stringc\empty}%
+   \setxvalue\!!stringc{\!!stringb#1#2}%
+   \egroup}
+
+%D The indirectness enables us redefine macros for special
+%D purposes, like a cleanup.
+
+\def\handlepositionboxes#1#2#3%
+  {\handlepositionaction\dohandlepositionboxes\with{#1}{#2}{#3}\on{#2}}
+
+\def\doinsertpositionboxes#1#2#3% pos tag setups
+  {\ifnum\MPp{#1}=\realpageno\relax % can be sped up
+     \executeifdefined{\MPoverlayposprefix#1}\gobblethreearguments{#1}{#2}{#3}%
+   \fi}
+
+\appendtoks
+  \let\dohandlepositionboxes\doinsertpositionboxes % was handle ?
+\to \everyinsertpositionaction
+
+\def\docleanpositionboxes#1#2#3% pos tag setups
+  {\ifnum\MPp{#1}<\realpageno \else
+     \noexpand \dohandlepositionboxes{#1}{#2}{#3}% reinsert
+   \fi}
+
+\appendtoks
+  \let\dohandlepositionboxes\docleanpositionboxes
+\to \everycleanpositionaction
+
+%D A position graphic is a normal (non||reused) \METAPOST\
+%D graphic, used immediately, with zero dimensions, so that a
+%D sequence of them does not harm.
+
+\newbox\positiongraphicbox
+
+\def\startMPpositiongraphic % id setups
+  {\dodoublegroupempty\dostartMPpositiongraphic}
+
+\long\def\dostartMPpositiongraphic#1#2#3\stopMPpositiongraphic
+  {\long\setgvalue{MPG:#1}% tag list mpcode
+     {\useMPpositiongraphic{#1}{#2}{#3}}}
+
+\let\stopMPpositiongraphic\relax
+
+% \def\prepareMPpositionvariables
+%   {\ifundefined{\@@meta self}\setvalue{\@@meta self}{\currentposition}\fi
+%    \ifundefined{\@@meta from}\setvalue{\@@meta from}{\currentposition}\fi}
+
+\def\prepareMPpositionvariables
+  {\ifcsname\@@meta self\endcsname\else\setvalue{\@@meta self}{\currentposition}\fi
+   \ifcsname\@@meta from\endcsname\else\setvalue{\@@meta from}{\currentposition}\fi}
+
+\newif\ifcollectMPpositiongraphics \collectMPpositiongraphicstrue
+
+\long\def\useMPpositiongraphic#1#2#3%
+  {\bgroup
+   \prepareMPvariables{#2}%
+   \prepareMPpositionvariables
+   \enableincludeMPgraphics
+   \ifcollectMPpositiongraphics % no longer needed in mkiv
+     \expanded{\startMPdrawing#3\noexpand\stopMPdrawing}%
+     \global\MPdrawingdonetrue
+   \else\ifx\startMPgraphic\undefined
+     \startMPcode#3\stopMPcode
+   \else
+     \startMPgraphic#3\stopMPgraphic
+     \loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}%
+     \deallocateMPslot\currentMPgraphic
+     \placeMPgraphic
+   \fi\fi
+   \egroup}
+
+% Now we need a adapted action handler:
+
+\def\dopositionaction#1% test saves hash entry in etex
+  {\ifundefined{\POSactionprefix#1::}\else
+     \ifnum\MPp{#1}>\zerocount % new
+       \bgroup
+       \setbox\scratchbox\hbox
+       \bgroup
+       \traceposstring\clap\red{<#1>}%
+       \the\everyinsertpositionaction
+       \the\everypositionaction
+       \ifcollectMPpositiongraphics
+         % can save a lot of run time
+         \pushMPdrawing
+         \MPshiftdrawingtrue
+         \resetMPdrawing
+         \getvalue{\POSactionprefix#1::}%
+         \ifMPdrawingdone
+           \getMPdrawing
+         \fi
+         \resetMPdrawing
+         \popMPdrawing
+       \else
+         \getvalue{\POSactionprefix#1::}%
+       \fi
+       \cleanuppositionaction{#1}%
+       \egroup                % smashed is really needed else
+       \smashedbox\scratchbox % we get problems with too big
+       \egroup                % overlays (s-pre-0x.tex)
+     \else
+       % shouldn't happen too often
+       \traceposstring\clap\cyan{<#1>}%
+     \fi
+   \fi}
+
+\def\MPpositiongraphic
+  {\dodoublegroupempty\doMPpositiongraphic}
+
+\def\doMPpositiongraphic#1#2% tag setups
+  {\bgroup
+   \def\@@meta{#1:}%
+   \setupMPvariables[#2]%
+   \prepareMPpositionvariables
+   \MPshiftdrawingtrue
+   \def\doMPpositiongraphic##1##2%
+     {{% new, see (techniek)
+       \def\@@meta{##1:}%
+       \setupMPvariables[#2,##2]%
+       \prepareMPpositionvariables
+       % and needed
+       \getvalue{MPG:##1}}}% temp hack
+   \setbox\positiongraphicbox\hbox
+     {\ignorespaces
+      \executeifdefined{MPM:#1}{\executeifdefined{MPG:#1}\donothing}%
+      \removelastspace}%
+   \smashbox\positiongraphicbox
+   \box\positiongraphicbox
+   \egroup}
+
+\long\def\startMPpositionmethod#1#2\stopMPpositionmethod
+  {\long\setgvalue{MPM:#1}{#2}} % todo: var list here
+
+\let\stopMPpositionmethod\relax
+
+%D Simple one position graphics.
+
+\def\setMPpositiongraphic
+  {\dotriplegroupempty\dosetMPpositiongraphic}
+
+\def\dosetMPpositiongraphic#1#2#3% pos tag vars
+  {\ifx\currentpositionoverlay\empty
+     \dosetpositionaction{#1}{\MPpositiongraphic{#2}{#3}}%
+   \else % silly can be one
+     \handlepositiongraphics{#1}{#2}{#3}%
+   \fi}
+
+\def\handlepositiongraphics#1#2#3% combine with boxes
+  {\handlepositionaction\dohandleMPpositiongraphic\with{#1}{#2}{#3}\on{#2}}
+
+\def\doinsertMPpositiongraphic#1#2#3% pos tag setups
+  {\ifnum\MPp{#1}=\realpageno\relax % extra saveguard
+     \def\currentposition{#1}\MPpositiongraphic{#2}{#3}%
+   \fi}
+
+\appendtoks
+  \let\dohandleMPpositiongraphic\doinsertMPpositiongraphic
+\to \everyinsertpositionaction
+
+\def\docleanMPpositiongraphic#1#2#3% pos tag setups
+  {\ifnum\MPp{#1}<\realpageno \else
+     \noexpand \dohandleMPpositiongraphic{#1}{#2}{#3}%
+   \fi}
+
+\appendtoks
+  \let\dohandleMPpositiongraphic\docleanMPpositiongraphic
+\to \everycleanpositionaction
+
+%D Graphics that span two positions.
+
+\def\setMPpositiongraphicrange
+  {\doquadruplegroupempty\dosetMPpositiongraphicrange}
+
+\def\dosetMPpositiongraphicrange#1#2#3#4% bpos epos tag vars
+  {\ifx\currentpositionoverlay\empty
+     \dosetpositionaction{#1}{\MPpositiongraphic{#3}{#4}}%
+   \else
+     \handlepositiongraphicsrange{#1}{#2}{#3}{#4}%
+   \fi}
+
+\def\handlepositiongraphicsrange#1#2#3#4%
+  {\handlepositionaction\dohandleMPpositiongraphicrange\with{#1}{#2}{#3}{#4}\on{#2}}
+
+\def\doinsertMPpositiongraphicrange#1#2#3#4% pos pos tag setups
+  {\ifnum\MPp{#1}\MPp{#2}>\zerocount
+     \iflocalpositioning
+       \donetrue
+     \else
+       \donefalse
+       \ifnum\MPp{#1}=\realpageno
+         \donetrue
+       \else\ifnum\MPp{#2}=\realpageno
+         \donetrue
+       \else\ifnum\MPp{#1}<\realpageno\relax\ifnum\MPp{#2}>\realpageno
+         \donetrue
+       \fi\fi\fi\fi
+     \fi
+     \ifdone
+       \def\currentposition{#1}\MPpositiongraphic{#3}{#4}%
+     \fi
+   \fi}
+
+\appendtoks
+  \let\dohandleMPpositiongraphicrange\doinsertMPpositiongraphicrange
+\to \everyinsertpositionaction
+
+\def\docleanMPpositiongraphicrange#1#2#3#4% pos tag setups
+  {\ifnum\MPp{#2}<\realpageno \else
+     \noexpand \dohandleMPpositiongraphicrange{#1}{#2}{#3}{#4}%
+   \fi}
+
+\appendtoks
+  \let\dohandleMPpositiongraphicrange\docleanMPpositiongraphicrange
+\to \everycleanpositionaction
+

+% will be overloaded, and/or code below moved to core-box
+
+\defineoverlay[\v!text-2][\positionoverlay{\v!text-2}]
+\defineoverlay[\v!text-1][\positionoverlay{\v!text-1}]
+\defineoverlay[\v!text+1][\positionoverlay{\v!text+1}]
+\defineoverlay[\v!text+2][\positionoverlay{\v!text+2}]
+

+%D Some of these macros are pretty clever but too complicated
+%D to be nice. When things are kind of stable I'll clean up
+%D this mess.
+
+%D THIS NEEDS A CLEANUP
+
+\setupMPvariables
+  [mpos:box]
+  [linecolor=blue,
+   linewidth=\linewidth,
+   fillcolor=lightgray,
+   filloffset=\!!zeropoint]
+
+\startMPpositiongraphic{mpos:box}{fillcolor,linecolor,linewidth}
+  initialize_box(\MPpos{\MPvar{self}}) ;
+  boxfillcolor  := \MPvar{fillcolor} ;
+  boxlinecolor  := \MPvar{linecolor} ;
+  boxlinewidth  := \MPvar{linewidth} ;
+  boxfilloffset := \MPvar{filloffset} ;
+  draw_box ;
+  anchor_box(\MPanchor{\MPvar{self}}) ;
+\stopMPpositiongraphic
+
+\setupMPvariables
+  [mpos:area]
+  [linecolor=blue,
+   linewidth=\linewidth,
+   fillcolor=lightgray,
+   filloffset=\!!zeropoint]
+
+\startMPpositiongraphic{mpos:area}{fillcolor,linecolor,linewidth}
+  initialize_area(\MPpos{b:\MPvar{self}},\MPpos{e:\MPvar{self}}) ;
+  boxfillcolor  := \MPvar{fillcolor} ;
+  boxlinecolor  := \MPvar{linecolor} ;
+  boxlinewidth  := \MPvar{linewidth} ;
+  boxfilloffset := \MPvar{filloffset} ;
+  draw_area ;
+  anchor_area(\MPanchor{b:\MPvar{self}}) ;
+\stopMPpositiongraphic
+
+%D This is already cleaned up.
+
+% gridtype = 1 => baseline
+% gridtype = 2 => betweenline
+
+\setupMPvariables
+  [mpos:par]
+  [mp=mpos:par:shape,
+   gridtype=0,
+   linetype=1,
+   filltype=1,
+   dashtype=0, % 1 = dashed, 2 = dashed with background
+  %snaptops=true, % not that nice: true/false
+   gridcolor=red,
+   linecolor=blue,
+   fillcolor=lightgray,
+   filloffset=\!!zeropoint,
+   linewidth=\linewidth,
+   gridwidth=\linewidth,
+   gridshift=\!!zeropoint,
+   lineradius=.5\bodyfontsize,
+   dashtype=1]
+
+\startuseMPgraphic{mpos:par:shape}
+  \iftracepositions show_par \else draw_par \fi ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{mpos:par:setup}
+   boxgridtype   := \MPvar{gridtype} ;
+   boxlinetype   := \MPvar{linetype} ;
+   boxfilltype   := \MPvar{filltype} ;
+   boxdashtype   := \MPvar{dashtype} ;
+   boxgridcolor  := \MPvar{gridcolor} ;
+   boxlinecolor  := \MPvar{linecolor} ;
+   boxfillcolor  := \MPvar{fillcolor} ;
+   boxfilloffset := \MPvar{filloffset} ;
+   boxlinewidth  := \MPvar{linewidth} ;
+   boxgridwidth  := \MPvar{gridwidth} ;
+   boxgridshift  := \MPvar{gridshift} ;
+   boxlineradius := \MPvar{lineradius} ;
+  %snap_multi_par_tops := \MPvar{snaptops} ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{mpos:par:extra}
+  % user stuff, like:
+  % snap_multi_par_tops := false ;
+\stopuseMPgraphic
+
+\ifx\MPparcounter\undefined \newcounter\MPparcounter \fi
+
+\def\MPself     {\MPvar{self}}
+\def\MPbself    {b:\MPself}
+\def\MPeself    {e:\MPself}
+\def\MPwself    {w:\MPself}
+\def\MPparanchor{p:\MPparcounter}
+
+\def\MPl#1{\MPplus{#1}20}
+\def\MPr#1{\MPplus{#1}30}
+
+\startMPpositionmethod{mpos:par} %%%%%%%%%%% will become obsolete
+  \edef\MPparcounter{\MPv\MPbself{1}{0}}%
+  \doifpositionelse\MPwself
+    {\startMPpositiongraphic{mpos:par}{fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,gridshift,lineradius}
+       initialize_area_par(\MPpos\MPbself,
+                           \MPpos\MPeself,
+                           \MPpos\MPwself) ;
+       \includeMPgraphic{mpos:par:setup} ;
+       \includeMPgraphic{mpos:par:extra} ;
+       \includeMPgraphic{\MPvar{mp}} ;
+       anchor_par(\MPanchor\MPbself) ;
+     \stopMPpositiongraphic}
+    {\startMPpositiongraphic{mpos:par}{fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,gridshift,lineradius}
+       initialize_par(\MPpos\MPbself,
+                      \MPpos\MPeself,
+                      \MPpos\textanchor,
+                      \MPpos\MPparanchor,
+                      \MPvv \MPparanchor{0pt,0pt,0pt,0pt,0,0pt}) ;
+       \includeMPgraphic{mpos:par:setup} ;
+       \includeMPgraphic{mpos:par:extra} ;
+       \includeMPgraphic{\MPvar{mp}} ;
+       anchor_par(\MPanchor\MPbself) ;
+     \stopMPpositiongraphic}%
+  \MPpositiongraphic{mpos:par}{}%
+\stopMPpositionmethod
+
+%D The next alternative works in columnsets :
+
+%  \iftracepositions show\else draw\fi_multi_pars ;
+
+\startuseMPgraphic{mpos:par:columnset}
+  \iftracepositions show_multi_pars \else draw_multi_pars \fi ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{mpos:par:sideline}{linecolor,lineoffset}
+    for i=1 upto nofmultipars :
+        fill leftboundary multipars[i]
+            shifted (-\MPvar{lineoffset},0)
+            rightenlarged 1mm withcolor \MPvar{linecolor} ;
+    endfor ;
+\stopuseMPgraphic
+
+\startMPpositionmethod{mpos:par:columnset}
+  \edef\MPparcounter{\MPv\MPbself{1}{0}}%
+  \startMPpositiongraphic{mpos:par}{fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,gridshift,lineradius}
+    \includeMPgraphic{mpos:par:setup} ;
+    \includeMPgraphic{mpos:par:extra} ;
+    prepare_multi_pars(\MPpos\MPbself,\MPpos\MPeself,\MPpos\MPwself,
+      \MPpos\MPparanchor,\MPvv\MPparanchor{0pt,0pt,0pt,0pt,0,0pt}) ;
+    relocate_multipars(-\MPxy\MPanchorid) ; % inside layerpos
+    \includeMPgraphic{\MPvar{mp}} ;
+  \stopMPpositiongraphic
+  \MPpositiongraphic{mpos:par}{}%
+\stopMPpositionmethod
+
+%D \starttyping
+%D \setupbackground
+%D   [test]
+%D   [mp=mpos:par:columnset,
+%D    method=mpos:par:columnset]
+%D \stoptyping
+
+%D We need to treat floats in a special way.
+
+\startMPinitializations
+  local_multi_par_area:=\iflocalpositioning true\else false\fi;
+\stopMPinitializations
+
+\def\textbackgroundoverlay#1%
+  {\iflocalpositioning\v!local\else\v!text\fi#1}
+
+\newcounter\localpositionnumber
+
+\def\MPanchornumber
+  {\iflocalpositioning\localpositionnumber\else\realfolio\fi}
+
+%D So far for the trickery.
+
+\newcount\textbackgrounddepth
+
+\appendtoks
+  \expanded{\savecurrentvalue\noexpand\totalnofparbackgrounds{\number\nofparbackgrounds}}%
+\to \everybye
+
+\appendtoks
+  \initializeparbackgrounds
+\to \everystarttext
+
+\ifx\totalnofparbackgrounds\undefined \newcounter\totalnofparbackgrounds \fi
+\ifx\nofparbackgrounds     \undefined \newcount  \nofparbackgrounds      \fi
+
+\def\initializeparbackgrounds
+  {\ifcase\totalnofparbackgrounds\else
+     \enableparpositions
+   \fi}
+
+\unexpanded\def\starttextbackground
+  {\bgroup
+   \advance\textbackgrounddepth\plusone
+   \dodoubleempty\dostarttextbackground}
+
+\let\dodostarttextbackground\relax
+\let\dodostoptextbackground \relax
+
+\def\currentparbackground{pbg:0}
+\def\nextparbackground   {pbg:1}
+
+\def\btbanchor{b:\currentparbackground}
+\def\etbanchor{e:\currentparbackground}
+
+\def\nextbtbanchor{b:\nextparbackground}
+\def\nextetbanchor{e:\nextparbackground}
+
+\def\textbackgroundparameter#1%
+  {\csname\??td\currenttextbackground#1\endcsname}
+
+\let\backgroundvariable\textbackgroundparameter % will become obsolete
+
+% \definetextbackground[more][state=start,backgroundcolor=red] % location=paragraph
+% \definetextbackground[test][state=start,backgroundcolor=green]
+%
+% \page \placefigure[left]{}{}
+%
+% \starttextbackground[test]
+%   \readfile{ward}{}{}
+%   \starttextbackground[more]
+%     \readfile{ward}{}{}
+%   \stoptextbackground
+%   \readfile{ward}{}{}
+% \stoptextbackground
+%
+% \page \placefigure[right]{}{}
+%
+% \starttextbackground[test]
+%   \readfile{ward}{}{}
+%   \starttextbackground[more]
+%     \readfile{ward}{}{}
+%   \stoptextbackground
+%   \readfile{ward}{}{}
+% \stoptextbackground
+
+\def\dostarttextbackground[#1][#2]%
+  {\checktextbackgrounds
+   \def\currenttextbackground{#1}%
+   \global\advance\nofparbackgrounds\plusone
+   \edef\currentparbackground{pbg:\number\nofparbackgrounds}%
+%    \bgroup
+%      \advance\nofparbackgrounds\plusone
+%      \xdef\nextparbackground{pbg:\number\nofparbackgrounds}%
+%    \egroup
+   \xdef\nextparbackground{pbg:\number\numexpr\nofparbackgrounds+\plusone\relax}% still xdef ?
+   % todo : \synchonizepositionpage{b:\currentparbackground}{s:\currentparbackground}%
+   \setuptextbackground[#1][#2]%
+   \let\dodostarttextbackground\relax
+   \let\dodostoptextbackground \relax
+   \doif{\textbackgroundparameter\c!state}\v!start{\dopresettextbackground{#1}}%
+   \dodostarttextbackground}
+
+% todo \backgroundvariable\c!variant
+
+\def\dopresettextbackground#1% todo: \backgroundparameter
+  {\ExpandFirstAfter\processaction % \EFA niet echt nodig
+     [\textbackgroundparameter\c!location]
+     [   \v!text=>\let\dodostarttextbackground\dostarttextbackgroundtxt
+                  \let\dodostoptextbackground \dostoptextbackgroundtxt,
+    \v!paragraph=>\let\dodostarttextbackground\dostarttextbackgroundpar
+                  \let\dodostoptextbackground \dostoptextbackgroundpar,
+         \v!none=>\let\dodostarttextbackground\relax
+                  \let\dodostoptextbackground \relax]%
+   \ifx\dodostarttextbackground\dostarttextbackgroundpar % untested
+     \ifnum\textbackgrounddepth>\plusone % new
+       \let\dodostarttextbackground\dostarttextbackgroundtxt
+       \let\dodostoptextbackground \dostoptextbackgroundtxt
+     \fi
+   \fi
+   \doifelse{\textbackgroundparameter\c!frame}\v!on
+     {\doifelse{\textbackgroundparameter\c!corner}\v!round
+        {\setvalue{\??td#1\c!frame}{2}}
+        {\setvalue{\??td#1\c!frame}{1}}}
+     {\setvalue{\??td#1\c!frame}{0}}%
+   \doifelse{\textbackgroundparameter\c!background}\v!color
+     {\setvalue{\??td#1\c!background}{1}}
+     {\setvalue{\??td#1\c!background}{0}}%
+  %\startpositionoverlay{\v!text\getvalue{\??td#1\c!level}}%
+   \startpositionoverlay{\textbackgroundoverlay{\textbackgroundparameter\c!level}}%
+     \expanded
+       {\setMPpositiongraphicrange % moet veel efficienter
+          {\btbanchor}% {b:\currentparbackground}%
+          {\etbanchor}% {e:\currentparbackground}%
+          {\textbackgroundparameter\c!method}%
+          {self=\currentparbackground,
+           mp=\textbackgroundparameter\c!mp,
+           gridtype=\textbackgroundparameter\c!alternative,
+           filltype=\textbackgroundparameter\c!background,
+           linetype=\textbackgroundparameter\c!frame,
+           dashtype=\textbackgroundparameter{dash}, %  to be internationalized
+           gridcolor=\textbackgroundparameter\c!framecolor,
+           linecolor=\textbackgroundparameter\c!framecolor,
+           lineoffset=\textbackgroundparameter\c!frameoffset,
+           fillcolor=\textbackgroundparameter\c!backgroundcolor,
+           filloffset=\textbackgroundparameter\c!backgroundoffset,
+           gridwidth=\textbackgroundparameter\c!rulethickness,
+           gridshift=\textbackgroundparameter\c!voffset,
+           linewidth=\textbackgroundparameter\c!rulethickness,
+           lineradius=\textbackgroundparameter\c!radius}}%
+   \stoppositionoverlay}
+
+\def\stoptextbackground
+  {\dodostoptextbackground
+   \carryoverpar\egroup}
+
+\def\starttextbackgroundmanual
+  {\dostartattributes{\??td\currenttextbackground}\c!style\c!color\empty
+   \fpos\currentparbackground\ignorespaces}
+
+\def\stoptextbackgroundmanual
+  {\tpos\currentparbackground
+   \dostopattributes}
+
+\def\dostarttextbackgroundtxt
+  {\ifvmode \dontleavehmode \fi % was leavevmode, brrr
+   \dostartattributes{\??td\currenttextbackground}\c!style\c!color\empty
+   \fpos\currentparbackground\ignorespaces}
+
+\def\dostoptextbackgroundtxt
+  {\tpos\currentparbackground
+   \dostopattributes}
+
+% keep this simple one, it's used in prikkels and alike
+%
+% \def\dostarttextbackgroundpar
+%   {\endgraf % new
+%    \getvalue{\??td\currenttextbackground\c!before}%
+%    \noindent\fpos\currentparbackground\ignorespaces
+%    \bgroup
+%    \nobreak \vskip-\lineheight \nobreak
+%    \doassignsomeskip\getvalue{\??td\currenttextbackground\c!topoffset}\to\scratchskip
+%    \kern\scratchskip\nobreak
+%    \dosetleftskipadaption{\getvalue{\??td\currenttextbackground\c!leftoffset}}%
+%    \advance\leftskip\leftskipadaption
+%    \dosetleftskipadaption{\getvalue{\??td\currenttextbackground\c!rightoffset}}%
+%    \advance\rightskip\leftskipadaption
+%    \dostartattributes{\??td\currenttextbackground}\c!style\c!color{}%
+%    \nowhitespace
+%    \seteffectivehsize
+%    \par}
+%
+% \def\dostoptextbackgroundpar
+%   {\par
+%    \dostopattributes
+%    \doassignsomeskip\getvalue{\??td\currenttextbackground\c!bottomoffset}\to\scratchskip
+%    \kern\scratchskip\nobreak
+%    \nobreak \vskip-\lineheight \nobreak
+%    \nowhitespace
+%    \egroup
+%    \nobreak \noindent \strut \hfill \kern\zeropoint \tpos\currentparbackground
+%    \endgraf % new
+%    \getvalue{\??td\currenttextbackground\c!after}}
+
+\newskip\textbackgroundskip
+
+\def\dostarttextbackgroundpar
+  {\endgraf % new
+   \textbackgroundparameter\c!before
+   \noindent
+   \ifgridsnapping
+     \doassignsomeskip\textbackgroundparameter\c!topoffset\to\textbackgroundskip
+     \ifdim\textbackgroundskip>\zeropoint
+       \struttedbox{\hbox{\raise\textbackgroundskip\hbox{\fpos\currentparbackground}}}%
+     \else
+      \fpos\currentparbackground
+     \fi
+   \else
+     \fpos\currentparbackground
+   \fi
+   \bgroup
+   \endgraf % we need a vertical nobreak - 29/06/2004
+   \nobreak \vskip-\lineheight \nobreak
+   \ifgridsnapping \else
+     \doassignsomeskip\textbackgroundparameter\c!topoffset\to\textbackgroundskip
+     \ifdim\textbackgroundskip>\zeropoint
+        \kern\textbackgroundskip\nobreak
+     \fi
+   \fi
+   \dosetleftskipadaption{\textbackgroundparameter\c!leftoffset}%
+   \advance\leftskip\leftskipadaption
+   \dosetleftskipadaption{\textbackgroundparameter\c!rightoffset}%
+   \advance\rightskip\leftskipadaption
+   % new
+   \dosetraggedcommand{\textbackgroundparameter\c!align}%
+   \raggedcommand
+   %
+   \dostartattributes{\??td\currenttextbackground}\c!style\c!color\empty
+   \nowhitespace
+\nobreak % new per 23/04/2006 (else potential break when whitespace)
+   \seteffectivehsize
+   \doinhibitblank %   \blank[\v!disable]% new
+   \par}
+
+\def\dostoptextbackgroundpar
+  {\par
+   \removelastskip % new
+   \dostopattributes
+   \doassignsomeskip\textbackgroundparameter\c!bottomoffset\to\textbackgroundskip
+   \ifdim\lastskip>\zeropoint
+     \advance\textbackgroundskip-\lastskip
+   \fi
+   \ifgridsnapping \else \ifdim\textbackgroundskip>\zeropoint
+     \kern\textbackgroundskip\nobreak
+   \fi \fi
+   \nobreak \vskip-\lineheight \nobreak
+   \nowhitespace
+   \egroup
+\bgroup \forgeteverypar % NOT REALLY NEEDED, SAVES HASH/MEM
+   \nobreak \noindent \strut \hfill \kern\zeropoint
+   \doassignsomeskip\textbackgroundparameter\c!bottomoffset\to\textbackgroundskip
+   \ifgridsnapping % experimental, pascal (todo: topoffset in same way)
+     \ifdim\textbackgroundskip>\zeropoint
+       \struttedbox{\hbox{\lower\textbackgroundskip\hbox{\tpos\currentparbackground}}}%
+     \else
+       \tpos\currentparbackground
+     \fi
+   \else
+     \tpos\currentparbackground
+   \fi
+\egroup
+   \endgraf % new
+   \textbackgroundparameter\c!after}
+
+\let\textparpages \!!zeropoint
+\let\textparheight\!!zeropoint
+\let\textparwidth \!!zeropoint
+
+\def\calculatetextpardimensions
+  {\docalculatetextpardimensions\btbanchor    \etbanchor    \MPparanchor}
+
+\def\calculatenexttextpardimensions
+  {\docalculatetextpardimensions\nextbtbanchor\nextetbanchor\relax}
+
+\def\docalculatetextpardimensions#1#2#3% todo: dimexpr
+  {\scratchcounter\MPp#2%\etbanchor
+   \advance\scratchcounter-\MPp#1%\btanchor
+   \edef\textparpages{\the\scratchcounter}%
+   \ifcase\scratchcounter
+     % one page
+     \scratchdimen         \MPy#1%\btanchor
+     \advance\scratchdimen-\MPy#2%\etbanchor
+   \else
+     % two or more pages
+     \scratchdimen         \MPy#1%\btanchor
+     \advance\scratchdimen-\MPy#2%\etbanchor
+     \advance\scratchdimen-\MPy\textanchor
+     \advance\scratchdimen \MPy\textanchor % - and then + ?
+     \advance\scratchdimen \MPh\textanchor\relax
+     \ifcase\scratchcounter>2 \ifnum\scratchcounter<5
+       % more pages
+       \scratchdimen\textheight
+       \advance\scratchcounter \minusone
+       \multiply\scratchdimen \scratchcounter
+     \else
+       % keep'm small
+       \scratchdimen5\textheight
+     \fi \fi
+   \fi
+   \edef\textparheight{\the\scratchdimen}%
+   \ifcase\scratchcounter
+     % one page
+     \scratchdimen         \MPx#2%\etbanchor
+     \advance\scratchdimen-\MPx#1%\btanchor
+   \else
+     % two or more pages / maybe also hang
+     \ifx#3\relax
+       \scratchdimen\makeupwidth % \textwidth
+     \else
+       \scratchdimen\MPw\MPparanchor
+       \advance\scratchdimen-\MPl\MPparanchor
+       \advance\scratchdimen-\MPr\MPparanchor
+     \fi
+   \fi
+   \edef\textparwidth{\the\scratchdimen}}
+
+\def\mintextparheight{4\lineheight}
+
+\def\dontsplitnexttextbackground % dangerous but useful
+  {\ifdim\pagetotal>\textheight \else
+     \ifdim\pagegoal=\maxdimen \else
+      \calculatenexttextpardimensions
+      % too tricky
+      % \scratchdimen=\textparheight
+      % \advance\scratchdimen\pagetotal\relax
+      % \ifdim\scratchdimen>\pagegoal
+      % \page
+      % \fi
+      \ifdim\textparheight>\zeropoint
+        \ifdim\textparheight>\mintextparheight\else
+          \page % option
+        \fi
+      \fi
+    \fi
+   \fi}
+
+\def\definetextbackground
+  {\dodoubleempty\dodefinetextbackground}
+
+\def\dodefinetextbackground[#1][#2]%
+  {\ifsecondargument % why ?
+     \copyparameters[\??td#1][\??td]
+       [\c!state,\c!location,\c!alternative,\c!mp,\c!method,
+        \c!background,\c!backgroundcolor,\c!corner,\c!level,
+        \c!backgroundoffset,\c!before,\c!after,\c!align,dash, % dash not yet internationalized
+        \c!radius,\c!frame,\c!framecolor,\c!rulethickness,\c!voffset,\c!frameoffset,
+        \c!leftoffset,\c!rightoffset,\c!topoffset,\c!bottomoffset]%
+     \getparameters[\??td#1][#2]%
+     \doifvalue{\??td#1\c!state}\v!start\checktextbackgrounds
+     \unexpanded\setvalue{#1}%
+       {\groupedcommand{\starttextbackground[#1]}{\stoptextbackground}}%
+     \setvalue{\e!start#1}{\starttextbackground[#1]}%
+     \setvalue{\e!stop #1}{\stoptextbackground}%
+   \fi}
+
+\def\setuptextbackground
+  {\dodoubleargument\dosetuptextbackground}
+
+\def\dosetuptextbackground[#1][#2]%
+  {\ifsecondargument
+     \doifelsenothing{#1}
+       {\dodosetuptextbackground{#2}\empty}
+       {\processcommalist[#1]{\dodosetuptextbackground{#2}}}%
+   \else
+     \dodosetuptextbackground{#1}\empty
+   \fi}
+
+\def\dodosetuptextbackground#1#2%
+  {\getparameters[\??td#2][#1]%
+   \def\currenttextbackground{#2}%
+   \doifvalue{\??td#2\c!state}\v!start\checktextbackgrounds}
+
+\let\currenttextbackground\empty
+
+\def\checktextbackgrounds
+  {\ifproductionrun
+     \enabletextarearegistration
+     \enablehiddenbackground
+   \fi}
+
+\setuptextbackground
+  [\c!mp=mpos:par:columnset,      % buggy: mpos:par:shape
+   \c!method=mpos:par:columnset, %
+   \c!state=\v!start,
+   \c!location=\v!text,
+   \c!leftoffset=\!!zeropoint, % 1em,
+   \c!rightoffset=\textbackgroundparameter\c!leftoffset,
+   \c!topoffset=\!!zeropoint,  % \v!medium,
+   \c!bottomoffset=\textbackgroundparameter\c!topoffset,
+   \c!level=-1,
+   \c!alternative=0,
+   \c!align=,
+   dash=0, % to be internationalized
+   \c!background=\v!color,
+   \c!backgroundcolor=lightgray,
+   \c!backgroundoffset=\!!zeropoint,
+   \c!corner=\v!rectangular,
+   \c!radius=.5\bodyfontsize,
+   \c!voffset=\!!zeropoint,
+   \c!frame=\v!on,
+   \c!framecolor=blue,
+   \c!rulethickness=\linewidth]
+
+%D As an example we define a grid background:
+
+\definetextbackground
+  [\v!grid]
+  [\c!state=\v!stop,
+   \c!location=\v!paragraph,
+   \c!frame=\v!off,
+   \c!framecolor=red,
+   \c!background=,
+   \c!alternative=1]
+
+\ifx\basegrid\undefined \else \letvalue\v!grid=\basegrid \fi
+

+% lelijk, aanpassen, opties
+
+\setupMPvariables
+  [mpos:connect]
+  [linecolor=red,
+   linewidth=1pt]
+
+\setupMPvariables
+  [mpos:encircle]
+  [fillcolor=lightgray,
+   filloffset=\!!zeropoint,
+   linecolor=blue,
+   linewidth=1pt]
+
+\startuseMPgraphic{mpos:common:ec}
+  path pa ; pair ca ; color lc ; numeric lw ;
+  lw := \MPvar{linewidth} ;
+  lc := \MPvar{linecolor} ;
+  initialize_box(\MPpos{\MPvar{self}}) ;
+  pa := pxy ; ca := cxy ; pa := boundingbox pa enlarged 2lw ;
+  pa := llcorner pa...lrcorner pa...urcorner pa...ulcorner pa...cycle ;
+  drawoptions (withpen pencircle scaled lw withcolor lc) ;
+\stopuseMPgraphic
+
+\startMPpositiongraphic{mpos:encircle}{linecolor,fillcolor,linewidth}
+  \includeMPgraphic{mpos:common:ec}
+  fill pa withcolor \MPvar{fillcolor} ; draw pa ;
+  anchor_box(\MPanchor{\MPvar{self}}) ;
+\stopMPpositiongraphic
+
+\startMPpositiongraphic{mpos:connect}{linecolor,linewidth}
+  path pb, pc ; pair cb, cc ;
+  \includeMPgraphic{mpos:common:ec}
+  initialize_box(\MPpos{\MPvar{to}}) ;
+  pb := pxy ; cb := cxy ; pb := boundingbox pb enlarged 2lw ;
+  pb := llcorner pb...lrcorner pb...urcorner pb...ulcorner pb...cycle ;
+  pc := ca {up} .. {down} cb ;
+  cc := (pc intersection_point pa) ;
+  if intersection_found :
+    pc := pc cutbefore cc ;
+    cc := (pc intersection_point pb) ;
+    if intersection_found :
+      pc := pc cutafter cc ;
+      drawarrow pc ; drawarrow reverse pc ;
+    fi ;
+  fi ;
+  anchor_box(\MPanchor{\MPvar{self}}) ;
+\stopMPpositiongraphic
+
+%D \macros
+%D   {stackposdown, stackposup, stackposleft,stackposright}
+%D
+%D A non graphic example of the use of positioning, is to stack
+%D text in for instance the margin.
+%D
+%D \stackposdown \inleft {some text}The text \type {some text}
+%D goes into the left margin, and \stackposdown \inleft {some
+%D more}\type {some more} as well. When they overlap, they
+%D will not touch.
+%D
+%D Here we said \type {\stackposdown \inleft{some text}}. Instead
+%D of \stackposleft \inleft {one}stacking \stackposleft \inleft
+%D {two}vertically, one can stack horizontally by \stackposleft
+%D \inleft {three}using \type {\stackposleft}.
+%D
+%D We can go in all four directions, using \type {\stackposdown},
+%D \type {\stackposup}, \type {\stackposleft} and \type
+%D {\stackposright}.
+
+\def\stackposdistance{.5em}
+
+\newcount\currentautopos
+\newcount\previousautopos
+
+\def\POSstackprefix{stack:}
+
+\def\dostackposbox#1#2%
+  {\dowithnextbox
+     {#2{\previousautopos\currentautopos
+         \global\advance\currentautopos\plusone
+         \edef\currentposition {\POSstackprefix\number\currentautopos}%
+         \edef\previousposition{\POSstackprefix\number\previousautopos}%
+         \hpos\currentposition{\doifoverlappingelse\currentposition\previousposition{#1}{\flushnextbox}}}}%
+     \hbox}
+
+\def\stackposup   {\dostackposbox{\raise\lineheight\flushnextbox}}
+\def\stackposdown {\dostackposbox{\lower\lineheight\flushnextbox}}
+\def\stackposleft {\dostackposbox{\copy\nextbox\hskip\nextboxwd\hskip\stackposdistance}}
+\def\stackposright{\dostackposbox{\hskip\stackposdistance\hskip\nextboxwd\flushnextbox}}
+

+%D \macros
+%D   {stackeddown}
+%D
+%D However, a better implementation is possible with the
+%D following macro. We now have an extra key \type {stack} for
+%D margin settings. When set to \type {yes}, this macro comes
+%D into action.
+
+% Because there can be many stacked items in a line and successive lines, we
+% play dirty and adapt the position and height of the current node so that
+% this becomes visible to a next pass.
+%
+% \startbuffer
+% \inleft {test 1} test 1 \inleft {test 2} test 2 \endgraf
+% \inleft {test 3} test 3
+% \stopbuffer
+% \getbuffer \typebuffer \flushstatus \page
+%
+% \startbuffer
+% \inleft {test 1} test 1 \inleft {test 2} test 2 \inleft {test 3} test 3 \endgraf
+% \inleft {test 4} test 4
+% \stopbuffer
+% \getbuffer \typebuffer \flushstatus \page
+%
+% \startbuffer
+% \inleft {test 1} test 1 \endgraf
+% \inleft {test 2} test 2 \endgraf
+% \inleft {test 3} test 3
+% \stopbuffer
+% \getbuffer \typebuffer \flushstatus \page
+%
+% \startbuffer
+% \inleft {test 1\\test 1} test 1 \inleft {test 2} test 2 \endgraf
+% \inleft {test 3} test 3
+% \stopbuffer
+% \getbuffer \typebuffer \flushstatus \page
+%
+% \startbuffer
+% \inleft {test 1\\test 1\\test 1\\test 1\\test 1} test 1 \endgraf
+% test 2 \endgraf
+% \inleft {test 3} test 3
+% \stopbuffer
+% \getbuffer \typebuffer \flushstatus \page
+%
+% \startbuffer
+% \inleft{test 1} test \inleft{test 2} test \inleft{test 3\\test 3} test
+% \stopbuffer
+% \getbuffer \typebuffer \flushstatus \page
+%
+% \startbuffer
+% \inleft{test 1\\test 1\\test 1} test \inleft{test 2\\test 2} test \inleft{test 3\\test 3\\test 3} test \endgraf
+% \inleft{test 1\\test 1\\test 1} test \inleft{test 2\\test 2} test \inleft{test 3\\test 3\\test 3} test
+% \stopbuffer
+% \getbuffer \typebuffer \flushstatus \page
+
+\newdimen\laststackvmove % use \scratchdimenone instead of skip
+
+\def\stackeddown
+  {\bgroup
+   % this macro assumes a few things and is meant to work for margin notes
+   \dowithnextbox
+     {\global\advance\currentautopos\plusone
+      \global\laststackvmove\zeropoint
+      \hpos{\POSstackprefix\number\currentautopos}
+        {\edef\next
+           {\nextboxht\the\nextboxht
+            \nextboxdp\the\nextboxdp
+            \nextboxwd\the\nextboxwd}%
+         \previousautopos\currentautopos
+         \scratchdimen\zeropoint
+         \scratchcounter\zerocount
+         \doloop
+           {\advance\previousautopos\minusone
+            \edef\currentposition {\POSstackprefix\number\currentautopos}%
+            \edef\previousposition{\POSstackprefix\number\previousautopos}%
+            \ifnum\MPp\currentposition=\MPp\previousposition\relax
+              %\registerstatus{doing \number\currentautopos/\number\previousautopos}%
+              \doifoverlappingelse\currentposition\previousposition
+                {\scratchskip\dimexpr
+                    \MPy\currentposition
+                   -\MPy\previousposition
+                   -\MPd\currentposition  % untested
+                   +\MPd\previousposition % untested
+                   +\MPh\currentposition
+                 \relax\relax % second relax realy needed, forgotten while dimexpressing
+                 % todo: also take depth into account
+                 \ifdim\scratchskip<\scratchdimen
+                   %\registerstatus{no \the\scratchskip}%
+                 \else
+                   %\registerstatus{yes \the\scratchskip}%
+                   \scratchdimen\scratchskip
+                 \fi}%
+                \donothing % {\registerstatus{next}}%
+              \ifnum\previousautopos<\zerocount\exitloop\fi
+            \else
+              \exitloop
+            \fi}%
+         \ifdim\scratchdimen=\zeropoint \else
+           \bgroup
+           \edef\currentposition{\POSstackprefix\number\currentautopos}%
+           \scratchskip\scratchdimen
+           \advance\scratchskip\MPh\currentposition
+           \scratchdimen-\scratchdimen
+           \advance\scratchdimen\MPy\currentposition
+           %\registerstatus{old \number\currentautopos: \MPy\currentposition/\MPh\currentposition}%
+           \expanded{\replacepospxywhd
+             {\currentposition}{\MPp\currentposition}{\MPx\currentposition}{\the\scratchdimen}%
+             {\MPw\currentposition}{\the\scratchskip}{\MPd\currentposition}}%
+           %\registerstatus{new \number\currentautopos: \MPy\currentposition/\MPh\currentposition}%
+           \egroup
+           \global\laststackvmove\scratchdimen % new
+           \setbox\nextbox\iftracepositions\@EA\ruledhbox\else\@EA\hbox\fi
+             {\lower\scratchdimen\flushnextbox}%
+           \next
+           %\registerstatus{\strut}%
+         \fi
+         \flushnextbox}%
+        \egroup}}
+
+%D The next hack make sure that margin texts near faulty
+%D strutted lines are handled ok.
+
+\newif\ifrepositionmarginbox \repositionmarginboxtrue
+
+\newcount\currentmarginpos
+
+\def\dopositionmarginbox#1%
+  {\bgroup
+   \ifrepositionmarginbox
+     \global\advance\currentmarginpos\plusone
+    %\setposition{\s!margin:\number\currentmarginpos}% not always
+     \ifcase\marginrepositionmethod
+       % nothing
+     \or
+       % nothing
+     \or
+       % stack / page check yet untested
+       \setposition{\s!margin:\number\currentmarginpos}%
+       \scratchdimen\MPy{\s!margin:\number\currentmarginpos}%
+       \global\advance\currentmarginpos\plusone
+       \advance\scratchdimen -\MPy{\s!margin:\number\currentmarginpos}%
+       \advance\scratchdimen -\strutdp
+       % new but bugged
+       % \setbox#1\hbox
+       %   {\hskip-\MPx{\s!margin:\number\currentmarginpos}%
+       %    \hskip\MPx{head:\realfolio}%
+       %    \box#1}%
+       % so far
+       \setbox#1\hbox
+         {\setposition{\s!margin:\number\currentmarginpos}%
+          \raise\scratchdimen\box#1}%
+     \or
+       % move up
+       \setposition{\s!margin:\number\currentmarginpos}%
+       \ifnum\MPp{p:\number\parposcounter}=\MPp{\s!margin:\number\currentmarginpos}\relax
+         \scratchdimen\dimexpr\MPy{p:\number\parposcounter}-\MPy{\s!margin:\number\currentmarginpos}\relax
+         \expanded{\setbox#1\hbox{\raise\scratchdimen\box#1}\ht#1\the\ht#1\dp#1\the\dp#1}%
+       \fi
+     \or
+       % move up, assume end of par
+       \setposition{\s!margin:\number\currentmarginpos}%
+       \ifnum\MPp{p:\number\parposcounter}=\MPp{\s!margin:\number\currentmarginpos}\relax
+         \getnoflines\margincontentheight
+         \advance\noflines\minusone
+         \scratchdimen\noflines\lineheight
+       \else
+         \scratchdimen\dimexpr\MPy{p:\number\parposcounter}-\MPy{\s!margin:\number\currentmarginpos}\relax
+       \fi
+       \expanded{\setbox#1\hbox{\raise\scratchdimen\box#1}\ht#1\the\ht#1\dp#1\the\dp#1}%
+     \fi
+     \dp#1\zeropoint
+     \ht#1\zeropoint
+   \fi
+   \graphicvadjust{\box#1}%
+   \egroup}
+
+\chardef\marginrepositionmethod\plusone   % sidemethod
+\chardef\margincontentmethod   \plusthree % textmethod  % beware: 1 = old method
+\chardef\marginpagecheckmethod \plusone   % splitmethod
+

+%D For a right menu, a sequence of calls to \type
+%D {right_menu_button} is generated.
+%D
+%D \starttyping
+%D right_menu_button (n, p, s=0/1/2, x, y, w, h, d) ;
+%D \stoptyping
+%D
+%D Here, n is the number of the button, s a status variable,
+%D while the rest is positional info. The status variable is
+%D 0, 1 or~2: not found, found and found but current page.
+
+% 0=not found 1=found 2=current page
+
+% geen leeg
+
+\newtoks\MPmenutoks
+
+\def\MPmenubuttons#1{\the\MPmenutoks}
+
+\appendtoks \global\MPmenutoks\emptytoks \to \everyshipout
+
+% 0=notfound  1=found  2=currentpage
+
+\def\do@@amposition#1#2#3%
+  {\doifelsevalue{\??am#1\c!position}\v!yes
+     {\doglobal\increment\currentamposition
+      \doifnumberelse{#2}
+        {\docheckrealreferencepage{#2}%
+         \global\chardef\currentamrealpage\ifrealreferencepage2\else1\fi}
+        {\doifreferencefoundelse{#2}
+           {\global\chardef\currentamrealpage\ifrealreferencepage2\else1\fi}
+           {\global\chardef\currentamrealpage0}}% % not found
+      \expanded
+        {\doglobal\noexpand\appendtoks
+           #1_menu_button(\currentamposition,\the\currentamrealpage,\MPpos{#1:\currentamposition}) ;
+         \to \MPmenutoks}%
+      \hpos{#1:\currentamposition}{#3}}
+     {#3}}
+
+\def\do@@ammenuposition#1%
+  {\ifnum\currentamposition>0
+     \dowithnextbox{\hpos{menu:#1:\realfolio}{\flushnextbox}}\hbox
+   %  \hpos{menu:#1:\realfolio} % also ok if we skip over fi
+   \fi}
+

+%D \macros
+%D   {GFC, GTC, GSC}
+%D
+%D The next macros extend tables and tabulation with
+%D backgrounds and position related features. Areas are
+%D specified with symbolic names, and symbolic references to
+%D the graphics involved. Each table has its own namespace.
+
+\newcount\noftabpositions
+\newtoks \posXCtoks
+
+\def\tbPOSprefix
+  {tbp:\number\noftabpositions:}
+
+\def\tablepos
+  {\scratchtoks\posXCtoks
+   \global\posXCtoks\emptytoks
+   \the\scratchtoks}
+
+\let\tabulatepos\tablepos
+
+\def\dodododoGSC[#1:#2]%
+  {\remappositionframed{#2}{\tbPOSprefix#1}%
+   \bpos{\tbPOSprefix#1}%
+   \doglobal\appendtoks\@EA\epos\@EA{\tbPOSprefix#1}\to\posXCtoks}
+
+\def\dododoGSC[#1:#2:#3]%
+  {\doglobal\appendtoks\dodododoGSC[#1:#2]\to\posXCtoks\NC}
+
+\def\dodoGSC[#1]%
+  {\def\docommand##1{\dododoGSC[##1:##1]}%
+   \processcommalist[#1]\docommand}
+
+\def\dodododoGFC[#1:#2:#3]%
+  {\remappositionframed{#2}{\tbPOSprefix#1}%
+   \bpos{\tbPOSprefix#1}}
+
+\def\dododoGFC[#1]%
+  {\def\docommand##1{\dodododoGFC[##1:##1]}%
+   \processcommalist[#1]\docommand}
+
+\def\dodoGFC[#1]%
+  {\doglobal\appendtoks\dododoGFC[#1]\to\posXCtoks\NC}
+
+\def\dododododoGTC[#1:#2]%
+  {\epos{\tbPOSprefix#1}}
+
+\def\dodododoGTC[#1]%
+  {\def\docommand##1{\dododododoGTC[##1:##1]}%
+   \processcommalist[#1]\docommand}
+
+\def\dododoGTC[#1]%
+  {\doglobal\appendtoks\dodododoGTC[#1]\to\posXCtoks}
+
+\def\dodoGTC[#1]%
+  {\doglobal\appendtoks\dododoGTC[#1]\to\posXCtoks\NC}
+
+\def\dodododoXC[#1#2]%
+  {\if#1>\dodoGFC  [#2:#2]\else
+   \if#1+\dodoGFC  [#2:#2]\else
+   \if#1<\dodoGTC  [#2:#2]\else
+   \if#1-\dodoGTC  [#2:#2]\else
+   \if#1=\dodoGSC  [#2:#2]\else
+         \dodoGSC[#1#2:#1#2]\fi\fi\fi\fi\fi}
+
+\def\dododoXC#1%
+  {\dodododoXC[#1]}
+
+\def\dodoXC[#1]%
+  {{\let\NC\relax\processcommalist[#1]\dododoXC}}
+
+\def\doGSC[#1]{\iffirstargument\dodoGSC[#1]\else\expandafter\NC\fi}
+\def\doGFC[#1]{\iffirstargument\dodoGFC[#1]\else\expandafter\NC\fi}
+\def\doGTC[#1]{\iffirstargument\dodoGTC[#1]\else\expandafter\NC\fi}
+\def\doXC [#1]{\iffirstargument\dodoXC [#1]\else\expandafter\fi\NC}
+
+\def\tbGSC{\dosingleempty\doGSC}
+\def\tbGFC{\dosingleempty\doGFC}
+\def\tbGTC{\dosingleempty\doGTC}
+\def\tbXC {\dosingleempty\doXC }
+
+%D The amount of code to support tables and tabulation is
+%D rather minimalistic.
+
+\let\tabulatepos\tablepos
+
+\def\tabulatenormalpos
+  {\hss\tabulatepos\hss}
+
+\def\tabulateequalpos
+  {\setbox\scratchbox\hbox{\tabulateEQ}%
+   \hbox to \wd\scratchbox{\hss\kern\zeropoint\tabulatepos\hss}%
+   \hskip-\wd\scratchbox
+   \box\scratchbox}
+
+\def\tabulatenormalcolumn#1% overloaded
+  {&\iftabulateequal\tabulateequalpos\else\tabulatenormalpos\fi
+   &\global\chardef\tabulatetype#1&}
+
+\def\tabulateequalcolumn#1% overloaded
+  {&\tabulateequalpos
+   &\global\chardef\tabulatetype#1&}
+
+\appendtoks
+  \global\advance\noftabpositions\plusone
+\to \everytabulate
+
+%D In order to prevent potential clashes with abbreviations,
+%D postpone the mapping.
+
+\appendtoks
+  \let\GSC\tbGSC \let\GFC\tbGFC \let\GTC\tbGTC \let\XC\tbXC
+\to \everytabulate
+
+%D \macros
+%D   {definepositionframed}
+%D
+%D The next example show how to provide backgrounds to table
+%D cells. First we define some framed backgrounds.
+%D
+%D \startbuffer
+%D \definepositionframed[x][background=color,backgroundcolor=red]
+%D \definepositionframed[y][background=color,backgroundcolor=green]
+%D \definepositionframed[z][background=color,backgroundcolor=blue]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D % \getbuffer
+%D
+%D \startbuffer
+%D \starttabulate[|c|c|c|]
+%D \GFC[f:x] this is a small  \NC       table            \NC     in which we \NC \FR
+%D \NC       will demonstrate \GFC[g:z] that this        \GTC[g] positioning \NC \MR
+%D \GSC[e:y] mechanism also   \GTC[f]   works quite well \NC     in tables   \NC \LR
+%D \stoptabulate
+%D \stopbuffer
+%D
+%D The table itself defines three areas (a, b and~c) using
+%D these frames.
+%D
+%D \typebuffer
+%D % \getbuffer
+%D
+%D Tables (based on \TABLE) are supported by:
+
+\def\normalTABLEsimplebar {\unskip\!ttRightGlue&\tablepos&}                       % |
+\def\normalTABLEcomplexbar{\unskip\!ttRightGlue&\omit\tablepos\!ttAlternateVrule} % \|
+\def\normalTABLEquote     {\unskip\!ttRightGlue&\omit\tablepos&}                  % "
+
+\appendtoks
+  \global\advance\noftabpositions\plusone
+\to \everytable
+
+%D Since we don't want nameclashes:
+
+\appendtoks
+  \let\GSC\tbGSC \let\GFC\tbGFC \let\GTC\tbGTC \let\XC\tbXC
+\to \everytable
+
+%D In the previous example, we could have provided an overlay to
+%D the framed definition. A more direct approach is demonstrated
+%D below:
+%D
+%D \startbuffer
+%D \def\cw#1{\color[white]{#1}}
+%D
+%D \startMPpositiongraphic{tableshade}
+%D   initialize_area(\MPpos{\MPvar{from}},\MPpos{\MPvar{to}}) ;
+%D   color c ; c := \MPvar{color} ;
+%D   linear_shade(pxy,0,.4c,.9c) ;
+%D   anchor_area(\MPanchor{\MPvar{from}}) ;
+%D \stopMPpositiongraphic
+%D
+%D \setMPpositiongraphic{b:x}{tableshade}{from=b:x,to=e:x,color=red}
+%D \setMPpositiongraphic{b:y}{tableshade}{from=b:y,to=e:y,color=green}
+%D \setMPpositiongraphic{b:z}{tableshade}{from=b:z,to=e:z,color=blue}
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+%D
+%D The definition of the table looks about the same as the
+%D previous one:
+%D
+%D \startbuffer
+%D \starttable[|c|c|c|]
+%D \GFC[b:z] \cw{this is a small}  \NC       \cw{table}            \NC     in which we      \NC \FR
+%D \NC       \cw{will demonstrate} \GFC[c:y] \cw{that this}        \GTC[c] \cw{positioning} \NC \MR
+%D \GSC[a:x] \cw{mechanism also}   \GTC[b]   \cw{works quite well} \NC     in tables        \NC \LR
+%D \stoptable
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \getbuffer
+
+% \definepositionframed[w][background=color,backgroundcolor=yellow]
+% \definepositionframed[x][background=color,backgroundcolor=red]
+% \definepositionframed[y][background=color,backgroundcolor=green]
+% \definepositionframed[z][background=color,backgroundcolor=blue]
+%
+% \starttabulate[|c|c|c|]
+% \NC this is a small  \NC table            \NC in which we \NC \FR
+% \NC will demonstrate \NC that this        \NC positioning \NC \MR
+% \NC mechanism also   \NC works quite well \NC in tables   \NC \LR
+% \stoptabulate
+%
+% \starttabulate[|c|c|c|]
+% \GFC[f:x] this is a small      \GTC      table            \NC     in which we \NC \FR
+% \NC       will demonstrate     \GFC[g:z] that this        \GTC[g] positioning \NC \MR
+% \GSC[e:y] mechanism also       \GTC[f]   works quite well \NC     in tables   \NC \LR
+% \stoptabulate
+%
+% \starttabulate[|c|c|c|]
+% \GFC[f:x,d:w] this is a small  \GTC[d]   table            \NC     in which we \NC \FR
+% \NC           will demonstrate \GFC[g:z] that this        \GTC[g] positioning \NC \MR
+% \GSC[e:y]     mechanism also   \GTC[f]   works quite well \NC     in tables   \NC \LR
+% \stoptabulate
+%
+% \starttabulate[|c|c|c|]
+% \XC[+f:x] this is a small  \XC      table            \NC     in which we \NC \FR
+% \NC      will demonstrate  \XC[+g:z] that this       \XC[-g] positioning \NC \MR
+% \XC[=e:y] mechanism also   \XC[-f]  works quite well \NC     in tables   \NC \LR
+% \stoptabulate
+%
+% \starttabulate[|c|c|c|]
+% \XC[+f:x,+d:w] this is a small  \XC[-d]   table            \NC     in which we \NC \FR
+% \NC            will demonstrate \XC[+g:z] that this        \XC[-g] positioning \NC \MR
+% \XC[=e:y]       mechanism also  \XC[-f]   works quite well \NC     in tables   \NC \LR
+% \stoptabulate
+

+% evt                  [b:x]
+%
+% \definepositionframed[x][background=color,fillcolor=red]
+% \definepositionframed[y][background=color,fillcolor=green]
+% \definepositionframed[z][background=color,fillcolor=blue]
+
+\def\remappositionframed#1#2% from to
+  {\copyposition{b:#1}{b:#2}%
+   \copyposition{e:#1}{e:#2}%
+   \dosetpositionaction{b:#2}{\dopositionaction{b:#1}}}
+
+\def\definepositionframed
+  {\dodoubleargument\dodefinepositionframed}
+
+\def\dodefinepositionframed[#1][#2]%
+  {\dosetpositionaction{b:#1}{\dopositionframed[#1][#2]}}
+
+\def\positionframed
+  {\dodoubleempty\dopositionframed}
+
+\def\dopositionframed[#1][#2]%
+  {\bgroup
+   \setbox\scratchbox\hbox
+     {\dimen0=\MPx{e:#1}%
+      \advance\dimen0 -\MPx{b:#1}%
+      \dimen2=\MPy{b:#1}%
+      \advance\dimen2 -\MPy{e:#1}%
+      \advance\dimen2 \MPd{e:#1}%
+      \lower\dimen2\hbox
+        {\advance\dimen2 \MPh{b:#1}%
+         \framed
+           [\c!width=\dimen0,\c!height=\dimen2,
+            \c!offset=\v!overlay,#2]{}}}%
+   \smashedbox\scratchbox
+   \egroup}
+

+% \def\sethdistances#1%
+%   {\hbox{\lpos{ml:#1}\hpos{mh:#1}{\strut}\rpos{mr:#1}}}
+%
+% \def\gethdistances#1%
+%   {\scratchdimen\MPx{mh:#1}%
+%    \advance\scratchdimen -\MPx{ml#1}%
+%    \edef\lefthdistance{\the\scratchdimen}%
+%    \scratchdimen\MPx{mr:#1}%
+%    \advance\scratchdimen -\MPx{mh:#1}%
+%    \edef\righthdistance{\the\scratchdimen}}
+

+\protect \endinput
+
+% todo 1: shift down option
+
+% \startuseMPgraphic{mpos:par:columnset}
+%   \iftracepositions show_multi_pars \else draw_multi_pars \fi ;
+%   path p ; p := boundingbox currentpicture ;
+%   currentpicture := currentpicture shifted (0,-StrutDepth/2) ;
+%   setbounds currentpicture to p ;
+% \stopuseMPgraphic
+
+\definetextbackground[underline]    [location=text,alternative=1,background=,frame=off]
+\definetextbackground[overstrike]   [location=text,alternative=2,background=,frame=off]
+\definetextbackground[exlines]      [location=text,alternative=3,background=,frame=off]
+\definetextbackground[strikethrough][location=text,alternative=4,background=,frame=off]
+
+\definestartstop [underline]
+  [before={\starttextbackground[underline]},
+   after=\stoptextbackground]
+
+\definestartstop
+  [overstrike]
+  [before={\starttextbackground[overstrike]},
+   after=\stoptextbackground]
+
+\definestartstop
+  [exlines]
+  [before={\starttextbackground[exlines]},
+   after=\stoptextbackground]
+
+\definestartstop
+  [strikethrough]
+  [before={\starttextbackground[strikethrough]},
+   after=\stoptextbackground]
+
+\definetextbackground
+  [sideline]
+  [mp=mpos:par:sideline,
+   location=paragraph,
+   framecolor=red,
+   frameoffset=5mm]
+
+\definestartstop [sideline]
+  [before={\starttextbackground[sideline]},
+   after=\stoptextbackground]
+
+\starttext
+    \startunderline     \input tufte \stopunderline      \blank
+    \startoverstrike    \input tufte \stopoverstrike     \blank
+    \startexlines       \input tufte \stopexlines        \blank
+    \startstrikethrough \input tufte \stopstrikethrough  \blank
+    \startsideline      \input tufte \stopsideline       \blank
+\stoptext

Added: trunk/Master/texmf-dist/tex/context/base/mkii/anch-pos.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/anch-pos.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/anch-pos.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,883 @@
+%D \module
+%D   [       file=anch-pos,
+%D        version=1999.08.01,
+%D          title=\CONTEXT\ Anchoring Macros,
+%D       subtitle=Positioning Support,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% needs a cleanup, things may change; we also need to move the mp
+% related code to meta-pos
+
+% shorter tags, ..:achtergrond:.. etc in pos actions
+
+% dubbele text- * pos's eruit
+
+% class pos -> als gelijk aan vorige, dan niet niet definieren
+% en erven, maw:
+%
+% 1 -> opslaan
+% 2 -> undef, dus == prev
+% 3 -> undef, dus == prev
+% 4 -> opslaan
+
+\writestatus{loading}{ConTeXt Anchoring Macros / Positioning}
+
+% todo: topskip als optie voor eerste regel achtergrond
+% todo: build pos layers on top of layers
+% todo: positionlayer pos van text-1 etc delen
+
+%D Although \TEX\ has a rather powerful channel to the outside
+%D world, called \type {\special}, real communication with
+%D other programs is complicated by the fact that no positional
+%D information is available. Mid 1999, I discussed this with
+%D \THANH, the author of \PDFTEX, and after some experiments,
+%D \PDFTEX\ was extended with a simple but effective mechanism,
+%D that provided positional information. The interesting
+%D thought is that, although \TEX\ is frozen, similar
+%D functionality could have been achieved with \type
+%D {\specials} and an additional \DVI\ postprocessor.
+%D
+%D Since we want to be as compatible as can be, \CONTEXT\ will
+%D support both methods, although the development is primarily
+%D driven by the \PDFTEX\ way of doing things. Since the
+%D mechanism is basically not limited to one application, for
+%D the moment we stick to building the functionality around one
+%D \CONTEXT\ special command, but at the same time we keep our
+%D eyes open for extensions in other directions.
+%D
+%D A question that may arise when one reads this module, is to
+%D what extend these macros are generic, in the sense that they
+%D could be collected in a support module instead of a core
+%D module. Since the mechanism described here will closely
+%D cooperate with the \METAPOST\ support built in \CONTEXT,
+%D which in turn will be tightly integrated with the \CONTEXT\
+%D overlay mechanisms, I decided to write a core module instead
+%D of a support one. This makes even more sense, when one takes
+%D into account that this kind of support depends on special
+%D drivers.
+
+\unprotect
+
+%D The first application of positional information was embedded
+%D graphics. Since we are interacting with text, it made sense
+%D to take the current line height and depth into account too.
+%D This is why we have two basic position macros: one for
+%D simple positions, and one for boxes.
+%D
+%D We could have sticked to one special, and actually did so in
+%D earlier experiments, but for convenience, as well for
+%D clearness, we now have two alternatives. This approach will
+%D save us quite some bytes when storing large quantities of
+%D positional information. We save as less information as
+%D needed, that is, we save no dimensions, in a \METAPOST\
+%D friendly way.
+%D
+%D The three specials involved are:
+%D
+%D \starttyping
+%D \dosetposition          {identifier}
+%D \dosetpositionwhd       {identifier} {width} {height} {depth}
+%D \dosetpositionplus      {identifier} {width} {height} {depth} {list}
+%D \dosetpositionpapersize {width} {height}
+%D \stoptyping
+
+\newbox\positionbox
+\newif \ifpositioning
+
+\def\POSprefix{POS::}
+
+\def\setpospxy#1#2#3#4%
+  {\@EA\xdef\csname\POSprefix#1\endcsname
+     {\number#2,%
+      \the\dimexpr#3\ifnum\positionanchormode=\plusone-\MPx\pageanchor\fi\relax,%
+      \the\dimexpr#4\ifnum\positionanchormode=\plusone-\MPy\pageanchor\fi\relax}}
+
+\def\setpospxywhd#1#2#3#4#5#6#7%
+  {\@EA\xdef\csname\POSprefix#1\endcsname
+     {\number#2,%
+      \the\dimexpr#3\ifnum\positionanchormode=\plusone-\MPx\pageanchor\fi\relax,%
+      \the\dimexpr#4\ifnum\positionanchormode=\plusone-\MPy\pageanchor\fi\relax,%
+      \the\dimexpr#5\relax,%
+      \the\dimexpr#6\relax,%
+      \the\dimexpr#7\relax}}
+
+\def\setpospxyplus#1#2#3#4#5#6#7#8%
+  {\@EA\xdef\csname\POSprefix#1\endcsname
+     {\number#2,%
+      \the\dimexpr#3\ifnum\positionanchormode=\plusone-\MPx\pageanchor\fi\relax,%
+      \the\dimexpr#4\ifnum\positionanchormode=\plusone-\MPy\pageanchor\fi\relax,%
+      \the\dimexpr#5\relax,%
+      \the\dimexpr#6\relax,%
+      \the\dimexpr#7\relax,%
+      #8}}
+
+%D This is real tricky! The page anchor is applied to the
+%D page box and therefore flushed first. So, when present, it
+%D is applied to all positions except itself.
+
+\chardef\positionanchormode=0 % don't relocate page origin
+\chardef\positionanchormode=1 % relocate page origin once
+
+%D The core set macros.
+
+\def\pxypos    {\pospxy}     % obsolete
+\def\pxyposwhd {\pospxywhd}  % obsolete
+\def\pxyposplus{\pospxyplus} % obsolete
+
+\def\resetpositions
+  {\let\pospxy    \gobblefourarguments
+   \let\pospxywhd \gobblesevenarguments
+   \let\pospxyplus\gobbleeightarguments}
+
+\def\setpositions
+  {\let\pospxy    \setpospxy
+   \let\pospxywhd \setpospxywhd
+   \let\pospxyplus\setpospxyplus}
+
+%D We need to initialize.
+
+\resetpositions
+
+\addutilityreset{positions}
+
+%D Sometimes we want to trick the position handler a bit:
+
+\def\replacepospxywhd#1#2#3#4#5#6#7%
+  {\@EA\xdef\csname\POSprefix#1\endcsname
+     {\number#2,%
+      \the\dimexpr#3\relax,%
+      \the\dimexpr#4\relax,%
+      \the\dimexpr#5\relax,%
+      \the\dimexpr#6\relax,%
+      \the\dimexpr#7\relax}}
+
+%D For postprocessing purposes, we save the number of
+%D positions.
+
+\newcount\currentpositions  % current number of positions
+\newcounter\totalnofpositions % total from previous run
+
+\appendtoks
+  \expanded{\savecurrentvalue\noexpand\totalnofpositions{\the\currentpositions}}%
+\to \everybye
+
+%D The next switch can be used to communicate a special
+%D situation. Positioning and associated actions can be
+%D executed any time. However, in for instance backgrounds
+%D they can be collected in a layer, for instance the text
+%D layer (especially the hidden text layer). In the case of
+%D floats, we run into problems, since the page information is
+%D not applicable when the content floats indeed. In such
+%D situations one can treat positions and graphics local.
+
+\newif\iflocalpositioning
+
+%D Watch out: sometimes a pagebreak occurs inside a float
+%D placement, so there we need to disable local mode.
+
+\appendtoks
+  \localpositioningtrue
+\to \everyinsidefloat
+
+\appendtoks
+  \localpositioningfalse
+\to \everypagebody
+
+\def\checkpositions
+  {\startnointerference
+   \protectlabels
+   \doutilities{positions}\jobname\empty\relax\relax
+   \global\let\checkpositions\relax
+   \stopnointerference}
+
+%D Since the positional values are to be fully expandable, we
+%D need to preload them as soon as possible, which is why we
+%D load the data when we start a text.
+
+\appendtoks \checkpositions \to \everystarttext
+
+%D Positions are either generated at a delayed write time
+%D (in \PDFTEX), or derived from the dvi file. The actual
+%D method is implemented in a special driver. If needed, the
+%D driver can fall back on the following macros.
+
+\def\dolazysaveposition#1#2#3#4% tag page x y
+  {\expanded{\writeutilitycommand{\noexpand\pospxy
+     {#1}{#2}{#3}{#4}}}}
+
+\def\dolazysavepositionwhd#1#2#3#4#5#6#7% tag page x y w h d
+  {\expanded{\writeutilitycommand{\noexpand\pospxywhd
+     {#1}{#2}{#3}{#4}{#5}{#6}{#7}}}}
+
+\def\dolazysavepositionplus#1#2#3#4#5#6#7#8% tag page x y w h d list
+  {\expanded{\writeutilitycommand{\noexpand\pospxyplus
+     {#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}}}}
+
+\def\dosaveposition#1#2#3#4% tag page x y
+  {\expanded{\immediatewriteutilitycommand{\noexpand\pospxy
+     {#1}{#2}{#3}{#4}}}}
+
+\def\dosavepositionwhd#1#2#3#4#5#6#7% tag page x y w h d
+  {\expanded{\immediatewriteutilitycommand{\noexpand\pospxywhd
+     {#1}{#2}{#3}{#4}{#5}{#6}{#7}}}}
+
+\def\dosavepositionplus#1#2#3#4#5#6#7#8% tag page x y w h d list
+  {\expanded{\immediatewriteutilitycommand{\noexpand\pospxyplus
+     {#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}}}}
+
+%D \macros
+%D   {MPp, MPx, MPy, MPw, MPh, MPd,
+%D    MPxy, MPll, MPlr, MPur, MPul, MPpos}
+%D
+%D Access to the positional information is provided by macros
+%D with short names that are clearly meant for \METAPOST.
+
+\def\MPp  {\doMPxyhdwlr\doMPp  }
+\def\MPx  {\doMPxyhdwlr\doMPx  }
+\def\MPy  {\doMPxyhdwlr\doMPy  }
+\def\MPw  {\doMPxyhdwlr\doMPw  }
+\def\MPh  {\doMPxyhdwlr\doMPh  }
+\def\MPd  {\doMPxyhdwlr\doMPd  }
+\def\MPxy {\doMPxyhdwlr\doMPxy }
+\def\MPll {\doMPxyhdwlr\doMPll }
+\def\MPlr {\doMPxyhdwlr\doMPlr }
+\def\MPur {\doMPxyhdwlr\doMPur }
+\def\MPul {\doMPxyhdwlr\doMPul }
+\def\MPpos{\doMPxyhdwlr\doMPpos}
+
+\def\doMPp  #1,#2,#3,#4,#5,#6,#7\relax{#1}
+\def\doMPx  #1,#2,#3,#4,#5,#6,#7\relax{#2}
+\def\doMPy  #1,#2,#3,#4,#5,#6,#7\relax{#3}
+\def\doMPw  #1,#2,#3,#4,#5,#6,#7\relax{#4}
+\def\doMPh  #1,#2,#3,#4,#5,#6,#7\relax{#5}
+\def\doMPd  #1,#2,#3,#4,#5,#6,#7\relax{#6}
+\def\doMPxy #1,#2,#3,#4,#5,#6,#7\relax{(#2,#3)}
+\def\doMPll #1,#2,#3,#4,#5,#6,#7\relax{(#2,#3-#6)}
+\def\doMPlr #1,#2,#3,#4,#5,#6,#7\relax{(#2+#4,#3-#6)}
+\def\doMPur #1,#2,#3,#4,#5,#6,#7\relax{(#2+#4,#3+#5)}
+\def\doMPul #1,#2,#3,#4,#5,#6,#7\relax{(#2,#3+#5)}
+\def\doMPpos#1,#2,#3,#4,#5,#6,#7\relax{#1,#2,#3,#4,#5,#6}
+
+\def\doMPxyhdwlr#1#2%
+  {\ifcsname\POSprefix#2\endcsname
+     \@EA\@EA\@EA#1\csname\POSprefix#2\endcsname,0pt,0pt,0pt,0pt\relax
+   \else
+     #10,0pt,0pt,0pt,0pt,0pt,0pt\relax
+   \fi}
+
+%D \macros
+%D  {MPplus, MPrest, MPv, MPvv}
+%D
+%D Since we will probably keep on extending, we provide a
+%D general extension macro. The plus alternative takes an
+%D extra argument, denoting what additional parameter to pick
+%D up. So, the third extra is fetched with,
+%D
+%D \starttyping
+%D \MPplus{identifier}{3}{default}
+%D \stoptyping
+%D
+%D All extras (comma separated) are fetched with:
+%D
+%D \starttyping
+%D \MPrest{identifier}
+%D \stoptyping
+%D
+%D The extra parameters are not treated.
+
+\def\MPplus  {\MPdoplus\doMPplus}
+\def\MPrest#1{\MPdoplus\doMPrest{#1}{}}
+
+\def\MPdoplus#1#2#3#4%
+  {\ifcsname\POSprefix#2\endcsname
+     \@EA\@EA\@EA#1\csname\POSprefix#2\endcsname,,,,,,,,,\relax{#3}%
+   \else
+     #4%
+   \fi}
+
+\def\doMPplus#1,#2,#3,#4,#5,#6,%
+  {\dodoMPplus}
+
+\def\dodoMPplus#1,#2,#3,#4,#5,#6,#7,#8\relax#9%
+  {\ifcase#9\or#1\or#2\or#3\or#4\or#5\or#6\or#7\else\dododoMPplus#8\relax{#9}\fi}
+
+\def\dododoMPplus#1,#2,#3,#4,#5,#6,#7,#8\relax#9%
+  {\ifcase#9\or\or\or\or\or\or\or\or#1\or#2\or#3\or#4\or#5\or#6\or#7\fi}
+
+\def\doMPrest#1,#2,#3,#4,#5,#6,#7,,#8\relax#9%
+  {#7}
+
+%D \macros
+%D   {MPanchor}
+%D
+%D For readability we define a few synonyms:
+
+\def\MPanchor{\MPpos}
+
+%D \macros
+%D   {POSp, POSx, POSy, POSh, POSd, POSw}
+%D
+%D and:
+
+\def\POSp{\MPp} \def\POSx{\MPx} \def\POSy{\MPy}
+\def\POSh{\MPh} \def\POSd{\MPd} \def\POSw{\MPw}
+
+%D There are two low level positioning macros. Both store the
+%D position as well as execute an action associated with that
+%D position.
+
+\def\initializenextposition
+  {\ifpositioning \else
+     \global\positioningtrue
+     \dosetpositionpapersize
+       {\printpaperwidth }%
+       {\printpaperheight}%
+   \fi
+   \global\advance\currentpositions\plusone}
+
+\def\setpositiononly#1%
+  {\iftrialtypesetting
+      % nothing
+   \else
+     \initializenextposition
+     \def\currentposition{#1}%
+     \dosetposition\currentposition
+   \fi}
+
+\def\setposition#1%
+  {\iftrialtypesetting
+      % nothing
+   \else
+     \initializenextposition
+     \def\currentposition{#1}%
+     \dosetposition\currentposition
+     \traceposstring\llap\green{\currentposition>}%
+     \dopositionaction\currentposition
+   \fi}
+
+\def\setpositiondata#1#2#3#4%
+  {\iftrialtypesetting \else
+     \initializenextposition
+     \hbox
+       {\def\currentposition{#1}%
+        \dosetpositionwhd\currentposition
+          {\the\dimexpr#2\relax}%
+          {\the\dimexpr#3\relax}%
+          {\the\dimexpr#4\relax}%
+        \traceposstring\llap\green{\currentposition>}%
+        \dopositionaction\currentposition
+        \hss}%
+   \fi}
+
+\def\setpositionbox#1%
+  {\dowithnextbox
+     {\iftrialtypesetting
+        \flushnextbox
+      \else
+        \initializenextposition
+        \hbox to \nextboxwd
+          {\edef\currentposition{#1}%
+           \dosetpositionwhd\currentposition
+             {\the\nextboxwd}%
+             {\the\nextboxht}%
+             {\the\nextboxdp}%
+           \traceposstring\llap\green{\currentposition>}%
+           \setbox\positionbox\flushnextbox
+           \dopositionaction\currentposition
+           \box\positionbox
+           \hss}%
+      \fi}}
+
+\def\setpositiondataplus#1#2#3#4#5%
+  {\iftrialtypesetting \else
+     \initializenextposition
+     \hbox % bug: to \nextboxwd
+       {\edef\currentposition{#1}%
+        \dosetpositionplus\currentposition
+          {\the\dimexpr#2\relax}%
+          {\the\dimexpr#3\relax}%
+          {\the\dimexpr#4\relax}%
+          {#5}%
+        \traceposstring\rlap\magenta{<\currentposition}%
+        \dopositionaction\currentposition
+        \hss}%
+   \fi}
+
+\def\setpositionplus#1#2%
+  {\dowithnextbox
+     {\iftrialtypesetting
+        \flushnextbox
+      \else
+        \initializenextposition
+        \hbox to \nextboxwd
+          {\edef\currentposition{#1}%
+           \dosetpositionplus\currentposition
+             {\the\nextboxwd}%
+             {\the\nextboxht}%
+             {\the\nextboxdp}%
+             {#2}%
+           \traceposstring\rlap\magenta{<\currentposition}%
+           \setbox\positionbox\flushnextbox
+           \dopositionaction\currentposition
+           \box\positionbox
+           \hss}%
+      \fi}}
+
+\let\currentposition\s!unknown
+
+%D A few more low level macros take care of defining and
+%D recalling actions. We could save this information in the
+%D position containers themselves, this would save hash
+%D entries, but at the cost of much more time consuming
+%D expansion. Actions are saved globally!
+
+\newtoks\everypositionaction
+
+\let\POSactionprefix\POSprefix
+
+\def\dosetpositionaction#1%
+  {\setgvalue{\POSactionprefix#1::}}
+
+%D The lists can become quite long (also because there can
+%D be lots of parameters passed on) so we provide a hook
+%D to clean up the list afterwards.
+
+\let\cleanuppositionaction\gobbleoneargument
+
+\def\doifpositionaction#1%
+  {\ifcsname\POSactionprefix#1::\endcsname
+     \@EA\firstofoneargument
+   \else
+     \@EA\gobbleoneargument
+   \fi}
+
+\def\doifpositionactionelse#1%
+  {\ifcsname\POSactionprefix#1::\endcsname
+     \@EA\firstoftwoarguments
+   \else
+     \@EA\secondoftwoarguments
+   \fi}
+
+%D We can copy a position with:
+%D
+%D \starttyping
+%D \copyposition {to} {from}
+%D \stoptyping
+%D
+%D Again, this is a global action.
+
+\def\copyposition#1#2%
+  {\ifcsname\POSprefix#2\endcsname
+     \global\@EA\let\csname\POSprefix#1\@EA\endcsname\csname\POSprefix#2\endcsname
+   \fi}
+
+%D The fact that handling positions is a two pass operation, is
+%D one of the reasons why we need to be able to test for
+%D existence, using:
+%D
+%D \starttyping
+%D \doifpositionelse {identifier} {found action} {not found action}
+%D \stoptyping
+
+\def\doifpositionelse#1%
+  {\ifcsname\POSprefix#1\endcsname
+     \expandafter\firstoftwoarguments
+   \else
+     \expandafter\secondoftwoarguments
+   \fi}
+
+%D We have now arrived at a few macros that would make sense as
+%D support macros, but ended up in the core.
+
+%D \macros
+%D   {xypos}
+%D
+%D We have several macros available to save positions. Later
+%D we will see applications.
+%D
+%D \starttabulate[|l|l||]
+%D \NC \type {\xypos} \NC    \NC simple position with no dimensions \NC \NR
+%D \NC \type {\hpos}  \NC    \NC position and characteristics of a \type {\hbox}                    \NC \NR
+%D \NC \type {\vpos}  \NC    \NC position and characteristics of a \type {\vbox}                    \NC \NR
+%D \NC \type {\bpos}  \NC b: \NC begin point in a line \NC \NR
+%D \NC \type {\epos}  \NC e: \NC end point in a line \NC \NR
+%D \NC \type {\fpos}  \NC f: \NC begin point in a paragraph \NC \NR
+%D \NC \type {\tpos}  \NC t: \NC end point in a paragraph \NC \NR
+%D \stoptabulate
+%D
+%D Each macro takes an identifier as argument, and the \type
+%D {\hpos} and \type {\vpos} also expect box content.
+
+% \def\xypos{\initializenextposition\dosetposition}
+
+\let\xypos\setpositiononly
+
+\def\hpos#1{\dontleavehmode\setpositionbox{#1}\hbox}
+\def\vpos#1{\setpositionbox{#1}\vbox}
+
+\def\bpos#1{\hpos{b:#1}{\strut}\ignorespaces}
+\def\epos#1{\removelastspace\hpos{e:#1}{\strut}}
+
+\def\fpos#1%
+  {\setpositionplus{b:#1}{\number\parposcounter}\horizontalstrut
+   \ignorespaces}
+
+\def\tpos#1%
+  {\removelastspace
+   \setpositionplus{e:#1}{\number\parposcounter}\horizontalstrut}
+
+\def\ffpos#1%
+  {\setpositionplus{b:#1}{\number\parposcounter}\horizontalstrut\wpos{#1}%
+   \ignorespaces}
+
+\def\ttpos#1%
+  {\removelastspace
+   \setpositionplus{e:#1}{\number\parposcounter}\horizontalstrut}
+
+\def\wpos#1%
+  {\dontleavehmode\vadjust % may disappear if buried
+     {\setbox0\hbox{\raise\strutdp\hbox{\rawwpos{#1}}}%
+      \rlap{\smashedbox0}}}
+
+\def\wwpos#1% \hsmashed{\llap{\rawwpos{#1}}}
+  {\rlap
+     {\setbox0\hbox{\rawwpos{#1}}%
+      \smashedbox0}}
+
+\def\rawwpos#1%
+  {\hpos{w:#1}
+     {\strut
+      \hskip-\leftskip
+      \hskip\hsize
+      \hskip-\rightskip}}
+
+% the next macro disables par positions (in inner boxes) and
+% only registers the width
+
+\def\setinnerparpositions
+  {\let\fpos\ffpos
+   \let\tpos\ttpos
+   \let\wpos\wwpos}
+
+% example of usage: (see for application "techniek")
+%
+% \appendtoks
+%   \setinnerparpositions
+% \to \everytabulate
+
+%D When we want to calculate more complex backgrounds, we
+%D need to know what the current indentation scheme is. At
+%D the cost of many positions and memory, we can keep track
+%D of them. This mechanism is activated automatically
+%D based on information collected in the previous pass.
+
+\newcount\parposcounter
+
+\newif\ifpositioningpar
+
+% we can check for used entries, and if not, then not add one
+
+\def\enableparpositions % global
+  {\global\positioningtrue
+   \global\positioningpartrue}
+
+\def\disableparpositions % local
+  {\positioningparfalse}
+
+\def\registerparoptions
+  {\ifpositioningpar \ifpositioning \iftrialtypesetting \else
+     \ifinpagebody \else \ifmmode \else \ifinformula \else
+       \ifprocessingverbatim
+         \iflinepar \doregisterparoptions \fi
+       \else
+         \doregisterparoptions
+       \fi
+     \fi \fi \fi
+   \fi \fi \fi}
+
+\chardef\parposstrut=1 % 0 => no strut data, so fall backs used
+
+\newif\iftracepositions
+
+% \def\doregisterparoptions
+%   {\global\advance\parposcounter\plusone
+%    \begingroup
+%      \leftskip 1\leftskip
+%      \rightskip1\rightskip
+%      \setpositiondataplus
+%        {p:\number\parposcounter}% identifier
+%        {\the\zeropoint}%
+%        {\the\strutht}%
+%        {\the\strutdp}%
+%        {\the\hsize     ,% 1
+%         \the\leftskip  ,% 2
+%         \the\rightskip ,% 3
+%         \the\hangindent,% 4
+%         \the\hangafter ,% 5 (num)
+%         \the\parindent }% 6
+%     %\normalhbox{\registerparsymbol}%
+%      \registerparsymbol
+%    \endgroup}
+
+\def\doregisterparoptions
+  {\global\advance\parposcounter\plusone
+   \setpositiondataplus
+     {p:\number\parposcounter}% identifier
+     {\the\zeropoint}%
+     {\the\strutht}%
+     {\the\strutdp}%
+     {\the\hsize,\the\dimexpr\leftskip\relax,\the\dimexpr\rightskip\relax,\the\hangindent,\the\hangafter,\the\parindent}%
+  %\normalhbox{\registerparsymbol}%
+   \iftracepositions\registerparsymbol\fi}
+
+\def\traceposstring#1#2#3%
+  {\iftracepositions
+     \smashedhbox
+       {#1{\infofont#2#3}%
+        \scratchdimen.5\points
+        \kern-2\scratchdimen
+        \vrule\!!width4\scratchdimen\!!height\scratchdimen\!!depth\scratchdimen}%
+   \fi}
+
+\def\registerparsymbol
+  {\iftracepositions
+     \smashedhbox to \zeropoint
+       {\hss
+        \startcolor[blue]%
+        \llap{\infofont\number\parposcounter}%
+        \scratchdimen\onepoint
+        \vrule
+          \!!width 4\scratchdimen
+          \!!height2\scratchdimen
+          \!!depth 2\scratchdimen
+        \stopcolor
+        \hss}%
+   \fi}
+
+% \appendtoks \registerparoptions \to \everypar
+
+%D Eperimental code, don't use this yet: (must be sped up anyway)
+
+\def\@@noden{node:n:}
+\def\@@nodeo{node:o:}
+\def\@@nodep{node:p:}
+
+\def\doifelsenodelocation#1%
+  {\ifcsname\@@noden#1\endcsname
+     \expandafter\firstoftwoarguments
+   \else
+     \expandafter\secondoftwoarguments
+   \fi}
+
+\def\nextnodelocation#1%
+  {\ifcsname\@@noden#1\endcsname\pluscounter{\@@noden#1}\fi}
+
+\def\newnodelocation#1%
+  {\ifcsname\@@noden#1\endcsname
+     \setcounter{\@@noden#1}\zerocount
+     \letgvalue {\@@nodeo#1}\!!zerocount
+   \fi}
+
+\def\tagnodelocation#1%
+  {\ifcsname\@@noden#1\endcsname\xypos{\@@nodep#1:\countervalue{\@@noden#1}}\fi}
+
+\def\getnodelocationp#1{\MPp{\@@nodep#1:\countervalue{\@@noden#1}}}
+\def\getnodelocationx#1{\MPx{\@@nodep#1:\countervalue{\@@noden#1}}}
+\def\getnodelocationy#1{\MPy{\@@nodep#1:\countervalue{\@@noden#1}}}
+
+\def\numnodelocationp#1#2{\MPp{\@@nodep#1:\number#2}}
+\def\numnodelocationx#1#2{\MPx{\@@nodep#1:\number#2}}
+\def\numnodelocationy#1#2{\MPy{\@@nodep#1:\number#2}}
+
+\def\getnodelocationn#1{\countervalue{\@@noden#1}}
+\def\getnodelocationo#1{\getvalue    {\@@nodeo#1}}
+
+\chardef\nodelocationmode\plusone
+
+\def\analyzenodelocation#1%
+  {\ifcsname\@@noden#1\endcsname
+     \doanalyzenodelocation{#1}{\getnodelocationn{#1}}\zerocount
+   \fi}
+
+\def\doanalyzenodelocation#1#2#3% class n default
+  {\begingroup
+   \donefalse
+   \ifcase\nodelocationmode
+     % do nothing
+   \else
+     \edef\nodelocationselfn{#2}%
+     \edef\nodelocationselfp{\numnodelocationp{#1}\nodelocationselfn}%
+     \edef\nodelocationselfx{\numnodelocationx{#1}\nodelocationselfn}%
+     \edef\nodelocationselfy{\numnodelocationy{#1}\nodelocationselfn}%
+     \scratchcounter\plusone
+     \doloop
+       {\ifnum\recurselevel=\nodelocationselfn\relax
+          \donetrue
+        \else
+          \edef\nodelocationotherp{\numnodelocationp{#1}\recurselevel}%
+          \edef\nodelocationotherx{\numnodelocationx{#1}\recurselevel}%
+          \edef\nodelocationothery{\numnodelocationy{#1}\recurselevel}%
+          \ifcase\nodelocationmode
+          \or
+            % ok for single column
+            \ifcase\nodelocationotherp\relax
+              \exitloop
+            \else\ifnum\nodelocationotherp<\nodelocationselfp\relax
+              \donetrue \advance\scratchcounter\plusone
+            \else\ifnum\nodelocationotherp>\nodelocationselfp\relax
+              % skip
+            \else\ifdim\nodelocationothery>\nodelocationselfy\relax
+              \donetrue \advance\scratchcounter\plusone
+            \else\ifdim\nodelocationothery<\nodelocationselfy\relax
+              % skip
+            \else\ifdim\nodelocationotherx<\nodelocationselfx\relax
+              \donetrue \advance\scratchcounter\plusone
+            \fi\fi\fi\fi\fi\fi
+          \or
+            % acceptable for double column
+            \ifcase\nodelocationotherp\relax
+              \exitloop
+            \else\ifnum\nodelocationotherp<\nodelocationselfp\relax
+              \donetrue \advance\scratchcounter\plusone
+            \else\ifnum\nodelocationotherp>\nodelocationselfp\relax
+              % skip
+            \else\ifnum\recurselevel>\nodelocationselfn\relax
+              \donetrue \exitloop
+            \else
+              \donetrue \advance\scratchcounter\plusone
+            \fi\fi\fi\fi
+        \else
+          \exitloop
+        \fi
+        \fi}%
+   \fi
+   \ifdone \else
+     \scratchcounter#3\relax
+   \fi
+   \setxvalue{\@@nodeo#1}{\the\scratchcounter}%
+   \endgroup}
+
+\unexpanded\def\shownodelocation#1%
+  {\ifcsname\@@noden#1\endcsname
+    \analyzenodelocation{#1}%
+     (#1,%
+      n:\getnodelocationn{#1},%
+      p:\getnodelocationp{#1},%
+      x:\getnodelocationx{#1},%
+      y:\getnodelocationy{#1},%
+      o:\getnodelocationo{#1})%
+   \fi}
+
+%D \macros
+%D   {doifoverlappingelse}
+%D
+%D A first application of positional information, is to
+%D determine if two boxes do overlap:
+%D
+%D \starttyping
+%D \doifoverlappingelse{point a}{point b}
+%D   {action when overlapping}
+%D   {action when not overlapping}
+%D \stoptyping
+
+\def\overlappingmargin{-2\scaledpoint}
+
+\def\doifoverlappingelse#1#2%
+  {\begingroup
+   \donefalse
+   \edef\!!stringa{#1}\edef\!!stringb{#2}%
+   \ifnum\MPp\!!stringa=\MPp\!!stringb\relax
+     \!!dimena\MPx\!!stringa
+     \!!dimenb\dimexpr\MPx\!!stringa+\MPw\!!stringa\relax
+     \!!dimenc\dimexpr\MPy\!!stringa-\MPd\!!stringa\relax
+     \!!dimend\dimexpr\MPy\!!stringa+\MPh\!!stringa\relax
+     \!!dimene\MPx\!!stringb
+     \!!dimenf\dimexpr\MPx\!!stringb+\MPw\!!stringb\relax
+     \!!dimeng\dimexpr\MPy\!!stringb-\MPd\!!stringb\relax
+     \!!dimenh\dimexpr\MPy\!!stringb+\MPh\!!stringb\relax
+     \ifdim\overlappingmargin=\zeropoint\else
+       \advance\!!dimena-\overlappingmargin
+       \advance\!!dimenb+\overlappingmargin
+       \advance\!!dimenc-\overlappingmargin
+       \advance\!!dimend+\overlappingmargin
+       \advance\!!dimene-\overlappingmargin
+       \advance\!!dimenf+\overlappingmargin
+       \advance\!!dimeng-\overlappingmargin
+       \advance\!!dimenh+\overlappingmargin
+     \fi
+     % more often eh fb eg fg
+     \def\checkone##1##2%
+       {\ifdim##1<\!!dimena \else \ifdim##1>\!!dimenb \else
+          \ifdim##2<\!!dimenc \else \ifdim##2>\!!dimend \else
+            \donetrue
+          \fi\fi
+        \fi\fi}%
+     \def\checktwo##1##2%
+       {\ifdim##1<\!!dimene \else \ifdim##1>\!!dimenf \else
+          \ifdim##2<\!!dimeng \else \ifdim##2>\!!dimenh \else
+            \donetrue
+          \fi\fi
+        \fi\fi}%
+     \checkone\!!dimene\!!dimeng \ifdone \else
+     \checkone\!!dimene\!!dimenh \ifdone \else
+     \checkone\!!dimenf\!!dimeng \ifdone \else
+     \checkone\!!dimenf\!!dimenh \ifdone \else
+     \checktwo\!!dimena\!!dimenc \ifdone \else
+     \checktwo\!!dimena\!!dimend \ifdone \else
+     \checktwo\!!dimenb\!!dimene \ifdone \else
+     \checktwo\!!dimenb\!!dimenc \fi \fi \fi \fi \fi \fi \fi
+   \fi
+   \ifdone
+     \endgroup\expandafter\firstoftwoarguments
+   \else
+     \endgroup\expandafter\secondoftwoarguments
+   \fi}
+
+%D \macros
+%D   {doifpositionsonsamepageelse,
+%D    doifpositionsonthispageelse}
+%D
+%D Instead of letting the user handle fuzzy expansion, we
+%D provide a simple test on positione being on the same page.
+%D
+%D \starttyping
+%D \doifpositionsonsamepageelse{point a,point b}
+%D   {action when on same page}
+%D   {action when not on same page}
+%D \doifpositionsonthispageelse{point a,point b}
+%D   {action when on this page}
+%D   {action when not on this page}
+%D \stoptyping
+
+\def\dodoifpositionsonsamepageelse#1#2#3#4%
+  {\bgroup
+   \scratchcounter#1\donefalse
+   \def\docommand##1%
+     {\ifcase\scratchcounter
+        \scratchcounter\MPp{##1}\donetrue
+      \else
+        \ifnum\scratchcounter=\MPp{##1}\relax\else\donefalse\fi
+      \fi}%
+   \rawprocesscommalist[#2]\docommand
+   \ifdone\egroup#3\else\egroup#4\fi}
+
+\def\doifpositionsonsamepageelse{\dodoifpositionsonsamepageelse\!!zerocount}
+\def\doifpositionsonthispageelse{\dodoifpositionsonsamepageelse\realfolio  }
+
+%D Plugins:
+
+\let\MPv \MPplus
+\let\MPvv\MPrest
+
+\let\MPanchor\MPpos
+
+\let\POSp\MPp \let\POSx\MPx \let\POSy\MPy
+\let\POSh\MPh \let\POSd\MPd \let\POSw\MPw
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/anch-snc.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/anch-snc.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/anch-snc.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,177 @@
+%D \module
+%D   [       file=anch-snc,
+%D        version=2003.12.01,
+%D          title=\CONTEXT\ Anchoring Macros,
+%D       subtitle=Synchronization,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Anchoring Macros / Synchronization}
+
+\unprotect
+
+\ifx\s!set    \undefined \def\s!set    {set}     \fi
+\ifx\s!reset  \undefined \def\s!reset  {reset}   \fi
+\ifx\s!preset \undefined \def\s!preset {preset}  \fi
+\ifx\s!syncpos\undefined \def\s!syncpos{syncpos} \fi
+
+\def\definesyncpositions[#1]%
+  {\setcounter{\s!num:\s!syncpos:#1}{0}%
+   \doglobal\appendtoksonce\getvalue {\s!reset:\s!syncpos:#1}\to\resetsyncpositions
+   \doglobal\appendtoksonce\getvalue{\s!preset:\s!syncpos:#1}\to\presetsyncpositions
+   \setgvalue{\s!syncpos:#1}{sync_n[#1] := 0 ;}%
+   \setgvalue{\s!set:\s!syncpos:#1}{\dosetsyncpositions{#1}}}
+
+\def\syncposition
+  {\dodoubleempty\dosyncposition}
+
+\def\dosyncposition[#1][#2]%
+  {\letgvalue{\s!reset:\s!syncpos:#1}\relax
+   \letgvalue{\s!preset:\s!syncpos:#1}\relax
+   \dontleavehmode
+   \dodosyncposition{#1}{#2}\s!set
+   \ignorespaces}
+
+\def\doifelselastsyncposition#1#2%
+  {\doifelse{\lastsyncclass\lastsyncposition}{#1#2}}
+
+\def\dodosyncposition#1#2#3%
+  {\letgvalue{\s!reset:\s!syncpos:#1}\relax
+   \letgvalue{\s!preset:\s!syncpos:#1}\relax
+   \ifundefined{\s!syncpos:#1}%
+     \strut
+   \else
+     \pluscounter{\s!num:\s!syncpos:#1}%
+     \setsyncpositions{#1}%
+     % option: geen w/h, alleen p 0 0 0 data
+     \setpositionplus
+       {\s!syncpos:#1:\countervalue{\s!num:\s!syncpos:#1}}%
+       {#2}%
+       \hbox{\strut\traceposstring\llap\green{#3/\countervalue{\s!num:\s!syncpos:#1}/#1/#2>>}}%
+   \fi}
+
+\def\setsyncpositions#1%
+  {\enabletextarearegistration
+   \getvalue {\s!set:\s!syncpos:#1}%
+   \letgvalue{\s!set:\s!syncpos:#1}\relax}
+
+\def\dosetsyncpositions#1%
+  {\startnointerference % removing out of sync can best be done in mp
+   \!!dimena\maxdimen
+   \!!counta\zerocount
+   \!!countc\zerocount
+   \doloop
+     {\doifpositionelse{\s!syncpos:#1:\recurselevel}
+        {\!!dimenb\MPy{\s!syncpos:#1:\recurselevel}\relax
+         \!!countb\MPp{\s!syncpos:#1:\recurselevel}\relax
+         \ifnum\!!countb=\!!counta % same page
+           \ifdim\!!dimenb>\!!dimena
+             \donefalse % out of order nodes
+           \else
+             \donetrue % nodes in order
+           \fi
+         \else
+           \donetrue % different page
+         \fi
+         \ifdone
+           \!!counta\!!countb
+           \!!dimena\!!dimenb
+           \advance\!!countc\plusone
+           \edef\!!stringa{[#1][\the\!!countc]:=}%
+           \edef\!!stringc{\s!syncpos:#1:\the\!!countc}%
+           \edef\!!stringd{\MPplus\!!stringc{1}{0}}%
+           \setxvalue{\s!syncpos:#1}%
+             {\getsyncpositions{#1}%
+              sync_p \!!stringa \MPp \!!stringc ;
+              sync_xy\!!stringa \MPxy\!!stringc ;
+              sync_w \!!stringa \MPw \!!stringc ;
+              sync_h \!!stringa \MPh \!!stringc ;
+              sync_d \!!stringa \MPd \!!stringc ;
+              \ifx\!!stringd\empty \else sync_t \!!stringa \MPplus\!!stringc{1}{0} ; \fi}%
+          \fi}
+        {\setxvalue{\s!syncpos:#1}%
+           {\getsyncpositions{#1}%
+            sync_n[#1] := \the\!!countc ;}
+         \exitloop}}%
+   \stopnointerference}
+
+\def\getsyncpositions#1%
+  {\getvalue{\s!syncpos:#1}}
+
+\newtoks\resetsyncpositions
+\newtoks\presetsyncpositions
+
+\def\resyncposition {\dodoubleargument\doresyncposition}
+\def\presyncposition{\dodoubleargument\dopresyncposition}
+
+\def\dodoresyncposition #1#2{\dodosyncposition{#1}{#2}\s!reset}
+\def\dodopresyncposition#1#2{\dodosyncposition{#1}{#2}\s!preset}
+
+\def\doresyncposition [#1][#2]{\setxvalue{\s!reset :\s!syncpos:#1}{\noexpand\dodoresyncposition{#1}{#2}}}
+\def\dopresyncposition[#1][#2]{\setxvalue{\s!preset:\s!syncpos:#1}{\noexpand\dodopresyncposition{#1}{#2}}}
+
+\def\flushsyncpositions % this order !
+  {\begingroup
+   \the\presetsyncpositions
+   \the\resetsyncpositions
+   \endgroup}
+
+\def\flushsyncxxsets#1%
+  {\setbox\scratchbox\hbox{\the#1}%
+   \ifvoid\scratchbox\else
+     \prewordbreak \let\prewordbreak\relax % only once
+     \smashbox\scratchbox
+     \box\scratchbox
+   \fi}
+
+\def\flushsyncresets {\flushsyncxxsets\resetsyncpositions }
+\def\flushsyncpresets{\flushsyncxxsets\presetsyncpositions}
+
+% \appendtoks \flushsyncpositions \to \everypar
+% \appendtoks \flushsyncpositions \to \everyheadstart
+
+% \explicitneverypar -> in grid snapper, eerst testen
+%
+% \appendtoks \flushsyncpositions \to \neverypar
+
+\protect \endinput
+
+\starttext
+
+\definesyncpositions[1]
+
+\startuseMPgraphic{sync}
+  StartPage ;
+    \getsyncpositions{1} ;
+    SyncThreshold := 2LineHeight ;
+    SyncLeftOffset := -.5LeftMarginDistance ;
+  % SetSyncThreshold(1,3,3LineHeight) ;
+    SyncWidth := - (BackSpace + SyncLeftOffset) ;
+    SetSyncColor(1,1,\MPcolor{red}) ;
+    SetSyncColor(1,2,\MPcolor{green}) ;
+    SetSyncColor(1,3,\MPcolor{blue}) ;
+    SetSyncColor(1,4,\MPcolor{yellow}) ;
+    PrepareSyncTasks(1,true,true,false) ;
+    for i = 1 upto NOfSyncPaths :
+      fill SyncPaths[i]
+        withcolor TheSyncColor(CurrentSyncClass,sync_t[CurrentSyncClass][SyncTasks[i]]) ;
+    endfor ;
+    setbounds currentpicture to Page ;
+  StopPage ;
+\stopuseMPgraphic
+
+\defineoverlay[tempoverlay][\useMPgraphic{sync}]
+
+\setupbackgrounds[page][background=tempoverlay]
+
+\syncposition[1][1] \input ward \endgraf
+\syncposition[1][2] \input ward \endgraf
+\syncposition[1][3] \input ward \endgraf
+\syncposition[1][4] \input ward \endgraf
+
+\stoptext

Added: trunk/Master/texmf-dist/tex/context/base/mkii/bibl-tra.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/bibl-tra.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/bibl-tra.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,1781 @@
+%D \module
+%D   [       file=bibl-tra,
+%D        version=2009.08.13,
+%D          title=\CONTEXT\ Publication Module,
+%D       subtitle=Publications,
+%D         author=Taco Hoekwater,
+%D           date=\currentdate,
+%D      copyright={Public Domain}]
+%C
+%C Donated to the public domain.
+
+%D This used to be module \type {t-bib} but due to the number of differences
+%D in handling structure between \MKII\ and \MKIV\ we now have \BIBTEX\ support
+%D in the kernel. The only patches concerns some namespace issues. Also,
+%D constants and variables are now predefined. When the \MKIV\ code is well
+%D tested I might backport a couple of adaptions to this \MKII\ variant.
+
+\writestatus{loading}{ConTeXt Bibliography Support / BibTeX}
+
+\definefilesynonym[bib][obsolete]
+
+% here starts t-bib.tex
+
+%D The original was developed independantly by Taco Hoekwater while still working for Kluwer
+%D Academic publishers (it still used the dutch interface then). Development continued after
+%D he left Kluwer, and in Januari 2005, the then already internationalized file was merged
+%D with the core distribution by Hans Hagen.  The current version is once again by Taco.
+%D
+%D More documentation and additional resources can be found on the contextgarden:
+%D \hyphenatedurl{http://wiki.contextgarden.net//Bibliography}.
+
+%D \subject{DONE (dd/mm/yyyy)}
+%D
+%D \startitemize
+%D \item add author definition (and associated system variable) (26/05/2005)
+%D \item add finalnamesep support for Oxford comma (17/09/2005)
+%D \item add \type{\insert...} for: doi, eprint, howpublished (19/09/2005)
+%D \item allow a defaulted \type{\setupcite} (19/11/2005)
+%D \item renamed citation type 'number' to 'serial' (19/11/2005)
+%D \item better definition of \type{\inverted...author} (19/11/2005)
+%D \item don't reset [numbercommand] in \type {\setuppublication} by default (20/11/2005)
+%D \item don't disable other \type {\setuppublication} keys if alternative is present (20/11/2005)
+%D \item drop \type{\sanitizeaccents} (20/11/2005)
+%D \item added \type{\nocite} and \type{\cite[none]} (21/11/2005)
+%D \item added headtext for it  (23/11/2005)
+%D \item make \type{\cite[url]} and \type{\cite[doi]} interactive (23/11/2005)
+%D \item make right-aligned labels in the list work even when autohang=no
+%D \item use 'et al.' instead of 'et.al.'. Pointed out by Peter M�nster (30/12/2005)
+%D \item added headtext for cz (31/12/2005)
+%D \item Keep whitespace after \type{\cite} with single argument (31/12/2005)
+%D \item Fix broken \type{\cite{}} support (31/12/2005)
+%D \item Use \type{\readfile} inside \type{\usepublications} instead of \type{\readsysfile} (12/01/2006)
+%D \item Use \type{\currentbibyear} and \type{\currentbibauthor} instead of \type{\YR} and \type{\AU} (05/02/2006)
+%D \item Fix compressed version of authoryear style (05/02/2006)
+%D \item Rename the clashing data fields \type{\url} and \type{\type} to \type{\biburl} and \type{\bibtype} (05/02/2006)
+%D \item Added two french bibl files from Renaud Aubin (06/02/2006)
+%D \item Five new bib class and eight extra bib fields, for IEEEtran (07/02/2006)
+%D \item French keyword translation, provided by Renaud (08/02/2006)
+%D \item fix underscores in undefined keys (22/02/2006)
+%D \item Destroy interactivity in labels of the publication list (13/03/2006)
+%D \item fix multi-cite list compression (11/4/2006)
+%D \item fix \type{\getcitedata} (11/4/2006)
+%D \item magic for chapter bibs (18-25/4/2006)
+%D \item language setting (25/4/2006)
+%D \item use \type{\hyphenatedurl} for \type{\inserturl} (25/4/2006)
+%D \item Add \type{\docitation} to \type{\nocite}(26/4/2006)
+%D \item patents can have numbers, added to bst files (26/4/2006)
+%D \item \type{\docitation} needs a \type{\iftrialtypesetting} (27/4/2006)
+%D \item \type{\filllocalpublist}'s loop is bound by definedness, not resolvedness (27/4/2006)
+%D \item \type{\setuppublications[monthconversion=]} added (15/5/2006)
+%D \item use \type{\undefinedreference} instead of bare question marks (15/5/2006)
+%D \item add grouping around \type{\placepublications} commands (16/5/2006)
+%D \item fix a bug in \type{\cite{<item>}} (17/5/2006)
+%D \item support \type{\cite[authornum]} (18/5/2006)
+%D \item make \type{\cite} unexpandable (20/6/2006)
+%D \item allow hyperlinks in author\&year combo's
+%D       (cite list compression has to be off) (20/6/2006)
+%D \item fix duplicate labels for per-chapter style (20/6/2006)
+%D \item allow \type{\setupcite[interaction=(start|stop)]}
+%D \item fix the item number in the publication list with 'numbering=yes' (22/6/2006)
+%D \item make the default criterium for \type{\placepublications} be \type{previous} (23/6/2006)
+%D \item fix \type{\normalauthor} and \type{\normalshortauthor} spacing (29/6/2006)
+%D \item do not typeset empty arguments to \type{\typesetapublication} (29/6/2006)
+%D \item add \type{symbol=none} to \type{\setuplist} in unnumbered
+%D       mode to prevent typesetting of bare numbers (29/6/2006)
+%D \item remove two incorrect spaces from bibl-num.tex (1/7/2006)
+%D \item reset font styles within \type{\cite}, so that font switches
+%D       in \type{left} stay in effect (12/7/2006)
+%D \item guard added against loading bbl files multiple times (13/7/2006)
+%D \item fix \type{\cite[num]} with compression is on. (14/7/2006)
+%D \item test \type{\iflocation} before deciding to use the
+%D       interactive version of cite (18/7/2006)
+%D \item support \type{\setupcite[authoretallimit=1]} (18/7/2006)
+%D \item support use of \type{\cite} within titles and captions by
+%D       saveguarding the list item extraction and reference placement
+%D       code (19/7/2006)
+%D \item support \type{\setuppublicationlist[title=\chapter]} (4/8/2006)
+%D \item use the expansion of \type{\headtext{pubs}} (4/8/2006)
+%D \item hook added for repeated authors in publication list
+%D       \type{\setuppublicationlist[artauthorcommand=\mythreeargscommand]}
+%D       (4/8/2006)
+%D \item make the bracketed arguments of \type{\artauthor}, \type{\author}
+%D        and \type{\editor} (bbl commands) optional (4/8/2006)
+%D \item the constants \type{sorttype}, \type{compress} and
+%D        \type{autohang} have moved to the core (8/8/2006)
+%D \item bibtex is now registered as a program to be run by texexec (8/8/2006)
+%D \item fix a bug in \type{\setupcite[authoretallimit=1]} (9/8/2006)
+%D \item fix a bug inside citations that prevented lastpubsep from ever being
+%D       used due to a volatile \type{\commalistsize} (25/8/2006).
+%D \item added the possibility of \type{\placepublications[option=continue]}
+%D       (6/9/2006)
+%D \item Mojca translated Master's Thesis to Masterarbeit (bibl-apa-de.tex)
+%D       (12/9/2006)
+%D \item Added \type{\setuppublicationlist[maybeyear=off]} by request from
+%D       Thomas Schmitz (15/9/2006)
+%D \item Removed some spurious spaces pointed out by willi egger (19/9/2006)
+%D \item Add configuration of bibtex executable name (4/11/2006)
+%D \item Fix numbering=short and numbering=bib (spotted by Matthias W�chter) (4/11/2006)
+%D \item third attempt to get a correct release (5/11/2006)
+%D \item fix a few missing dots in bibl-num.tex  (7/12/2006)
+%D \item Patch for DOI's by Tobias Burnus (17/4/2007)
+%D \item Patch for \type{\insertbiburl} and \type{\insertdoi} for  Tobias Burnus (18/4/2007)
+%D \item Added a missing \type{\relax} in \type{\dospecialbibinsert},
+%D       that made the space before the {\it et al.} text disappear.  (18/4/2007)
+%D \item Attempt to fix percent signs in bbl files. As a side-effect,
+%D       this prohibits comments in \tex{startpublication} blocks! (17/4/2008)
+%D \item Patch from Matthias W\"achter that allows arbitrary .bst
+%D        files to be used with \tex{setupbibtex} (25/9/2008)
+%D \item Extended for the new multilingual setups for the Oct 2008 current of ConTeXt (23/10/2008)
+%D \item Multilingual setups needed another fix (27/10/2008)
+%D \item Two fixes for bibl-apa by Michael Green (27/10/2008)
+%D \item Catalan translation of 'References' (10/11/2008)
+%D \item 'chapter' -> 'chapitre' in bibl-apa-fr (27/11/2008)
+%D \item Run bibtex via os.execute in  mkiv modee (01/12/2008)
+%D \item Small correction in bibl-apa's placement of volume
+%D       information in articles (05/01/2009)
+%D \item Handle multi-author (more than two) cases in \type{\cite}
+%D       (02/03/2009)
+%D \item Suppress a syntax error in \type{cont-xp} mode. The output is
+%D       probably not right, though (02/03/2009)
+%D \item Added a \tex{loadmarkfile} at the end, and two new files
+%D       from Hans. The \type{t-bib.mkiv} is needed to make the module
+%D       work with the new structure code (17/04/2009)
+%D \item Added a patch to \type{t-bib.mkiv} from Hans to make the
+%D       cross referencing between multiple citations an
+%D       bibliographies work (27/04/2009)
+%D \item Remove a superfluous \type{\unprotect} in t-bib.mkiv (11/05/2009).
+%D \item Patch of incollection in bibl-ams.tex from Xan (08/06/2009).
+%D \item Patch of unpublished in bibl-ams.tex from Xan (22/07/2009).
+%D \item Modified \type{\bibdogetupsometextprefix} so it works for undefined
+%D       language labels, from Hans (13/08/2009).
+%D \item Removed some \MKIV\ hacks as well as some things that are in the
+%D       core like variables, constants and messages (HH:22/08/2009).
+%D \item Added \type{bib} in front of \type {insert} macros and initialize
+%D       then later on  (HH:22/08/2009).
+%D \item Removed test for type {\currentlocationreference} plus associated
+%D       code (HH:22/08/2009).
+%D \stopitemize
+%D
+%D \subject{WISHLIST}
+%D
+%D \startitemize
+%D \item link back from publication list to citation
+%D \item export \type {\citation{<cited item>}}
+%D \item support mlbibtex
+%D \item don't load the whole lot, but filter entries instead
+%D \stopitemize
+
+\unprotect
+
+%D Variables, constants and messages are removed as they are now in the
+%D multilingual interface modules.
+
+\def\biblistname{pubs} % for compatibility
+
+% \newif\ifeditedbook
+
+%D how to load the references. There is some new stuff here
+%D to support Idris' (incorrect :-)) use of projects
+
+% \let\preloadbiblist\relax
+%
+% \ifx\currentcomponent\v!text
+%   % single file
+%   \edef\temp{\the\everystarttext}%
+%   \ifx\temp\empty
+%     % post-starttext
+%     \def\preloadbiblist{\dousepublications\jobname }%
+%   \else
+%     % pre-starttext
+%     \appendtoks \dousepublications\jobname \to \everystarttext
+%   \fi
+%   %
+% \else \ifx\currentcomponent\v!project
+%   % a project file, have to set up the partial products!
+%   \def\startproduct #1 %
+%     {\doateverystarttext
+%      \dousepublications{#1}%
+%      \donextlevel\v!product\currentproduct
+%      \doexecutefileonce\doexecutefileonce
+%      \donotexecutefile\doexecutefile#1\\}%
+%   %
+% \else \ifx\currentcomponent\v!product
+%   % a product file
+%   \def\preloadbiblist{\dousepublications\jobname }%
+%   %
+% \else
+%   % a component? not sure what to do
+%   \def\preloadbiblist{\dousepublications\jobname }%
+%   %
+% \fi \fi \fi
+
+\def\preloadbiblist
+  {\globallet\preloadbiblist\relax
+   \dousepublications\jobname}
+
+\definelist[pubs]
+\setuplist[pubs][\c!width=]
+
+%D \macros{bibdoif,bibdoifnot,bibdoifelse}
+%D
+%D Here are a few small helpers that are used a lot
+%D in all the typesetting commands
+%D (\type{\insert...}) we will encounter later.
+
+\long\def\bibdoifelse#1%
+  {\@EA\def\@EA\!!stringa\@EA{#1}%
+   \ifx\!!stringa\empty
+     \expandafter\secondoftwoarguments
+   \else
+     \expandafter\firstoftwoarguments
+   \fi}
+
+\long\def\bibdoifnot#1%
+  {\@EA\def\@EA\!!stringa\@EA{#1}%
+   \ifx\!!stringa\empty
+     \expandafter\firstofoneargument
+   \else
+     \expandafter\gobbleoneargument
+   \fi}
+
+\long\def\bibdoif#1%
+  {\@EA\def\@EA\!!stringa\@EA{#1}%
+   \ifx\!!stringa\empty
+     \expandafter\gobbleoneargument
+   \else
+     \expandafter\firstofoneargument
+   \fi}
+
+%D Bibtex settings separated out
+
+%D No point in writing the aux file if there is no database...
+
+\def\setupbibtex{\dosingleempty\dosetupbibtex}
+
+\def\dosetupbibtex[#1]%
+  {\let\@@pbdatabase\empty
+   \getparameters[\??pb][\c!sort=\s!default,#1]%
+   \expanded{\processaction[\@@pbsort]}
+        [      \v!no=>\def\bibstyle{cont-no},
+           \v!author=>\def\bibstyle{cont-au},
+            \v!title=>\def\bibstyle{cont-ti},
+            \v!short=>\def\bibstyle{cont-ab},
+          \s!default=>\def\bibstyle{cont-no},
+          \s!unknown=>\def\bibstyle{\@@pbsort}]%
+   \ifx\@@pbdatabase\empty\else \writeauxfile \fi}
+
+\dosetupbibtex[bibtex=bibtex]
+
+%D \macros{writeauxfile}
+%D
+%D Unfortunately, \BIBTEX\ is not the best configurable program
+%D around. The names of the commands it parses as well as the \type{.aux}
+%D extension to the file name are both hardwired.
+%D
+%D This means \CONTEXT\ has to write a \LATEX-style auxiliary file, yuk!
+%D The good news is that it can be rather short. We'll just ask
+%D \BIBTEX\ to output the entire database(s) into the \type{bbl} file.
+%D
+%D The \type{\bibstyle} command controls how the \type{bbl} file will
+%D be sorted. The possibilities are:
+%D
+%D \startitemize[packed]
+%D \item by author (+year, title): cont-au.bst
+%D \item by title  (+author, year): cont-ti.bst
+%D \item by short key as in abbrev.bst: cont-ab.bst
+%D \item not sorted at all: cont-no.bst
+%D \stopitemize
+
+\def\writeauxfile
+  {\doifmode{*\v!first}
+    {\openout \scratchwrite \jobname.aux
+     \write   \scratchwrite {\string\citation{*}}%
+     \write   \scratchwrite {\string\bibstyle{\bibstyle}}%
+     \write   \scratchwrite {\string\bibdata{\@@pbdatabase}}%
+     \closeout\scratchwrite
+     \showmessage\m!publications{3}{}%
+     \expanded{\installprogram{\@@pbbibtex\space\jobname}}}}
+
+%D \macros{ifsortbycite,iftypesetall,ifautohang,ifbibcitecompress}
+%D
+%D The module needs some new \type{\if} statements.
+
+%D Default sort order of the reference list is by citation.
+
+\newif\ifsortbycite        \sortbycitetrue
+
+%D By default, only referenced publications are typeset
+
+\newif\iftypesetall        \typesetallfalse
+
+%D Hanging indentation of the publication list
+%D will not adjust itself according to the width of the label.
+
+\newif\ifautohang          \autohangfalse
+
+%D Cite lists are compressed, if possible.
+
+\newif\ifbibcitecompress   \bibcitecompresstrue
+
+\def\setuppublications
+  {\dosingleargument\dosetuppublications}
+
+\def\bibleftnumber#1%
+  {#1\hfill~}
+
+\def\dosetuppublications[#1]%
+  {\getparameters
+     [\??pb]
+     [\c!alternative=,#1]%
+   \doifsomething\@@pbalternative
+      {\readsysfile
+         {bibl-\@@pbalternative.tex}
+         {\showmessage\m!publications{6}{bibl-\@@pbalternative}\let\@@pbalternative\empty}
+         {\showmessage\m!publications{1}{bibl-\@@pbalternative}\let\@@pbalternative\empty}}%
+  \getparameters
+     [\??pb]
+     [#1]%
+    \processaction
+     [\@@pbcriterium]
+     [    \v!all=>\typesetalltrue,
+      \s!unknown=>\typesetallfalse]%
+   \processaction
+     [\@@pbautohang]
+     [    \v!yes=>\autohangtrue,
+      \s!unknown=>\autohangfalse]%
+   \processaction
+     [\@@pbsorttype]
+     [   \v!cite=>\sortbycitetrue,
+          \v!bbl=>\sortbycitefalse,
+      \s!default=>\sortbycitetrue,
+      \s!unknown=>\sortbycitefalse]%
+   \processaction
+     [\@@pbnumbering]
+     [    \v!yes=>\let\@@pbinumbercommand\firstofoneargument,
+           \v!no=>\let\@@pbinumbercommand\gobbleoneargument,
+        \v!short=>\def\@@pbinumbercommand##1{\getvalue{pbds-\@@pbk}},
+          \v!bib=>\def\@@pbinumbercommand##1{\getvalue{pbdn-\@@pbk}},
+      \s!unknown=>\let\@@pbinumbercommand\firstofoneargument]%
+   \processaction
+     [\@@pbrefcommand]
+     [\s!default=>\edef\@@citedefault{\@@pbrefcommand},
+      \s!unknown=>\edef\@@citedefault{\@@pbrefcommand}]}
+
+% initialize
+
+\def\@@pbrefcommand{num}
+\def\@@pbnumbercommand{\bibleftnumber}
+
+%D \macros{usepublications}
+%D
+%D We need \type{\usereferences} so that it is possible to
+%D refer to page and/or appearance number for publications
+%D in the other document.
+
+\def\usepublications[#1]%
+  {\usereferences[#1]\processcommalist[#1]\dousepublications}
+
+\def\dousepublications#1%
+  {\doonlyonce
+     {#1.\f!bibextension}
+     {\readfile{#1.\f!bibextension}
+       {\showmessage\m!publications{4}{#1.\f!bibextension}}
+       {\showmessage\m!publications{2}{#1.\f!bibextension}}}}
+
+%D \macros{setuppublicationlist}
+%D
+%D This will be the first command in (\BIBTEX-generated) \type{bbl}
+%D files. `samplesize' is a sample value (in case of \BIBTEX-generated
+%D files, this will be the longest `short' key). `totalnumber'
+%D is the total number of entries that will follow in this
+%D file.
+
+%D Both values are only needed for the label calculation
+%D if `autohang' is `true', so by default the command is
+%D not even needed, and therefore I saw no need to give
+%D it it's own system variable and it just re-uses \type{pb}.
+
+\def\setuppublicationlist
+  {\dosingleempty\dosetuppublicationlist}
+
+\def\dosetuppublicationlist[#1]%
+  {\getparameters[\??pv data][#1]%
+   \setuplist
+    [pubs]
+    [\c!samplesize={AA99},\c!totalnumber={99},
+     \c!alternative=a,\c!interaction=,\c!pagenumber=\v!no,#1]}
+
+\def\setuppublicationlayout[#1]#2%
+  {\setvalue{\??pv data#1}{#2\unskip}}
+
+%D \macros{bibalternative}
+%D
+%D A nice little shorthand that will be used so we don't have to
+%D key in the weird \type{\@@pv} parameter names all the time.
+
+\def\bibalternative#1%
+  {\getvalue{\??pv\@@currentalternative#1}}
+
+%D \macros{simplebibdef,bibcommandlist}
+%D
+%D \type{\simplebibdef} defines \type{bib@#1}, which in turn will
+%D use one argument that is stored in \type{@@pb@#1}.
+%D
+%D \type{\simplebibdef} also defines \type{insert#1}, which can be
+%D used in the argument of \type{\setuppublicationlayout} to fetch
+%D one of the \type{@@pb@} data entries. \type{insert#1} then has
+%D three arguments: \type{#1} are commands to be executed before the
+%D data, \type{#2} are commands to be executed after the data, and
+%D \type{#3} are commands to be executed if the data is not found.
+
+%D \type{\bibcommandlist} is the list of commands that is affected
+%D by this approach. Later on, it will be used to do a series
+%D of assignments from \type{#1} to \type{bib@#1}: e.g
+%D \type{\title} becomes \type{\bib at title} when used within
+%D a publication.
+
+\newtoks\initializebibdefinitions % we need to prevent clashes (HH)
+
+% \def\simplebibdef#1% hh: funny expansion ?
+%   {\@EA\long\@EA\def\csname bib@#1\endcsname##1%
+%      {\setvalue{\??pb @#1}{##1}%
+%       \ignorespaces}%
+%       \@EA\def\csname insert#1\endcsname##1##2##3%
+%         {\@EA\bibdoifelse
+%            \@EA{\csname @@pb@#1\endcsname}%
+%            {##1\csname @@pb@#1\endcsname##2}%
+%            {##3}%
+%       }}
+
+\def\simplebibdef#1% hh: funny expansion ?
+  {\@EA\long\@EA\def\csname bib@#1\endcsname##1%
+     {\setvalue{\??pb @#1}{##1}\ignorespaces}%
+   \expandafter \appendtoks
+     \expandafter\let\csname insert#1\expandafter\endcsname\csname bibinsert#1\endcsname
+   \to \initializebibdefinitions
+   \@EA\unexpanded\@EA\def\csname bibinsert#1\endcsname##1##2##3%
+     {\@EA\bibdoifelse\@EA{\csname\??pb @#1\endcsname}{##1\csname\??pb @#1\endcsname##2}{##3}}}
+
+\def\bibcommandlist
+  {abstract, annotate, arttitle, assignee, bibnumber, bibtype, biburl, chapter, city,
+   comment, country, day, dayfiled, doi, edition, eprint, howpublished, isbn, issn,
+   issue, journal, keyword, keywords, lastchecked, month, monthfiled, names, nationality,
+   note, notes, organization, pages, pubname, pubyear, revision, series, size, thekey,
+   title, volume, yearfiled}
+
+\processcommacommand[\bibcommandlist]\simplebibdef
+
+\def\bibinsertdoi#1#2#3%
+    {{\bibdoifelse{\@@pb at doi}%
+       {\edef\ascii{\@EA\detokenize\@EA{\@@pb at doi}}%
+        #1\expanded{\gotoDOI{\@@pb at thekey}{\ascii}}#2}{#3}}}
+
+\def\bibinsertbiburl#1#2#3%
+    {{\bibdoifelse{\@@pb at biburl}%
+       {\edef\ascii{\@EA\detokenize\@EA{\@@pb at biburl}}%
+        #1\expanded{\gotoURL{\@@pb at thekey}{\ascii}}#2}{#3}}}
+
+\def\bibinsertmonth#1#2#3%
+  {\bibdoifelse{\@@pb at month}%
+    {#1\doifnumberelse{\@@pb at month}%
+       {\doifconversiondefinedelse\@@pbmonthconversion
+          {\convertnumber\@@pbmonthconversion{\@@pb at month}}{\@@pb at month}}%
+       {\@@pb at month}#2}{#3}}
+
+\appendtoks
+    \let\inserturl \bibinsertbiburl  % for backward compat.
+    \let\inserttype\bibinsertbibtype % for backward compat.
+\to\initializebibdefinitions
+
+\def\newbibfield[#1]%
+  {\simplebibdef{#1}%
+   \edef\bibcommandlist{\bibcommandlist,#1}}
+
+%D \macros{bib at crossref}
+%D
+%D \type{\crossref} is used in database files to point to another
+%D entry. Because of this special situation, it has to be defined
+%D separately. Since this command will not be seen until at
+%D \type{\placepublications}, it may force extra runs. The same is
+%D true for \type{\cite} commands inside of publications.
+
+\def\bib at crossref#1%
+  {\setvalue{\??pb @crossref}{#1}\ignorespaces}
+
+\def\bibinsertcrossref#1#2#3%
+  {\bibdoifelse{\@@pb at crossref}
+     {#1\@EA\cite\@EA[\@@pb at crossref]#2}
+     {#3}}
+
+\let\insertcrossref\gobblethreearguments
+
+\appendtoks\let\insertcrossref\bibinsertcrossref\to\initializebibdefinitions
+
+%D \macros{complexbibdef,specialbibinsert}
+%D
+%D The commands \type{\artauthor}, \type{\author} and
+%D \type{\editor} are more complex than the other commands.
+%D Their argument lists have this form:
+%D
+%D \type{\author[junior]{firstnames}[inits]{von}{surname}}
+%D
+%D (bracketed stuff is optional)
+%D
+%D And not only that, but there also might be more than one of each of
+%D these commands. This is why a special command is needed to insert
+%D them, as well as one extra counter for each command.
+
+%D All of these \type{\@EA}'s and \type{\csnames} make this code
+%D look far more complex than it really is. For example, the argument
+%D \type{author} defines the macro \type{\bib at author} to do two
+%D things: increment the counter \type{\author at num} (let's say to 2)
+%D and next store it's arguments in the macro \type{\@@pb at author2}.
+%D And it defines \type{\insertauthors} to expand into
+%D \starttyping
+%D \specialbibinsert{author}{\author at num}{<before>}{<after>}{<not>}
+%D \stoptyping
+
+\def\docomplexbibdef#1%
+   {\def\currentype{#1}%
+    \dosingleempty\dodocomplexbibdef}
+
+\def\dodocomplexbibdef[#1]#2%
+   {\def\firstarg{#1}\def\secondarg{#2}%
+    \dosingleempty\dododocomplexbibdef}
+
+\def\dododocomplexbibdef[#1]#2#3%
+  {\@EA\increment\csname \currentype @num\endcsname
+      \setevalue{\??pb @\currentype\csname \currentype @num\endcsname}%
+        {{\secondarg}{#2}{#3}{#1}{\firstarg}}\ignorespaces}%
+
+% \def\complexbibdef#1%
+%   {\@EA\newcounter\csname #1 at num\endcsname
+%    \@EA\def\csname bib@#1\endcsname{\docomplexbibdef{#1}}%
+%    \@EA\def\csname insert#1s\endcsname##1##2##3%
+%      {\specialbibinsert{#1}{\csname #1 at num\endcsname}{##1}{\unskip ##2}{##3}}}
+
+\def\complexbibdef#1%
+  {\@EA\newcounter\csname #1 at num\endcsname
+   \@EA\def\csname bib@#1\endcsname{\docomplexbibdef{#1}}%
+   \expandafter \appendtoks
+     \expandafter\let\csname insert#1s\expandafter\endcsname\csname bibinsert#1s\endcsname
+   \to \initializebibdefinitions
+   \@EA\def\csname bibinsert#1s\endcsname##1##2##3{\specialbibinsert{#1}{\csname #1 at num\endcsname}{##1}{\unskip ##2}{##3}}}
+
+\processcommalist[author,artauthor,editor]\complexbibdef
+
+%D Another level of indirection is needed to control the
+%D typesetting of all of these arguments.
+
+%D Btw, there is a conflict between `author' and the predefined interface
+%D variable `auteur'. The old version is overruled `auteur' is
+%D overruled by the systemconstant definition at the top of this file!
+
+\newcount\etallimitcounter
+\newcount\etaldisplaycounter
+\newcount\todocounter
+
+\def\specialbibinsert#1#2#3#4#5%
+  {\bgroup
+   \ifnum#2>\zerocount
+     \etallimitcounter  =0\bibalternative{#1etallimit}\relax
+     \etaldisplaycounter=0\bibalternative{#1etaldisplay}\relax
+     \ifnum #2>\etallimitcounter
+       \todocounter\etaldisplaycounter
+       % just in case ...
+	   \ifnum\todocounter>\etallimitcounter
+         \todocounter\etallimitcounter
+       \fi
+     \else
+       \todocounter#2\relax
+     \fi
+     \ifnum\todocounter>\zerocount
+       % find the current author list
+       \let\templist\empty
+       \dorecurse{#2}
+          {\toks0=\@EA\@EA\@EA{\csname @@pb@#1\recurselevel\endcsname}%
+           \ifx\templist\empty    \edef\templist{\the\toks0}%
+           \else        \edef\templist{\templist,\the\toks0}\fi }%
+       \doifdefinedelse
+          {\??pv data#1\c!command}
+          {\doifemptyelsevalue
+             {\??pv data#1\c!command}
+             {#3\dospecialbibinsert{#1}{\todocounter}{\templist}#4}%
+             {#3\getvalue{\??pv data#1\c!command}{#1}{\todocounter}{\templist}#4}}%
+          {#3\dospecialbibinsert{#1}{\todocounter}{\templist}#4}%
+     \else
+       #5%
+     \fi
+   \else
+     #5%
+   \fi
+   \egroup}
+
+%D This macro does the hard work of inserting a list of people in the
+%D output, with proper regard of all the inbetween strings that can
+%D arise depending on length of the list of people.
+
+%D \#1 = type
+%D \#2 = number of items to be typeset
+%D \#3 = commacommand containing authors
+
+\def\dospecialbibinsert#1#2#3%
+    {\getcommacommandsize[#3]%
+     \scratchcounter 0
+     \def\processauthoritem##1%
+       {\advance\scratchcounter1
+       \ifnum \numexpr\scratchcounter-1\relax<#2\relax
+          \getvalue{\??pv data#1}##1%
+          \ifnum \scratchcounter=#2\relax
+             \ifnum\etallimitcounter<\commalistsize\relax \bibalternative{#1etaltext}\fi
+          \else \ifnum\numexpr\scratchcounter+1 = #2\relax
+             \ifnum \commalistsize > \plustwo  \bibalternative\c!finalnamesep
+             \else                            \bibalternative\c!lastnamesep \fi
+          \else
+              \bibalternative\c!namesep
+          \fi \fi
+        \fi}%
+     \processcommacommand[#3]\processauthoritem }
+
+%D \macros{invertedauthor,normalauthor,invertedshortauthor,normalshortauthor}
+%D
+%D Just some commands that can be used in \type{\setuppublicationparameters}
+%D If you want to write an extension to the styles, you might
+%D as well define some of these commands yourself.
+%D
+%D The argument list has been reordered here, and the meanings are:
+%D
+%D {\obeylines\parskip0pt
+%D \type{#1} firstnames
+%D \type{#2} von
+%D \type{#3} surname
+%D \type{#4} inits
+%D \type{#5} junior
+%D }
+%D
+
+\def\normalauthor#1#2#3#4#5%
+  {\bibdoif{#1}{#1\bibalternative\c!firstnamesep}%
+   \bibdoif{#2}{#2\bibalternative\c!vonsep}%
+   #3%
+   \bibdoif{#5}{\bibalternative\c!surnamesep#5\unskip}}
+
+\def\normalshortauthor#1#2#3#4#5%
+  {\bibdoif{#4}{#4\bibalternative\c!firstnamesep}%
+   \bibdoif{#2}{#2\bibalternative\c!vonsep}%
+   #3%
+   \bibdoif{#5}{\bibalternative\c!surnamesep#5\unskip}}
+
+\def\invertedauthor#1#2#3#4#5%
+  {\bibdoif{#2}{#2\bibalternative\c!vonsep}%
+   #3%
+   \bibdoif{#5}{\bibalternative\c!juniorsep #5}%
+   \bibdoif{#1}{\bibalternative\c!surnamesep #1\unskip}}
+
+\def\invertedshortauthor#1#2#3#4#5%
+  {\bibdoif{#2}{#2\bibalternative\c!vonsep}%
+   #3%
+   \bibdoif{#5}{\bibalternative\c!juniorsep #5}%
+   \bibdoif{#4}{\bibalternative\c!surnamesep #4\unskip}}
+
+%D \macros{clearbibitem,clearbibitemtwo,bibitemdefs}
+%D
+%D These are used in \type{\typesetapublication} to do
+%D initializations and cleanups.
+
+\def\clearbibitem#1{\setvalue{\??pb @#1}{}}%
+
+\def\clearbibitemtwo#1%
+  {\letvalue{#1 at num}\!!zerocount
+   \scratchcounter\plusone
+   \doloop
+     {\doifdefinedelse{\??pb @#1\the\scratchcounter}
+        {\letvalue{\??pb @#1\the\scratchcounter}\empty
+         \advance\scratchcounter\plusone}%
+        {\exitloop}}}
+
+\def\bibitemdefs#1%
+   {\@EA\let\@EA\tempa \csname bib@#1\endcsname
+    \@EA\let\csname #1\endcsname \tempa }
+
+%D \macros{startpublication}
+%D
+%D We are coming to the end of this module, to the macros that
+%D do typesetting and read the \type{bbl} file.
+
+\newcounter\bibcounter
+
+%D Just a \type{\dosingleempty} is the most friendly
+%D of doing this: there need not even be an argument
+%D to \type{\startpublication}. Of course, then there
+%D is no key either, and it had better be an
+%D article (otherwise the layout will be all screwed up).
+%D
+%D Now prohibits comments, so % can be used for urls
+
+\def\startpublication
+  {\edef\bibmodsavedpercent{\the\catcode`\%}%
+   \catcode`\%=12
+   \dosingleempty\dostartpublication}
+
+\def\stoppublication
+  {} % the \catcode of % is reset below
+
+%D Only specifying the key in the argument is also
+%D legal. In storing this stuff into macros, some trickery with
+%D token registers is needed to fix the expansion problems. Even so,
+%D this appears to not always be 100\% safe, so people are
+%D urgently advised to use \ETEX\ instead of traditional \TEX.
+%D
+%D In \ETEX, all expansion problems are conviniently solved by
+%D the primitive \type{\protected}. To put that another way:
+%D
+%D It's not a bug in this module if it does not appear in \ETEX!
+
+\long\def\dostartpublication[#1]#2\stoppublication%
+  {\increment\bibcounter
+   \bgroup
+   \doifassignmentelse{#1}%
+     {\getparameters[\??pb][k=,t=article,n=,s=,a=,y=,o=,u=,#1]}%
+     {\getparameters[\??pb][k=#1,t=article,n=,s=,a=,y=,o=,u=]}%
+   \@EA\toks\@EA2\@EA{\@@pba}%
+   \@EA\toks\@EA4\@EA{\@@pbs}%
+   \toks0={\ignorespaces #2}%
+   \setxvalue{pbdk-\@@pbk}{\@@pbk}
+   \setxvalue{pbda-\@@pbk}{\the\toks2}
+   \setxvalue{pbdy-\@@pbk}{\@@pby}
+   \setxvalue{pbds-\@@pbk}{\the\toks4}
+   \setxvalue{pbdn-\@@pbk}{\@@pbn}
+   \setxvalue{pbdt-\@@pbk}{\@@pbt}
+   \setxvalue{pbdo-\@@pbk}{\@@pbo}
+   \setxvalue{pbdu-\@@pbk}{\@@pbu}
+   \setxvalue{pbdd-\@@pbk}{\the\toks0}
+   \xdef\allrefs{\allrefs,\@@pbk}%
+   \egroup
+   \catcode`\%=\bibmodsavedpercent\relax }
+
+% intialization of the order-list:
+
+\let\allrefs\empty
+
+%D The next macro is needed because the number command of the
+%D publist sometimes needs to fetch something from the current
+%D item (like the 'short' key). For this, the ID of the current
+%D item is passed in the implict parameter \type{\@@pbk}
+
+\def\makepbkvalue#1{\def\@@pbk{#1}}
+
+\newif\ifinpublist
+
+% from Hans
+
+\def\ignoresectionconversion
+  {\let\@@sectionconversion\secondoftwoarguments}
+
+\let\normaldosetfilterlevel\dosetfilterlevel
+
+\def\patcheddosetfilterlevel#1#2% beware: this one is \let
+  {\bgroup
+   \ignoresectionconversion
+   \edef\askedlevel{#1}%
+   \edef\askedfilter{#2}%
+%   \message{ASKD: \meaning\askedlevel}%
+%   \message{PREV: \meaning\v!previous}%
+   \ifx\askedlevel\v!current
+     \dosetcurrentlevel\askedlevel
+   \else\ifx\askedlevel\v!previous
+     \dosetpreviouslevel\askedlevel
+   \else\ifx\askedlevel\v!all
+     \global\chardef\alltoclevels\plusone
+   \else\ifx\askedlevel\v!text
+     \global\chardef\alltoclevels\plusone
+   \else
+     \edef\byaskedlevel{\csname\??by\askedlevel\endcsname}%
+     \ifx\byaskedlevel\v!text
+       \dosettextlevel\askedlevel
+     \else
+       \dosetotherlevel\askedlevel
+     \fi
+   \fi\fi\fi\fi
+   % experiment
+   \ifx\askedfilter\empty \else
+     \xdef\currentlevel{\currentlevel\sectionseparator\askedfilter}%
+   \fi
+   \egroup}
+
+\def\filllocalpublist%
+  {\doifdefinedelse{\alltoclevels}
+    {\let\dosetfilterlevel\patcheddosetfilterlevel
+     \dosettoclevel\??li{pubs}%
+     \let\dosetfilterlevel\normaldosetfilterlevel }%
+    {\dosettoclevel\??li{pubs}}%
+   \global\let\glocalpublist\empty
+   \doloop
+     {\doifdefinedelse
+        {\r!cross cite-\jobname-\recurselevel}
+        {\doifreferencefoundelse
+           {cite-\jobname-\recurselevel}
+           {\@EA\doifreglevelelse\@EA[\currentlocationreference]
+              {\@EA\doglobal\@EA\addtocommalist\@EA
+                {\currenttextreference}\glocalpublist}{}}
+           {}}%
+        {\exitloop}}%
+    \let\localpublist\glocalpublist}
+
+\def\typesetpubslist
+  {\dobeginoflist
+%    \the\initializebibdefinitions
+   \edef\askedlevel{\csname \??li pubs\c!criterium\endcsname}%
+   \ifx\askedlevel\v!all
+      \def\bibrefprefix{}%
+   \else %
+      \preparebibrefprefix
+   \fi
+   \ifsortbycite
+     \filllocalpublist
+     \iftypesetall
+       \let\localallrefs\allrefs
+        \processcommacommand[\localpublist]\typesetapublication
+        \def\removefromallrefs##1%
+           {\removefromcommalist{##1}\localallrefs }%
+        \processcommacommand[\localpublist]\removefromallrefs
+        \processcommacommand[\localallrefs]\typesetapublication
+      \else
+        \processcommacommand[\localpublist]\typesetapublication
+     \fi
+   \else
+     \iftypesetall
+       \processcommacommand[\allrefs]\typesetapublication
+     \else
+       %
+       \filllocalpublist
+       \processcommacommand[\allrefs]\maybetypesetapublication
+     \fi
+   \fi
+   \doendoflist}
+
+\newif\ifinpublist
+
+\def\maybetypesetapublication#1%
+  {\global\inpublistfalse
+   \def\test{#1}%
+   \def\runtest##1%
+      {\def\tempa{##1}\ifx \test\tempa \global\inpublisttrue \fi}%
+   \processcommacommand[\localpublist]\runtest
+   \ifinpublist \typesetapublication{#1}\fi}
+
+\def\initializepubslist
+  {\edef\@@pbnumbering{\@@pbnumbering}%
+   \ifautohang
+     \ifx\@@pbnumbering\v!short
+       \setbox\scratchbox\hbox{\@@pbnumbercommand{\getvalue{\??li pubs\c!samplesize}}}%
+     \else\iftypesetall
+       \setbox\scratchbox\hbox{\@@pbnumbercommand{\getvalue{\??li pubs\c!totalnumber}}}%
+     \else
+       \setbox\scratchbox\hbox{\@@pbnumbercommand{\numreferred}}%
+     \fi\fi
+     \edef\samplewidth{\the\wd\scratchbox}%
+     \setuplist[pubs][\c!width=\samplewidth,\c!distance=0pt]%
+     \ifx\@@pbnumbering\v!short
+       \def\@@pblimitednumber##1{\hbox to \samplewidth
+           {\@@pbnumbercommand{\getvalue{pbds-\@@pbk}}}}%
+     \else \ifx \@@pbnumbering\v!bib
+       \def\@@pblimitednumber##1{\hbox to \samplewidth
+           {\@@pbnumbercommand{\getvalue{pbdn-\@@pbk}}}}%
+     \else
+       \def\@@pblimitednumber##1{\hbox to \samplewidth{\@@pbnumbercommand{##1}}}%
+     \fi \fi
+   \else
+     \ifx\@@pbnumbering\v!short
+     \doifemptyelse
+        {\getvalue{\??li pubs\c!width}}
+        {\def\@@pblimitednumber##1{\hbox
+            {\@@pbnumbercommand{\getvalue{pbds-\@@pbk}}}}}%
+        {\def\@@pblimitednumber##1{\hbox to \getvalue{\??li pubs\c!width}%
+            {\@@pbnumbercommand{\getvalue{pbds-\@@pbk}}}}}%
+     \else \ifx \@@pbnumbering\v!bib
+        \doifemptyelse
+          {\getvalue{\??li pubs\c!width}}
+          {\def\@@pblimitednumber##1{\hbox
+            {\@@pbnumbercommand{\getvalue{pbdn-\@@pbk}}}}}%
+          {\def\@@pblimitednumber##1{\hbox to \getvalue{\??li pubs\c!width}%
+            {\@@pbnumbercommand{\getvalue{pbdn-\@@pbk}}}}}%
+       \else
+       \doifemptyelse
+          {\getvalue{\??li pubs\c!width}}
+          {\def\@@pblimitednumber##1{\hbox{\@@pbnumbercommand{##1}}}}%
+          {\def\@@pblimitednumber##1{\hbox to \getvalue{\??li pubs\c!width}{\@@pbnumbercommand{##1}}}}%
+        \fi
+     \fi
+   \fi
+   \ifx\@@pbnumbering\v!no
+     \setuplist[pubs][\c!numbercommand=,\c!symbol=\v!none,\c!textcommand=\outdented]%
+   \else
+     \setuplist[pubs][\c!numbercommand=\@@pblimitednumber]%
+   \fi
+   \doifelsevalue
+      {\??pv data\c!maybeyear}{\v!off}{\def\maybeyear##1{}}{\def\maybeyear##1{##1}}%
+   \forgetall} % bugfix 2005/03/18
+
+\def\outdented#1% move to supp-box ?
+  {\hskip -\hangindent #1}
+
+%D The full list of publications
+
+\def\completepublications
+  {\dosingleempty\docompletepublications}
+
+\def\bibdogetupsometextprefix#1#2#3%
+  {\ifcsname#2#1#3\endcsname
+     \csname#2#1#3\endcsname
+   \else\ifcsname\??la#1\c!default\endcsname
+     \@EA\ifx\csname\??la#1\c!default\endcsname\empty
+       \ifcsname#2#3\endcsname
+         \csname#2#3\endcsname
+       \else\ifcsname#2\s!en#3\endcsname
+         \csname#2\s!en#3\endcsname
+       \fi\fi
+     \else
+       \expandafter\bibdogetupsometextprefix
+          \csname\??la#1\c!default\endcsname{#2}{#3}%
+     \fi
+   \else
+     \ifcsname#2#3\endcsname
+       \csname#2#3\endcsname
+     \else\ifcsname#2\s!en#3\endcsname
+       \csname#2\s!en#3\endcsname
+     \fi\fi
+   \fi\fi}
+
+\def\docompletepublications[#1]%
+  {\begingroup
+   \setuplist[pubs][\c!criterium=\v!previous,#1]
+   \begingroup
+   \let\handletextprefix\firstoftwoarguments
+   \edef\headtextpubs{\bibdogetupsometextprefix\headlanguage\c!title{pubs}}%
+   \doifdefinedelse
+      {\??pv data\v!title}
+      {\doifemptyelsevalue
+          {\??pv data\v!title}
+          {\expanded{\systemsuppliedtitle[pubs]{\headtextpubs}}}%
+          {\expanded{\getvalue{\??pv data\v!title}{\headtextpubs}}}%
+       }%
+      {\expanded{\systemsuppliedtitle[pubs]{\headtextpubs}}}%
+   \endgroup
+   \dodoplacepublications   }
+
+%D And the portion with the entries only.
+
+\def\placepublications
+  {\dosingleempty\doplacepublications}
+
+\def\doplacepublications[#1]%
+  {%\getparameters[\??pv data][#1]
+   \begingroup
+   \setuplist[pubs][\c!criterium=\v!previous,#1]%
+   \dodoplacepublications }%
+
+\def\dodoplacepublications%
+  {\initializepubslist
+   \doifelsevalue
+      {\??li pubs\c!option}{\v!continue}%
+      {}%
+      {\global\let\bibcounter\!!zerocount }%
+   \inpublisttrue
+   \typesetpubslist
+   \inpublistfalse
+   \endgroup}
+
+%D \subsubject{What's in a publication}
+
+\unexpanded\def\typesetapublication#1%
+  {\doifsomething{#1}
+     {\doglobal\increment\bibcounter
+      \bgroup
+      \the\initializebibdefinitions
+      \makepbkvalue{#1}%
+      \ifgridsnapping
+       \snaptogrid\vbox{\dodolistelement{pubs}{}{\bibcounter}%
+         {\expanded{\reference[\bibrefprefix#1]{\bibcounter}}%
+          \strut \dotypesetapublication{#1}\strut }{}{}}%
+     \else
+       \dodolistelement{pubs}{}{\bibcounter}%
+         {\expanded{\reference[\bibrefprefix#1]{\bibcounter}}%
+         \strut \dotypesetapublication{#1}\strut }{}{}%
+     \fi
+     \egroup}}
+
+\def\dotypesetapublication#1%
+  {\bgroup
+   \def\@@currentalternative{data}%
+   \processcommacommand[\bibcommandlist,crossref]\clearbibitem
+   \processcommalist   [artauthor,author,editor]\clearbibitemtwo
+   \processcommacommand[\bibcommandlist]\bibitemdefs
+   \processcommalist   [artauthor,author,editor,crossref]\bibitemdefs
+   \let\biblanguage\empty
+   \getvalue{pbdd-#1}%
+   \ifcsname pbdt-#1\endcsname \bibalternative{\getvalue{pbdt-#1}}\fi
+   \egroup }
+
+%D An afterthought:
+
+\def\maybeyear#1{}
+
+%D An another:
+
+\def\noopsort#1{}
+
+%D This is the result of bibtex's `language' field.
+
+\def\setbiblanguage#1#2{\setvalue{\??pb @lang@#1}{#2}}
+
+\def\lang#1%
+   {\def\biblanguage{#1}%
+    \ifcsname \??pb @lang@#1\endcsname
+        \expanded{\language[\getvalue{\??pb @lang@#1}]}%
+     \fi \ignorespaces}
+
+%D \subject{Citations}
+%D
+%D \macros{cite,bibref}
+%D
+%D The indirection with \type{\dobibref} allows \LATEX\ style
+%D \type{\cite} commands with a braced argument (these might appear
+%D in included data from the \type{.bib} file).
+
+% \unexpanded\def\cite
+%   {\doifnextcharelse{[}
+%      {\dodocite}
+%      {\dobibref}}
+% \def\dobibref#1%
+%   {\docite[#1][]}
+% \def\dodocite[#1]%
+%   {\startstrictinspectnextcharacter
+%    \dodoubleempty\dododocite[#1]}
+% \def\dododocite[#1][#2]{%
+%    \stopstrictinspectnextcharacter
+%    \docite[#1][#2]}
+
+\unexpanded\def\cite
+  {\strictdoifnextoptionalelse\dodocite\dobibref}
+
+\def\dobibref#1%
+  {\docite[#1][]}
+
+\def\dodocite[#1]%
+  {\strictdoifnextoptionalelse{\docite[#1]}{\docite[#1][]}}
+
+\def\docite[#1][#2]%
+  {\begingroup
+   \setupinteraction[\c!style=]%
+   \edef\temp{#2}%
+   \ifx\empty\temp   \secondargumentfalse
+   \else             \secondargumenttrue   \fi
+   \ifsecondargument
+     \processcommalist[#2]\docitation
+     \doifassignmentelse
+       {#1}%
+       {\getparameters[LO][\c!alternative=,\c!extras=,#1]%
+        \edef\@@currentalternative{\LOalternative}%
+	    \ifx\@@currentalternative\empty
+          \edef\@@currentalternative{\@@citedefault}%
+        \fi
+	    \ifx\LOextras\empty
+          \setupcite[\@@currentalternative][#1]%
+        \else
+	      \expandafter\ifx\csname LOright\endcsname \relax
+              \edef\LOextras{{\LOextras\bibalternative\c!right}}%
+          \else
+              \edef\LOextras{{\LOextras\LOright}}%
+          \fi
+          \expanded{\setupcite[\@@currentalternative][#1,\c!right=\LOextras]}%
+        \fi
+       }%
+       {\def\@@currentalternative{#1}}%
+      \expanded{%
+         \processaction[\csname @@pv\@@currentalternative \c!compress\endcsname]}
+             [    \v!yes=>\bibcitecompresstrue,
+                   \v!no=>\bibcitecompressfalse,
+              \s!default=>\bibcitecompresstrue,
+              \s!unknown=>\bibcitecompresstrue]%
+      \getvalue{bib\@@currentalternative ref}[#2]%
+   \else
+     \processcommalist[#1]\docitation
+     \expanded{\processaction[\csname @@pv\@@citedefault \c!compress\endcsname]}
+       [    \v!yes=>\bibcitecompresstrue,
+             \v!no=>\bibcitecompressfalse,
+        \s!default=>\bibcitecompresstrue,
+        \s!unknown=>\bibcitecompresstrue]%
+     \edef\@@currentalternative{\@@citedefault}%
+     \getvalue{bib\@@citedefault ref}[#1]%
+   \fi
+   \endgroup}
+
+%D \macros{nocite}
+
+\def\nocite[#1]%
+  {\processcommalist[#1]\addthisref
+   \processcommalist[#1]\docitation }
+
+%D \macros{setupcite}
+
+\def\setupcite{\dodoubleempty\dosetupcite}
+
+\def\dosetupcite[#1][#2]%
+  {\ifsecondargument
+     \def\dodosetupcite##1{\getparameters[\??pv##1][#2]}%
+     \processcommalist[#1]\dodosetupcite
+   \else % default case
+     \getparameters[\??pv\@@citedefault][#1]%
+   \fi }
+
+%D Low-level stuff
+
+\def\getcitedata#1[#2]#3[#4]#5to#6%
+  {\bgroup
+   \addthisref{#4}%
+   \dofetchapublication{#4}%
+   \doifdefinedelse{@@pb at bib#2}%
+     {\xdef#6{\getvalue{@@pb at bib#2}}}%
+     {\xdef#6{\getvalue{@@pb@#2}}}%
+   \egroup}
+
+\def\dofetchapublication#1%
+  {\makepbkvalue{#1}%
+   \processcommacommand[\bibcommandlist,crossref]\clearbibitem
+   \processcommalist   [artauthor,author,editor]\clearbibitemtwo
+   \processcommacommand[\bibcommandlist]\bibitemdefs
+   \processcommalist   [artauthor,author,editor,crossref]\bibitemdefs
+   \getvalue{pbdd-#1}}
+
+%D This new version writes a reference out to the tui file for every
+%D \type{\cite}. This will allow backlinking.
+%D
+%D Some special care is needed so that references are not added from
+%D weird locations like in the TOC or within a \type{\setbox} command.
+
+\newcounter\citationnumber
+
+\def\docitation#1{%
+  \iftrialtypesetting \else
+    \ifdoinpututilities\else
+      \doglobal\increment\citationnumber
+      \expanded{\rawreference{}{cite-\jobname-\citationnumber}{#1}}%
+  \fi \fi }
+
+%D \macros{numreferred,doifreferredelse,addthisref,publist}
+%D
+%D The interesting command here is \type{\addthisref}, which maintains
+%D the global list of references.
+%D
+%D \type{\numreferred} is needed to do automatic calculations on
+%D the label width, and \type{\doifreferredelse} will be used
+%D to implement \type{criterium=cite}.
+
+\newcounter\numreferred
+
+\long\def\doifreferredelse#1{\doifdefinedelse{pbr-#1}}
+
+\def\addthisref#1%
+  {\doifundefinedelse{pbr-#1}
+     {\setxvalue{pbr-#1}{\citationnumber}%
+      \doglobal\increment\numreferred
+      \ifx\publist\empty \gdef\publist{#1}\else\appended\gdef\publist{,#1}\fi}
+     {\setxvalue{pbr-#1}{\getvalue{pbr-#1},\citationnumber}}}
+
+\let\publist\empty
+
+%D \macros{doifbibreferencefoundelse}
+%D
+%D Some macros to fetch the information provided by
+%D \type{\startpublication}.
+
+\def\doifbibreferencefoundelse#1%
+  {\preloadbiblist
+   \doifdefinedelse{pbdk-#1}
+     {\firstoftwoarguments}
+     {\showmessage\m!publications{5}{#1 is unknown}%
+      \secondoftwoarguments}}
+
+%D \macros{ixbibauthoryear,thebibauthors,thebibyears}
+%D
+%D If compression of \type{\cite}'s argument expansion is on,
+%D the macros that deal with authors and years call this internal
+%D command to do the actual typesetting.
+%D
+%D Two entries with same author but with different years may
+%D be condensed into ``Author (year1,year2)''. This is about the
+%D only optimization that makes sense for the (author,year)
+%D style of citations (years within one author have to be unique
+%D anyway so no need to test for that, and ``Author1, Author2 (year)''
+%D creates more confusion than it does good).
+%D
+%D In the code below,
+%D the macro \type{\thebibauthors} holds the names of the alternative
+%D author info fields for the current list. This is a commalist,
+%D and \type{\thebibyears} holds the (collection of) year(s) that go with
+%D this author (possibly as a nested commalist).
+%D
+%D There had better be an author for all cases, but there
+%D does not have to be year info always. \type{\thebibyears} is
+%D pre-initialized because this makes the insertion macros simpler.
+%D
+%D In `normal' \TeX, of course there are expansion problems again.
+
+\def\ixbibauthoryear#1#2#3#4%
+  {\bgroup
+   \gdef\ixlastcommand  {#4}%
+   \gdef\ixsecondcommand{#3}%
+   \gdef\ixfirstcommand {#2}%
+   \glet\thebibauthors  \empty
+   \glet\thebibyears    \empty
+   \getcommalistsize[#1]%
+   \ifbibcitecompress
+     \dorecurse\commalistsize{\xdef\thebibyears{\thebibyears,}}%
+     \processcommalist[#1]\docompressbibauthoryear
+   \else
+     \processcommalist[#1]\donormalbibauthoryear
+   \fi
+   \egroup
+   \dobibauthoryear}
+
+%D \macros{dodobibauthoryear}
+%D
+%D This macro only has to make sure that the lists
+%D \type{\thebibauthors} and \type{\thebibyears} are printed.
+
+\def\dobibauthoryear
+  {\scratchcounter\zerocount
+   \getcommacommandsize[\thebibauthors]%
+   \edef\authorcount{\commalistsize}%
+   \@EA\processcommalist\@EA[\thebibauthors]\dodobibauthoryear}
+
+\def\dodobibauthoryear#1%
+  {\advance\scratchcounter\plusone
+   \edef\wantednumber{\the\scratchcounter}%
+   \getfromcommacommand[\thebibyears][\wantednumber]%
+   \@EA\def\@EA\currentbibyear\@EA{\commalistelement}%
+   \setcurrentbibauthor{#1}%
+   \ifnum\scratchcounter=\plusone
+     \ixfirstcommand
+   \else\ifnum \scratchcounter=\authorcount\relax
+     \ixlastcommand
+   \else
+     \ixsecondcommand
+   \fi\fi}
+
+\def\setcurrentbibauthor#1%
+ {\getcommacommandsize[#1]%
+  \ifcase\commalistsize
+   % anonymous?
+   \def\currentbibauthor{}%
+  \or
+   \def\currentbibauthor{#1}%
+  \or
+   \expanded{\docurrentbibauthor#1}%
+  \else
+   \handlemultiplebibauthors{\commalistsize}{#1}%
+  \fi }
+
+\newcount\citescratchcounter
+
+\def\handlemultiplebibauthors#1#2%
+  {\citescratchcounter 0
+   \def\currentbibauthor{}%
+   \def\bibprocessauthoritem##1%
+       {\advance\citescratchcounter1
+        \ifnum \citescratchcounter=#1\relax
+           \edef\currentbibauthor{\currentbibauthor##1}%
+        \else \ifnum\numexpr\citescratchcounter+1 = #1\relax
+             \edef\currentbibauthor{\currentbibauthor ##1\bibalternative{andtext}}%
+          \else
+             \edef\currentbibauthor{\currentbibauthor ##1\bibalternative{namesep}}%
+          \fi
+        \fi }%
+     \processcommalist[#2]\bibprocessauthoritem }
+
+\setupcite
+       [author,authoryear,authoryears]
+       [\c!namesep={, }]
+
+%D This discovery of authoretallimit is not the best one,
+%D but it will do for now.
+
+\def\docurrentbibauthor#1,#2%
+  {\doifemptyelse{#2}
+      {\def\currentbibauthor{#1\bibalternative{otherstext}}}
+      {\@EA
+       \ifx\csname \??pv\@@currentalternative authoretallimit\endcsname\relax
+          \edef\currentbibauthor{#1\bibalternative{andtext}#2}%
+       \else
+          \edef\currentbibauthor{#1%
+            \ifcase0\bibalternative{authoretallimit}\relax\or
+            \bibalternative{otherstext}\else\bibalternative{andtext}#2\fi}%
+       \fi}}
+
+%D This is not the one Hans made for me, because I need a global
+%D edef, and the \type{\robustdoifinsetelse} doesn't listen to
+%D \type{\doglobal }
+
+\def\robustaddtocommalist#1#2% {item} \cs
+  {\robustdoifinsetelse{#1}#2\resetglobal
+     {\dodoglobal\xdef#2{\ifx#2\empty\else#2,\fi#1}}}
+
+%D \macros{donormalbibauthoryear}
+%D
+%D Now we get to the macros that fill the two lists.
+%D The `simple' one really is quite simple.
+
+\def\donormalbibauthoryear#1%
+  {\addthisref{#1}%
+   \def\myauthor{Xxxxxxxxxx}%
+   \def\myyear{0000}%
+   \doifbibreferencefoundelse{#1}
+     {\def\myauthor{{\getvalue{pbda-#1}}}%
+      \def\myyear  {\getvalue{pbdy-#1}}}%
+     {}%
+   \@EA\doglobal\@EA\appendtocommalist\@EA{\myauthor}\thebibauthors
+   \@EA\doglobal\@EA\appendtocommalist\@EA{\myyear  }\thebibyears}
+
+%D \macros{docompressbibauthoryear}
+%D
+%D So much for the easy parts. Nothing at all will be done if
+%D the reference is not found or the reference does not contain
+%D author data. No questions marks o.s.s. (to be fixed later)
+
+\def\docompressbibauthoryear#1%
+  {\addthisref{#1}%
+   \def\myauthor{Xxxxxxxxxx}%
+   \def\myyear  {0000}%
+   \doifbibreferencefoundelse{#1}
+     {\xdef\myauthor{\csname pbda-#1\endcsname }%
+      \xdef\myyear  {\csname pbdy-#1\endcsname }}
+     {}%
+    \ifx\myauthor\empty\else
+      \checkifmyauthoralreadyexists
+      \findmatchingyear
+    \fi}
+
+%D two temporary counters. One of these two can possibly be replaced
+%D by \type{\scratchcounter}.
+
+\newcount\bibitemcounter
+\newcount\bibitemwanted
+
+%D The first portion is simple enough: if this is the very first author
+%D it is quite straightforward to add it. \type{\bibitemcounter} and
+%D \type{\bibitemwanted} are needed later to insert the year
+%D information in the correct item of \type{\thebibyears}
+
+\def\checkifmyauthoralreadyexists
+  {\doifemptyelsevalue{thebibauthors}
+     {\global\bibitemwanted  \plusone
+      \global\bibitemcounter \plusone
+      \xdef\thebibauthors{{\myauthor}}}
+     {% the next weirdness is because according to \getcommalistsize,
+      % the length of \type{[{{},{}}]} is 2.
+      \@EA\getcommalistsize\@EA[\thebibauthors,]%
+      \global\bibitemcounter\commalistsize
+      \global\advance\bibitemcounter\minusone
+      \global\bibitemwanted \zerocount
+      \processcommacommand[\thebibauthors]\docomparemyauthor}}
+
+%D The outer \type{\ifnum} accomplishes the addition of
+%D a new author to \type{\thebibauthors}. The messing about with
+%D the two counters is again to make sure that \type{\thebibyears}
+%D will be updated correctly.If the author {\it was} found,
+%D the counters will stay at their present values and everything
+%D will be setup properly to insert the year info.
+
+\def\docomparemyauthor#1%
+  {\global\advance\bibitemwanted \plusone
+   \def\mytempc{#1}%
+%   \message{authors: \myauthor <=>\mytempc \ifx\mytempc\myauthor :Y \else :N
+%          \meaning \myauthor, \meaning\mytempc\fi (\the\bibitemwanted = \the\bibitemcounter)}%
+   \ifx\mytempc\myauthor
+     \quitcommalist
+   \else
+     \ifnum\bibitemwanted = \bibitemcounter\relax
+       \global\advance\bibitemwanted \plusone
+       \global\bibitemcounter\bibitemwanted\relax
+       \@EA\doglobal\@EA\robustaddtocommalist\@EA{{\myauthor}}\thebibauthors
+     \fi
+   \fi}
+
+%D This macro should be clear now.
+
+\def\findmatchingyear
+  {\edef\wantednumber{\the\bibitemwanted}%
+   \getfromcommacommand[\thebibyears][\wantednumber]%
+   \ifx\commalistelement\empty
+     \edef\myyear{{\myyear}}%
+   \else
+     \edef\myyear{{\commalistelement, \myyear}}%
+   \fi
+   \edef\newcommalistelement{\myyear}%
+   \doglobal\replaceincommalist \thebibyears \wantednumber}
+
+%D \macros{preparebibrefprefix}
+%D
+%D The reference list only writes bare references when the criterium
+%D is `all'. Otherwise, a prefix is added to make sure that pdfTeX
+%D does not encounter duplicate named references. On the generation
+%D side, this is not a big problem. \type{\preparebibrefprefix}
+%D creates a suitable string to prepend if a prefix is needed.
+%D
+%D Because this macro is used within \type{\cite } that itself
+%D can be used within lists like the table of contents, it needs
+%D to save and restore \type{\savedalltoclevels} and
+%D \type{\currentlevel} (\type{\dosetfilterlevel} needs to change
+%D their values globally).
+
+\def\preparebibrefprefix
+   {\chardef\savedalltoclevels \alltoclevels
+	\let\savedcurrentlevel\currentlevel
+    \let\dosetfilterlevel\patcheddosetfilterlevel
+    \dosettoclevel\??li{pubs}%
+    \edef\bibrefprefix{\@@sectiontype\currentlevel\sectionseparator}%
+    \let\dosetfilterlevel\normaldosetfilterlevel
+	\global\let\currentlevel\savedcurrentlevel
+    \global\chardef\alltoclevels \savedalltoclevels  }
+
+%D \macros{preparebibreflist}
+%D
+%D But this optional prefixing is a bit of a problem on the
+%D other side. We would like to do \type{\goto{}[article-full]}
+%D but can't do it like that, because the actual label may be
+%D \type{1:2:0:3:4:article-full]} or so. The problem is solved
+%D by building a commalist that looks like this:
+%D \starttyping
+%D \def\bibreflist%
+%D    {1:2:0:3:4:article-full,
+%D     1:2:0:3:article-full,
+%D     1:2:0:article-full,
+%D     1:2:article-full,
+%D     1:article-full,
+%D     article-full}
+%D \stoptyping
+
+\def\preparebibreflist#1%
+   {\let\bibreflist\empty
+    \def\storeitem##1%
+      {\ifx\bibreflist\empty
+         \edef\prefix{##1\sectionseparator}%
+         \edef\bibreflist{\prefix#1,#1}%
+      \else
+         \edef\prefix{\prefix##1\sectionseparator}%
+         \edef\bibreflist{\prefix#1,\bibreflist}%
+      \fi}%
+	\expanded{\processseparatedlist[\bibrefprefix][\sectionseparator]}\storeitem }
+
+%D \macros{gotobiblink,inbiblink,atbiblink}
+%D
+%D The final task is looping over that list until a match is found.
+
+\newif\ifbibreffound
+
+\def\gotobiblink#1[#2]%
+   {\bgroup
+    \preparebibrefprefix
+    \preparebibreflist{#2}%
+    \global\bibreffoundfalse
+    \def\setuplink##1%
+          {\ifbibreffound\else
+           \doifreferencefoundelse
+               {##1}
+               {\global\bibreffoundtrue \goto{#1}[##1]}%
+               {}\fi}%
+    \processcommacommand[\bibreflist]\setuplink
+    \ifbibreffound \else \unknownreference{#2}\fi
+    \egroup }
+
+\def\atbiblink[#1]%
+   {\bgroup
+    \preparebibrefprefix
+    \preparebibreflist{#1}%
+    \global\bibreffoundfalse
+    \def\setuplink##1%
+          {\ifbibreffound\else
+           \doifreferencefoundelse
+               {##1}
+               {\global\bibreffoundtrue \at[##1]}%
+               {}\fi}%
+    \processcommacommand[\bibreflist]\setuplink
+    \ifbibreffound \else \unknownreference{#1}\fi
+    \egroup }
+
+\def\inbiblink[#1]%
+   {\bgroup
+    \preparebibrefprefix
+    \preparebibreflist{#1}%
+    \global\bibreffoundfalse
+    \def\setuplink##1%
+          {\ifbibreffound\else
+           \doifreferencefoundelse
+               {##1}
+               {\global\bibreffoundtrue \in[##1]}%
+               {}\fi}%
+    \processcommacommand[\bibreflist]\setuplink
+    \ifbibreffound \else \unknownreference{#1}\fi
+    \egroup }
+
+%D \macros{bibauthoryearref,bibauthoryearsref,bibauthorref,bibyearref}
+%D
+%D Now that all the hard work has been done, these are simple.
+%D \type{\ixbibauthoryearref} stores the data in the macros
+%D \type{\currentbibauthor} and \type{\currentbibyear}.
+
+\def\ifbibinteractionelse%
+  {\iflocation
+      \edef\test{\bibalternative\c!interaction}%
+      \ifx\test\v!stop
+        \@EA\@EA\@EA\secondoftwoarguments
+      \else
+       \@EA\@EA\@EA\firstoftwoarguments
+      \fi
+    \else
+       \@EA\secondoftwoarguments
+    \fi
+     }
+
+\def\bibmaybeinteractive#1#2%
+  {\ifbibcitecompress #2\else
+   \ifbibinteractionelse{\gotobiblink{#2}[#1]}{#2}\fi }
+
+\def\bibauthoryearref[#1]%
+ {\ixbibauthoryear{#1}%
+   {\bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween
+      \bibalternative\v!left{\currentbibyear}\bibalternative\v!right}}
+   {\bibalternative\c!pubsep
+    \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween
+      \bibalternative\v!left  {\currentbibyear}\bibalternative\v!right}}
+   {\bibalternative\c!lastpubsep
+    \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween
+      \bibalternative\v!left {\currentbibyear}\bibalternative\v!right}}}
+
+\def\bibauthoryearsref[#1]%
+  {\bibalternative\v!left
+   \ixbibauthoryear{#1}
+     {\bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}}
+     {\bibalternative\c!pubsep
+      \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}}
+     {\bibalternative\c!lastpubsep
+      \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}}%
+   \bibalternative\v!right}
+
+\def\bibauthorref[#1]%
+  {\bibalternative\v!left
+   \ixbibauthoryear{#1}%
+    {\bibmaybeinteractive{#1}{{\currentbibauthor}}}
+    {\bibalternative\c!pubsep    \bibmaybeinteractive{#1}{{\currentbibauthor}}}
+    {\bibalternative\c!lastpubsep\bibmaybeinteractive{#1}{{\currentbibauthor}}}%
+   \bibalternative\v!right}
+
+\def\bibyearref[#1]%
+  {\bibalternative\v!left
+   \ixbibauthoryear{#1}%
+      {\bibmaybeinteractive{#1}{{\currentbibyear}}}
+      {\bibalternative\c!pubsep    \bibmaybeinteractive{#1}{{\currentbibyear}}}
+      {\bibalternative\c!lastpubsep\bibmaybeinteractive{#1}{{\currentbibyear}}}%
+   \bibalternative\v!right}
+
+%D ML problems:
+
+%D \macros{bibshortref,bibkeyref,bibpageref,bibtyperef,bibserialref}
+%D
+%D There is hardly any point in trying to compress these. The only
+%D thing that needs to be done is making sure that
+%D the separations are inserted correctly. And that is
+%D what \type{\refsep} does.
+
+\newif\iffirstref
+
+\def\refsep{\iffirstref\firstreffalse\else\bibalternative\c!pubsep\fi}
+
+\def\bibshortref[#1]%
+  {\bibalternative\v!left
+   \firstreftrue\processcommalist[#1]\dobibshortref
+   \bibalternative\v!right}
+
+\def\dobibshortref#1%
+  {\addthisref{#1}\refsep
+   \doifbibreferencefoundelse{#1}{\gotobiblink{\getvalue{pbds-#1}}[#1]}
+	 {\unknownreference{#1}}}
+
+
+\def\bibserialref[#1]%
+  {\bibalternative\v!left
+   \firstreftrue\processcommalist[#1]\dobibserialref
+   \bibalternative\v!right}
+
+\def\dobibserialref#1%
+  {\addthisref{#1}\refsep
+   \doifbibreferencefoundelse{#1}{\gotobiblink{\getvalue{pbdn-#1}}[#1]}
+      {\unknownreference{#1}}}
+
+\def\bibkeyref[#1]%
+  {\bibalternative\v!left
+   \firstreftrue\processcommalist[#1]\dobibkeyref
+   \bibalternative\v!right}
+
+\def\dobibkeyref#1%
+  {\addthisref{#1}\refsep\gotobiblink{#1}[#1]}
+
+\def\gotoDOI#1#2%
+  {\ifbibinteractionelse
+     {\useURL[bibfooDoi#1][#2]%
+      \useURL[bibfoo#1][http://dx.doi.org/#2]%
+      \goto{\url[bibfooDoi#1]}[url(bibfoo#1)]}
+     {\hyphenatedurl{#2}}}
+
+\def\bibdoiref[#1]%
+  {\bibalternative\v!left
+   \firstreftrue\processcommalist[#1]\dobibdoiref
+   \bibalternative\v!right}
+
+\def\dobibdoiref#1%
+  {\addthisref{#1}\refsep
+   \doifbibreferencefoundelse{#1}{\expanded{\gotoDOI{#1}{\getvalue{pbdo-#1}}}}
+        {\unknownreference{#1}}}
+
+\def\biburlref[#1]%
+  {\bibalternative\v!left
+   \firstreftrue\processcommalist[#1]\dobiburlref
+   \bibalternative\v!right}
+
+\def\gotoURL#1#2%
+   {\ifbibinteractionelse
+       {\useURL[bibfoo#1][#2]\goto{\url[bibfoo#1]}[url(bibfoo#1)]}
+       {\hyphenatedurl{#2}}}
+
+\def\dobiburlref#1%
+  {\addthisref{#1}\refsep
+   \doifbibreferencefoundelse{#1}{\expanded{\gotoURL{#1}{\getvalue{pbdu-#1}}}}
+      {\unknownreference{#1}}}
+
+\def\bibtyperef[#1]%
+  {\bibalternative\v!left
+   \firstreftrue\processcommalist[#1]\dobibtyperef
+   \bibalternative\v!right}
+
+\def\dobibtyperef#1%
+  {\addthisref{#1}\refsep
+   \doifbibreferencefoundelse{#1}{\gotobiblink{\getvalue{pbdt-#1}}[#1]}
+       {\unknownreference{#1}}}
+
+\def\bibpageref[#1]%
+  {\bibalternative\v!left
+   \firstreftrue\processcommalist[#1]\dobibpageref
+   \bibalternative\v!right}
+
+\def\dobibpageref#1%
+  {\addthisref{#1}\refsep
+   \ifbibinteractionelse{\atbiblink[#1]}{{\referencingfalse\at[#1]}}}
+
+\def\bibdataref[#1]%
+  {\bibalternative\v!left
+   \firstreftrue\processcommalist[#1]\dobibdata
+   \bibalternative\v!right}
+
+\def\dobibdata#1%
+  {\addthisref{#1}\refsep
+   \doifbibreferencefoundelse{#1}{\dotypesetapublication{#1}}
+       {\unknownreference{#1}}}
+
+\let\bibnoneref\nocite
+
+%D \macros{bibnumref}
+%D
+%D It makes sense to try and compress the argument list of
+%D \type{\bibnumref}. There are two things involved: the actual
+%D compression, and a sort routine. The idea is to store the
+%D found values in a new commalist called \type{\therefs}.
+
+%D But that is not too straight-forward, because \type{\in} is
+%D not expandable,
+%D so that the macro \type{\expandrefs} is needed.
+
+\def\expandrefs#1%
+   {\bgroup
+    \preparebibrefprefix
+    \preparebibreflist{#1}%
+    \global\bibreffoundfalse
+    \def\setuplink##1%
+          {\ifbibreffound\else
+           \doifreferencefoundelse
+               {##1}
+               {\global\bibreffoundtrue
+                \@EA\doglobal\@EA\addtocommalist\@EA{\reftypet}\therefs }%
+               {}\fi}%
+    \processcommacommand[\bibreflist]\setuplink
+    \ifbibreffound \else \showmessage\m!publications{5}{#1 unknown}%
+       \doglobal\addtocommalist{0}\therefs\fi
+    \egroup }
+
+%D But at least the actual sorting code is simple (note that sorting
+%D a list with exactly one entry fails to return anything, which
+%D is why the \type{\ifx} is needed).
+
+\def\bibnumref[#1]%
+  {\bibalternative\v!left
+   \penalty\!!tenthousand
+   \processcommalist[#1]\addthisref
+   \firstreftrue
+   \ifbibcitecompress
+     \glet\therefs\empty
+     \processcommalist[#1]\expandrefs
+     \sortcommacommand[\therefs]\donumericcompare
+     \ifx\empty\sortedcommalist\else
+       \let\therefs\sortedcommalist
+     \fi
+     \compresscommacommandnrs[\therefs]%
+     \processcommacommand[\compressedlist]\verysimplebibnumref
+   \else
+     \processcommalist[#1]\dosimplebibnumref
+   \fi
+   \bibalternative\v!right}
+
+\def\dosimplebibnumref  #1%
+  {\refsep\ifbibinteractionelse
+     {\inbiblink[#1]}{{\referencingfalse\inbiblink[#1]}}}
+
+\def\verysimplebibnumref#1{\doverysimplebibnumref#1}
+
+\def\doverysimplebibnumref#1#2%
+  {\refsep
+   \ifcase#1\relax \unknownreference{#1}\else
+     \def\tempa{#2}\ifx\empty\tempa#1\else#1\bibalternative\c!inbetween#2\fi
+   \fi}
+
+%D By request from Sanjoy. This makes it easier to implement
+%D \type{\citeasnoun}.
+
+\def\bibauthornumref[#1]%
+  {\getcommalistsize[#1]%
+   \global\bibitemcounter\commalistsize
+   \firstreftrue
+   \processcommalist[#1]\dobibauthornumref }
+
+\def\dobibauthornumref#1%
+  {\addthisref{#1}\refsep
+   \doifbibreferencefoundelse{#1}
+      {\getvalue{pbda-#1}%
+       \bibalternative\c!inbetween
+       \bibalternative\v!left
+       \ifbibinteractionelse{\inbiblink[#1]}
+            {{\referencingfalse\inbiblink[#1]}}%
+       \bibalternative\v!right}
+      {\unknownreference{#1}}}
+
+%D And some defaults are loaded from bibl-apa:
+
+\setuppublications
+  [\v!month\v!conversion=,
+   \c!alternative=apa]
+
+\appendtoks
+    \preloadbiblist
+\to \everystarttext
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/buff-ini.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/buff-ini.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/buff-ini.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,348 @@
+%D \module
+%D   [       file=buff-ini, % was core-buf % blocks are moved to core-blk
+%D        version=2000.01.05,
+%D          title=\CONTEXT\ Buffer Macros,
+%D       subtitle=Buffers,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Buffer Macros / Buffers}
+
+\unprotect
+
+% Helpers:
+
+\chardef\buffernestmode\plusone % 0: not nested, 1: startbuffer nested, 2: all buffers nested
+
+\edefconvertedargument\emptybufferline{ }
+
+\ifx\tmpblocks\undefined \newwrite\tmpblocks \fi
+
+\newif\iftmpblockstarted
+
+\long\def\flushbufferline#1%
+  {\iftmpblockstarted
+     \ifsegmentatebuffer
+       \ifemptybufferline
+         \immediate\write\tmpblocks{\string\stopbufferparagraph }%
+         \immediate\write\tmpblocks{\string\startbufferparagraph}%
+       \else
+         \immediate\write\tmpblocks{#1}%
+       \fi
+     \else
+       \immediate\write\tmpblocks{#1}%
+     \fi
+   \else
+     \doifsomething{#1}
+       {\tmpblockstartedtrue
+        \immediate\write\tmpblocks{\string#1}}%
+   \fi}
+
+\long\def\processnextbufferlineA#1%
+  {\relax % checken waarom eerdere macro dit nodig heeft / supp-mps run
+   \defconvertedargument\next{#1 }%
+   \doifinstringelse{\delcharacter\letterpercent}{\delcharacter\next}
+     {\secondoftwoarguments}
+     {\doifincsnameelse\endofblock\next
+        {\ifnum\nestedbufferlevel=\zerocount
+           \expandafter\firstoftwoarguments
+         \else
+           \decrement\nestedbufferlevel\relax
+           \expandafter\secondoftwoarguments
+         \fi}
+        {\doifincsnameelse\beginofblock\next
+           {\increment\nestedbufferlevel\relax
+            \secondoftwoarguments}
+           {\secondoftwoarguments}}}}
+
+\long\def\processnextbufferlineB#1% #2#3%
+  {\defconvertedargument\next{#1 }%
+   \ifx\next\emptybufferline
+     \ifsegmentatebuffer \emptybufferlinetrue \fi
+     \expandafter\secondoftwoarguments% #3%
+   \else
+     \emptybufferlinefalse
+     \doifinstringelse\endofblock\next
+       {\expandafter\firstoftwoarguments }% #2}
+       {\expandafter\secondoftwoarguments}% #3}%
+   \fi}
+
+\bgroup
+\obeylines
+\long\gdef\copybufferline#1
+  {\processnextbufferline{#1}\closebufferfile{\flushbufferline{#1}\copybufferline}}
+\egroup
+
+\newif\ifsegmentatebuffer
+\newif\ifemptybufferline
+
+\def\currentbuffer{\jobname}
+
+\def\setcurrentbuffer#1%
+  {\doifelsenothing{#1}{\edef\currentbuffer{\jobname}}{\edef\currentbuffer{#1}}}
+
+\def\resetbuffer
+  {\dosingleempty\doresetbuffer}
+
+\def\doresetbuffer[#1]%
+  {\begingroup
+   \setcurrentbuffer{#1}%
+   \unlinkfile{\TEXbufferfile\currentbuffer}%
+   \endgroup}
+
+\def\dostartbuffer
+  {\bgroup
+   \obeylines % nodig, anders gaat 't fout als direct \starttable (bv)
+   \doquadrupleempty\dodostartbuffer}
+
+\def\dodostartbuffer[#1][#2][#3][#4]% upward compatible
+  {\iffourthargument
+     \def\next{\dododostartbuffer{#1}{#2}{#3}{#4}}%
+   \else
+     \def\next{\dododostartbuffer  {}{#1}{#2}{#3}}%
+   \fi
+   \next}
+
+\def\dododostartbuffer#1#2#3#4%
+  {%\showmessage\m!systems{15}{#2}%
+   \doifelsevalue{\??bu#1\c!paragraph}\v!yes
+     {\segmentatebuffertrue} % todo in mkiv
+     {\doifnumberelse{\getvalue{\??bu#1\c!paragraph}}\segmentatebuffertrue\segmentatebufferfalse}%
+   \doifvalue{\??bu#1\c!local}\v!yes
+     {\chardef\buffernestmode\plustwo}% permit nesting
+   \setcurrentbuffer{#2}%
+   \doifelsenothing{#4}
+     {\letbeundefined{\e!stop\v!buffer}% % \let\stopbuffer=\relax   % \undefined
+      \edefconvertedargument\beginofblock{\e!start\v!buffer}%
+      \edefconvertedargument\endofblock  {\e!stop \v!buffer}%
+      \ifcase\buffernestmode
+        \let\processnextbufferline\processnextbufferlineB
+      \else
+        \let\processnextbufferline\processnextbufferlineA
+      \fi}
+     {\letbeundefined{#4}% \letvalue{#4}=\relax     % \undefined
+      \expandafter\defconvertedargument\expandafter\beginofblock\expandafter{\csname#3\endcsname}% we could use defconvertedcommand here (no \expandafter)
+      \expandafter\defconvertedargument\expandafter\endofblock  \expandafter{\csname#4\endcsname}% we could use defconvertedcommand here (no \expandafter)
+      \ifcase\buffernestmode
+          \let\processnextbufferline\processnextbufferlineB
+        \or
+          \let\processnextbufferline\processnextbufferlineB
+        \else
+          \let\processnextbufferline\processnextbufferlineA
+      \fi}%
+   \def\closebufferfile
+     {\ifsegmentatebuffer
+        \immediate\write\tmpblocks{\string\stopbufferparagraph}%
+      \fi
+      \immediate\closeout\tmpblocks
+      \egroup
+      \getvalue{#4}}%
+   \doifelsenothing{#2}
+     {\edef\bufferfilename{\TEXbufferfile\jobname}}%
+     {\edef\bufferfilename{\TEXbufferfile{#2}}}%
+   \immediate\openout\tmpblocks\bufferfilename
+   \ifsegmentatebuffer
+     \immediate\write\tmpblocks{\string\startbufferparagraph}%
+   \fi
+   \newcounter\nestedbufferlevel
+   \recatcodeuppercharacterstrue
+   \setcatcodetable\vrbcatcodes
+   \obeylines
+   \copybufferline}
+
+\letvalue{\e!start\v!buffer}\dostartbuffer
+
+\let\endbuffer\undefined % to please the dep parser
+
+\def\setbuffer
+  {\dosingleempty\dosetbuffer}
+
+\long\def\dosetbuffer[#1]#2\endbuffer % seldom used so we just pass #2
+  {\begingroup
+   \setcurrentbuffer{#1}%
+   \edef\bufferfilename{\TEXbufferfile{\currentbuffer}}%
+   \immediate\openout\tmpblocks\bufferfilename
+   \defconvertedargument\ascii{#2}%
+   \immediate\write\tmpblocks{\ascii}%
+   \immediate\closeout\tmpblocks
+   \endgroup}
+
+\def\setupbuffer
+  {\dodoubleempty\dosetupbuffer}
+
+\def\dosetupbuffer[#1][#2]%
+  {\ifsecondargument
+     \getparameters[\??bu#1][#2]%
+   \else
+     \getparameters[\??bu][#1]%
+   \fi}
+
+\def\dodefinebuffer[#1][#2]%
+  {\iffirstargument % else problems
+     \doglobal\increment\nofdefinedbuffers
+     \letvalue{\??bu#1\c!number   }\nofdefinedbuffers
+     \letvalue{\??bu#1\c!paragraph}\v!no
+     \setevalue{\e!start#1}{\noexpand\dostartbuffer[#1][def-\nofdefinedbuffers][\e!start#1][\e!stop#1]}%
+     \unexpanded\setevalue{\e!get  #1}{\noexpand\dogetbuffer  [#1][def-\nofdefinedbuffers]}%
+     \unexpanded\setevalue{\e!type #1}{\noexpand\dotypebuffer [#1][def-\nofdefinedbuffers]}%
+     \getparameters[\??bu#1][#2]%
+   \fi}
+
+\def\definebuffer
+  {\dodoubleempty\dodefinebuffer}
+

+\unexpanded\def\getbuffer
+  {\dodoubleempty\dogetbuffer}
+
+\def\dogetbuffer[#1][#2]%
+  {\ifsecondargument
+     \dodogetbuffer[#1][#2]%
+   \else
+     \dodogetbuffer[][#1]%
+   \fi}
+
+\def\dogetbufferasis{\readjobfile{\TEXbufferfile{\currentbuffer}}\donothing\donothing}%
+
+\def\dodogetbuffer[#1][#2]%
+  {\getvalue{\??bu#1\c!before}%
+   \dobuffer{16}{#2}\dogetbufferasis
+   \getvalue{\??bu#1\c!after}}
+
+\unexpanded\def\typebuffer
+  {\dodoubleempty\dotypebuffer}
+
+\def\dogetfilebuffer{\typefile{\TEXbufferfile{\currentbuffer}}}
+
+\def\dotypebuffer[#1][#2]%
+  {\iffirstargument
+     \dobuffer{17}{#1}\dogetfilebuffer
+   \else
+     \dobuffer{17}{#2}\dogetfilebuffer
+   \fi}
+
+\def\dobuffer#1#2#3%
+  {\doifelsenothing{#2}
+     {\dodobuffer#3\jobname}
+     {\processcommalist[#2]{\dodobuffer#3}}}
+
+\def\dodobuffer#1#2% command name
+  {\pushmacro\currentbuffer
+   \edef\currentbuffer{\ifcsname\??bu#2\c!number\endcsname def-\csname\??bu#2\c!number\endcsname\else#2\fi}%
+   \beginrestorecatcodes
+   #1%
+   \endrestorecatcodes
+   \popmacro\currentbuffer}
+
+\def\processTEXbuffer{\getbuffer} % handy
+

+% seldom used, only in a few projects that demanded more speed
+
+\def\dostartmemorybuffer
+  {\dosingleempty\dostartmemorybuffer}
+
+\long\def\dostartmemorybuffer[#1]#2\stopbuffer
+  {\setbuffer[#1]#2\endbuffer}
+
+\let\dostartfilebuffer\startbuffer
+
+\def\usememorybuffers{\let\startbuffer\dostartmemorybuffer}
+\def\usefilebuffers  {\let\startbuffer\dostartfilebuffer}
+

+% this features is soldom used (complex examns where we need to fetch
+% special parts of a text
+%
+% this is not yet supported in mkiv (relatively easy to do but there
+% we don't have the par tags but need to grab 'm
+
+\def\skippedbufferparagraphs{0}
+
+\let\startbufferparagraph\relax
+\let\stopbufferparagraph \par   % \relax
+
+\newcount\currentbufferparagraph
+
+\def\getbufferparagraphs
+  {\dodoubleempty\dogetbufferparagraphs}
+
+\def\dosetbufferoffset#1%
+  {\doifnumberelse{\getvalue{\??bu#1\c!paragraph}}
+     {\currentbufferparagraph-\getvalue{\??bu#1\c!paragraph}}
+     {\currentbufferparagraph \zerocount}%
+   \relax}
+
+\def\dogetbufferparagraphs[#1][#2]%
+  {\iffirstargument
+     \ifsecondargument
+       \dosetbufferoffset{#1}%
+       \doifelse{#2}\v!all
+         {\def\startbufferparagraph{\normalbufferparagraph{#1}}}
+         {\def\startbufferparagraph{\filterbufferparagraph{#1}{#2}}}%
+       \def\stopbufferparagraph{\dostopbufferparagraph{#1}}%
+       \def\next{\getparagraphedbuffer[#1]}%
+     \else
+       \dosetbufferoffset\empty
+       \def\startbufferparagraph{\filterbufferparagraph{}{#1}}%
+       \def\stopbufferparagraph{\dostopbufferparagraph{}}%
+       \def\next{\getparagraphedbuffer[]}%
+     \fi
+   \else
+     \dosetbufferoffset\empty
+     \def\startbufferparagraph{\normalbufferparagraph{}}%
+     \def\stopbufferparagraph{\dostopbufferparagraph{}}%
+     \def\next{\getparagraphedbuffer[]}%
+   \fi
+   \next}
+
+\def\dogetparagraphbuffer{\readjobfile{\TEXbufferfile{\currentbuffer}}\donothing\donothing}
+
+\def\getparagraphedbuffer[#1]%
+  {\dobuffer{16}{#1}\dogetparagraphbuffer}
+
+\def\dostopbufferparagraph#1%
+  {\getvalue{\??bu#1\c!after}\par}
+
+\def\dostartbufferparagraph#1%
+  {\par\getvalue{\??bu#1\c!before}}
+
+\def\normalbufferparagraph
+  {\advance\currentbufferparagraph \plusone
+   \ifnum\currentbufferparagraph>\zerocount
+     \expandafter\dostartbufferparagraph
+   \else
+     \expandafter\gobblebufferparagraph
+   \fi}
+
+\def\filterbufferparagraph#1#2%
+  {\advance\currentbufferparagraph \plusone
+   \ifcase\currentbufferparagraph
+     \expandafter\gobblebufferparagraph
+   \else
+     \doifinsetelse{\the\currentbufferparagraph}{#2}
+       {\expandafter\dostartbufferparagraph}
+       {\expandafter\fakebufferparagraph}%
+   \fi
+   {#1}}
+
+\long\def\gobblebufferparagraph#1#2\stopbufferparagraph
+  {}
+
+\def\fakebufferparagraph#1%
+  {\bgroup
+   \def\stopbufferparagraph{\dostopbufferparagraph{#1}\egroup\egroup}%
+   \setbox\scratchbox\vbox\bgroup\dostartbufferparagraph{#1}}
+
+% definitions
+
+\definebuffer[\v!hiding] \setupbuffer[\v!hiding][\c!local=\v!yes]
+
+\setupbuffer
+  [\c!paragraph=\v!no,
+   \c!before=,
+   \c!after=]
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/buff-ver.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/buff-ver.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/buff-ver.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,1339 @@
+%D \module
+%D   [       file=buff-ver, % was core-ver
+%D        version=2000.05.09,
+%D          title=\CONTEXT\ Buffer Macros,
+%D       subtitle=Verbatim,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Buffer Macros / Verbatim}
+
+\unprotect
+
+\ifx\startlinenumbering\undefined \let\startlinenumbering\relax \fi
+\ifx\stoplinenumbering \undefined \let\stoplinenumbering\relax \fi
+\ifx\setuplinenumbering\undefined \def\setuplinenumbering[#1]{} \fi
+
+% \type{ <crlf> char} geeft bagger
+
+%D We are going to embed the general verbatim support macros in
+%D a proper environment. First we show the common setup
+%D macro, so we know what features are supported. The options
+%D are hooked into the support macros via the \type{\obey}
+%D macros.
+
+\newif\ifslantedtypeactivated
+\newif\ifslantedtypepermitted
+
+\def\switchslantedtype
+  {\ifslantedtypepermitted
+     \ifslantedtypeactivated
+       \slantedtypeactivatedfalse\tttf
+     \else
+       \slantedtypeactivatedtrue\ttsl
+     \fi
+   \fi}
+
+\newprettytrue % movet to here from cont-sys.tex
+
+\def\prettyidentifier {TEX}
+\def\prettypalet      {}
+
+\def\installprettytype
+  {\dodoubleargument\doinstallprettytype}
+
+\def\doinstallprettytype[#1][#2]% map #1 onto #2
+  {\uppercasestring#1\to\asciia
+   \uppercasestring#2\to\asciib
+   \setevalue{\??ty\??ty\asciia}{\asciib}}
+
+\def\setupprettiesintype#1%
+  {\uppercasestring#1\to\ascii
+   \edef\prettyidentifier{\executeifdefined{\??ty\??ty\ascii}{TEX}}%
+   \doifundefined{setuppretty\prettyidentifier type}%
+     {\startnointerference
+        \restorecatcodes % also needed when loading during \newpretty
+        \startreadingfile % restore < and > if needed
+        \lowercasestring verb-\prettyidentifier\to\filename
+        \readsysfile{\filename.mkii}\donothing\donothing
+        \stopreadingfile
+      \stopnointerference}%
+   \doifdefinedelse{setuppretty\prettyidentifier type}%
+     {\let\uncatcodecharacters\uncatcodeallcharacters % ugly, should be switch / todo
+      \def\dosetupprettytype{\getvalue{setuppretty\prettyidentifier type}}}
+     {\let\dosetupprettytype\relax}}
+
+\def\setupprettytype{\dosetupprettytype}
+
+% \def\setupcommonverbatim
+%   {\recatcodeuppercharactersfalse % obey regime / encoding
+%    %
+%    \let\prettyidentifier\s!default
+%    %
+%    \doifelse{\typingparameter\c!text}\v!yes
+%      \naturaltextexttrue
+%      \naturaltextextfalse
+%    \def\prettyidentifierfont{\typingparameter\c!icommand}%
+%    \def\prettyvariablefont  {\typingparameter\c!vcommand}%
+%    \def\prettynaturalfont   {\typingparameter\c!ccommand}%
+%    %
+%    \doif{\typingparameter\c!space}\v!on
+%      {\def\obeyspaces{\setcontrolspaces}}%
+%    \doif{\typingparameter\c!page }\v!no
+%      {\def\obeypages {\ignorepages}}%
+%    %
+%    \doifelse{\typingparameter\c!tab}\v!yes
+%      {\def\obeytabs{\settabskips}}%
+%      {\doif{\typingparameter\c!tab}\s!ascii
+%         {\chardef\tabskipmode\plustwo % quit on >127
+%          \def\obeytabs{\settabskips}}}%
+%    %
+%    \ignorehyphens % default
+%    \ExpandFirstAfter\processaction
+%      [\typingparameter\c!lines]
+%      [        \v!yes=>\obeybreakpoints,
+%        \v!hyphenated=>\obeyhyphens]%
+%    \processaction
+%      [\typingparameter\c!empty]
+%      [\v!yes=>\obeyemptylines,
+%       \v!all=>\obeyallemptylines]%
+%    %
+%    \ExpandFirstAfter\processaction
+%      [\typingparameter\c!option]
+%      [     \v!none=>\let\obeycharacters\relax,
+%           \v!color=>\setupprettiesintype{TEX}%
+%                     \let\obeycharacters\setupprettytype
+%                     \let\obeytabs\ignoretabs,
+%          \v!normal=>\let\obeycharacters\setupgroupedtype,
+%        \v!commands=>\def\obeycharacters{\setupcommandsintype}% \let
+%                     \let\obeytabs\ignoretabs,
+%         \v!slanted=>\let\obeycharacters\setupslantedtype
+%                     \let\obeytabs\ignoretabs,
+%         \s!unknown=>\setupprettiesintype{\typingparameter\c!option}%
+%                     \let\obeycharacters\setupprettytype
+%                     \let\obeytabs\ignoretabs]%
+%    \doifnumberelse{\typingparameter\c!tab}
+%      {\def\obeytabs{\setfixedtabskips{\typingparameter\c!tab}}}%
+%      \donothing
+%   %\def\verbatimfont{\typingparameter\c!style\normalnoligatures\font}%
+%   % more generic, but beware of the \redoconvertfont (else no typing in titles and such)
+%    \def\verbatimfont{\redoconvertfont\dosetfontattribute{\currenttypingclass\currenttyping}\c!style\normalnoligatures\font}%
+%    \setupverbatimcolor}
+
+\setvalue{\??tp:\c!lines:\v!yes       }{\obeybreakpoints}
+\setvalue{\??tp:\c!lines:\v!hyphenated}{\obeyhyphens}
+
+\setvalue{\??tp:\c!empty:\v!yes       }{\obeyemptylines}
+\setvalue{\??tp:\c!empty:\v!all       }{\obeyallemptylines}
+
+\setvalue{\??tp:\c!option:\v!none     }{\let\obeycharacters\relax}
+\setvalue{\??tp:\c!option:\v!color    }{\setupprettiesintype{TEX}%
+                                        \let\obeycharacters\setupprettytype
+                                        \let\obeytabs\ignoretabs}
+\setvalue{\??tp:\c!option:\v!normal   }{\let\obeycharacters\setupgroupedtype}
+\setvalue{\??tp:\c!option:\v!commands }{\def\obeycharacters{\setupcommandsintype}%
+                                        \let\obeytabs\ignoretabs}
+\setvalue{\??tp:\c!option:\v!slanted  }{\let\obeycharacters\setupslantedtype
+                                        \let\obeytabs\ignoretabs}
+\setvalue{\??tp:\c!option:\s!unknown  }{\setupprettiesintype{\typingparameter\c!option}%
+                                        \let\obeycharacters\setupprettytype
+                                        \let\obeytabs\ignoretabs}
+
+\def\setupcommonverbatim
+  {\recatcodeuppercharactersfalse % obey regime / encoding
+   %
+   \let\prettyidentifier\s!default
+   %
+   \doifelse{\typingparameter\c!text}\v!yes
+     \naturaltextexttrue
+     \naturaltextextfalse
+   \def\prettyidentifierfont{\typingparameter\c!icommand}%
+   \def\prettyvariablefont  {\typingparameter\c!vcommand}%
+   \def\prettynaturalfont   {\typingparameter\c!ccommand}%
+   %
+   \doif{\typingparameter\c!space}\v!on
+     {\def\obeyspaces{\setcontrolspaces}}%
+   \doif{\typingparameter\c!page }\v!no
+     {\def\obeypages {\ignorepages}}%
+   %
+   \doifelse{\typingparameter\c!tab}\v!yes
+     {\def\obeytabs{\settabskips}}%
+     {\doif{\typingparameter\c!tab}\s!ascii % not needed in mkiv
+        {\chardef\tabskipmode\plustwo % quit on >127
+         \def\obeytabs{\settabskips}}}%
+   %
+   \ignorehyphens % default
+   \getvalue{\??tp:\c!lines:\typingparameter\c!lines}%
+   \getvalue{\??tp:\c!empty:\typingparameter\c!empty}%
+   \getvalue{\??tp:\c!option:\ifcsname\??tp:\c!option:\typingparameter\c!option\endcsname\typingparameter\c!option\else\s!unknown\fi}%
+   \doifnumberelse{\typingparameter\c!tab}
+     {\def\obeytabs{\setfixedtabskips{\typingparameter\c!tab}}}%
+     \donothing
+  %\def\verbatimfont{\typingparameter\c!style\normalnoligatures\font}%
+  % more generic, but beware of the \redoconvertfont (else no typing in titles and such)
+   \def\verbatimfont{\redoconvertfont\dosetfontattribute{\currenttypingclass\currenttyping}\c!style\normalnoligatures\font}%
+   \setupverbatimcolor}
+
+% BEWARE: the noligatures will globally change the verbatim font's behaviour
+
+% test case:
+%
+% \definetype[typeTEX][option=tex]
+%
+% \typeTEX|\example---oeps|. this---ligates---again.
+% \typeTEX{\example---oeps}. this---ligates---again.
+% \type   {\example---oeps}. this---ligates---again.
+
+\def\setupcommandsintype % can also be \string\
+  {\setupgroupedtype
+   \edef\\{\typingparameter\c!escape}%
+   \letvalue{\\}=\\% for instance \/=/
+   \@EA\catcode\@EA`\\=\@@escape
+   \def\BTEX##1\ETEX##2% ##2 gobbles active space
+     {\naturaltextext##1\unskip\relax}}
+
+\def\setupslantedtype
+  {\slantedtypepermittedtrue\setupgroupedtype}
+
+\ifx\setupprettytype  \undefined \let\setupprettytype  \relax             \fi
+\ifx\setupslantedtype \undefined \let\setupslantedtype \relax             \fi
+\ifx\setupgroupedtype \undefined \let\setupgroupedtype \relax             \fi
+\ifx\normalnoligatures\undefined \let\normalnoligatures\gobbleoneargument \fi
+
+%D The verbatim commands have a rather long and turbulent
+%D history. Most users of \CONTEXT\ probably will never use
+%D some of the features, but I've kept in mind that when one is
+%D writing a users manual, about everything can and undoubtly
+%D will be subject to a verbatim treatment.
+%D
+%D Verbatim command are very sensitive to argument processing,
+%D which is a direct result of the \CATCODES\ being fixed at
+%D reading time. With our growing understanding of \TEX,
+%D especially of the mechanism that can be used for looking
+%D ahead and manipulating \CATCODES, the verbatim support
+%D became more and more advanced and natural.
+%D
+%D Typesetting inline verbatim can be accomplished by
+%D \type{\type}, which in this sentence was typeset by saying
+%D just \type{\type{\type}}, which in turn was typeset by
+%D \unknown. Using the normal grouping characters \type{{}} is
+%D the most natural way of using this command.
+%D
+%D A second, more or less redundant, alternative is delimiting
+%D the argument with an own character. This method was
+%D implemented in the context of a publication in the \MAPS,
+%D where this way of delimiting is recognized by \LATEX\ users.
+%D
+%D The third, more original alternative, is the one using
+%D \type{<<} and \type{>>} as delimiters. This alternative can
+%D be used in situations where slanted typeseting is needed.
+
+% todo: we can use \letter... here:
+
+\def\lesscharacter {<}
+\def\morecharacter {>}
+
+\chardef\texescape     = `\\
+\chardef\leftargument  = `\{
+\chardef\rightargument = `\}
+
+%D \macros
+%D   {type}
+%D
+%D We define \type{\type} as a protected command. This command
+%D has several invocations: grouped, wirt boundary characters,
+%D and with font switches.
+
+% \starttyping
+% normal: \par \type{xx<<..xx..<<xx <<xx>> >>..>>xx} \par \type<<....>> \par \type<<..<<xx>>..>> \par
+% normal: \par \type{xx<..xx..<xx <slanted> >..>xx} \par \type{<....>} \par \type{<..<xx>..>}
+% \setuptype[option=slanted]
+% slanted: \par \type{xx<<..sl..<<xx <<sl>> xx>>..sl..>>xx} \par \type<<..xx..>> \par \type<<..<<sl>>..>> \par
+% slanted: \par \type{xx<<..sl..<xx <sl> xx>..sl..>>xx} \par \type<<..xx..>> \par \type<<..<sl>..>> \par
+% \setuptype[option=none]
+% none: \par \type{xx<<..xx..<<xx <<xx>> >>..>>xx} \par \type<<....>> \par \type<<..<<xx>>..>> \par
+% \stoptyping
+
+%D When writing the manual to \CONTEXT\ and documenting this
+%D source we needed to typeset \type{<<} and \type{>>}. Because
+%D we wanted to do this in the natural way, we've adapted the
+%D original definition a bit. This implementation went through
+%D several live cycles. The final implementation looks a bit
+%D further and treats the lone \type{<<} and \type{>>} a bit
+%D different. The \type {\null} prevents ligatures, which
+%D unfortunately turn up in Lucida fonts.
+
+%D The following lines show what happens when we set
+%D \type {option=commands}.
+%D
+%D \startbuffer
+%D \starttyping
+%D test//test test/BTEX \footnote{test test test}/ETEX test
+%D test//test test/BTEX \footnote{test test test}/ETEX  test
+%D test test test/BTEX \bf(nota bene)/ETEX test
+%D test test test /BTEX \bf(nota bene)/ETEX  test
+%D \stoptyping
+%D \stopbuffer
+%D
+%D % \bgroup\setuptyping[option=commands]\getbuffer\egroup
+%D
+%D this was keyed in as:
+%D
+%D \typebuffer
+
+\unexpanded\def\type{\dotype\empty}
+
+% not that fast but catches \type{\command} % nothing more after \command
+%
+% \setupcolors[state=start]
+% \setuptype[option=TEX]
+% \setupcolors[textcolor=red]
+%
+% The options \type{before=\startsolutionbackground } and
+% \type{after=\stopsolutionbackground} take care of putting a frame,
+% which can
+%
+% {\blue The options \type{before=\startsolutionbackground } and
+% \type{after=\stopsolutionbackground} take care of putting a frame,
+% which} can
+
+\def\resumecoloraftergroup
+  {\localstartcolor[\s!black]%
+   \localstartcolor[\maintextcolor]%
+   \aftergroup\localstopcolor
+   \aftergroup\localstopcolor}
+
+% the rather messy \type command
+
+\def\dotype#1% was \dotype
+  {\bgroup
+   \resumecoloraftergroup % a problem is that we can still be in color mode, tricky hack
+   \begstrut % new, enables leading space in \type { abc } at par start / begstrut else no hyphenation
+   \let\currenttypingclass\??ty
+   \edef\currenttyping{#1}%
+   \catcode`\<=\@@other
+   \catcode`\>=\@@other
+   \futurelet\next\dodotype}
+
+\def\dodotypeA
+  {\initializetype
+   \initializetypegrouping
+   \verbatimfont
+   \verbatimcolor
+   \afterassignment\protectfirsttype\let\next=}
+
+\def\dodotypeB
+  {\initializetype
+   \setupnotypegrouping
+   \verbatimfont
+   \verbatimcolor
+   \let\next=}
+
+\def\dodotypeC<#1%
+  {\initializetype
+   \verbatimfont
+   \verbatimcolor
+   \if#1<%
+     \@EA\setupalternativetypegrouping
+   \else
+     \@EA#1%
+   \fi}
+
+\def\dodotypeD#1%
+  {\initializetype
+   \verbatimfont
+   \verbatimcolor
+   \catcode`#1=\@@endgroup}
+
+\def\dodotype
+  {\ifx\next\bgroup
+     \@EA\dodotypeA
+   \else\if\next<%
+     \doifelse{\typingparameter\c!option}\v!none
+       {\@EAEAEA\dodotypeB}{\@EAEAEA\dodotypeC}%
+   \else
+     \@EAEAEA\dodotypeD
+   \fi\fi}
+
+% The next one is safe for: \def\xx#1{\type{#1}} \xx{\ifx}
+
+\let\protectedfirsttype\string % \relax for special cases
+
+\bgroup
+\catcode`\<=\active
+\catcode`\>=\active
+\gdef\doprotectfirsttype
+  {\normalifx\next<%
+     \endrobusttest \let\next\relax
+   \normalelse\normalifx\next\bgroup
+     \endrobusttest \let\next\relax
+   \normalelse\normalifx\next\egroup % takes care of \type{}
+     \endrobusttest \let\next\relax
+   \normalelse\normalifx\next\activeleftargument
+     \endrobusttest \let\next\relax
+   \normalelse
+     \endrobusttest \let\next\protectedfirsttype
+   \normalfi\normalfi\normalfi\normalfi
+   \next}
+\egroup
+
+\def\protectfirsttype
+  {\beginrobusttest
+   \futurelet\next\doprotectfirsttype}
+
+% Verbatim does not work when passed as an argument, so here is a
+% workaround. Beware, spaces are introduced after a \type {\csname}.
+
+\chardef\recodeverbatimmode\zerocount % 0=nothing 1=rescan 2=autorescan
+
+% \appendtoks \chardef\recodeverbatimmode\plustwo \to \everytabulate
+% \appendtoks \chardef\recodeverbatimmode\plustwo \to \everytable
+
+\def\dodotypeA
+  {\initializetype
+   \initializetypegrouping
+   \verbatimfont
+   \verbatimcolor
+   \ifcase\recodeverbatimmode
+     \@EA\dodotypeAA
+   \or
+     \@EA\dodotypeAB
+   \or
+     \ifnum\catcode`\{=\@@active
+       \@EAEAEA\dodotypeAB
+     \else
+       \@EAEAEA\dodotypeAA
+     \fi
+   \else
+     \@EA\dodotypeAA
+   \fi}
+
+\def\dodotypeAA
+  {\afterassignment\protectfirsttype\let\next=}
+
+\def\dodotypeAB
+  {\bgroup
+   \catcode`\}=\@@endgroup
+   \catcode`\{=\@@begingroup
+   \afterassignment\redotypeAB\global\globalscratchtoks}
+
+\def\redotypeAB
+  {\egroup
+   \expandafter\defconvertedargument\expandafter\ascii\expandafter{\the\globalscratchtoks}% == \edefconvertedargument\ascii{\the\globalscratchtoks}%
+   \ifx\scantokens\undefined\ascii\else\everyeof{\hskip-\spaceskip}\scantokens\expandafter{\ascii}\fi
+   \egroup}
+
+\bgroup
+\catcode`\[=\@@begingroup
+\catcode`\]=\@@endgroup
+\catcode`\{=\@@active
+\catcode`\}=\@@active
+\gdef\initializetypegrouping
+  [\ifnum\catcode`\{=\@@active
+     \let\normalactivebgroup{%
+     \let\normalactiveegroup}%
+   \else
+     \catcode`\{=\@@active
+     \catcode`\}=\@@active
+     \let\normalactivebgroup\leftargument
+     \let\normalactiveegroup\rightargument
+   \fi
+   \def\activeleftargument
+     [\bgroup
+      \catcode`\}=\@@active
+      \let}\activerightargument
+      \normalactivebgroup]%
+   \def\activerightargument
+     [\normalactiveegroup
+      \egroup]%
+   \let{=\activeleftargument
+   % not \let}=\egroup, otherwise things go wrong in alignments (???)
+   \catcode`\}=\@@endgroup]
+\egroup
+
+\bgroup
+\catcode`\<=\@@active
+\catcode`\>=\@@active
+\gdef\setupalternativetypegrouping
+  {\catcode`\<=\@@active
+   \catcode`\>=\@@active
+   \def\doless
+     {\ifx<\next
+        \def\next
+          {\bgroup\switchslantedtype
+           \let\next=}%
+      \else
+        \let\next\lesscharacter
+      \fi
+      \next}%
+   \def\domore
+     {\ifx>\next
+        \def\next
+          {\egroup
+           \let\next=}%
+      \else
+        \let\next\morecharacter
+      \fi
+      \next}%
+   \def<{\futurelet\next\doless}%
+   \def>{\futurelet\next\domore}}
+\egroup
+
+\def\setupnotypegrouping
+  {\catcode`\<=\@@begingroup
+   \catcode`\>=\@@endgroup}
+
+\def\doenterdoublelesstype
+  {\ifx\next\egroup
+      \lesscharacter\null\lesscharacter
+   \else
+     \bgroup\switchslantedtype
+     \let\doenterdoublemoretype\egroup
+   \fi}
+
+\def\doenterdoublemoretype
+  {\def\doenterdoubletype
+     {\ifx\next\egroup
+        \morecharacter\null\morecharacter
+      \fi}}
+
+\bgroup
+\catcode`\<=\@@active
+\catcode`\>=\@@active
+\gdef\setupgroupedtype
+  {\catcode`\<=\@@active
+   \catcode`\>=\@@active
+   \def\doless
+     {\ifx<\next
+        \def\next
+          {\def\enterdoubletype{\futurelet\next\doenterdoublelesstype}%
+           \afterassignment\enterdoubletype
+           \let\next=}%
+      \else
+        \let\next\lesscharacter
+      \fi
+      \next}%
+   \def\domore
+     {\ifx>\next
+        \def\next
+          {\def\enterdoubletype{\futurelet\next\doenterdoublemoretype}%
+           \afterassignment\enterdoubletype
+           \let\next=}%
+      \else
+        \let\next\morecharacter
+      \fi
+      \next}%
+   \def<{\futurelet\next\doless}%
+   \def>{\futurelet\next\domore}}
+\egroup
+
+%D The neccessary initializations are done by calling
+%D \type{\initializetype} which in return calls for the support
+%D macro \type{\setupinlineverbatim}.
+
+\def\initializetype
+  {\let\obeylines\ignorelines
+   \setupcommonverbatim
+   \setupinlineverbatim}
+
+%D \macros
+%D   {setuptype}
+%D
+%D Some characteristics of \type{\type} can be set up by:
+
+\def\setuptype
+  {\dodoubleempty\dosetuptype}
+
+\def\dosetuptype[#1][#2]%
+  {\ifsecondargument
+     \getparameters[\??ty#1][#2]%
+   \else
+     \getparameters[\??ty][#1]%
+   \fi}
+
+%D \macros
+%D   {typ,obeyhyphens,obeybreakpoints}
+%D
+%D Although it's not clear from the macros, one character
+%D trait of this macros, which are build on top of the support
+%D module, is that they don't hyphenate. We therefore offer
+%D the alternative \type{\typ}. The current implementation
+%D works all right, but a decent hyphenation support of
+%D \type{\tt} text will be implemented soon.
+
+\def\obeyhyphens
+  {\def\obeyedspace {\hskip\interwordspace\relax}% better than spaceskip
+   \def\controlspace{\hskip\zeropoint\hbox{\normalcontrolspace}\hskip\zeropoint\relax}%
+   \spaceskip.25em\relax} % hm a bit of stretch !
+
+\def\obeybreakpoints
+  {\ignorehyphens
+   \veryraggedright}
+
+\def\ignorehyphens
+  {% \nohyphens % forgotten when no \par
+   \normallanguage\minusone % fails as the font redoes the language
+   \def\obeyedspace {\hskip\interwordspace\relax}% better than spaceskip
+   \def\controlspace{\hskip\zeropoint\hbox{\normalcontrolspace}\hskip\zeropoint\relax}%
+   \spaceskip.5em\relax}
+
+
+\unexpanded\def\typ
+  {\bgroup
+   \let\@@tylines\v!hyphenated
+   \futurelet\next\dodotype}
+
+%D \macros
+%D   {tex,arg,mat,dis}
+%D
+%D Sometimes, for instance when we pass verbatim text as an
+%D argument, the fixed \CATCODES\ interfere with our wishes. An
+%D experimental implementation of character by character
+%D processing of verbatim text did overcome this limitation,
+%D but we've decided not to use that slow and sometimes
+%D troublesome solution. Instead we stick to some 'old'
+%D \CONTEXT\ macros for typesetting typical \TEX\ characters.
+%D
+%D The next implementation is more clear but less versatile,
+%D so we treated it for a beter one.
+%D
+%D \starttyping
+%D \def\dospecialtype#1#2%
+%D   {\bgroup
+%D    \initializetype
+%D    \catcode`\{=\@@begingroup
+%D    \catcode`\}=\@@endgroup
+%D    \def\dospecialtype%
+%D      {\def\dospecialtype{#2\egroup}%
+%D       \bgroup
+%D       \aftergroup\dospecialtype
+%D       #1}%
+%D    \afterassignment\dospecialtype
+%D    \let\next=}
+%D
+%D \unexpanded\def\tex{\dospecialtype\texescape\relax}
+%D \unexpanded\def\arg{\dospecialtype\leftargument\rightargument}
+%D \unexpanded\def\mat{\dospecialtype\$\$}
+%D \unexpanded\def\dis{\dospecialtype{\$\$}{\$\$}}
+%D \stoptyping
+
+\def\setgroupedtype
+  {\let\currenttypingclass\??ty
+   \initializetype
+   \verbatimcolor
+   \catcode`\{=\@@begingroup
+   \catcode`\}=\@@endgroup}
+
+\unexpanded\def\tex{\groupedcommand{\setgroupedtype\texescape}{\relax}}
+\unexpanded\def\arg{\groupedcommand{\setgroupedtype\leftargument}{\rightargument}}
+\unexpanded\def\mat{\groupedcommand{\setgroupedtype\$}{\$}}
+\unexpanded\def\dis{\groupedcommand{\setgroupedtype\$\$}{\$\$}}
+
+\let\normaltexttex\tex
+\let\normaltextarg\arg
+\let\normaltextmat\mat
+\let\normaltextdis\dis
+
+%D \macros
+%D   {starttyping}
+%D
+%D Display verbatim is realized far more easy, which is mostly
+%D due to the fact that we use \type{\stop...} as delimiter.
+%D The implementation inherits  some features, for instance the
+%D support of linenumbering, which can best be studied in the
+%D documented support module.
+
+\let\currenttyping     \empty
+\let\currenttypingclass\??ty  % saveguard
+
+% \def\typingparameter#1%
+%   {\executeifdefined
+%      {\currenttypingclass\currenttyping#1}%
+%      {\executeifdefined{\currenttypingclass#1}\empty}}
+
+\def\typingparameter#1%
+  {\ifcsname\currenttypingclass\currenttyping#1\endcsname
+     \csname\currenttypingclass\currenttyping#1\endcsname
+   \else\ifcsname\currenttypingclass#1\endcsname
+     \csname\currenttypingclass#1\endcsname
+   \fi\fi}
+
+\def\settypingparameter#1#2%
+  {\setvalue{\currenttypingclass\currenttyping#1}{#2}}
+
+\def\setxtypingparameter#1#2%
+  {\setxvalue{\currenttypingclass\currenttyping#1}{#2}}
+
+% \def\initializetyping
+%   {%\donefalse
+%    \switchtobodyfont[\typingparameter\c!bodyfont]%
+%    \donefalse
+%    \scratchskip\typingparameter\c!oddmargin\relax
+%    \ifzeropt\scratchskip\else\donetrue\fi
+%    \scratchskip\typingparameter\c!evenmargin\relax
+%    \ifzeropt\scratchskip\else\donetrue\fi
+%    \ifdone
+%      \def\doopenupverbatimline
+%        {\getpagestatus
+%         \ifrightpage
+%           \hskip\typingparameter\c!oddmargin\relax
+%         \else
+%           \hskip\typingparameter\c!evenmargin\relax
+%         \fi}%
+%    \else
+%      \doadaptleftskip{\typingparameter\c!margin}%
+%    \fi
+%    \doifdefinedelse{\??bo\typingparameter\c!blank}
+%      {\edef\!!stringa{\csname\??bo\typingparameter\c!blank\endcsname}}
+%      {\edef\!!stringa{\typingparameter\c!blank}}%
+%    \processaction
+%      [\!!stringa]
+%      [ \v!standard=>\scratchskip\ctxparskip,
+%           \v!small=>\scratchskip\blankokleinmaat,
+%          \v!medium=>\scratchskip\blankomiddelmaat,
+%             \v!big=>\scratchskip\blankogrootmaat,
+%        \v!halfline=>\scratchskip.5\baselineskip,
+%            \v!line=>\scratchskip\baselineskip,
+%            \v!none=>\scratchskip\zeropoint,
+%         \s!unknown=>\scratchskip\commalistelement]%
+%    \ifgridsnapping
+%      \ifdim\scratchskip=.5\baselineskip\relax
+%        \edef\verbatimbaselineskip{\the\scratchskip}% new
+%      \else
+%        \edef\verbatimbaselineskip{\the\baselineskip}%
+%      \fi
+%    \else
+%      \edef\verbatimbaselineskip{\the\scratchskip}%
+%    \fi
+%    \setupcommonverbatim}
+
+\setvalue{\??tp:\c!blank:\v!standard}{\ctxparskip}
+\setvalue{\??tp:\c!blank:\v!small   }{\blankokleinmaat}
+\setvalue{\??tp:\c!blank:\v!medium  }{\blankomiddelmaat}
+\setvalue{\??tp:\c!blank:\v!big     }{\blankogrootmaat}
+\setvalue{\??tp:\c!blank:\v!halfline}{.5\baselineskip}
+\setvalue{\??tp:\c!blank:\v!line    }{\baselineskip}
+\setvalue{\??tp:\c!blank:\v!none    }{\zeropoint}
+
+\def\initializetyping
+  {%\donefalse
+   \switchtobodyfont[\typingparameter\c!bodyfont]%
+   \donefalse
+   \scratchskip\typingparameter\c!oddmargin\relax
+   \ifzeropt\scratchskip\else\donetrue\fi
+   \scratchskip\typingparameter\c!evenmargin\relax
+   \ifzeropt\scratchskip\else\donetrue\fi
+   \ifdone
+     \def\doopenupverbatimline
+       {\getpagestatus
+        \ifrightpage
+          \hskip\typingparameter\c!oddmargin\relax
+        \else
+          \hskip\typingparameter\c!evenmargin\relax
+        \fi}%
+   \else
+     \doadaptleftskip{\typingparameter\c!margin}%
+   \fi
+   \edef\!!stringa{\executeifdefined{\??bo\typingparameter\c!blank}{\typingparameter\c!blank}}%
+   \scratchskip\executeifdefined{\??tp:\c!blank:\!!stringa}\!!stringa\relax
+   \ifgridsnapping
+     \ifdim\scratchskip=.5\baselineskip\relax
+       \edef\verbatimbaselineskip{\the\scratchskip}% new
+     \else
+       \edef\verbatimbaselineskip{\the\baselineskip}%
+     \fi
+   \else
+     \edef\verbatimbaselineskip{\the\scratchskip}%
+   \fi
+   \setupcommonverbatim}
+
+%D The basic display verbatim commands are defined in an
+%D indirect way. As we will see, they are a specific case of a
+%D more general mechanism.
+
+% we need this hack because otherwise verbatim skips
+% the first line (everything after the initial command)
+
+\def\dostarttyping#1% tricky non standard lookahead
+  {\bgroup
+   \let\currenttypingclass\??tp
+   \edef\currenttyping{#1}%
+   \obeylines
+   \futurelet\nexttoken\dodostarttyping}
+
+\def\dodostarttyping
+  {\ifx\nexttoken[%
+     \expandafter\dododostarttyping
+   \else
+     \expandafter\nododostarttyping
+   \fi}
+
+\def\nododostarttyping
+  {\dododostarttyping[]}
+
+\def\dododostarttyping[#1]%
+  {\typingparameter\c!before
+   \startpacked % includes \bgroup
+   \dosetuptypelinenumbering{#1}%
+   \initializetyping
+   \startverbatimcolor
+   \expanded{\processdisplayverbatim{\s!stop\currenttyping}}}
+
+\def\dostoptyping#1% hm, currenttyping
+  {\stopverbatimcolor
+   \stoppacked  % includes \egroup
+   \typingparameter\c!after
+   \egroup
+   \dochecknextindentation{\??tp#1}%
+   \dorechecknextindentation}
+
+%D Line numbering for files is combined with filtering, while
+%D display verbatim has the ability to continue.
+%D
+%D \starttyping
+%D \typefile[numbering=file,start=10,stop=12]{test.tex}
+%D
+%D \definetyping[code][numbering=line]
+%D
+%D \starttext
+%D \startcode
+%D ...
+%D ...
+%D \stopcode
+%D
+%D \startcode[continue]
+%D ...
+%D ...
+%D \stopcode
+%D
+%D \startcode[start=10]
+%D ...
+%D \stopcode
+%D \stoptyping
+
+%D \macros
+%D   {setuptyping}
+%D
+%D The setup of typing accepts two arguments. The optional
+%D first one identifies the user defined ones. If only one
+%D argument is given, the values apply to both the standard
+%D command \type{\starttyping} and \type{\typefile}.
+
+\def\dosetuptyping[#1][#2]%
+  {\ifsecondargument
+     \getparameters[\??tp#1][#2]%
+   \else
+     \getparameters[\??tp][#1]%
+   \fi}
+
+\def\setuptyping
+  {\dodoubleempty\dosetuptyping}
+
+%D \macros
+%D   {definetype}
+%D
+%D Specific inline verbatim commands can be defined with the
+%D following command.
+
+\def\definetype
+  {\dodoubleempty\dodefinetype}
+
+\def\dodefinetype[#1][#2]%
+  {\unexpanded\setvalue{#1}{\dotype{#1}}%
+   \getparameters[\??ty#1][#2]}
+
+%D \macros
+%D   {definetyping}
+%D
+%D For most users the standard \type{\start}||\type{\stop}||pair
+%D will suffice, but for documentation purposes the next
+%D definition command can be of use:
+%D
+%D \starttyping
+%D \definetyping[extratyping][margin=3em]
+%D
+%D \startextratyping
+%D these extra ones are indented by 1 em
+%D \stopextratyping
+%D \stoptyping
+%D
+%D The definitions default to the standard typing values.
+
+\def\presettyping[#1][#2]%
+  {\copyparameters[\??tp#1][\??tp][\c!color,\c!style]%
+   \getparameters [\??tp#1][#2]}
+
+\def\dodefinetyping[#1][#2]%
+  {\setvalue{\e!start#1}{\dostarttyping{#1}}%
+   \setvalue{\e!stop #1}{\dostoptyping {#1}}%
+   \presettyping[#1][#2]}
+
+\def\definetyping
+  {\dodoubleempty\dodefinetyping}
+
+%D We can use some core color commands. These are faster than
+%D the standard color switching ones and work ok on a line by
+%D line basis.
+%D
+%D \starttyping
+%D \def\setupverbatimcolor%
+%D   {\edef\prettypalet{\prettyidentifier\typingparameter\c!palet}%
+%D    \def\beginofpretty[##1]{\startcolormode{\prettypalet:##1}}%
+%D    \def\endofpretty       {\stopcolormode}}
+%D \stoptyping
+%D
+%D Since we support a global color too, the folowing
+%D definition is better:
+
+% \def\setupverbatimcolor% fast and local versus slow and global
+%   {\doifelsenothing{\typingparameter\c!color}
+%      {\def\beginofpretty[##1]{\startcolormode{\prettypalet:##1}}%
+%       \let\endofpretty        \restorecolormode % \stopcolormode
+%       \let\startverbatimcolor \relax
+%       \let\stopverbatimcolor  \relax
+%       \let\verbatimcolor      \relax}
+%      {\def\beginofpretty[##1]{\startcolor[\prettypalet:##1]}%
+%       \let\endofpretty        \stopcolor
+%       \def\startverbatimcolor{\startcolor[\typingparameter\c!color]}%
+%       \let\stopverbatimcolor  \stopcolor
+%       \def\verbatimcolor     {\getvalue{\typingparameter\c!color}}}% command !
+%    \doifelsenothing{\typingparameter\c!palet}
+%      {\let\prettypalet\empty
+%       \let\endofpretty\relax
+%       \def\beginofpretty[##1]{}}
+%      {\edef\prettypalet{\prettyidentifier\typingparameter\c!palet}}}
+%
+% let's forget about this optimization not that we have mkiv
+
+\def\setupverbatimcolor
+  {\def\beginofpretty[##1]{\startcolor[\prettypalet:##1]}%
+   \let\endofpretty        \stopcolor
+   \def\startverbatimcolor{\startcolor[\typingparameter\c!color]}%
+   \let\stopverbatimcolor  \stopcolor
+   \def\verbatimcolor     {\getvalue{\typingparameter\c!color}}% command !
+   \doifelsenothing{\typingparameter\c!palet}
+     {\let\prettypalet\empty
+      \let\endofpretty\relax
+      \def\beginofpretty[##1]{}}
+     {\edef\prettypalet{\prettyidentifier\typingparameter\c!palet}}}
+
+\let\prettypalet       \empty
+\let\startverbatimcolor\relax
+\let\stopverbatimcolor \relax
+\let\verbatimcolor     \relax
+
+%D In the verbatim module, there are some examples given of
+%D the more obscure features of the verbatim environments.
+%D
+%D \startbuffer
+%D \startTEX
+%D \def\mathematics#1%         % usage: \type {\mathematics{x^2}}
+%D   {\ifmmode#1\else$#1$\fi}  % becomes: \mathematics{x^2}
+%D \stopTEX
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D This gives, as can be expected:
+%D
+%D \getbuffer
+%D
+%D When we want to see some typeset \TEX\ too, we can say:
+%D
+%D \startbuffer
+%D \startTEX
+%D \def\mathematics#1%         %%\ N  usage: \type {\mathematics{x^2}}
+%D   {\ifmmode#1\else$#1$\fi}  %%\ N  becomes: \mathematics{x^2}
+%D \stopTEX
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D or:
+%D
+%D \getbuffer
+%D
+%D In a similar way:
+%D
+%D \startbuffer
+%D \startSQL
+%D select *       -- indeed, here we {\em do} select
+%D   from tableA
+%D   where 1 = 2
+%D \stopSQL
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D gives:
+%D
+%D \getbuffer
+%D
+%D The next examples sow how we can directly call for natural
+%D \TEX\ comments:
+%D
+%D \startbuffer
+%D \setuptyping
+%D   [TEX]
+%D   [text=yes]
+%D
+%D \startTEX
+%D \def\mathematics#1%         % usage: \type {\mathematics{x^2}}
+%D   {\ifmmode#1\else$#1$\fi}  % becomes: \mathematics{x^2}
+%D \stopTEX
+%D
+%D \setuptyping
+%D   [SQL]
+%D   [text=yes,palet=,icommand=\bf,vcommand=,ccommand=\it]
+%D
+%D \startSQL
+%D select *       -- indeed, here we {\em do} select
+%D   from tableA
+%D   where 1 = 2
+%D \stopSQL
+%D
+%D \setuptyping
+%D   [SQL]
+%D   [ccommand=\tf\underbar]
+%D
+%D \startSQL
+%D select *       -- indeed, here we {\em do} select
+%D   from tableA
+%D   where 1 = 2
+%D \stopSQL
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D Now watch:
+%D
+%D \getbuffer
+%D
+%D The natural \TEX\ typesetting was introduced when Tobias
+%D and Berend started using verbatim \JAVASCRIPT\ and \SQL.
+
+%D \macros
+%D   {EveryPar, EveryLine, iflinepar}
+%D
+%D One of the features of these commands is the support of
+%D \type{\EveryPar}, \type{\EveryLine} and \type{\iflinepar}.
+%D In the documentation of the verbatim support module we give
+%D some examples of line- and paragraph numbering using these
+%D macros.
+
+%D \macros
+%D   {typefile}
+%D
+%D Typesetting files verbatim (for the moment) only supports
+%D colorization of \TEX\ sources as valid option. The other
+%D setup values are inherited from display verbatim.
+%D The implementation of \type{\typefile} is straightforward:
+
+% new feature (not yet 100\% ok)
+%
+% \setuptyping[file][numbering=file]
+%
+% \typefile[start=2,nlines=3]{zapf}
+% \typefile[start=continue,nlines=13]{zapf}
+% \typefile{zapf}
+%
+% \setuptyping[file][numbering=line]
+%
+% \typefile[start=4,step=3]{zapf}
+% \typefile{zapf}
+
+\def\typefile
+  {\dodoubleempty\dotypefile}
+
+\def\dotypefile[#1][#2]#3%
+  {\ifsecondargument
+     \dodotypefile[#1][#2]{#3}%
+   \else\iffirstargument
+     \doifassignmentelse{#1}
+       {\dodotypefile[\v!file][#1]{#3}}
+       {\dodotypefile[#1][]{#3}}%
+   \else
+     \dodotypefile[\v!file][]{#3}%
+   \fi\fi}
+
+\def\dosetuptypelinenumbering#1% fuzzy
+  {\doifundefined{\currenttypingclass\currenttyping\c!start}
+     {\setuptyping[\currenttyping][\c!start=1,\c!stop=,\c!step=1,\c!nlines=]}%
+   \setuptyping[\currenttyping][#1]%
+   \doifelse{\typingparameter\c!numbering}\v!file
+     {% kind of special: filters lines !
+      \setuplinenumbering[\c!method=\v!file]%
+      \donetrue}
+     {\doifelse{\typingparameter\c!numbering}\v!line
+        {% \setuplinenumbering defaults start/step to 1/1, so we need
+         \doifinsetelse\v!continue{#1,\typingparameter\c!start}
+           {\scratchcounter0\typingparameter\c!n
+            \setxtypingparameter\c!start{\ifnum\scratchcounter=0 1\else\number\scratchcounter\fi}}%
+           {\doifnothing{\typingparameter\c!start}{\settypingparameter\c!start{1}}}%
+         \doifnothing{\typingparameter\c!step}{\settypingparameter\c!step{1}}%
+         \setuplinenumbering
+           [\c!method=\v!type,
+            \c!start=\typingparameter\c!start,
+            \c!stop=\typingparameter\c!stop,
+            \c!step=\typingparameter\c!step]%
+         \donetrue}
+        {\donefalse}}%
+   \ifdone
+     \ifx\startlinenumbering\undefined \let\startlinenumbering\relax \fi
+     \ifx\stoplinenumbering \undefined \let\stoplinenumbering \relax \fi
+     \def\beginofverbatimlines{\startlinenumbering}%
+     \def\endofverbatimlines  {\stoplinenumbering\setxtypingparameter\c!n{\number\linenumber}}%
+   \fi}
+
+\def\reporttypingerror#1% temp hack
+  {\blank
+   \dontleavehmode\hbox\bgroup
+     \expanded{\defconvertedargument\noexpand\ascii{#1}}%
+     \tttf[\makemessage\m!verbatims1\ascii]%
+     \showmessage\m!verbatims1\ascii
+   \egroup
+   \blank}
+
+\def\dosometyping#1#2#3#4#5%
+  {\bgroup
+   \let\currenttypingclass\??tp
+   \edef\currenttyping{#1}%
+   \typingparameter\c!before
+   \startpacked % includes \bgroup
+   \dosetuptypelinenumbering{#2}%
+   \doifinset{\typingparameter\c!option}{\v!commands,\v!slanted,\v!normal}
+     {\setuptyping[#1][\c!option=\v!none]}%
+   \doif{\typingparameter\c!option}\v!color
+     {\expandafter\aftersplitstring#3\at.\to\prettyidentifier
+      \settypingparameter\c!option{\prettyidentifier}}%
+   \initializetyping
+   \startverbatimcolor
+   \doifundefinedelse{\currenttypingclass#3\v!global\c!start}
+     {\scratchcounter\zerocount}
+     {\scratchcounter\getvalue{\currenttypingclass#3\v!global\c!start}}%
+   \advance\scratchcounter\plusone
+   \setxvalue{\currenttypingclass#3\v!global\c!start}{\the\scratchcounter}%
+   \doifelsenothing{\typingparameter\c!start}
+     {#4}
+     {\doif{\typingparameter\c!start}\v!continue
+        {\setevalue{\currenttypingclass#1\c!start}%
+           {\getvalue{\currenttypingclass#3\v!global\c!start}}}%
+      \doifelsenothing{\typingparameter\c!stop}
+        {\doifelsenothing{\typingparameter\c!nlines}
+           {#4}
+           {\setxvalue{\currenttypingclass#3\v!global\c!start}%
+              {\the\numexpr\typingparameter\c!start+\typingparameter\c!nlines+\minusone\relax}%
+            #5{\typingparameter\c!start}{\getvalue{\currenttypingclass#3\v!global\c!start}}}}%
+        {#5{\typingparameter\c!start}{\typingparameter\c!stop}}}%
+   \stopverbatimcolor
+   \stoppacked
+   \typingparameter\c!after
+   \egroup}
+
+\def\doifelsetypingfile#1% sets \readfilename (we will make this proper mkiv i.e. less messy)
+  {\doiflocfileelse{#1}
+     {\firstoftwoarguments}
+     {\doifinputfileelse{#1}
+        {\def\readfilename{\pathplusfile\filepath{#1}}\firstoftwoarguments} % messy, looks wrong too
+        {\secondoftwoarguments}}}
+
+\def\dodotypefile[#1][#2]#3%
+  {\doifelsetypingfile{#3}
+     {\dosometyping{#1}{#2}{#3}{\processfileverbatim\readfilename}{\processfilelinesverbatim\readfilename}}
+     {\reporttypingerror{#3}}}
+
+%D \macros
+%D   {filename}
+%D
+%D Typesetting filenames in monospaced fonts is possible with
+%D
+%D \starttyping
+%D \filename{here/there/filename.suffix}
+%D \stoptyping
+%D
+%D The definition is not that spectacular.
+
+\unexpanded\def\filename#1{{\tttf\hyphenatedfilename{#1}}}
+
+%D This leaves some settings:
+
+\permitshiftedendofverbatim
+\optimizeverbatimtrue
+
+%D And a bonus macro:
+
+\def\verbatim#1{\defconvertedargument\ascii{#1}\ascii}
+
+%D The setups for display verbatim and file verbatim are
+%D shared. One can adapt the extra defined typing environments,
+%D but they also default to the values below. Watch the
+%D alternative escape character.
+
+\setuptyping
+  [       \c!before=\blank,
+           \c!after=\blank,
+        \c!bodyfont=,
+           \c!color=,
+           \c!space=\v!off,
+            \c!page=\v!no,
+             \c!tab=\s!ascii,
+          \c!option=\v!none,
+           \c!palet=colorpretty,
+            \c!text=\v!no,
+           \c!style=\tttf,
+        \c!icommand=\ttsl,
+        \c!vcommand=,
+        \c!ccommand=\tttf,
+      \c!indentnext=\v!yes,
+          \c!margin=\!!zeropoint,
+      \c!evenmargin=\!!zeropoint,
+       \c!oddmargin=\!!zeropoint,
+           \c!blank=\v!line,
+          \c!escape=/, % beware \string\ , should also be accepted
+       \c!numbering=\v!no,
+           \c!lines=,
+           \c!empty=,
+           \c!start=1,
+            \c!stop=,
+            \c!step=1,
+        \c!continue=,
+          \c!nlines=]
+
+\definetyping[\v!typing]
+
+\presettyping[\v!file][]
+
+% \setuptyping % not needed
+%   [\v!file]
+%   [\c!start=1,
+%    \c!stop=,
+%    \c!step=1,
+%    \c!continue=,
+%    \c!nlines=]
+
+%D The setups for inline verbatim default to:
+
+\setuptype
+  [ \c!space=\v!off,
+    \c!color=,
+    \c!style=\tt\tf, % \tttf gives problems with {\tx \type...}
+     \c!page=\v!no,
+      \c!tab=\v!yes,
+    \c!palet=colorpretty,
+   \c!option=\v!normal]
+
+\definetyping[RAW]   [\c!option=RAW]
+\definetyping[MP]    [\c!option=MP]
+\definetyping[PL]    [\c!option=PL]
+\definetyping[PM]    [\c!option=PL]
+\definetyping[JS]    [\c!option=JS]
+\definetyping[JV]    [\c!option=JV]
+\definetyping[SQL]   [\c!option=SQL]
+\definetyping[TEX]   [\c!option=TEX]
+\definetyping[PAS]   [\c!option=PAS]
+\definetyping[PASCAL][\c!option=PAS]
+\definetyping[MOD]   [\c!option=PAS]
+\definetyping[MODULA][\c!option=PAS]
+\definetyping[DELPHI][\c!option=PAS]
+\definetyping[EIFFEL][\c!option=EIF]
+\definetyping[XML]   [\c!option=XML]
+\definetyping[LUA]   [\c!option=LUA]
+
+\installprettytype [RAW]        [RAW]
+
+\installprettytype [TEX]        [TEX]
+
+\installprettytype [PERL]       [PL]
+\installprettytype [PL]         [PL]
+\installprettytype [PM]         [PL]
+
+\installprettytype [METAPOST]   [MP]
+\installprettytype [METAFONT]   [MP]
+\installprettytype [MP]         [MP]
+\installprettytype [MF]         [MP]
+
+\installprettytype [JAVASCRIPT] [JS]
+\installprettytype [JAVA]       [JV]
+\installprettytype [JS]         [JS]
+\installprettytype [JV]         [JV]
+
+\installprettytype [SQL]        [SQL]
+
+\installprettytype [PASCAL]     [PAS]
+\installprettytype [PAS]        [PAS]
+\installprettytype [MODULA]     [PAS]
+\installprettytype [MOD]        [PAS]
+
+\installprettytype [EIFFEL]     [EIF]
+\installprettytype [EIF]        [EIF]
+\installprettytype [E]          [EIF]
+
+\installprettytype [XML]        [XML]
+
+\installprettytype [LUA]        [LUA]
+
+\installnewpretty M {\setupprettiesintype {MP}\setupprettytype}
+\installnewpretty P {\setupprettiesintype {PL}\setupprettytype}
+\installnewpretty T {\setupprettiesintype{TEX}\setupprettytype}
+\installnewpretty J {\setupprettiesintype {JV}\setupprettytype}
+\installnewpretty S {\setupprettiesintype{SQL}\setupprettytype}
+\installnewpretty W {\setupprettiesintype{PAS}\setupprettytype} % Wirth
+\installnewpretty I {\setupprettiesintype{EIF}\setupprettytype} % E taken
+\installnewpretty X {\setupprettiesintype{XML}\setupprettytype}
+
+%D We use the \CONTEXT\ color system for switching to and from
+%D color mode. We can always redefine these colors afterwards.
+
+\definecolor [colorprettyone]   [r=.9, g=.0, b=.0] % red
+\definecolor [colorprettytwo]   [r=.0, g=.8, b=.0] % green
+\definecolor [colorprettythree] [r=.0, g=.0, b=.9] % blue
+\definecolor [colorprettyfour]  [r=.8, g=.8, b=.6] % yellow
+
+\definecolor [grayprettyone]    [s=.30]
+\definecolor [grayprettytwo]    [s=.45]
+\definecolor [grayprettythree]  [s=.60]
+\definecolor [grayprettyfour]   [s=.75]
+
+\definepalet
+  [colorpretty]
+  [  prettyone=colorprettyone,
+     prettytwo=colorprettytwo,
+   prettythree=colorprettythree,
+    prettyfour=colorprettyfour]
+
+\definepalet
+  [graypretty]
+  [  prettyone=grayprettyone,
+     prettytwo=grayprettytwo,
+   prettythree=grayprettythree,
+    prettyfour=grayprettyfour]
+
+\definepalet [TEXcolorpretty] [colorpretty]
+\definepalet [TEXgraypretty]  [graypretty]
+\definepalet [PLcolorpretty]  [colorpretty]
+\definepalet [PLgraypretty]   [graypretty]
+\definepalet [PMcolorpretty]  [colorpretty]
+\definepalet [PMgraypretty]   [graypretty]
+\definepalet [MPcolorpretty]  [colorpretty]
+\definepalet [MPgraypretty]   [graypretty]
+\definepalet [JVcolorpretty]  [colorpretty]
+\definepalet [JVgraypretty]   [graypretty]
+\definepalet [JScolorpretty]  [colorpretty]
+\definepalet [JSgraypretty]   [graypretty]
+\definepalet [SQLcolorpretty] [colorpretty]
+\definepalet [SQLgraypretty]  [graypretty]
+\definepalet [PAScolorpretty] [colorpretty]
+\definepalet [PASgraypretty]  [graypretty]
+\definepalet [EIFcolorpretty] [colorpretty]
+\definepalet [EIFgraypretty]  [graypretty]
+\definepalet [XMLcolorpretty] [colorpretty]
+\definepalet [XMLgraypretty]  [graypretty]
+\definepalet [LUAcolorpretty] [colorpretty]
+\definepalet [LUAgraypretty]  [graypretty]
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/catc-act.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/catc-act.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/catc-act.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,65 @@
+%D \module
+%D   [       file=catc-act,
+%D        version=2006.09.18,
+%D          title=\CONTEXT\ Catcode Macros,
+%D       subtitle=Default Catcode Tables,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This module deals with some active character handling. Use
+%D with care.
+
+%D \macros
+%D   {installactivecharacter}
+
+\def\installactivecharacter#1 %
+  {\edef\temp{\detokenize{#1}}%
+   \cctcounterc\expandafter`\temp\relax % relax needed
+   \expandafter\startextendcatcodetable
+      \expandafter\ctxcatcodes\expandafter\catcode\the\cctcounterc\activecatcode
+   \stopextendcatcodetable
+   \letcatcodecommand \ctxcatcodes \cctcounterc \temp \relax
+   \ifnum\currentcatcodetable=\ctxcatcodes \setcatcodetable\ctxcatcodes \fi}
+
+%D \macros
+%D   {defineactivecharacter}
+%D
+%D Use this one with care, esp in combination with catcode
+%D vectors. There are better ways now.
+
+\chardef\activehackcode=`~
+
+\def\defineactivecharacter #1#2 #3%
+  {\cctcounterc\uccode\activehackcode
+   \if#1"\uccode\activehackcode\expandafter\doifnumberelse\expandafter{\string#1#2}\empty #1#2\else
+         \uccode\activehackcode\expandafter\doifnumberelse\expandafter{\string#1#2}\empty`#1#2\fi
+   \catcode\uccode\activehackcode\activecatcode
+   \uppercase{\def\next{~}}%
+   \uccode\activehackcode\cctcounterc
+   \expandafter\expandafter\expandafter\def\expandafter\next\expandafter
+     {\expandafter\dohandleactivecharacter\next{#3}}}
+
+\chardef\activecharactermode\plusone % overloading still backward compatible
+
+\def\dodohandleactivecharacter#1#2{#2}
+\def\donthandleactivecharacter#1#2{\noexpand#1}
+
+\def\dohandleactivecharacter
+  {\ifcase\activecharactermode
+     \expandafter\donthandleactivecharacter
+   \else
+     \expandafter\dodohandleactivecharacter
+   \fi}
+
+\def\makecharacteractive #1 {\catcode`#1\active}
+
+% \def\installanddefineactivecharacter #1 % #2%
+%   {\normalexpanded{\noexpand\installactivecharacter \utfchar{#1} }% wrong
+%    \defineactivecharacter #1 }% {#2}}
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/catc-ctx.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/catc-ctx.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/catc-ctx.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,76 @@
+%D \module
+%D   [       file=catc-cys,
+%D        version=2006.09.18,
+%D          title=\CONTEXT\ Catcode Macros,
+%D       subtitle=Extra Tables,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D We prefer to define relevant catcode tables in this file instead
+%D of everywhere around.
+
+\ifdefined \ctxcatcodes \else \newcatcodetable \ctxcatcodes \fi
+\ifdefined \prtcatcodes \else \newcatcodetable \prtcatcodes \fi
+
+\startcatcodetable \ctxcatcodes
+    \catcode\tabasciicode       \spacecatcode
+    \catcode\endoflineasciicode \endoflinecatcode
+    \catcode\formfeedasciicode  \endoflinecatcode
+    \catcode\spaceasciicode     \spacecatcode
+    \catcode\endoffileasciicode \ignorecatcode
+    \catcode\circumflexasciicode\superscriptcatcode
+    \catcode\underscoreasciicode\subscriptcatcode
+    \catcode\ampersandasciicode \alignmentcatcode
+    \catcode\backslashasciicode \escapecatcode
+    \catcode\leftbraceasciicode \begingroupcatcode
+    \catcode\rightbraceasciicode\endgroupcatcode
+    \catcode\dollarasciicode    \mathshiftcatcode
+    \catcode\hashasciicode      \parametercatcode
+    \catcode\commentasciicode   \commentcatcode
+    \catcode\tildeasciicode     \activecatcode
+    \catcode\barasciicode       \activecatcode
+\stopcatcodetable
+
+\startcatcodetable \prtcatcodes
+    \catcode\tabasciicode       \spacecatcode
+    \catcode\endoflineasciicode \endoflinecatcode
+    \catcode\formfeedasciicode  \endoflinecatcode
+    \catcode\spaceasciicode     \spacecatcode
+    \catcode\endoffileasciicode \ignorecatcode
+    \catcode\circumflexasciicode\superscriptcatcode
+    \catcode\underscoreasciicode\subscriptcatcode
+    \catcode\ampersandasciicode \alignmentcatcode
+    \catcode\backslashasciicode \escapecatcode
+    \catcode\leftbraceasciicode \begingroupcatcode
+    \catcode\rightbraceasciicode\endgroupcatcode
+    \catcode\dollarasciicode    \mathshiftcatcode
+    \catcode\hashasciicode      \parametercatcode
+    \catcode\commentasciicode   \commentcatcode
+    \catcode`\@                 \lettercatcode
+    \catcode`\!                 \lettercatcode
+    \catcode`\?                 \lettercatcode
+    \catcode\tildeasciicode     \activecatcode
+    \catcode\barasciicode       \activecatcode
+\stopcatcodetable
+
+\letcatcodecommand \ctxcatcodes \barasciicode   \relax
+\letcatcodecommand \ctxcatcodes \tildeasciicode \relax
+
+     \catcodetable        \ctxcatcodes
+\let \defaultcatcodetable \ctxcatcodes
+
+% for the moment here:
+
+\def\starttexcode
+  {\pushcatcodetable
+   \catcodetable\prtcatcodes}
+
+\def\stoptexcode
+  {\popcatcodetable}
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/catc-def.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/catc-def.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/catc-def.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,142 @@
+%D \module
+%D   [       file=catc-def,
+%D        version=2006.09.18,
+%D          title=\CONTEXT\ Catcode Macros,
+%D       subtitle=Default Tables,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D The following catcode tables are rather \CONTEXT\ independent.
+
+\ifdefined\nilcatcodes \else \newcatcodetable \nilcatcodes  \fi
+\ifdefined\texcatcodes \else \newcatcodetable \texcatcodes  \fi
+\ifdefined\luacatcodes \else \newcatcodetable \luacatcodes  \fi
+\ifdefined\notcatcodes \else \newcatcodetable \notcatcodes  \fi
+\ifdefined\vrbcatcodes \else \newcatcodetable \vrbcatcodes  \fi
+\ifdefined\prtcatcodes \else \newcatcodetable \prtcatcodes  \fi
+
+\startcatcodetable \nilcatcodes
+    \catcode\tabasciicode      \spacecatcode
+    \catcode\endoflineasciicode\endoflinecatcode
+    \catcode\formfeedasciicode \endoflinecatcode
+    \catcode\spaceasciicode    \spacecatcode
+    \catcode\endoffileasciicode\ignorecatcode
+\stopcatcodetable
+
+\startcatcodetable \texcatcodes
+    \catcode\tabasciicode       \spacecatcode
+    \catcode\endoflineasciicode \endoflinecatcode
+    \catcode\formfeedasciicode  \endoflinecatcode
+    \catcode\spaceasciicode     \spacecatcode
+    \catcode\endoffileasciicode \ignorecatcode
+    \catcode\circumflexasciicode\superscriptcatcode
+    \catcode\underscoreasciicode\subscriptcatcode
+    \catcode\ampersandasciicode \alignmentcatcode
+    \catcode\backslashasciicode \escapecatcode
+    \catcode\leftbraceasciicode \begingroupcatcode
+    \catcode\rightbraceasciicode\endgroupcatcode
+    \catcode\dollarasciicode    \mathshiftcatcode
+    \catcode\hashasciicode      \parametercatcode
+    \catcode\commentasciicode   \commentcatcode
+\stopcatcodetable
+
+\startcatcodetable \luacatcodes
+    \catcode\tabasciicode       \othercatcode
+    \catcode\endoflineasciicode \othercatcode
+    \catcode\formfeedasciicode  \othercatcode
+    \catcode\spaceasciicode     \othercatcode
+    \catcode\endoffileasciicode \ignorecatcode
+    \catcode\circumflexasciicode\othercatcode
+    \catcode\underscoreasciicode\othercatcode
+    \catcode\ampersandasciicode \othercatcode
+    \catcode\backslashasciicode \escapecatcode
+    \catcode\commentasciicode   \othercatcode
+    \catcode\hashasciicode      \othercatcode
+    \catcode\barasciicode       \othercatcode
+    \catcode\leftbraceasciicode \othercatcode
+    \catcode\rightbraceasciicode\othercatcode
+    \catcode\tildeasciicode     \othercatcode
+    \catcode\dollarasciicode    \othercatcode
+\stopcatcodetable
+
+\startcatcodetable \notcatcodes % probably less needed
+    \catcode\tabasciicode       \spacecatcode
+    \catcode\endoflineasciicode \endoflinecatcode
+    \catcode\formfeedasciicode  \endoflinecatcode
+    \catcode\spaceasciicode     \spacecatcode
+    \catcode\endoffileasciicode \ignorecatcode
+    \catcode\circumflexasciicode\othercatcode
+    \catcode\underscoreasciicode\othercatcode
+    \catcode\ampersandasciicode \othercatcode
+    \catcode\tildeasciicode     \othercatcode
+    \catcode\hashasciicode      \othercatcode
+    \catcode\dollarasciicode    \othercatcode
+    \catcode\commentasciicode   \othercatcode
+    \catcode`\<                 \othercatcode
+    \catcode`\>                 \othercatcode
+    \catcode\leftbraceasciicode \othercatcode
+    \catcode\rightbraceasciicode\othercatcode
+    \catcode`\"                 \othercatcode
+    \catcode`\'                 \othercatcode
+    \catcode`\/                 \othercatcode
+    \catcode\backslashasciicode \othercatcode
+    \catcode\barasciicode       \othercatcode
+\stopcatcodetable
+
+\startcatcodetable \vrbcatcodes % probably less needed
+    \catcode\tabasciicode      \othercatcode
+    \catcode\endoflineasciicode\othercatcode
+    \catcode\formfeedasciicode \othercatcode
+    \catcode\spaceasciicode    \othercatcode
+    \catcode\endoffileasciicode\othercatcode
+\stopcatcodetable
+
+\startcatcodetable \prtcatcodes
+    \catcode\tabasciicode       \spacecatcode
+    \catcode\endoflineasciicode \endoflinecatcode
+    \catcode\formfeedasciicode  \endoflinecatcode
+    \catcode\spaceasciicode     \spacecatcode
+    \catcode\endoffileasciicode \ignorecatcode
+    \catcode\circumflexasciicode\superscriptcatcode
+    \catcode\underscoreasciicode\subscriptcatcode
+    \catcode\ampersandasciicode \alignmentcatcode
+    \catcode\backslashasciicode \escapecatcode
+    \catcode\leftbraceasciicode \begingroupcatcode
+    \catcode\rightbraceasciicode\endgroupcatcode
+    \catcode\dollarasciicode    \mathshiftcatcode
+    \catcode\hashasciicode      \parametercatcode
+    \catcode\commentasciicode   \commentcatcode
+    \catcode`\@                 \lettercatcode
+    \catcode`\!                 \lettercatcode
+    \catcode`\?                 \lettercatcode
+    \catcode\tildeasciicode     \activecatcode
+    \catcode\barasciicode       \activecatcode
+\stopcatcodetable
+
+%D Because some characters have a special meaning, we provide
+%D shortcuts to their character representation.
+
+\chardef\^=\circumflexasciicode
+\chardef\_=\underscoreasciicode % but way too wide in lm, so ... until that's fixed:
+\chardef\&=\ampersandasciicode
+\chardef\%=\commentasciicode
+\chardef\#=\hashasciicode
+\chardef\$=\dollarasciicode
+\chardef\{=\leftbraceasciicode
+\chardef\}=\rightbraceasciicode
+\chardef\\=\backslashasciicode
+
+%def\_{\leavevmode     \kern.06em \vbox{\hrule width.3em}}
+\def\_{\dontleavehmode \kern.06em \vbox{\hrule width.3em}}
+
+%D From now on we can use the protection mechanisms.
+
+\def\unprotect {\pushcatcodetable\setcatcodetable\prtcatcodes}
+\def\protect   {\popcatcodetable}
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/catc-ini.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/catc-ini.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/catc-ini.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,269 @@
+%D \module
+%D   [       file=catc-ini,
+%D        version=2006.09.18,
+%D          title=\CONTEXT\ System Macros,
+%D       subtitle=Catcode Handling,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D We've split the functionality of syst-cat.* over more files
+%D now so that we can load more selectively.
+
+%D A long standing wish has been the availability of catcode
+%D arrays. Because traditional \TEX\ does ot provide this we
+%D implement a fake method in the Mark II file.
+
+\ifx\zerocount\undefined \chardef           \zerocount= 0 \fi
+\ifx\plusone  \undefined \chardef           \plusone  = 1 \fi
+\ifx\minusone \undefined \newcount\minusone \minusone =-1 \fi
+
+\chardef\escapecatcode       =   0
+\chardef\begingroupcatcode   =   1
+\chardef\endgroupcatcode     =   2
+\chardef\mathshiftcatcode    =   3
+\chardef\alignmentcatcode    =   4
+\chardef\endoflinecatcode    =   5
+\chardef\parametercatcode    =   6
+\chardef\superscriptcatcode  =   7
+\chardef\subscriptcatcode    =   8
+\chardef\ignorecatcode       =   9
+\chardef\spacecatcode        =  10
+\chardef\lettercatcode       =  11
+\chardef\othercatcode        =  12   \chardef\other  = 12
+\chardef\activecatcode       =  13   \chardef\active = 13
+\chardef\commentcatcode      =  14
+\chardef\invalidcatcode      =  15
+
+\chardef\tabasciicode        =   9  % ^^I
+\chardef\newlineasciicode    =  10  % ^^J don't confuse this one with \endoflineasciicode
+\chardef\formfeedasciicode   =  12  % ^^L
+\chardef\endoflineasciicode  =  13  % ^^M somewhat messy but this can be the active \par
+\chardef\endoffileasciicode  =  26  % ^^Z
+\chardef\spaceasciicode      =  32
+\chardef\hashasciicode       =  35
+\chardef\dollarasciicode     =  36
+\chardef\commentasciicode    =  37
+\chardef\ampersandasciicode  =  38
+\chardef\backslashasciicode  =  92 % `\\
+\chardef\circumflexasciicode =  94
+\chardef\underscoreasciicode =  95
+\chardef\leftbraceasciicode  = 123 % `\{
+\chardef\barasciicode        = 124 % `\|
+\chardef\rightbraceasciicode = 125 % `\}
+\chardef\tildeasciicode      = 126 % `\~
+\chardef\delasciicode        = 127
+
+\newif \ifrecatcodeuppercharacters % only used in good old tex
+
+% \newcount\cctdefcounter \cctdefcounter\plusone % 0 = signal
+\newcount\cctdefcounter \cctdefcounter\zerocount % 0 = signal, so advance before allocate
+
+\newcount\cctcountera
+\newcount\cctcounterb
+\newcount\cctcounterc
+
+\def\newcatcodetable#1%
+  {\global\advance\cctdefcounter\plusone
+   \global\mathchardef#1\cctdefcounter
+   \expandafter\xdef\csname @@ccn:\number\cctdefcounter\endcsname{\string#1}% logging
+   \expandafter\newtoks\csname @@cct:\number\cctdefcounter\endcsname}
+
+\mathchardef\currentcatcodetable\zerocount
+
+\newtoks \setdefaultlowercatcodes
+\newtoks \setdefaultuppercatcodes
+
+\def\next#1% we don't have a proper loop defined yet
+  {\edef\nextnext{#1{\the#1\catcode\the\cctcountera\space
+     \ifnum\catcode\cctcountera=\lettercatcode \lettercatcode\else\othercatcode\fi}}%
+   \nextnext\ifnum\cctcountera<\cctcounterb \advance\cctcountera\plusone \expandafter\next\expandafter#1\fi}
+
+\cctcountera   0  \cctcounterb 127  \next\setdefaultlowercatcodes
+\cctcountera 128  \cctcounterb 255  \next\setdefaultuppercatcodes
+
+\recatcodeuppercharactersfalse
+
+\def\catcodetable#1%
+  {\mathchardef\currentcatcodetable#1%
+   \the\setdefaultlowercatcodes
+   \ifrecatcodeuppercharacters\the\setdefaultuppercatcodes\fi
+   \the\csname @@cct:\number#1\endcsname}
+
+\long\def\startcatcodetable#1#2\stopcatcodetable
+  {\global\csname @@cct:\number#1\endcsname{#2}}
+
+\long\def\startextendcatcodetable#1#2\stopextendcatcodetable
+  {\global\csname @@cct:\number#1\endcsname\expandafter{\the\csname @@cct:\number#1\endcsname#2}}
+
+%D The next command can be defined in a cleaner way in the
+%D Mk IV file but we want to have a fast one with a minimal
+%D chance for interference.
+
+\chardef\activehackcode=`\~
+
+%D Once a catcode is assigned, the next assignments will happen faster.
+
+% (expandable) let
+
+\def\letcatcodecommand {\afterassignment\letcatcodecommanda\cctcountera}
+\def\letcatcodecommanda{\afterassignment\letcatcodecommandb\cctcounterb}
+
+\def\letcatcodecommandb % each time
+  {\ifcsname CCL:\number\cctcountera:\number\cctcounterb\endcsname
+     \csname CCL:\number\cctcountera:\number\cctcounterb\expandafter\endcsname
+   \else
+     \expandafter\letcatcodecommandc
+   \fi}
+
+\def\letcatcodecommandc % only first time
+  {\expandafter\gdef\csname CCL:\number\cctcountera:\number\cctcounterb\expandafter\endcsname\expandafter
+     {\expandafter\let\csname CCC:\number\cctcountera:\number\cctcounterb\endcsname}%
+   \reinstatecatcodecommanda
+   \csname CCL:\number\cctcountera:\number\cctcounterb\endcsname}
+
+% expandable def
+
+\def\defcatcodecommand {\afterassignment\defcatcodecommanda\cctcountera}
+\def\defcatcodecommanda{\afterassignment\defcatcodecommandb\cctcounterb}
+
+\def\defcatcodecommandb % each time
+  {\ifcsname CCD:\number\cctcountera:\number\cctcounterb\endcsname
+     \csname CCD:\number\cctcountera:\number\cctcounterb\expandafter\endcsname
+   \else
+     \expandafter\defcatcodecommandc
+   \fi}
+
+\def\defcatcodecommandc % only first time
+  {\expandafter\gdef\csname CCD:\number\cctcountera:\number\cctcounterb\expandafter\endcsname
+     \expandafter##\expandafter1\expandafter
+       {\expandafter\def\csname CCC:\number\cctcountera:\number\cctcounterb\endcsname{##1}}%
+   \reinstatecatcodecommanda
+   \csname CCD:\number\cctcountera:\number\cctcounterb\endcsname}
+
+% un expandable def (e.g. used for discretionaries)
+
+\def\uedcatcodecommand {\afterassignment\uedcatcodecommanda\cctcountera}
+\def\uedcatcodecommanda{\afterassignment\uedcatcodecommandb\cctcounterb}
+
+\def\uedcatcodecommandb % each time
+  {\ifcsname CCU:\number\cctcountera:\number\cctcounterb\endcsname
+     \csname CCU:\number\cctcountera:\number\cctcounterb\expandafter\endcsname
+   \else
+     \expandafter\uedcatcodecommandc
+   \fi}
+
+\def\uedcatcodecommandc % only first time
+  {\expandafter\gdef\csname CCU:\number\cctcountera:\number\cctcounterb\expandafter\endcsname
+     \expandafter##\expandafter1\expandafter
+       {\expandafter\unexpanded\expandafter\def\csname CCC:\number\cctcountera:\number\cctcounterb\endcsname{##1}}%
+   \reinstatecatcodecommanda
+   \csname CCU:\number\cctcountera:\number\cctcounterb\endcsname}
+
+\def\reinstatecatcodecommand{\afterassignment\reinstatecatcodecommanda\cctcounterb}
+
+\def\reinstatecatcodecommanda % can be used when a direct definition has been done
+  {\bgroup                    % and the selector has been lost
+   \uccode\activehackcode\cctcounterb
+   \catcode\uccode\activehackcode\activecatcode
+   \uppercase{\xdef~{\noexpand\catcodecommand{\number\cctcounterb}}}%
+   \egroup}
+
+\chardef\defaultcatcodetable\zerocount
+
+\def\catcodecommand#1%
+  {\csname CCC:\number
+     \ifcsname CCC:\number\currentcatcodetable:\number#1\endcsname
+       \currentcatcodetable \else \defaultcatcodetable
+     \fi
+   :\number#1\endcsname}
+
+%D \macros
+%D   {restorecatcodes,
+%D    beginrestorecatcodes,endrestorecatcodes}
+%D
+%D We're not finished dealing \CATCODES\ yet. In \CONTEXT\ we
+%D use only one auxiliary file, which deals with tables of
+%D contents, registers, two pass tracking, references etc. This
+%D file, as well as files concerning graphics, is processed when
+%D needed, which can be in the mid of typesetting verbatim.
+%D However, when reading in data in verbatim mode, we should
+%D temporary restore the normal \CATCODES, and that's exactly
+%D what the next macros do. Saving the catcodes can be
+%D disabled by saying \type{\localcatcodestrue}.
+
+\let\savedcatcodetable\relax
+
+\newcount\catcoderestorelevel
+
+\def\pushcatcodetable
+  {\advance\catcoderestorelevel\plusone
+   \tracepushcatcodetable
+   \expandafter\mathchardef\csname scct:\number\catcoderestorelevel\endcsname\currentcatcodetable}
+
+\def\popcatcodetable
+  {\ifcase\catcoderestorelevel
+     \showcatcodenestingerror
+   \else
+     \expandafter\catcodetable\csname scct:\number\catcoderestorelevel\endcsname
+     \tracepopcatcodetable
+     \advance\catcoderestorelevel\minusone
+   \fi}
+
+\def\showcatcodenestingerror % can be overloaded
+  {\immediate\write16{}%
+   \immediate\write16{Fatal error: catcode push/pop mismatch. Fix this!}\wait\end
+   \immediate\write16{}}
+
+\def\restorecatcodes % takes previous level
+  {\ifnum\catcoderestorelevel>\plusone
+     \expandafter\catcodetable\csname scct:\number\numexpr\catcoderestorelevel-1\relax\endcsname
+   \fi}
+
+\newtoks\everycatcodetable
+
+\def\setcatcodetable#1%
+   {\catcodetable#1%
+    \the\everycatcodetable
+    \tracesetcatcodetable}
+
+\def\dotracecatcodetable#1{\immediate\write16{[#1]}}
+
+\def\tracecatcodetables
+  {\def\tracesetcatcodetable {\dotracecatcodetable{set  \catcodetablename\space                              at \number\catcoderestorelevel}}%
+   \def\tracepushcatcodetable{\dotracecatcodetable{push \catcodetablename\space from \catcodetableprev\space at \number\catcoderestorelevel}}%
+   \def\tracepopcatcodetable {\dotracecatcodetable{pop  \catcodetablename\space to   \catcodetableprev\space at \number\catcoderestorelevel}}}
+
+\def\catcodetableprev
+  {\ifnum\numexpr\catcoderestorelevel-1\relax>\zerocount
+     \csname @@ccn:\number\csname scct:\number\numexpr\catcoderestorelevel-1\relax\endcsname\endcsname
+   \else
+     -%
+   \fi}
+
+\def\catcodetablename
+  {\ifnum\currentcatcodetable>\zerocount
+     \csname @@ccn:\number\currentcatcodetable\endcsname
+   \else
+     -%
+   \fi}
+
+\ifx\empty\undefined \def\empty{} \fi
+
+\let\tracesetcatcodetable \empty
+\let\tracepushcatcodetable\empty
+\let\tracepopcatcodetable \empty
+
+\def\beginrestorecatcodes{\pushcatcodetable}
+\def\endrestorecatcodes  {\popcatcodetable}
+
+%D Handy for debugging:
+
+% \tracecatcodetables
+
+\endinput
+

Added: trunk/Master/texmf-dist/tex/context/base/mkii/catc-sym.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/catc-sym.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/catc-sym.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,187 @@
+%D \module
+%D   [       file=catc-sym,
+%D        version=1997.01.03, % moved code
+%D          title=\CONTEXT\ Catcode Macros,
+%D       subtitle=Some Handy Constants,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% we now have loaded syst-* so we have all @@catcode constants
+
+%D We want to have access to the raw alternatives of the
+%D special characters. We use a \type {\xdef} instead of
+%D \type {\let} because we need an expandable token in a
+%D \type {\write}.
+
+\bgroup
+
+\catcode`B=\begingroupcatcode
+\catcode`E=\endgroupcatcode
+\catcode`.=\escapecatcode
+
+.catcode `.{ 12 .xdef .letteropenbrace       B.string{E
+.catcode `.} 12 .xdef .letterclosebrace      B.string}E
+.catcode `.& 12 .xdef .letterampersand       B.string&E
+.catcode `.< 12 .xdef .letterless            B.string<E
+.catcode `.> 12 .xdef .lettermore            B.string>E
+.catcode `.# 12 .xdef .letterhash            B.string#E
+.catcode `." 12 .xdef .letterdoublequote     B.string"E
+.catcode `.' 12 .xdef .lettersinglequote     B.string'E
+.catcode `.$ 12 .xdef .letterdollar          B.string$E
+.catcode `.% 12 .xdef .letterpercent         B.string%E
+.catcode `.^ 12 .xdef .letterhat             B.string^E
+.catcode `._ 12 .xdef .letterunderscore      B.string_E
+.catcode `.| 12 .xdef .letterbar             B.string|E
+.catcode `.~ 12 .xdef .lettertilde           B.string~E
+.catcode `.\ 12 .xdef .letterbackslash       B.string\E
+.catcode `./ 12 .xdef .letterslash           B.string/E
+.catcode `.? 12 .xdef .letterquestionmark    B.string?E
+.catcode `.! 12 .xdef .letterexclamationmark B.string!E
+.catcode `.@ 12 .xdef .letterat              B.string at E
+.catcode `.: 12 .xdef .lettercolon           B.string:E
+
+         .global .let .letterescape     .letterbackslash
+         .global .let .letterbgroup     .letteropenbrace
+         .global .let .letteregroup     .letterclosebrace
+         .global .let .letterleftbrace  .letteropenbrace
+         .global .let .letterrightbrace .letterclosebrace
+
+.egroup
+
+%D \macros
+%D   {uncatcodespecials,setnaturalcatcodes,setnormalcatcodes,
+%D    uncatcodecharacters,uncatcodeallcharacters,
+%D    uncatcodespacetokens}
+%D
+%D The following macros are more or less replaced by switching
+%D to a catcode table (which we simulate in \MKII) but we keep
+%D them for convenience and compatibility. Some old engine code
+%D has been removed.
+
+\def\uncatcodespecials     {\setcatcodetable\nilcatcodes \uncatcodespacetokens}
+\def\setnaturalcatcodes    {\setcatcodetable\nilcatcodes}
+\def\setnormalcatcodes     {\setcatcodetable\ctxcatcodes} % maybe \texcatcodes
+\def\uncatcodecharacters   {\setcatcodetable\nilcatcodes} % was fast version, gone now
+\def\uncatcodeallcharacters{\setcatcodetable\nilcatcodes} % was slow one, with restore
+
+\def\uncatcodespacetokens
+  {\catcode\spaceasciicode    \spacecatcode
+   \catcode\formfeedasciicode \ignorecatcode
+   \catcode\endoflineasciicode\endoflinecatcode
+   \catcode\delasciicode      \ignorecatcode}
+
+%D \macros
+%D   {setverbosecharacter,setverbosecscharacters}
+%D
+%D Next follows a definition that lets some shortcuts expand to
+%D themselves. This macro is meant for \POSTSCRIPT\ and \PDF\
+%D code passed on to the backend.
+
+\newtoks\everyverbosechacters
+
+\def\setverbosecscharacter#1%
+  {\edef#1{\string#1}}
+
+\def\setverbosecscharacters
+  {\the\everyverbosechacters}
+
+\bgroup
+
+    % if used often we can move the code inline
+
+    \catcode\barasciicode  \activecatcode
+    \catcode\tildeasciicode\activecatcode
+
+    \global \everyverbosechacters =
+      {\setverbosecscharacter |\setverbosecscharacter ~% context specific
+       \setverbosecscharacter\|\setverbosecscharacter\~%
+       \setverbosecscharacter\:\setverbosecscharacter\;%
+       \setverbosecscharacter\+\setverbosecscharacter\-%
+       \setverbosecscharacter\[\setverbosecscharacter\]%
+       \setverbosecscharacter\.\setverbosecscharacter\\%
+       \setverbosecscharacter\)\setverbosecscharacter\(%
+       \setverbosecscharacter\0\setverbosecscharacter\1%
+       \setverbosecscharacter\2\setverbosecscharacter\3%
+       \setverbosecscharacter\4\setverbosecscharacter\5%
+       \setverbosecscharacter\6\setverbosecscharacter\7%
+       \setverbosecscharacter\8\setverbosecscharacter\9%
+       \setverbosecscharacter\n\setverbosecscharacter\s%
+       \setverbosecscharacter\/}
+
+\egroup
+
+%D (Inspired by a discussion on the \CONTEXT\ mailing list)
+%D
+%D In \TEX\ each character can have one of 16 catcodes. This way the
+%D backslash, dollar, ampersand, hash and some more characters get
+%D their  special meaning. If you want to process tokens under a
+%D certain catcode  regime, passing arguments can interfere badly.
+%D
+%D \startbuffer[a]
+%D \def\whatever#1{[#1]}
+%D \whatever{whatever \type {\whatever{you want}} $or$ not!}
+%D \stopbuffer
+%D
+%D \typebuffer[a]
+%D
+%D Here we pass an argument to \type {\whatever} but part of that
+%D argument is to be processed under a different catcode regime, i.e.\
+%D all characters that need to be typeset verbatim need to get
+%D the catcode that makes it a letter. This is what we get when we typeset
+%D the text verbatim:
+%D
+%D \starttyping
+%D whatever \type {\whatever{you want}} $or$ not!
+%D \stoptyping
+%D
+%D However, when passed to \type {\whatever} we get:
+%D
+%D \getbuffer[a]
+%D
+%D In \ETEX\ one can use  \type {\scantokens} to circumvent this problem.
+%D
+%D \startbuffer[b]
+%D \def\rescan#1{\scantokens{#1}}
+%D \def\whatever#1{[\rescan{#1}]}
+%D \whatever{whatever \type {\whatever{you want}} $or$ not!}
+%D \stopbuffer
+%D
+%D \getbuffer[b] \typebuffer[b]
+%D
+%D This time the \type {\whatever} call gives:
+%D
+%D \getbuffer[b]
+%D
+%D In this example, two spaces have crept in. The first one, after the
+%D macro name, is inserted by \TEX\ and cannot be avoided. The last space
+%D is inserted by \type {\scantokens}, and is the consequence of the fact
+%D that this macro mimics reading from a file. You can avoid the last
+%D space by a slightly different definition:
+%D
+%D \startbuffer[c]
+%D \def\rescan#1{\scantokens{#1\ignorespaces}}
+%D \def\whatever#1{[\rescan{#1}]}
+%D \whatever{whatever \type {\whatever{you want}} $or$ not!}
+%D \stopbuffer
+%D
+%D \typebuffer[c]
+%D
+%D Unfortunately we still keep the first space, but at least it's better than
+%D a failure:
+%D
+%D \getbuffer[c]
+
+\long\def\rescan#1{\scantokens{#1\ignorespaces}}
+\long\def\rescanwithsetup#1#2{\begingroup\directsetup{#1}\scantokens{#2\ignorespaces}\endgroup}
+
+\ifx\scantextokens\undefined \else
+  \long\def\rescan#1{\scantextokens{#1}}
+  \long\def\rescanwithsetup#1#2{\begingroup\directsetup{#1}\scantextokens{#2}\endgroup}
+\fi
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/catc-xml.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/catc-xml.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/catc-xml.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,114 @@
+%D \module
+%D   [       file=catc-xml,
+%D        version=2006.09.18,
+%D          title=\CONTEXT\ Catcode Macros,
+%D       subtitle=\XML\ Catcode Tables,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Catcode Regimes / XML}
+
+\ifdefined \xmlcatcodesn \else \newcatcodetable \xmlcatcodesn \fi % normal
+\ifdefined \xmlcatcodese \else \newcatcodetable \xmlcatcodese \fi % entitle
+\ifdefined \xmlcatcodesr \else \newcatcodetable \xmlcatcodesr \fi % reduce
+
+\startcatcodetable \xmlcatcodesn
+    \catcode\tabasciicode       \spacecatcode
+    \catcode\endoflineasciicode \endoflinecatcode
+    \catcode\formfeedasciicode  \endoflinecatcode
+    \catcode\spaceasciicode     \spacecatcode
+    \catcode\endoffileasciicode \ignorecatcode
+    \catcode\ampersandasciicode \activecatcode
+    \catcode`\<                 \activecatcode
+    \catcode`\>                 \othercatcode
+    \catcode`\"                 \othercatcode % probably not needed any more
+    \catcode`\/                 \othercatcode % probably not needed any more
+    \catcode`\'                 \othercatcode % probably not needed any more
+    \catcode\tildeasciicode     \othercatcode % probably not needed any more
+    \catcode\hashasciicode      \othercatcode % probably not needed any more
+    \catcode\backslashasciicode \othercatcode % probably not needed any more
+\stopcatcodetable
+
+\startcatcodetable \xmlcatcodese
+    \catcode\tabasciicode       \spacecatcode
+    \catcode\endoflineasciicode \endoflinecatcode
+    \catcode\formfeedasciicode  \endoflinecatcode
+    \catcode\spaceasciicode     \spacecatcode
+    \catcode\endoffileasciicode \ignorecatcode
+    \catcode\ampersandasciicode \activecatcode
+    \catcode`\<                 \activecatcode
+    \catcode`\>                 \activecatcode
+    \catcode\hashasciicode      \activecatcode
+    \catcode\dollarasciicode    \activecatcode
+    \catcode\commentasciicode   \activecatcode
+    \catcode\backslashasciicode \activecatcode
+    \catcode\circumflexasciicode\activecatcode
+    \catcode\underscoreasciicode\activecatcode
+    \catcode\leftbraceasciicode \activecatcode
+    \catcode\rightbraceasciicode\activecatcode
+    \catcode\barasciicode       \activecatcode
+    \catcode\tildeasciicode     \activecatcode
+\stopcatcodetable
+
+\startcatcodetable \xmlcatcodesr
+    \catcode\tabasciicode       \spacecatcode
+    \catcode\endoflineasciicode \endoflinecatcode
+    \catcode\formfeedasciicode  \endoflinecatcode
+    \catcode\spaceasciicode     \spacecatcode
+    \catcode\endoffileasciicode \ignorecatcode
+    \catcode\ampersandasciicode \activecatcode
+    \catcode`\<                 \activecatcode
+    \catcode`\>                 \activecatcode
+    \catcode\hashasciicode      \activecatcode
+    \catcode\dollarasciicode    \activecatcode
+    \catcode\commentasciicode   \activecatcode
+    \catcode\backslashasciicode \activecatcode
+    \catcode\circumflexasciicode\activecatcode
+    \catcode\underscoreasciicode\activecatcode
+    \catcode\leftbraceasciicode \activecatcode
+    \catcode\rightbraceasciicode\activecatcode
+    \catcode\barasciicode       \activecatcode
+    \catcode\tildeasciicode     \activecatcode
+\stopcatcodetable
+
+%D Next we hook in some active character definitions.
+
+\letcatcodecommand \xmlcatcodesn \ampersandasciicode  \relax
+\letcatcodecommand \xmlcatcodesn `\<                  \relax
+
+\letcatcodecommand \xmlcatcodese \ampersandasciicode  \relax
+\letcatcodecommand \xmlcatcodese `\<                  \relax
+
+\letcatcodecommand \xmlcatcodesr \ampersandasciicode  \relax
+\letcatcodecommand \xmlcatcodesr `\<                  \relax
+
+\letcatcodecommand \xmlcatcodese \hashasciicode       \relax
+\letcatcodecommand \xmlcatcodese \dollarasciicode     \relax
+\letcatcodecommand \xmlcatcodese \commentasciicode    \relax
+\letcatcodecommand \xmlcatcodese \backslashasciicode  \relax
+\letcatcodecommand \xmlcatcodese \circumflexasciicode \relax
+\letcatcodecommand \xmlcatcodese \underscoreasciicode \relax
+\letcatcodecommand \xmlcatcodese \leftbraceasciicode  \relax
+\letcatcodecommand \xmlcatcodese \rightbraceasciicode \relax
+\letcatcodecommand \xmlcatcodese \barasciicode        \relax
+\letcatcodecommand \xmlcatcodese \tildeasciicode      \relax
+
+\letcatcodecommand \xmlcatcodesr \hashasciicode       \relax
+\letcatcodecommand \xmlcatcodesr \dollarasciicode     \relax
+\letcatcodecommand \xmlcatcodesr \commentasciicode    \relax
+\letcatcodecommand \xmlcatcodesr \backslashasciicode  \relax
+\letcatcodecommand \xmlcatcodesr \circumflexasciicode \relax
+\letcatcodecommand \xmlcatcodesr \underscoreasciicode \relax
+\letcatcodecommand \xmlcatcodesr \leftbraceasciicode  \relax
+\letcatcodecommand \xmlcatcodesr \rightbraceasciicode \relax
+\letcatcodecommand \xmlcatcodesr \barasciicode        \relax
+\letcatcodecommand \xmlcatcodesr \tildeasciicode      \relax
+
+\let\xmlcatcodes   \xmlcatcodesn % beware, in mkiv we use \notcatcodes
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/colo-ema.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/colo-ema.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/colo-ema.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,590 @@
+%D \module
+%D   [       file=colo-ema,
+%D        version=2003.03.20,
+%D          title=\CONTEXT\ Color Macros,
+%D       subtitle=Emacs Colors,
+%D         author=Peter Rolf,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for 
+%C details.
+
+% author      : Peter Rolf <peter.rolf at arcor.de>
+% last change : 17 march 2003
+% origin      : /emacs/etc/rgb.txt
+%
+% USAGE:
+%
+% - select emacs menu: Edit -> Text Properties -> Display 
+%   Colors, if you don't know what I'm talking about
+% - copy this file to your /texmf/tex/context/user directory 
+%   and add "\input colo-emacs" to your tex-file
+%
+% IMPORTANT NOTES:
+%
+% - all color names are written as ONE word in lowercase 
+%   letters (no redundancy as in rgb.txt) so if you want to 
+%   use the color "Light Sky Blue"/"light sky blue" it's new 
+%   name is lightskyblue
+% - the grayX values [X=0..100] can only be used with \color
+%   [grayX]
+% - use it at your own risk :)
+%
+% HINT:
+% 
+% I only include this file (\showcolor [ema]) until I've 
+% found the colors I want. Copy and paste the color 
+% definitions to a seperate file, to decrease compilation 
+% time (540 color definitions). 
+    
+\definecolor [snow]                 [r=1,g=.980392,b=.980392]
+\definecolor [ghostwhite]           [r=.972549,g=.972549,b=1]
+\definecolor [whitesmoke]           [s=.960784]
+\definecolor [gainsboro]            [s=.862745]
+\definecolor [floralwhite]          [r=1,g=.980392,b=.941176]
+\definecolor [oldlace]              [r=.992157,g=.960784,b=.901961]
+\definecolor [linen]                [r=.980392,g=.941176,b=.901961]
+\definecolor [antiquewhite]         [r=.980392,g=.921569,b=.843137]
+\definecolor [papayawhip]           [r=1,g=.937255,b=.835294]
+\definecolor [blanchedalmond]       [r=1,g=.921569,b=.803922]
+\definecolor [bisque]               [r=1,g=.894118,b=.768627]
+\definecolor [peachpuff]            [r=1,g=.854902,b=.72549]
+\definecolor [navajowhite]          [r=1,g=.870588,b=.678431]
+\definecolor [moccasin]             [r=1,g=.894118,b=.709804]
+\definecolor [cornsilk]             [r=1,g=.972549,b=.862745]
+\definecolor [ivory]                [r=1,g=1,b=.941176]
+\definecolor [lemonchiffon]         [r=1,g=.980392,b=.803922]
+\definecolor [seashell]             [r=1,g=.960784,b=.933333]
+\definecolor [honeydew]             [r=.941176,g=1,b=.941176]
+\definecolor [mintcream]            [r=.960784,g=1,b=.980392]
+\definecolor [azure]                [r=.941176,g=1,b=1]
+\definecolor [aliceblue]            [r=.941176,g=.972549,b=1]
+\definecolor [lavender]             [r=.901961,g=.901961,b=.980392]
+\definecolor [lavenderblush]        [r=1,g=.941176,b=.960784]
+\definecolor [mistyrose]            [r=1,g=.894118,b=.882353]
+%definecolor[white]                [s=1]
+%definecolor[black]                [s=0]
+\definecolor [darkslategray]        [r=.184314,g=.309804,b=.309804]
+\definecolor [dimgray]              [s=.411765]
+\definecolor [slategray]            [r=.439216,g=.501961,b=.564706]
+\definecolor [lightslategray]       [r=.466667,g=.533333,b=.6]
+\definecolor [gray]                 [s=.745098]
+\definecolor [lightgray]            [s=.827451]
+\definecolor [midnightblue]         [r=.098039,g=.098039,b=.439216]
+\definecolor [navy]                 [b=.501961]
+\definecolor [navyblue]             [navy]
+\definecolor [cornflowerblue]       [r=.392157,g=.584314,b=.929412]
+\definecolor [darkslateblue]        [r=.282353,g=.239216,b=.545098]
+\definecolor [slateblue]            [r=.415686,g=.352941,b=.803922]
+\definecolor [mediumslateblue]      [r=.482353,g=.407843,b=.933333]
+\definecolor [lightslateblue]       [r=.517647,g=.439216,b=1]
+\definecolor [mediumblue]           [b=.803922]
+\definecolor [royalblue]            [r=.254902,g=.411765,b=.882353]
+%definecolor[blue]                 [b=1]
+\definecolor [dodgerblue]           [r=.117647,g=.564706,b=1]
+\definecolor [deepskyblue]          [g=.74902,b=1]
+\definecolor [skyblue]              [r=.529412,g=.807843,b=.921569]
+\definecolor [lightskyblue]         [r=.529412,g=.807843,b=.980392]
+\definecolor [steelblue]            [r=.27451,g=.509804,b=.705882]
+\definecolor [lightsteelblue]       [r=.690196,g=.768627,b=.870588]
+\definecolor [lightblue]            [r=.678431,g=.847059,b=.901961]
+\definecolor [powderblue]           [r=.690196,g=.878431,b=.901961]
+\definecolor [paleturquoise]        [r=.686275,g=.933333,b=.933333]
+\definecolor [darkturquoise]        [g=.807843,b=.819608]
+\definecolor [mediumturquoise]      [r=.282353,g=.819608,b=.8]
+\definecolor [turquoise]            [r=.25098,g=.878431,b=.815686]
+%definecolor[cyan]                 [g=1,b=1]
+\definecolor [lightcyan]            [r=.878431,g=1,b=1]
+\definecolor [cadetblue]            [r=.372549,g=.619608,b=.627451]
+\definecolor [mediumaquamarine]     [r=.4,g=.803922,b=.666667]
+\definecolor [aquamarine]           [r=.498039,g=1,b=.831373]
+\definecolor [darkgreen]            [g=.392157]
+\definecolor [darkolivegreen]       [r=.333333,g=.419608,b=.184314]
+\definecolor [darkseagreen]         [r=.560784,g=.737255,b=.560784]
+\definecolor [seagreen]             [r=.180392,g=.545098,b=.341176]
+\definecolor [mediumseagreen]       [r=.235294,g=.701961,b=.443137]
+\definecolor [lightseagreen]        [r=.12549,g=.698039,b=.666667]
+\definecolor [palegreen]            [r=.596078,g=.984314,b=.596078]
+\definecolor [springgreen]          [g=1,b=.498039]
+\definecolor [lawngreen]            [r=.486275,g=.988235]
+%definecolor[green]                [g=1]
+\definecolor [chartreuse]           [r=.498039,g=1]
+\definecolor [mediumspringgreen]    [g=.980392,b=.603922]
+\definecolor [greenyellow]          [r=.678431,g=1,b=.184314]
+\definecolor [limegreen]            [r=.196078,g=.803922,b=.196078]
+\definecolor [yellowgreen]          [r=.603922,g=.803922,b=.196078]
+\definecolor [forestgreen]          [r=.133333,g=.545098,b=.133333]
+\definecolor [olivedrab]            [r=.419608,g=.556863,b=.137255]
+\definecolor [darkkhaki]            [r=.741176,g=.717647,b=.419608]
+\definecolor [khaki]                [r=.941176,g=.901961,b=.54902]
+\definecolor [palegoldenrod]        [r=.933333,g=.909804,b=.666667]
+\definecolor [lightgoldenrodyellow] [r=.980392,g=.980392,b=.823529]
+\definecolor [lightyellow]          [r=1,g=1,b=.878431]
+%definecolor[yellow]               [r=1,g=1]
+\definecolor [gold]                 [r=1,g=.843137]
+\definecolor [lightgoldenrod]       [r=.933333,g=.866667,b=.509804]
+\definecolor [goldenrod]            [r=.854902,g=.647059,b=.12549]
+\definecolor [darkgoldenrod]        [r=.721569,g=.52549,b=.043137]
+\definecolor [rosybrown]            [r=.737255,g=.560784,b=.560784]
+\definecolor [indianred]            [r=.803922,g=.360784,b=.360784]
+\definecolor [saddlebrown]          [r=.545098,g=.270588,b=.07451]
+\definecolor [sienna]               [r=.627451,g=.321569,b=.176471]
+\definecolor [peru]                 [r=.803922,g=.521569,b=.247059]
+\definecolor [burlywood]            [r=.870588,g=.721569,b=.529412]
+\definecolor [beige]                [r=.960784,g=.960784,b=.862745]
+\definecolor [wheat]                [r=.960784,g=.870588,b=.701961]
+\definecolor [sandybrown]           [r=.956863,g=.643137,b=.376471]
+\definecolor [tan]                  [r=.823529,g=.705882,b=.54902]
+\definecolor [chocolate]            [r=.823529,g=.411765,b=.117647]
+\definecolor [firebrick]            [r=.698039,g=.133333,b=.133333]
+\definecolor [brown]                [r=.647059,g=.164706,b=.164706]
+\definecolor [darksalmon]           [r=.913725,g=.588235,b=.478431]
+\definecolor [salmon]               [r=.980392,g=.501961,b=.447059]
+\definecolor [lightsalmon]          [r=1,g=.627451,b=.478431]
+\definecolor [orange]               [r=1,g=.647059]
+\definecolor [darkorange]           [r=1,g=.54902]
+\definecolor [coral]                [r=1,g=.498039,b=.313725]
+\definecolor [lightcoral]           [r=.941176,g=.501961,b=.501961]
+\definecolor [tomato]               [r=1,g=.388235,b=.278431]
+\definecolor [orangered]            [r=1,g=.270588]
+%definecolor[red]                  [r=1]
+\definecolor [hotpink]              [r=1,g=.411765,b=.705882]
+\definecolor [deeppink]             [r=1,g=.078431,b=.576471]
+\definecolor [pink]                 [r=1,g=.752941,b=.796078]
+\definecolor [lightpink]            [r=1,g=.713725,b=.756863]
+\definecolor [palevioletred]        [r=.858824,g=.439216,b=.576471]
+\definecolor [maroon]               [r=.690196,g=.188235,b=.376471]
+\definecolor [mediumvioletred]      [r=.780392,g=.082353,b=.521569]
+\definecolor [violetred]            [r=.815686,g=.12549,b=.564706]
+%definecolor[magenta]              [r=1,b=1]
+\definecolor [violet]               [r=.933333,g=.509804,b=.933333]
+\definecolor [plum]                 [r=.866667,g=.627451,b=.866667]
+\definecolor [orchid]               [r=.854902,g=.439216,b=.839216]
+\definecolor [mediumorchid]         [r=.729412,g=.333333,b=.827451]
+\definecolor [darkorchid]           [r=.6,g=.196078,b=.8]
+\definecolor [darkviolet]           [r=.580392,b=.827451]
+\definecolor [blueviolet]           [r=.541176,g=.168627,b=.886275]
+\definecolor [purple]               [r=.627451,g=.12549,b=.941176]
+\definecolor [mediumpurple]         [r=.576471,g=.439216,b=.858824]
+\definecolor [thistle]              [r=.847059,g=.74902,b=.847059]
+\definecolor [snow1]                [r=1,g=.980392,b=.980392]
+\definecolor [snow2]                [r=.933333,g=.913725,b=.913725]
+\definecolor [snow3]                [r=.803922,g=.788235,b=.788235]
+\definecolor [snow4]                [r=.545098,g=.537255,b=.537255]
+\definecolor [seashell1]            [r=1,g=.960784,b=.933333]
+\definecolor [seashell2]            [r=.933333,g=.898039,b=.870588]
+\definecolor [seashell3]            [r=.803922,g=.772549,b=.74902]
+\definecolor [seashell4]            [r=.545098,g=.52549,b=.509804]
+\definecolor [antiquewhite1]        [r=1,g=.937255,b=.858824]
+\definecolor [antiquewhite2]        [r=.933333,g=.87451,b=.8]
+\definecolor [antiquewhite3]        [r=.803922,g=.752941,b=.690196]
+\definecolor [antiquewhite4]        [r=.545098,g=.513725,b=.470588]
+\definecolor [bisque1]              [r=1,g=.894118,b=.768627]
+\definecolor [bisque2]              [r=.933333,g=.835294,b=.717647]
+\definecolor [bisque3]              [r=.803922,g=.717647,b=.619608]
+\definecolor [bisque4]              [r=.545098,g=.490196,b=.419608]
+\definecolor [peachpuff1]           [r=1,g=.854902,b=.72549]
+\definecolor [peachpuff2]           [r=.933333,g=.796078,b=.678431]
+\definecolor [peachpuff3]           [r=.803922,g=.686275,b=.584314]
+\definecolor [peachpuff4]           [r=.545098,g=.466667,b=.396078]
+\definecolor [navajowhite1]         [r=1,g=.870588,b=.678431]
+\definecolor [navajowhite2]         [r=.933333,g=.811765,b=.631373]
+\definecolor [navajowhite3]         [r=.803922,g=.701961,b=.545098]
+\definecolor [navajowhite4]         [r=.545098,g=.47451,b=.368627]
+\definecolor [lemonchiffon1]        [r=1,g=.980392,b=.803922]
+\definecolor [lemonchiffon2]        [r=.933333,g=.913725,b=.74902]
+\definecolor [lemonchiffon3]        [r=.803922,g=.788235,b=.647059]
+\definecolor [lemonchiffon4]        [r=.545098,g=.537255,b=.439216]
+\definecolor [cornsilk1]            [r=1,g=.972549,b=.862745]
+\definecolor [cornsilk2]            [r=.933333,g=.909804,b=.803922]
+\definecolor [cornsilk3]            [r=.803922,g=.784314,b=.694118]
+\definecolor [cornsilk4]            [r=.545098,g=.533333,b=.470588]
+\definecolor [ivory1]               [r=1,g=1,b=.941176]
+\definecolor [ivory2]               [r=.933333,g=.933333,b=.878431]
+\definecolor [ivory3]               [r=.803922,g=.803922,b=.756863]
+\definecolor [ivory4]               [r=.545098,g=.545098,b=.513725]
+\definecolor [honeydew1]            [r=.941176,g=1,b=.941176]
+\definecolor [honeydew2]            [r=.878431,g=.933333,b=.878431]
+\definecolor [honeydew3]            [r=.756863,g=.803922,b=.756863]
+\definecolor [honeydew4]            [r=.513725,g=.545098,b=.513725]
+\definecolor [lavenderblush1]       [r=1,g=.941176,b=.960784]
+\definecolor [lavenderblush2]       [r=.933333,g=.878431,b=.898039]
+\definecolor [lavenderblush3]       [r=.803922,g=.756863,b=.772549]
+\definecolor [lavenderblush4]       [r=.545098,g=.513725,b=.52549]
+\definecolor [mistyrose1]           [r=1,g=.894118,b=.882353]
+\definecolor [mistyrose2]           [r=.933333,g=.835294,b=.823529]
+\definecolor [mistyrose3]           [r=.803922,g=.717647,b=.709804]
+\definecolor [mistyrose4]           [r=.545098,g=.490196,b=.482353]
+\definecolor [azure1]               [r=.941176,g=1,b=1]
+\definecolor [azure2]               [r=.878431,g=.933333,b=.933333]
+\definecolor [azure3]               [r=.756863,g=.803922,b=.803922]
+\definecolor [azure4]               [r=.513725,g=.545098,b=.545098]
+\definecolor [slateblue1]           [r=.513725,g=.435294,b=1]
+\definecolor [slateblue2]           [r=.478431,g=.403922,b=.933333]
+\definecolor [slateblue3]           [r=.411765,g=.34902,b=.803922]
+\definecolor [slateblue4]           [r=.278431,g=.235294,b=.545098]
+\definecolor [royalblue1]           [r=.282353,g=.462745,b=1]
+\definecolor [royalblue2]           [r=.262745,g=.431373,b=.933333]
+\definecolor [royalblue3]           [r=.227451,g=.372549,b=.803922]
+\definecolor [royalblue4]           [r=.152941,g=.25098,b=.545098]
+\definecolor [blue1]                [blue]
+\definecolor [blue2]                [b=.933333]
+\definecolor [blue3]                [b=.803922]
+\definecolor [blue4]                [b=.545098]
+\definecolor [dodgerblue1]          [r=.117647,g=.564706,b=1]
+\definecolor [dodgerblue2]          [r=.109804,g=.52549,b=.933333]
+\definecolor [dodgerblue3]          [r=.094118,g=.454902,b=.803922]
+\definecolor [dodgerblue4]          [r=.062745,g=.305882,b=.545098]
+\definecolor [steelblue1]           [r=.388235,g=.721569,b=1]
+\definecolor [steelblue2]           [r=.360784,g=.67451,b=.933333]
+\definecolor [steelblue3]           [r=.309804,g=.580392,b=.803922]
+\definecolor [steelblue4]           [r=.211765,g=.392157,b=.545098]
+\definecolor [deepskyblue1]         [g=.74902,b=1]
+\definecolor [deepskyblue2]         [g=.698039,b=.933333]
+\definecolor [deepskyblue3]         [g=.603922,b=.803922]
+\definecolor [deepskyblue4]         [g=.407843,b=.545098]
+\definecolor [skyblue1]             [r=.529412,g=.807843,b=1]
+\definecolor [skyblue2]             [r=.494118,g=.752941,b=.933333]
+\definecolor [skyblue3]             [r=.423529,g=.65098,b=.803922]
+\definecolor [skyblue4]             [r=.290196,g=.439216,b=.545098]
+\definecolor [lightskyblue1]        [r=.690196,g=.886275,b=1]
+\definecolor [lightskyblue2]        [r=.643137,g=.827451,b=.933333]
+\definecolor [lightskyblue3]        [r=.552941,g=.713725,b=.803922]
+\definecolor [lightskyblue4]        [r=.376471,g=.482353,b=.545098]
+\definecolor [slategray1]           [r=.776471,g=.886275,b=1]
+\definecolor [slategray2]           [r=.72549,g=.827451,b=.933333]
+\definecolor [slategray3]           [r=.623529,g=.713725,b=.803922]
+\definecolor [slategray4]           [r=.423529,g=.482353,b=.545098]
+\definecolor [lightsteelblue1]      [r=.792157,g=.882353,b=1]
+\definecolor [lightsteelblue2]      [r=.737255,g=.823529,b=.933333]
+\definecolor [lightsteelblue3]      [r=.635294,g=.709804,b=.803922]
+\definecolor [lightsteelblue4]      [r=.431373,g=.482353,b=.545098]
+\definecolor [lightblue1]           [r=.74902,g=.937255,b=1]
+\definecolor [lightblue2]           [r=.698039,g=.87451,b=.933333]
+\definecolor [lightblue3]           [r=.603922,g=.752941,b=.803922]
+\definecolor [lightblue4]           [r=.407843,g=.513725,b=.545098]
+\definecolor [lightcyan1]           [r=.878431,g=1,b=1]
+\definecolor [lightcyan2]           [r=.819608,g=.933333,b=.933333]
+\definecolor [lightcyan3]           [r=.705882,g=.803922,b=.803922]
+\definecolor [lightcyan4]           [r=.478431,g=.545098,b=.545098]
+\definecolor [paleturquoise1]       [r=.733333,g=1,b=1]
+\definecolor [paleturquoise2]       [r=.682353,g=.933333,b=.933333]
+\definecolor [paleturquoise3]       [r=.588235,g=.803922,b=.803922]
+\definecolor [paleturquoise4]       [r=.4,g=.545098,b=.545098]
+\definecolor [cadetblue1]           [r=.596078,g=.960784,b=1]
+\definecolor [cadetblue2]           [r=.556863,g=.898039,b=.933333]
+\definecolor [cadetblue3]           [r=.478431,g=.772549,b=.803922]
+\definecolor [cadetblue4]           [r=.32549,g=.52549,b=.545098]
+\definecolor [turquoise1]           [g=.960784,b=1]
+\definecolor [turquoise2]           [g=.898039,b=.933333]
+\definecolor [turquoise3]           [g=.772549,b=.803922]
+\definecolor [turquoise4]           [g=.52549,b=.545098]
+\definecolor [cyan1]                [cyan]
+\definecolor [cyan2]                [g=.933333,b=.933333]
+\definecolor [cyan3]                [g=.803922,b=.803922]
+\definecolor [cyan4]                [g=.545098,b=.545098]
+\definecolor [darkslategray1]       [r=.592157,g=1,b=1]
+\definecolor [darkslategray2]       [r=.552941,g=.933333,b=.933333]
+\definecolor [darkslategray3]       [r=.47451,g=.803922,b=.803922]
+\definecolor [darkslategray4]       [r=.321569,g=.545098,b=.545098]
+\definecolor [aquamarine1]          [r=.498039,g=1,b=.831373]
+\definecolor [aquamarine2]          [r=.462745,g=.933333,b=.776471]
+\definecolor [aquamarine3]          [r=.4,g=.803922,b=.666667]
+\definecolor [aquamarine4]          [r=.270588,g=.545098,b=.454902]
+\definecolor [darkseagreen1]        [r=.756863,g=1,b=.756863]
+\definecolor [darkseagreen2]        [r=.705882,g=.933333,b=.705882]
+\definecolor [darkseagreen3]        [r=.607843,g=.803922,b=.607843]
+\definecolor [darkseagreen4]        [r=.411765,g=.545098,b=.411765]
+\definecolor [seagreen1]            [r=.329412,g=1,b=.623529]
+\definecolor [seagreen2]            [r=.305882,g=.933333,b=.580392]
+\definecolor [seagreen3]            [r=.262745,g=.803922,b=.501961]
+\definecolor [seagreen4]            [r=.180392,g=.545098,b=.341176]
+\definecolor [palegreen1]           [r=.603922,g=1,b=.603922]
+\definecolor [palegreen2]           [r=.564706,g=.933333,b=.564706]
+\definecolor [palegreen3]           [r=.486275,g=.803922,b=.486275]
+\definecolor [palegreen4]           [r=.329412,g=.545098,b=.329412]
+\definecolor [springgreen1]         [g=1,b=.498039]
+\definecolor [springgreen2]         [g=.933333,b=.462745]
+\definecolor [springgreen3]         [g=.803922,b=.4]
+\definecolor [springgreen4]         [g=.545098,b=.270588]
+\definecolor [green1]               [green]
+\definecolor [green2]               [g=.933333]
+\definecolor [green3]               [g=.803922]
+\definecolor [green4]               [g=.545098]
+\definecolor [chartreuse1]          [r=.498039,g=1]
+\definecolor [chartreuse2]          [r=.462745,g=.933333]
+\definecolor [chartreuse3]          [r=.4,g=.803922]
+\definecolor [chartreuse4]          [r=.270588,g=.545098]
+\definecolor [olivedrab1]           [r=.752941,g=1,b=.243137]
+\definecolor [olivedrab2]           [r=.701961,g=.933333,b=.227451]
+\definecolor [olivedrab3]           [r=.603922,g=.803922,b=.196078]
+\definecolor [olivedrab4]           [r=.411765,g=.545098,b=.133333]
+\definecolor [darkolivegreen1]      [r=.792157,g=1,b=.439216]
+\definecolor [darkolivegreen2]      [r=.737255,g=.933333,b=.407843]
+\definecolor [darkolivegreen3]      [r=.635294,g=.803922,b=.352941]
+\definecolor [darkolivegreen4]      [r=.431373,g=.545098,b=.239216]
+\definecolor [khaki1]               [r=1,g=.964706,b=.560784]
+\definecolor [khaki2]               [r=.933333,g=.901961,b=.521569]
+\definecolor [khaki3]               [r=.803922,g=.776471,b=.45098]
+\definecolor [khaki4]               [r=.545098,g=.52549,b=.305882]
+\definecolor [lightgoldenrod1]      [r=1,g=.92549,b=.545098]
+\definecolor [lightgoldenrod2]      [r=.933333,g=.862745,b=.509804]
+\definecolor [lightgoldenrod3]      [r=.803922,g=.745098,b=.439216]
+\definecolor [lightgoldenrod4]      [r=.545098,g=.505882,b=.298039]
+\definecolor [lightyellow1]         [r=1,g=1,b=.878431]
+\definecolor [lightyellow2]         [r=.933333,g=.933333,b=.819608]
+\definecolor [lightyellow3]         [r=.803922,g=.803922,b=.705882]
+\definecolor [lightyellow4]         [r=.545098,g=.545098,b=.478431]
+\definecolor [yellow1]              [yellow]
+\definecolor [yellow2]              [r=.933333,g=.933333]
+\definecolor [yellow3]              [r=.803922,g=.803922]
+\definecolor [yellow4]              [r=.545098,g=.545098]
+\definecolor [gold1]                [r=1,g=.843137]
+\definecolor [gold2]                [r=.933333,g=.788235]
+\definecolor [gold3]                [r=.803922,g=.678431]
+\definecolor [gold4]                [r=.545098,g=.458824]
+\definecolor [goldenrod1]           [r=1,g=.756863,b=.145098]
+\definecolor [goldenrod2]           [r=.933333,g=.705882,b=.133333]
+\definecolor [goldenrod3]           [r=.803922,g=.607843,b=.113725]
+\definecolor [goldenrod4]           [r=.545098,g=.411765,b=.078431]
+\definecolor [darkgoldenrod1]       [r=1,g=.72549,b=.058824]
+\definecolor [darkgoldenrod2]       [r=.933333,g=.678431,b=.054902]
+\definecolor [darkgoldenrod3]       [r=.803922,g=.584314,b=.047059]
+\definecolor [darkgoldenrod4]       [r=.545098,g=.396078,b=.031373]
+\definecolor [rosybrown1]           [r=1,g=.756863,b=.756863]
+\definecolor [rosybrown2]           [r=.933333,g=.705882,b=.705882]
+\definecolor [rosybrown3]           [r=.803922,g=.607843,b=.607843]
+\definecolor [rosybrown4]           [r=.545098,g=.411765,b=.411765]
+\definecolor [indianred1]           [r=1,g=.415686,b=.415686]
+\definecolor [indianred2]           [r=.933333,g=.388235,b=.388235]
+\definecolor [indianred3]           [r=.803922,g=.333333,b=.333333]
+\definecolor [indianred4]           [r=.545098,g=.227451,b=.227451]
+\definecolor [sienna1]              [r=1,g=.509804,b=.278431]
+\definecolor [sienna2]              [r=.933333,g=.47451,b=.258824]
+\definecolor [sienna3]              [r=.803922,g=.407843,b=.223529]
+\definecolor [sienna4]              [r=.545098,g=.278431,b=.14902]
+\definecolor [burlywood1]           [r=1,g=.827451,b=.607843]
+\definecolor [burlywood2]           [r=.933333,g=.772549,b=.568627]
+\definecolor [burlywood3]           [r=.803922,g=.666667,b=.490196]
+\definecolor [burlywood4]           [r=.545098,g=.45098,b=.333333]
+\definecolor [wheat1]               [r=1,g=.905882,b=.729412]
+\definecolor [wheat2]               [r=.933333,g=.847059,b=.682353]
+\definecolor [wheat3]               [r=.803922,g=.729412,b=.588235]
+\definecolor [wheat4]               [r=.545098,g=.494118,b=.4]
+\definecolor [tan1]                 [r=1,g=.647059,b=.309804]
+\definecolor [tan2]                 [r=.933333,g=.603922,b=.286275]
+\definecolor [tan3]                 [r=.803922,g=.521569,b=.247059]
+\definecolor [tan4]                 [r=.545098,g=.352941,b=.168627]
+\definecolor [chocolate1]           [r=1,g=.498039,b=.141176]
+\definecolor [chocolate2]           [r=.933333,g=.462745,b=.129412]
+\definecolor [chocolate3]           [r=.803922,g=.4,b=.113725]
+\definecolor [chocolate4]           [r=.545098,g=.270588,b=.07451]
+\definecolor [firebrick1]           [r=1,g=.188235,b=.188235]
+\definecolor [firebrick2]           [r=.933333,g=.172549,b=.172549]
+\definecolor [firebrick3]           [r=.803922,g=.14902,b=.14902]
+\definecolor [firebrick4]           [r=.545098,g=.101961,b=.101961]
+\definecolor [brown1]               [r=1,g=.25098,b=.25098]
+\definecolor [brown2]               [r=.933333,g=.231373,b=.231373]
+\definecolor [brown3]               [r=.803922,g=.2,b=.2]
+\definecolor [brown4]               [r=.545098,g=.137255,b=.137255]
+\definecolor [salmon1]              [r=1,g=.54902,b=.411765]
+\definecolor [salmon2]              [r=.933333,g=.509804,b=.384314]
+\definecolor [salmon3]              [r=.803922,g=.439216,b=.329412]
+\definecolor [salmon4]              [r=.545098,g=.298039,b=.223529]
+\definecolor [lightsalmon1]         [r=1,g=.627451,b=.478431]
+\definecolor [lightsalmon2]         [r=.933333,g=.584314,b=.447059]
+\definecolor [lightsalmon3]         [r=.803922,g=.505882,b=.384314]
+\definecolor [lightsalmon4]         [r=.545098,g=.341176,b=.258824]
+\definecolor [orange1]              [r=1,g=.647059]
+\definecolor [orange2]              [r=.933333,g=.603922]
+\definecolor [orange3]              [r=.803922,g=.521569]
+\definecolor [orange4]              [r=.545098,g=.352941]
+\definecolor [darkorange1]          [r=1,g=.498039]
+\definecolor [darkorange2]          [r=.933333,g=.462745]
+\definecolor [darkorange3]          [r=.803922,g=.4]
+\definecolor [darkorange4]          [r=.545098,g=.270588]
+\definecolor [coral1]               [r=1,g=.447059,b=.337255]
+\definecolor [coral2]               [r=.933333,g=.415686,b=.313725]
+\definecolor [coral3]               [r=.803922,g=.356863,b=.270588]
+\definecolor [coral4]               [r=.545098,g=.243137,b=.184314]
+\definecolor [tomato1]              [r=1,g=.388235,b=.278431]
+\definecolor [tomato2]              [r=.933333,g=.360784,b=.258824]
+\definecolor [tomato3]              [r=.803922,g=.309804,b=.223529]
+\definecolor [tomato4]              [r=.545098,g=.211765,b=.14902]
+\definecolor [orangered1]           [r=1,g=.270588]
+\definecolor [orangered2]           [r=.933333,g=.25098]
+\definecolor [orangered3]           [r=.803922,g=.215686]
+\definecolor [orangered4]           [r=.545098,g=.145098]
+\definecolor [red1]                 [red]
+\definecolor [red2]                 [r=.933333]
+\definecolor [red3]                 [r=.803922]
+\definecolor [red4]                 [r=.545098]
+\definecolor [deeppink1]            [r=1,g=.078431,b=.576471]
+\definecolor [deeppink2]            [r=.933333,g=.070588,b=.537255]
+\definecolor [deeppink3]            [r=.803922,g=.062745,b=.462745]
+\definecolor [deeppink4]            [r=.545098,g=.039216,b=.313725]
+\definecolor [hotpink1]             [r=1,g=.431373,b=.705882]
+\definecolor [hotpink2]             [r=.933333,g=.415686,b=.654902]
+\definecolor [hotpink3]             [r=.803922,g=.376471,b=.564706]
+\definecolor [hotpink4]             [r=.545098,g=.227451,b=.384314]
+\definecolor [pink1]                [r=1,g=.709804,b=.772549]
+\definecolor [pink2]                [r=.933333,g=.662745,b=.721569]
+\definecolor [pink3]                [r=.803922,g=.568627,b=.619608]
+\definecolor [pink4]                [r=.545098,g=.388235,b=.423529]
+\definecolor [lightpink1]           [r=1,g=.682353,b=.72549]
+\definecolor [lightpink2]           [r=.933333,g=.635294,b=.678431]
+\definecolor [lightpink3]           [r=.803922,g=.54902,b=.584314]
+\definecolor [lightpink4]           [r=.545098,g=.372549,b=.396078]
+\definecolor [palevioletred1]       [r=1,g=.509804,b=.670588]
+\definecolor [palevioletred2]       [r=.933333,g=.47451,b=.623529]
+\definecolor [palevioletred3]       [r=.803922,g=.407843,b=.537255]
+\definecolor [palevioletred4]       [r=.545098,g=.278431,b=.364706]
+\definecolor [maroon1]              [r=1,g=.203922,b=.701961]
+\definecolor [maroon2]              [r=.933333,g=.188235,b=.654902]
+\definecolor [maroon3]              [r=.803922,g=.160784,b=.564706]
+\definecolor [maroon4]              [r=.545098,g=.109804,b=.384314]
+\definecolor [violetred1]           [r=1,g=.243137,b=.588235]
+\definecolor [violetred2]           [r=.933333,g=.227451,b=.54902]
+\definecolor [violetred3]           [r=.803922,g=.196078,b=.470588]
+\definecolor [violetred4]           [r=.545098,g=.133333,b=.321569]
+\definecolor [magenta1]             [magenta]
+\definecolor [magenta2]             [r=.933333,b=.933333]
+\definecolor [magenta3]             [r=.803922,b=.803922]
+\definecolor [magenta4]             [r=.545098,b=.545098]
+\definecolor [orchid1]              [r=1,g=.513725,b=.980392]
+\definecolor [orchid2]              [r=.933333,g=.478431,b=.913725]
+\definecolor [orchid3]              [r=.803922,g=.411765,b=.788235]
+\definecolor [orchid4]              [r=.545098,g=.278431,b=.537255]
+\definecolor [plum1]                [r=1,g=.733333,b=1]
+\definecolor [plum2]                [r=.933333,g=.682353,b=.933333]
+\definecolor [plum3]                [r=.803922,g=.588235,b=.803922]
+\definecolor [plum4]                [r=.545098,g=.4,b=.545098]
+\definecolor [mediumorchid1]        [r=.878431,g=.4,b=1]
+\definecolor [mediumorchid2]        [r=.819608,g=.372549,b=.933333]
+\definecolor [mediumorchid3]        [r=.705882,g=.321569,b=.803922]
+\definecolor [mediumorchid4]        [r=.478431,g=.215686,b=.545098]
+\definecolor [darkorchid1]          [r=.74902,g=.243137,b=1]
+\definecolor [darkorchid2]          [r=.698039,g=.227451,b=.933333]
+\definecolor [darkorchid3]          [r=.603922,g=.196078,b=.803922]
+\definecolor [darkorchid4]          [r=.407843,g=.133333,b=.545098]
+\definecolor [purple1]              [r=.607843,g=.188235,b=1]
+\definecolor [purple2]              [r=.568627,g=.172549,b=.933333]
+\definecolor [purple3]              [r=.490196,g=.14902,b=.803922]
+\definecolor [purple4]              [r=.333333,g=.101961,b=.545098]
+\definecolor [mediumpurple1]        [r=.670588,g=.509804,b=1]
+\definecolor [mediumpurple2]        [r=.623529,g=.47451,b=.933333]
+\definecolor [mediumpurple3]        [r=.537255,g=.407843,b=.803922]
+\definecolor [mediumpurple4]        [r=.364706,g=.278431,b=.545098]
+\definecolor [thistle1]             [r=1,g=.882353,b=1]
+\definecolor [thistle2]             [r=.933333,g=.823529,b=.933333]
+\definecolor [thistle3]             [r=.803922,g=.709804,b=.803922]
+\definecolor [thistle4]             [r=.545098,g=.482353,b=.545098]
+\definecolor [gray0]                [black]
+\definecolor [gray1]                [s=.01]
+\definecolor [gray2]                [s=.02]
+\definecolor [gray3]                [s=.03]
+\definecolor [gray4]                [s=.04]
+\definecolor [gray5]                [s=.05]
+\definecolor [gray6]                [s=.06]
+\definecolor [gray7]                [s=.07]
+\definecolor [gray8]                [s=.08]
+\definecolor [gray9]                [s=.09]
+\definecolor [gray10]               [s=.1]
+\definecolor [gray11]               [s=.11]
+\definecolor [gray12]               [s=.12]
+\definecolor [gray13]               [s=.13]
+\definecolor [gray14]               [s=.14]
+\definecolor [gray15]               [s=.15]
+\definecolor [gray16]               [s=.16]
+\definecolor [gray17]               [s=.17]
+\definecolor [gray18]               [s=.18]
+\definecolor [gray19]               [s=.19]
+\definecolor [gray20]               [s=.2]
+\definecolor [gray21]               [s=.21]
+\definecolor [gray22]               [s=.22]
+\definecolor [gray23]               [s=.23]
+\definecolor [gray24]               [s=.24]
+\definecolor [gray25]               [s=.25]
+\definecolor [gray26]               [s=.26]
+\definecolor [gray27]               [s=.27]
+\definecolor [gray28]               [s=.28]
+\definecolor [gray29]               [s=.29]
+\definecolor [gray30]               [s=.3]
+\definecolor [gray31]               [s=.31]
+\definecolor [gray32]               [s=.32]
+\definecolor [gray33]               [s=.33]
+\definecolor [gray34]               [s=.34]
+\definecolor [gray35]               [s=.35]
+\definecolor [gray36]               [s=.36]
+\definecolor [gray37]               [s=.37]
+\definecolor [gray38]               [s=.38]
+\definecolor [gray39]               [s=.39]
+\definecolor [gray40]               [s=.4]
+\definecolor [gray41]               [s=.41]
+\definecolor [gray42]               [s=.42]
+\definecolor [gray43]               [s=.43]
+\definecolor [gray44]               [s=.44]
+\definecolor [gray45]               [s=.45]
+\definecolor [gray46]               [s=.46]
+\definecolor [gray47]               [s=.47]
+\definecolor [gray48]               [s=.48]
+\definecolor [gray49]               [s=.49]
+\definecolor [gray50]               [s=.5]
+\definecolor [gray51]               [s=.51]
+\definecolor [gray52]               [s=.52]
+\definecolor [gray53]               [s=.53]
+\definecolor [gray54]               [s=.54]
+\definecolor [gray55]               [s=.55]
+\definecolor [gray56]               [s=.56]
+\definecolor [gray57]               [s=.57]
+\definecolor [gray58]               [s=.58]
+\definecolor [gray59]               [s=.59]
+\definecolor [gray60]               [s=.6]
+\definecolor [gray61]               [s=.61]
+\definecolor [gray62]               [s=.62]
+\definecolor [gray63]               [s=.63]
+\definecolor [gray64]               [s=.64]
+\definecolor [gray65]               [s=.65]
+\definecolor [gray66]               [s=.66]
+\definecolor [gray67]               [s=.67]
+\definecolor [gray68]               [s=.68]
+\definecolor [gray69]               [s=.69]
+\definecolor [gray70]               [s=.7]
+\definecolor [gray71]               [s=.71]
+\definecolor [gray72]               [s=.72]
+\definecolor [gray73]               [s=.73]
+\definecolor [gray74]               [s=.74]
+\definecolor [gray75]               [s=.75]
+\definecolor [gray76]               [s=.76]
+\definecolor [gray77]               [s=.77]
+\definecolor [gray78]               [s=.78]
+\definecolor [gray79]               [s=.79]
+\definecolor [gray80]               [s=.8]
+\definecolor [gray81]               [s=.81]
+\definecolor [gray82]               [s=.82]
+\definecolor [gray83]               [s=.83]
+\definecolor [gray84]               [s=.84]
+\definecolor [gray85]               [s=.85]
+\definecolor [gray86]               [s=.86]
+\definecolor [gray87]               [s=.87]
+\definecolor [gray88]               [s=.88]
+\definecolor [gray89]               [s=.89]
+\definecolor [gray90]               [s=.9]
+\definecolor [gray91]               [s=.91]
+\definecolor [gray92]               [s=.92]
+\definecolor [gray93]               [s=.93]
+\definecolor [gray94]               [s=.94]
+\definecolor [gray95]               [s=.95]
+\definecolor [gray96]               [s=.96]
+\definecolor [gray97]               [s=.97]
+\definecolor [gray98]               [s=.98]
+\definecolor [gray99]               [s=.99]
+\definecolor [gray100]              [white]
+\definecolor [darkgray]             [s=.662745]
+\definecolor [darkblue]             [b=.545098]
+\definecolor [darkcyan]             [g=.545098,b=.545098]
+\definecolor [darkmagenta]          [r=.545098,b=.545098]
+\definecolor [darkred]              [r=.545098]
+\definecolor [lightgreen]           [r=.564706,g=.933333,b=.564706]

Added: trunk/Master/texmf-dist/tex/context/base/mkii/colo-ext.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/colo-ext.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/colo-ext.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,59 @@
+%D \module
+%D   [       file=colo-ext, % mostof thsi code used to be in colo-ini.tex
+%D        version=1997.04.01,
+%D          title=\CONTEXT\ Color Macros,
+%D       subtitle=Extras,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Color Macros / Extras}
+
+\unprotect
+
+%D \macros
+%D   {negatecolorcomponent, negativecolorbox}
+%D
+%D Sometimes, especially when we deal with typesetting
+%D devices, we want to reverse the color scheme. Instead of
+%D recalculating all those colors, we use a quick and dirty
+%D approach:
+%D
+%D \starttyping
+%D \negativecolorbox0
+%D \stoptyping
+%D
+%D will negate the colors in box zero.
+
+\def\negatecolorbox#1%
+  {\setbox#1\hbox
+     {\dostartnegative
+      \localstartcolor[white]\vrule\!!height\ht#1\!!depth\dp#1\!!width\wd#1\localstopcolor
+      \hskip-\wd#1%
+      \box#1%
+      \dostopnegative}}
+
+%D There are in principle two ways to handle overprint: bound to colors
+%D or independent. For the moment we only support independent overprint
+%D handling. Here we deal with a per-document setting.
+
+\setupcolors
+  [\c!intent=\v!none]
+
+\def\starttextoverprint
+  {\doifelse\@@clintent\v!overprint
+     {\glet\stoptextoverprint \dostopoverprint
+      \glet\starttextoverprint\dostartoverprint
+      \dostartoverprint}
+     {\glet\stoptextoverprint\donothing}}
+
+\let\stoptextoverprint\donothing
+
+\appendtoks \starttextoverprint \to \everystarttextproperties
+\appendtoks \stoptextoverprint  \to \everystoptextproperties
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/colo-hex.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/colo-hex.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/colo-hex.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,125 @@
+%D \module
+%D   [       file=colo-hex,
+%D        version=2004.06.23,
+%D          title=\CONTEXT\ Color Macros,
+%D       subtitle=Hex Colors,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\ifdefined \hexcolorprefix
+  \expandafter \endinput
+\fi
+
+\writestatus{loading}{ConTeXt Color Macros / Hexadecimal}
+
+% \edef\testcolor{\string#FFC0C0}
+% \edef\testcolor{\string#55}
+%
+% \setupcolors[state=start]
+%
+% \expanded{\definecolor[thehexcolor][\hexcolorspec\testcolor]}
+%
+% \checkhexcolor[\testcolor]
+%
+% \definecolor[thehexcolor][\testcolor]
+%
+% \starttext
+%
+% test \color[thehexcolor]{rood}
+% test \color[red]{rood}
+% test \color[\testcolor]{rood}
+%
+% \stoptext
+
+\unprotect
+
+% \definecolor[rgbtestcolor] [r=0.87843,g=0.87451,b=0.89020] % RGB(224,223,227)
+% \definecolor[hextestcolor] [h=E0DFE3]
+%
+% \startMPpage
+%     path p ; % example by Peter Rolf
+%     p := unitsquare xyscaled(5cm,5cm) ;
+%     fill (point 0 of p -- point 1 of p -- point 2 of p --cycle) withcolor \MPcolor{rgbtestcolor} ; % bottom right part of the square
+%     fill (point 0 of p -- point 3 of p -- point 2 of p --cycle) withcolor \MPcolor{hextestcolor} ; % top left part
+% \stopMPpage
+
+\newdimen\hexcolorfraction \hexcolorfraction=\dimexpr1pt/255\relax
+
+\chardef\hexcolorprefix=`#
+
+\def\hexcolorspec   #1{\expandafter\dohexcolorspec   #1\empty\empty\empty\empty\relax}
+\def\hexcolorpattern#1{\expandafter\dohexcolorpattern#1\empty\empty\empty\empty\relax}
+
+\ifx\dohexstringtonumber\undefined \def\dohexstringtonumber{"} \fi
+
+\def\hexcolorcomponent#1#2%
+  {\ifnum\dohexstringtonumber#1#2=\zerocount0\else\ifnum\dohexstringtonumber#1#2=\plusone1\else
+     \expandafter\withoutpt\the\dimexpr\dohexstringtonumber#1#2\hexcolorfraction\relax
+   \fi\fi}
+
+\def\dohexcolorspec#1#2#3#4#5#6#7#8\relax
+  {\ifx#4\empty
+     s=\hexcolorcomponent#2#3%
+   \else
+     r=\hexcolorcomponent#2#3,g=\hexcolorcomponent#4#5,b=\hexcolorcomponent#6#7%
+   \fi}
+
+\def\dohexcolorpattern#1#2#3#4#5#6#7#8\relax
+  {0\ifx#4\empty
+     S:\hexcolorcomponent#2#3%
+   \else
+     R:\hexcolorcomponent#2#3:\hexcolorcomponent#4#5:\hexcolorcomponent#6#7%
+   \fi:0:0}
+
+\def\doifhexcolorelse#1%
+  {\expandafter\dodoifhexcolorelse#10\od} % 0 is a dirty trick to catch an empty #1
+
+\def\dodoifhexcolorelse#1#2\od
+  {\ifnum`#1=\hexcolorprefix
+     \expandafter\firstoftwoarguments
+   \else
+     \expandafter\secondoftwoarguments
+   \fi}
+
+\def\docheckhexcolor#1%
+  {\doifhexcolorelse{#1}{\doifundefined{#1}{\setxvalue{\??cr#1}{\hexcolorpattern{#1}}}}\donothing}
+
+\def\checkhexcolor[#1]%
+  {\expanded{\docheckhexcolor{#1}}}
+
+\def\colorHpattern{\@EA\hexcolorpattern\@EA{\@EA*\@@cl@@h}} % * == dummy placeholder
+
+\let\dodododefinecolor\dododefinecolor % we will overload this one
+
+\def\dododefinecolor#1#2#3#4[#5][#6]%
+  {\doifhexcolorelse{#6}
+     {\setxvalue{\??cr#5}{\hexcolorpattern{#6}}}
+     {\dodododefinecolor#1#2#3#4[#5][#6]}}
+
+%D For Adam Lindsay and his XeTeX special driver:
+
+% because we intercept the zero condition, the .23pt in 1.23pt will disappear in the
+% ifcase zero part branch
+
+\def\colorhexcomponent#1%
+  {\ifdim#1\points<.005\points
+     00\else\lchexnumbers{\the\dimexpr255\dimexpr#1\points\relax+.5\points\relax}%
+   \fi}
+
+% the faster one
+
+\newdimen\hex at color@a \hex at color@a=.005pt
+\newdimen\hex at color@b \hex at color@b=.5pt
+\chardef \hex at color@c             =255
+
+\def\colorhexcomponent#1%
+  {\ifdim#1\points<\hex at color@a
+     00\else\lchexnumbers{\the\dimexpr#1\points*\hex at color@c+\hex at color@b\relax}%
+   \fi}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/colo-ini.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/colo-ini.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/colo-ini.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,2794 @@
+%D \module
+%D   [       file=colo-ini,
+%D        version=2007.08.08,
+%D          title=\CONTEXT\ Color Macros,
+%D       subtitle=Initialization,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D We need to clean this up further but first we hav eto make sure that mkiv
+%D code works ok.
+
+\writestatus{loading}{ConTeXt Color Macros / Initialization}
+
+%D This module implements color. Since \MKII\ and \MKIV\ use a completely
+%D different approach, this module only implements a few generic mechanisms.
+
+\unprotect
+
+\chardef\colorversion=1 % temp, needed for tracing purposes, mkiv transition
+
+%D We use a couple of local registers. That way we don't have
+%D to group when converting colors. By the way, this is not
+%D really faster. We can sqeeze half a second runtime for 50K
+%D switches on a 1G machine, but the macros will become rather
+%D ugly then. To mention one such improvement: no colon
+%D after the key character (.25 sec).
+
+\newdimen\colordimen
+\newcount\colorcount
+
+%D When typesetting for paper, we prefer using the \cap{CMYK}
+%D color space, but for on||screen viewing we prefer \cap{RGB}
+%D (the previous implementation supported only this scheme).
+%D Independant of such specifications, we support some automatic
+%D conversions:
+%D
+%D \startitemize[packed]
+%D \item  convert all colors to \cap{RGB}
+%D \item  convert all colors to \cap{CMYK}
+%D \item  convert all colors to gray scales
+%D \stopitemize
+%D
+%D We also support optimization of colors to gray scales.
+%D
+%D \startitemize[continue]
+%D \item  reduce gray colors to gray scales
+%D \item  reduce \cap{CMY} components to \cap{K}
+%D \stopitemize
+%D
+%D These options are communicated by means of:
+
+\newif\ifRGBsupported
+\newif\ifCMYKsupported
+\newif\ifSPOTsupported
+\newif\ifpreferGRAY
+\newif\ifGRAYprefered
+\newif\ifreduceCMYK
+\newif\ifconverttoGRAY
+\newif\ifweightGRAY       \weightGRAYtrue
+
+\newif\ifconvertMPcolors
+\newif\ifreduceMPcolors
+\newif\ifforcegrayMPcolors
+
+%D The last boolean controls reduction of \cap{CMYK} to
+%D \cap{CMY} colors. When set to true, the black component
+%D is added to the other ones.
+%D
+%D Prefering gray is not the same as converting to gray.
+%D Conversion treats each color components in a different way,
+%D while prefering is just a reduction and thus a
+%D space||saving option.
+
+\newif\iffreezecolors  \freezecolorsfalse
+\newif\ifincolor                          % true if colors enabled
+\newif\iflocalcolor
+
+\let\colorlist        \empty
+\let\currentspotcolor \empty
+\let\allspotcolors    \empty
+\let\usedspotcolors   \empty
+\let\usedcolorchannels\empty
+\let\currentpalet     \empty
+
+%D \macros
+%D   {definecolor,defineglobalcolor,definenamedcolor,definespotcolor,definemultitonecolor}
+%D
+%D \startbuffer
+%D \definecolor [blue]   [c=1,m=.38,y=0,k=.64] % pantone pms 2965 uncoated m
+%D \definecolor [yellow] [c=0,m=.28,y=1,k=.06] % pantone pms  124 uncoated m
+%D
+%D \definespotcolor [blue-100]   [blue]   [p=1]
+%D \definespotcolor [yellow-100] [yellow] [p=1]
+%D
+%D \definemultitonecolor [pdftoolscolor] [blue=.12,yellow=.28] [c=.1,m=.1,y=.3,k=.1]
+%D
+%D \useexternalfigure[demofig][mill.png][object=no]
+%D
+%D \startcombination[4*1]
+%D   {\externalfigure[demofig]}                      {no color}
+%D   {\externalfigure[demofig][color=pdftoolscolor]} {indexed duotone}
+%D   {\externalfigure[demofig][color=blue-100]}      {spot color}
+%D   {\externalfigure[demofig][color=yellow-100]}    {spot color}
+%D \stopcombination
+%D \stopbuffer
+%D
+%D \getbuffer \typebuffer
+
+\def\definecolor         {\dodoubleargument\dodefinecolor}
+\def\defineglobalcolor   {\dodoubleargument\dodefineglobalcolor}
+\def\definenamedcolor    {\dodoubleargument\dodefinenamedcolor}
+\def\definespotcolor     {\dotripleargument\dodefinespotcolor}
+\def\definemultitonecolor{\doquadrupleempty\dodefinemultitonecolor}
+
+% check: registerusedspotcolors
+% check: registerusedcolorchannels
+
+%D \macros
+%D   {doifcolorelse, doifcolor}
+%D
+%D Switching to a color is done by means of the following
+%D command. Later on we will explain the use of palets.  We
+%D define ourselves a color conditional first.
+
+\ifx\doifcolorelse\undefined
+    \let\doifcolorelse\secondoftwoarguments
+    \let\doifcolor    \gobbleoneargument
+\fi
+
+%D \macros
+%D   {localstartcolor,localstopcolor}
+%D
+%D Simple color support, that is without nesting, is provided
+%D by:
+
+\ifx\localstartcolor\undefined
+    \let\localstartcolor\undefined
+    \let\localstopcolor \undefined
+\fi
+
+%D \macros
+%D   {faststartcolor,faststopcolor}
+%D
+%D No checking for arguments and such:
+
+\ifx\faststartcolor\undefined
+    \def\faststartcolor[#1]{}
+    \def\faststopcolor     {}
+\fi
+
+%D These local ones may go away in future versions.
+
+%D \macros
+%D   {startcolor,stopcolor}
+%D
+%D The more save method, the one that saves the current color
+%D state and returns to this state afterward, is activated by:
+%D
+%D \showsetup{startcolor}
+
+\ifx\startcolor\undefined
+    \let\startcolor\undefined
+    \let\stopcolor \undefined
+\fi
+
+%D \macros
+%D   {startcurrentcolor,stopcurrentcolor}
+
+\def\startcurrentcolor{\startcolor[\outercolorname]}
+\def\stopcurrentcolor {\stopcolor}
+
+%D \macros
+%D   {color,graycolor}
+%D
+%D This leaves the simple color command:
+%D
+%D \showsetup{color}
+%D \showsetup{graycolor}
+
+\ifx\color\undefined
+    \def\color    [#1]{}
+    \def\graycolor[#1]{}
+    \def\gray         {\graycolor}
+\fi
+
+%D \macros
+%D   {localstartraster,localstopraster,
+%D    startraster,stopraster,raster}
+%D
+%D The previous conversions are not linear and treat each color
+%D component according to human perception curves. Pure gray
+%D (we call them rasters) has equal color components. In
+%D \CONTEXT\ rasters are only used as backgrounds and these
+%D don't cross page boundaries in the way color does. Therefore
+%D we don't need stacks and marks. Just to be compatible with
+%D color support we offer both 'global' and 'local' commands.
+
+\ifx\startraster\undefined
+    \def\startraster     [#1]{}
+    \def\stopraster          {}
+    \def\raster          [#1]{}
+    \def\localstartraster[#1]{}
+    \def\localstopraster     {}
+\fi
+
+%D \macros
+%D   {colorvalue, grayvalue}
+%D
+%D We can typeset the color components using \type{\colorvalue} and
+%D \type{\grayvalue}. The commands:
+%D
+%D \startbuffer
+%D color value of SomeKindOfRed: \colorvalue{SomeKindOfRed} \crlf
+%D gray value of SomeKindOfRed: \grayvalue{SomeKindOfRed}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D show us:
+%D
+%D \startvoorbeeld
+%D \getbuffer
+%D \stopvoorbeeld
+
+\def\colorformatseparator{ }
+
+\ifx\colorvalue\undefined
+    \let\colorvalue\gobbleoneargument
+    \let\grayvalue \gobbleoneargument
+\fi
+
+% check: \currentcolorname
+% check: \outercolorname
+
+%D \macros
+%D   {setupcolor}
+%D
+%D Color definitions can be grouped in files with the name:
+%D
+%D \starttyping
+%D \f!colorprefix-identifier.tex
+%D \stoptyping
+%D
+%D where \type{\f!colorprefix} is \unprotect {\tttf \f!colorprefix}.
+%D Loading such a file is done by \protect
+%D
+%D \showsetup{setupcolor}
+%D
+%D Some default colors are specified in \type{colo-rgb.tex},
+%D which is loaded into the format by:
+%D
+%D \starttyping
+%D \setupcolor[rgb]
+%D \stoptyping
+
+\let\colorstyle\empty
+
+\def\setupcolor
+  {\dosingleargument\dosetupcolor}
+
+\def\dosetupcolor[#1]%
+  {\doifnot{#1}\colorstyle
+     {\def\colorstyle{#1}%
+      \processcommalist[#1]\dodosetupcolor}}
+
+\def\dodosetupcolor#1%
+  {\makeshortfilename[\truefilename{\f!colorprefix#1}]%
+   \startreadingfile
+     \readsysfile{\shortfilename.\mksuffix}
+       {\showmessage\m!colors4\colorstyle}
+       {\readsysfile{\shortfilename.tex}
+          {\showmessage\m!colors4\colorstyle}
+          {\showmessage\m!colors5\colorstyle}}%
+   \stopreadingfile}
+
+\let\usecolors\setupcolor
+
+% check: \chardef\currentcolorchannel=0
+% check: \startcolormode
+% check: \newif\iffilterspotcolor \filterspotcolorfalse
+% check: \newif\ifdoingspotcolor  \doingspotcolorfalse
+% check: \registercolorchannel
+
+%D \macros
+%D   {definetransparency}
+%D
+%D This command numbers to names:
+
+\def\definetransparency
+  {\dodoubleargument\dodefinetransparency}
+
+\def\setupcolors
+  {\dosingleargument\dosetupcolors}
+
+\def\resetcolorsplitting
+  {\chardef\currentcolorchannel\zerocount
+   \let\currentspotcolor\empty
+   \filterspotcolorfalse}
+
+\def\colorsplitsuffix{\ifcase\currentcolorchannel\else-\@@clsplit\fi}
+\def\colorsplitprefix{\ifcase\currentcolorchannel\else\@@clsplit-\fi}
+
+\def\setcolorsplitting
+  {\resetsystemmode{\v!color\colorsplitsuffix}%
+   \resetcolorsplitting
+   \processaction
+     [\@@clsplit]
+     [         c=>\chardef\currentcolorchannel1,%
+               m=>\chardef\currentcolorchannel2,%
+               y=>\chardef\currentcolorchannel3,%
+               k=>\chardef\currentcolorchannel4,%
+               r=>\chardef\currentcolorchannel5,%
+               g=>\chardef\currentcolorchannel6,%
+               b=>\chardef\currentcolorchannel7,%
+               s=>\chardef\currentcolorchannel8,%
+           \v!no=>,%      \currentcolorchannel0,% all colors
+      \s!default=>,%      \currentcolorchannel0,% all colors
+      \s!unknown=>\filterspotcolortrue
+                  \edef\currentspotcolor{\commalistelement}]%
+   \setsystemmode{\v!color\colorsplitsuffix}%
+   \iffilterspotcolor \let\@@clrgb\v!no \fi}
+
+\ifx\dosetupcolormodel\undefined
+    \let\dosetupcolormodel\relax
+\fi
+
+\def\dosetupcolors[#1]% some no longer make sense in MkIV
+  {\getparameters[\??cl][#1]%
+   \doifelse\@@clspot\v!yes
+     \SPOTsupportedtrue
+     \SPOTsupportedfalse
+   \doifelsenothing\@@clsplit
+     \resetcolorsplitting
+     \setcolorsplitting
+   \doifelse\@@clreduction\v!yes
+     \reduceCMYKtrue
+     \reduceCMYKfalse
+   \doifelse\@@clexpansion\v!yes
+     \freezecolorstrue
+     \freezecolorsfalse
+   \doifelse\@@clcriterium\v!all
+     \hidesplitcolortrue
+     \hidesplitcolorfalse
+   \doifelse\@@clrgb\v!no
+     {\ifRGBsupported     \ifproductionrun\showmessage\m!colors {9}\v!rgb         \fi\RGBsupportedfalse \fi}
+     {\ifRGBsupported \else\ifproductionrun\showmessage\m!colors{10}\v!rgb        \fi\RGBsupportedtrue  \fi}%
+   \doifelse\@@clcmyk\v!no
+     {\ifCMYKsupported     \ifproductionrun\showmessage\m!colors {9}\v!cmyk       \fi\CMYKsupportedfalse\fi}
+     {\ifCMYKsupported\else\ifproductionrun\showmessage\m!colors{10}\v!cmyk       \fi\CMYKsupportedtrue \fi}%
+   \doifelse\@@clmpcmyk\v!no
+     {\ifMPcmykcolors      \ifproductionrun\showmessage\m!colors {9}{\v!mp\v!cmyk}\fi\MPcmykcolorsfalse \fi}
+     {\ifMPcmykcolors \else\ifproductionrun\showmessage\m!colors{10}{\v!mp\v!cmyk}\fi\MPcmykcolorstrue  \fi}%
+   \doifelse\@@clmpspot\v!no
+     {\ifMPspotcolors      \ifproductionrun\showmessage\m!colors {9}{\v!mp\v!spot}\fi\MPspotcolorsfalse \fi}
+     {\ifMPspotcolors \else\ifproductionrun\showmessage\m!colors{10}{\v!mp\v!spot}\fi\MPspotcolorstrue  \fi}%
+   \preferGRAYfalse
+   \processaction
+     [\@@clconversion]
+     [    \v!yes=>\preferGRAYtrue,
+       \v!always=>\preferGRAYtrue\RGBsupportedfalse\CMYKsupportedfalse]%
+   \ifRGBsupported
+     \converttoGRAYfalse
+     \forcegrayMPcolorsfalse
+   \else\ifCMYKsupported
+     \converttoGRAYfalse
+     \forcegrayMPcolorsfalse
+     \convertMPcolorstrue
+     \ifreduceCMYK
+       \reduceMPcolorstrue
+     \fi
+   \else
+     \ifconverttoGRAY\else\showmessage\m!colors{11}\empty\fi
+     \converttoGRAYtrue
+     \forcegrayMPcolorstrue
+     \convertMPcolorsfalse
+     \reduceMPcolorsfalse
+   \fi\fi
+   \processaction
+     [\@@clstate]
+     [ \v!global=>\ifincolor\else\showmessage\m!colors1\colorstyle\fi
+                  \incolortrue\localcolorfalse,
+        \v!local=>\ifincolor\else\showmessage\m!colors2\colorstyle\fi
+                  \incolortrue\localcolortrue,
+        \v!start=>\ifincolor\else\showmessage\m!colors1\colorstyle\fi
+                  \incolortrue\localcolorfalse
+                  \let\@@clstate\v!global,
+         \v!stop=>\incolorfalse\localcolorfalse
+                  \forcegrayMPcolorstrue]%
+   \dosetupcolormodel
+   \initializemaintextcolor}
+
+%D \macros
+%D   {startregistercolor,stopregistercolor,permitcolormode}
+%D
+%D If you only want to register a color, the switch \type
+%D {\ifpermitcolormode} can be used. That way the nested
+%D colors know where to go back to.
+
+\ifx\startregistercolor\undefined
+    \def\startregistercolor[#1]{}
+    \def\stopregistercolor     {}
+\fi
+
+%D We use these macros for implementing text colors
+%D (actually, the first application was in foreground
+%D colors).
+%D
+%D \starttyping
+%D \starttextcolor[red]
+%D   \dorecurse{10}{\input tufte \color[green]{oeps} \par}
+%D \stoptextcolor
+%D \stoptyping
+%D
+%D This is more efficient than the alternative:
+%D
+%D \starttyping
+%D \setupbackgrounds[text][foregroundcolor=red]
+%D \startregistercolor[red]
+%D   \dorecurse{10}{\input tufte \color[green]{oeps} \par}
+%D \stopregistercolor
+%D \stoptyping
+
+\def\maintextcolor     {}
+\def\defaulttextcolor  {black}
+\def\@@themaintextcolor{themaintextcolor}
+
+\ifx\initializemaintextcolor\undefined
+    \def\starttextcolor       [#1]{}
+    \def\stoptextcolor            {}
+    \def\initializemaintextcolor  {}
+\fi
+
+\ifx\restoretextcolor\undefined % to be redone
+    \let\restoretextcolor   \firstofoneargument
+    \let\localstarttextcolor\relax
+    \let\localstoptextcolor \relax
+\fi
+
+%D In this documentation we will not go into too much details
+%D on palets. Curious users can find more information on this
+%D topic in \from[use of color].
+%D
+%D At the moment we implemented color in \CONTEXT\ color
+%D printing was not yet on the desktop. In spite of this lack our
+%D graphics designer made colorfull illustrations. When printed
+%D on a black and white printer, distinctive colors can come
+%D out equally gray. We therefore decided to use only colors
+%D that were distinctive in colors as well as in black and
+%D white print.
+%D
+%D Although none of the graphic packages we used supported
+%D logical colors and global color redefition, we build this
+%D support into \CONTEXT. This enabled us to experiment and
+%D also prepared us for the future.
+
+%D \macros
+%D   {definepalet}
+%D
+%D Colors are grouped in palets. The colors in such a palet can
+%D have colorful names, but best is to use names that specify
+%D their use, like {\em important} or {\em danger}. As a sort
+%D of example \CONTEXT\ has some palets predefined,
+%D like:\footnote{At the time I wrote the palet support, I was
+%D reading 'A hort history of time' of S.~Hawkins, so that's
+%D why we stuck to quarks.}
+%D
+%D \starttyping
+%D \definepalet
+%D   [alfa]
+%D   [     top=rood:7,
+%D      bottom=groen:6,
+%D          up=blauw:5,
+%D        down=cyaan:4,
+%D     strange=magenta:3,
+%D       charm=geel:2]
+%D \stoptyping
+%D
+%D It's formal definition is:
+%D
+%D \showsetup{definepalet}
+%D
+%D Visualized, such a palet looks like:
+%D
+%D \startbuffer[palet]
+%D \showpalet [alfa] [horizontal,name,number,value]
+%D \stopbuffer
+%D
+%D \startlinecorrection
+%D \getbuffer[palet]
+%D \stoplinecorrection
+%D
+%D This bar shows both the color and gray alternatives of the
+%D palet components (not visible in black and white print).
+%D
+%D When needed, one can copy a palet by saying:
+%D
+%D \starttyping
+%D \definepalet [TEXcolorpretty] [colorpretty]
+%D \stoptyping
+%D
+%D This saves us some typing in for instance the modules that
+%D deal with pretty verbatim typesetting.
+
+\def\definepalet
+  {\dodoubleargument\dodefinepalet}
+
+\def\dodefinepalet[#1][#2]%
+  {\doifassignmentelse{#2}
+     {%\showmessage\m!colors6{#1}%
+      \letvalue{\??pa#1}\empty
+      \setevalue{\??pa\??pa#1}{#2}%
+      \def\dodododefinepalet[##1=##2]%
+        {\doifvaluesomething{\??pa#1}
+           {\setevalue{\??pa#1}{\csname\??pa#1\endcsname,}}%
+         \setevalue{\??pa#1}{\csname\??pa#1\endcsname##1}%
+         \dodefinepaletcolor{#1}{##1}{##2}}%
+      \def\dododefinepalet##1%
+        {\dodododefinepalet[##1]}%
+      \processcommalist[#2]\dododefinepalet}
+     {\doifdefined{\??pa#2}
+        {\expanded{\dodefinepalet[#1][\csname\??pa\??pa#2\endcsname]}}}}
+
+\ifx\dodefinepaletcolor\undefined
+    \let\dodefinepaletcolor\gobblethreearguments
+\fi
+
+\let\paletsize\!!zerocount
+
+\def\getpaletsize[#1]%
+  {\getcommacommandsize[\csname\??pa\??pa#1\endcsname]%
+   \edef\paletsize{\number\commalistsize}}
+
+%D Instead of refering to colors, one can also directly specify
+%D a color:
+%D
+%D \starttyping
+%D \definepalet[test][xx=green]
+%D \definepalet[test][xx={y=.4}]
+%D \stoptyping
+
+%D \macros
+%D   {setuppalet}
+%D
+%D Colors are taken from the current palet, if defined.
+%D Setting the current palet is done by:
+%D
+%D \showsetup{setuppalet}
+
+\let\currentpalet\empty
+
+\def\setuppalet
+  {\dosingleempty\dosetuppalet}
+
+\def\dosetuppalet[#1]%
+  {\edef\currentpalet{#1}%
+   \ifx\currentpalet\empty
+     % seems to be a reset
+   \else\ifcsname\??pa\currentpalet\endcsname
+     \edef\currentpalet{#1:}%
+   \else
+     \showmessage\m!colors7\currentpalet
+     \let\currentpalet\empty
+   \fi\fi}
+
+%D \macros
+%D   {showpalet}
+%D
+%D The previous visualization was typeset with:
+%D
+%D \typebuffer[palet]
+%D
+%D This commands is defined as:
+%D
+%D \showsetup{showpalet}
+
+\fetchruntimecommand \showpalet {\f!colorprefix\s!run}
+
+%D \macros
+%D   {showcolorcomponents}
+%D
+%D \starttyping
+%D \showcolorcomponents[color-1,color-2]
+%D \stoptyping
+
+\fetchruntimecommand \showcolorcomponents {\f!colorprefix\s!run}
+
+%D \macros
+%D   {definecolorgroup}
+%D
+%D The naming of the colors in this palet suggests some
+%D ordening, which in turn is suported by color grouping.
+%D
+%D \starttyping
+%D \definecolorgroup
+%D   [red]
+%D   [1.00:0.90:0.90,
+%D    1.00:0.80:0.80,
+%D    1.00:0.70:0.70,
+%D    1.00:0.55:0.55,
+%D    1.00:0.40:0.40,
+%D    1.00:0.25:0.25,
+%D    1.00:0.15:0.15,
+%D    0.90:0.00:0.00]
+%D \stoptyping
+%D
+%D In such a color group colors are numbered from~$1$ to~$n$.
+%D
+%D \showsetup{definecolorgroup}
+%D
+%D This kind of specification is not only more compact than
+%D defining each color separate, it also loads faster and takes
+%D less bytes.
+
+\def\definecolorgroup
+  {\dotripleempty\dodefinecolorgroup}
+
+\def\dododefinecolorgroupgray         [#1][#2:#3]{\definecolor    [#1:\the\colorcount][s=#2]}
+\def\dododefinecolorgrouprgb    [#1][#2:#3:#4:#5]{\definecolor    [#1:\the\colorcount][r=#2,g=#3,b=#4]}
+\def\dododefinecolorgroupcmyk[#1][#2:#3:#4:#5:#6]{\definecolor    [#1:\the\colorcount][c=#2,m=#3=,y=#4,k=#5]}
+\def\dododefinecolorgroupspot      [#1][#2:#3:#4]{\definespotcolor[#1:\the\colorcount][#2][p=#3]}
+
+\def\dododefinecolorgroup#1#2%
+  {\advance\colorcount\plusone
+   \getvalue{dododefinecolorgroup\currentcolorspace}[#1][#2:0:0:0:0]}
+
+\def\dodefinecolorgroup[#1][#2][#3]% obsolete, just use palets
+  {\ifthirdargument
+     \doifelsenothing{#2}{\let\currentcolorspace\v!rgb}{\def\currentcolorspace{#2}}%
+     \colorcount\zerocount
+     \processcommalist[#3]{\dododefinecolorgroup{#1}}%
+   \else
+     \doifinstringelse{:}{#2}
+       {\definecolorgroup[#1][\v!rgb][#2]}
+       {\doloop
+          {\doifdefinedelse{\??cr#2:\recurselevel}
+             {\setevalue{\??cr#1:\recurselevel}{\csname\??cr#2:\recurselevel\endcsname}}
+             {\exitloop}}}%
+   \fi}
+
+%D \macros
+%D   {showcolorgroup}
+%D
+%D We can show the group by:
+%D
+%D \startbuffer
+%D \showcolorgroup [blue] [horizontal,name,number,value]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D or in color:
+%D
+%D \startlinecorrection
+%D \getbuffer
+%D \stoplinecorrection
+%D
+%D which uses:
+%D
+%D \showsetup{showcolorgroup}
+
+\fetchruntimecommand \showcolorgroup {\f!colorprefix\s!run}
+
+%D There are ten predefined color groups, like
+%D \color[green]{\em groen}, \color[red]{\em rood},
+%D \color[blue]{\em blauw}, \color[cyan]{\em cyaan},
+%D \color[magenta]{\em magenta} and \color[yellow]{\em geel}.
+%D
+%D \startlinecorrection
+%D \hbox to \hsize
+%D   {\hss
+%D    \showcolorgroup [red]    [vertical,name,number]\hss
+%D    \showcolorgroup [green]  [vertical,name]\hss
+%D    \showcolorgroup [blue]   [vertical,name]\hss
+%D    \showcolorgroup [cyan]   [vertical,name]\hss
+%D    \showcolorgroup [magenta][vertical,name]\hss
+%D    \showcolorgroup [yellow] [vertical,name]\hss}
+%D \stoplinecorrection
+%D
+%D These groups are used to define palets {\em alfa} upto {\em
+%D zeta}. As long as we don't use colors from the same row, we
+%D get ourselves distinctive palets. By activating such a palet
+%D one gains access to its members {\em top} to {\em charm} (of
+%D course one should use more suitable names than these).
+%D
+%D \startlinecorrection
+%D \hbox to \hsize
+%D   {\showpalet [alfa]    [vertical,name,number]\hss
+%D    \showpalet [beta]    [vertical,name]\hss
+%D    \showpalet [gamma]   [vertical,name]\hss
+%D    \showpalet [delta]   [vertical,name]\hss
+%D    \showpalet [epsilon] [vertical,name]\hss
+%D    \showpalet [zeta]    [vertical,name]}
+%D \stoplinecorrection
+%D
+%D By using the keyword \type {value} the individual color
+%D components are shown too. When printed in color, these
+%D showcases show both the colors and the gray value.
+
+%D \macros
+%D   {comparepalet}
+%D
+%D There are some more testing macros available:
+%D
+%D \startbuffer
+%D \comparepalet [alfa]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D shows the palet colors against a background:
+%D
+%D \startlinecorrection
+%D \getbuffer
+%D \stoplinecorrection
+%D
+%D The formal definition is:
+%D
+%D \showsetup{comparepalet}
+
+\fetchruntimecommand \comparepalet {\f!colorprefix\s!run}
+
+%D \macros
+%D   {comparecolorgroup}
+%D
+%D The similar command:
+%D
+%D \startbuffer
+%D \comparecolorgroup [blue]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D shows color groups:
+%D
+%D \startlinecorrection
+%D \getbuffer
+%D \stoplinecorrection
+%D
+%D this commands are defined as:
+%D
+%D \showsetup{comparecolorgroup}
+
+\fetchruntimecommand \comparecolorgroup {\f!colorprefix\s!run}
+
+%D \macros
+%D   {showcolor}
+%D
+%D But let's not forget that we also have the more traditional
+%D non||related colors. These show up after:
+%D
+%D \starttyping
+%D \showcolor [name]
+%D \stoptyping
+%D
+%D Where \type{name} for instance can be \type{rgb}.
+%D
+%D \showsetup{showcolor}
+
+\fetchruntimecommand \showcolor {\f!colorprefix\s!run}
+
+%D It would make sense to put the following code in \type
+%D {colo-mps}, but it it rather low level.
+
+%D \macros
+%D   {negatecolorcomponent,negatedcolorcomponent}
+%D
+%D These speak for themselves. See \type {colo-ext} for usage.
+
+\def\negatecolorcomponent#1% #1 = \macro
+  {\scratchdimen\onepoint\advance\scratchdimen-#1\onepoint
+   \ifdim\scratchdimen<\zeropoint\scratchdimen\zeropoint\fi
+   \edef#1{\withoutpt\the\scratchdimen}}
+
+\let\negatedcolorcomponent\firstofoneargument
+
+\def\negatedcolorcomponent#1%
+  {\ifdim\dimexpr\onepoint-#1\onepoint\relax<\zeropoint
+     \!!zerocount
+   \else
+     \expandafter\withoutpt\the\dimexpr\onepoint-#1\onepoint\relax
+   \fi}
+
+\def\negatecolorcomponent#1% #1 = \macro
+  {\edef#1{\negatedcolorcomponent{#1}}}
+
+%D \macros
+%D   {ifMPgraphics, ifMPcmykcolors, MPcolor}
+%D
+%D A very special macro is \type{\MPcolor}. This one can be
+%D used to pass a \CONTEXT\ color to \METAPOST.
+%D
+%D \starttyping
+%D \MPcolor{my own red}
+%D \stoptyping
+%D
+%D This macro returns a \METAPOST\ triplet \type{(R,G,B)}.
+%D Unless \CMYK\ color support is turned on with \type
+%D {MPcmyk}, only \cap{RGB} colors and gray scales are
+%D supported.
+
+\newif\ifMPcmykcolors % \MPcmykcolorsfalse
+\newif\ifMPspotcolors % \MPspotcolorsfalse
+
+\ifx\MPcolor\undefined
+    \def\MPcolor#1{(0,0,0)}
+\fi
+
+%D \macros
+%D   {PDFcolor,FDFcolor}
+%D
+%D Similar alternatives are avaliable for \PDF:
+
+%D For the moment we keep the next downward compatibility
+%D switch, i.e.\ expanded colors. However, predefined colors
+%D and palets are no longer expanded (which is what I wanted
+%D in the first place).
+%D
+%D Well, in case we want to do color separation and use CMYK
+%D colors only, this is dangerous since unwanted remapping may
+%D take place. Especially when we redefine already defined
+%D colors in another color space (e.g. darkgreen is
+%D predefined in RGB color space, so a redefinition in CMYK
+%D coordinates before RGB mode is disabled, would give
+%D unexpected results due to the already frozen color spec.)
+%D
+%D So, from now on, colors are not frozen any more!
+
+\chardef\currentcolorchannel=0
+
+\newif\iffilterspotcolor \filterspotcolorfalse
+\newif\ifdoingspotcolor  \doingspotcolorfalse
+
+\def\registercolorchannel#1%
+  {\ifdoingspotcolor \else
+     \global\expandafter\chardef\csname\??cs#1\endcsname\zerocount
+   \fi}
+
+\newif\ifhidesplitcolor \hidesplitcolortrue
+
+%D The next macro is for instance used in figure splitting:
+
+\def\doifseparatingcolorselse
+  {\iffilterspotcolor
+     \@EA\firstoftwoarguments
+   \else\ifcase\currentcolorchannel
+     \@EAEAEA\secondoftwoarguments
+   \else
+     \@EAEAEA\firstoftwoarguments
+   \fi\fi}
+
+\def\doifcolorchannelelse#1%
+  {\doifseparatingcolorselse
+     {\doifelsenothing{#1}
+        \secondoftwoarguments
+        {\doifelse{#1}\@@clsplit
+           \firstoftwoarguments
+           \secondoftwoarguments}}
+     \secondoftwoarguments}
+
+\def\resetcolorseparation
+  {\filterspotcolorfalse
+   \chardef\currentcolorchannel\zerocount}
+
+%D These can be used in selecting specific files (like
+%D figuredatabases).
+
+% we already have:
+%
+% \def\colorsplitsuffix{\ifcase\currentcolorchannel\else-\@@clsplitsen\fi}
+% \def\colorsplitprefix{\ifcase\currentcolorchannel\else\@@clsplitsen-\fi}
+
+\def\colorchannelprefix{\doifseparatingcolorselse\@@clsplit\empty-}
+\def\colorchannelsuffix{-\doifseparatingcolorselse\@@clsplit\empty}
+
+%D We now define the low level macros:
+
+\chardef\colorversion=1
+
+%D Color support is not present in \TEX. Colorful output can
+%D however be accomplished by using specials. This also means
+%D that this support depends on the \DVI\ driver used. At the
+%D moment this module was written, still no decent standard on
+%D color specials has been agreed upon. We therefore decided to
+%D implement a mechanism that is as independant as possible of
+%D drivers.
+%D
+%D Color support shares with fonts that is must be implemented
+%D in a way that permits processing of individual \DVI\ pages.
+%D Furthermore it should honour grouping. The first condition
+%D forces us to use a scheme that keeps track of colors at
+%D page boundaries. This can be done by means of \TEX's
+%D marking mechanism (\type{\mark}).
+%D
+%D When building pages, \TEX\ periodically looks at the
+%D accumulated typeset contents and breaks the page when
+%D suitable. At that moment, control is transfered to the
+%D output routine. This routine takes care of building the
+%D pagebody and for instance adds headers and footers. The page
+%D can be broken in the middle of some colored text, but
+%D headers and footers are often in black upon white or
+%D background. If colors are applied there, they definitely
+%D are used local, which means that they don't cross page
+%D borders.
+%D
+%D Boxes are handled as a whole, which means that when we
+%D apply colors inside a box, those colors don't cross page
+%D boundaries, unless of course boxes are split or unboxed.
+%D Especially in interactive texts, colors are often used in
+%D such a local way: in boxes (buttons and navigational tools)
+%D or in the pagebody (backgrounds).
+%D
+%D So we can distinguish local colors, that don't cross
+%D pages from global colors, of which we can end many pages
+%D later. The color macros will treat both types in a different
+%D way, thus gaining some speed.
+%D
+%D This module also deals with gray scales. Because similar
+%D colors can end up in the same gray scale when printed in
+%D black and white, we also implement a palet system that deals
+%D with these matters. Because of fundamental differences
+%D between color and gray scale printing, in \CONTEXT\ we also
+%D differ between these. For historic reasons |<|we first
+%D implemented gray scales using patterns of tiny periods|>|
+%D and therefore called them {\em rasters}. So don't be
+%D surprised if this term shows up.
+
+%D \macros
+%D   {definecolor}
+%D
+%D We will enable users to specify colors in \cap{RGB} and
+%D \cap{CMYK} color spaces or gray scales using
+%D
+%D \showsetup{definecolor}
+%D
+%D For example:
+%D
+%D \starttyping
+%D \definecolor [SomeKindOfRed] [r=.8,g=.05,b=.05]
+%D \stoptyping
+%D
+%D Such color specifications are saved in a macro in the
+%D following way:
+%D
+%D \starttyping
+%D \setvalue{\??cr name}{R:r:g:b}
+%D \setvalue{\??cr name}{C:c:m:y:k}
+%D \setvalue{\??cr name}{S:s}
+%D \stoptyping
+%D
+%D Gray scales are specified with the \type{s} parameter,
+%D where the \type {s} is derived from {\em screen}.
+%D
+%D Starting with \PDF\ 1.4 (2001) \CONTEXT\ supports
+%D transparent colors. The transparency factor is represented
+%D by a \type {t} and the transparency method by an \type {a}
+%D (alternative). Later we will implement more control
+%D (probably by symbolic methods. So, currently the data is
+%D stored as follows:
+%D
+%D \starttyping
+%D \setvalue{\??cr name}{R:r:g:b:a:t}
+%D \setvalue{\??cr name}{C:c:m:y:k:a:t}
+%D \setvalue{\??cr name}{S:s:a:t}
+%D \stoptyping
+
+% r g b   : rbg
+% c m y k : cmyk
+% s       : gray
+% p n d f : spot
+% h       : hexadecimal
+% t a     : transparency
+% e       : equivalent (spotcolors)
+
+\def\@@cl@@z{0}
+\def\@@cl@@o{1}
+
+\def\@@resetcolorparameters
+  {\let\@@cl@@r\@@cl@@z \let\@@cl@@g\@@cl@@z \let\@@cl@@b\@@cl@@z
+   \let\@@cl@@c\@@cl@@z \let\@@cl@@m\@@cl@@z \let\@@cl@@y\@@cl@@z \let\@@cl@@k\@@cl@@z
+   \let\@@cl@@s\@@cl@@z
+   \let\@@cl@@p\@@cl@@o \let\@@cl@@n\empty \let\@@cl@@d\empty \let\@@cl@@f\@@cl@@o
+   \let\@@cl@@h\empty
+   \let\@@cl@@e\empty
+   \let\@@cl@@t\@@cl@@z \let\@@cl@@a\@@cl@@z}
+
+\@@resetcolorparameters
+
+\def\@@cl@@A{\@@cl@@a} % a hook for symbolic conversion, see below
+
+%D Handling a few nested \type{\cs}'s is no problem (\type
+%D {\@EA\@EAEAEA\@EA}) but we need a full expansion, so I
+%D tried one of the fully expandable primitives using a sort
+%D of delimited thing. I tried \type {\number} first, but this
+%D does not work, but \type {\romannumeral} does. Actually,
+%D \type{\romannumeral0} returns nothing, so it's a perfect
+%D candidate for this kind of hackery. This reminds me that I
+%D have to look into David Kastrup's Euro\TeX\ 2002 article
+%D because he is using \type {\romannumeral} for loops
+%D (repetitive \quote {m} stuff).
+
+% \def\x{\y}\def\y{\z}\def\z{0:1:1:1}
+%
+% \def\bla #1:#2:#3\end{}
+%
+% \@EA\bla\romannumeral\x\end
+
+\def\colorXpattern{0S:\@@cl@@z:\@@cl@@z:\@@cl@@z}
+\def\colorZpattern{0S:\@@cl@@z:\@@cl@@A:\@@cl@@t}
+\def\colorSpattern{0S:\@@cl@@s:\@@cl@@A:\@@cl@@t}
+\def\colorCpattern{0C:\@@cl@@c:\@@cl@@m:\@@cl@@y:\@@cl@@k:\@@cl@@A:\@@cl@@t}
+\def\colorRpattern{0R:\@@cl@@r:\@@cl@@g:\@@cl@@b:\@@cl@@A:\@@cl@@t}
+
+%def\colorPpattern{0P:\@@cl@@n:\@@cl@@p:\@@cl@@A:\@@cl@@t}
+
+\def\colorPpattern{0P:\@@cl@@n:\@@cl@@f:\@@cl@@d:\@@cl@@p:\@@cl@@A:\@@cl@@t}
+
+%D The extra 0 catches empty colors specs (needed for the
+%D \type {\MPcolor} and \type {\PDFcolor} conversion (\type
+%D {\@@cr} equals \type {\relax}!).
+
+\def\handlecolorwith#1{\@EA#1\romannumeral0}
+
+%D Next comes the main definition macro.
+
+\def\dodefinecolor      {\dododefinecolor\relax   \setvalue \setevalue1}
+\def\dodefineglobalcolor{\dododefinecolor\doglobal\setgvalue\setxvalue1}
+\def\dodefinenamedcolor {\dododefinecolor\doglobal\setvalue \setevalue0}
+
+\let\colorlist\empty % not really used, only for colo-run
+\setfalse\collectcolorsinlist
+\def\collectcolorinlist#1{\doglobal\addtocommalist{#1}\colorlist}
+
+\def\dododefinecolor#1#2#3#4[#5][#6]% #2==set(g)value #3==set[e|x]value
+  {\ifconditional\collectcolorsinlist\collectcolorinlist{#5}\fi
+   \doifassignmentelse{#6}
+     {\@@resetcolorparameters
+      \getparameters[\??cl @@][#6]%
+      \ifx\@@cl@@h\empty
+        \doifelse{\@@cl@@r\@@cl@@g\@@cl@@b}{\@@cl@@z\@@cl@@z\@@cl@@z}
+          {\doifelse{\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k}{\@@cl@@z\@@cl@@z\@@cl@@z\@@cl@@z}
+             {\doifelse\@@cl@@s\@@cl@@z
+                {\showmessage\m!colors8{{[#6]},#5}%
+                 #3{\??cr#5}{\colorZpattern}}
+                {#3{\??cr#5}{\colorSpattern}}}
+             {#3{\??cr#5}{\colorCpattern}}}
+          {#3{\??cr#5}{\colorRpattern}}%
+      \else
+        \setxvalue{\??cr#5}{\colorHpattern}%
+      \fi
+      % new: e=external spot color name
+      \ifx\@@cl@@e\empty \else
+        \doregisterspotcolorname{#5}\@@cl@@e
+      \fi}
+     {\doifelsenothing\currentpalet
+         \donefalse
+        {\doifdefinedelse{\??cr\currentpalet#6}\donetrue\donefalse}%
+      \ifdone
+        \doifnot{#5}{#6}
+           {#2{\??cr#5}{\paletcolorspec{#6}}}%
+      \else
+        \doifdefinedelse{\??cr#6}
+           {\doifelse{#5}{#6}
+              {% this way we can freeze \definecolor[somecolor][somecolor]
+               % and still prevent cyclic definitions
+               \iffreezecolors#3{\??cr#5}{\csname\??cr#6\endcsname}\fi}
+              {\iffreezecolors\@EA#3\else\@EA#2\fi{\??cr#5}{\csname\??cr#6\endcsname}}}
+           {\showmessage\m!colors3{#5 (def)}}%
+       \fi}%
+   \ifcase#4\or
+     \unexpanded#2{#5}{\switchtocolor[#5]}% \unexpanded toegevoegd
+   \fi}
+
+\def\paletcolorspec#1%
+  {\csname\??cr\currentpalet#1\endcsname}
+
+%D Hex color support is not enabled by default. You need to say \type
+%D {\setupcolor [hex]} to get this working.
+
+\ifx\colorHpattern\undefined \let\colorHpattern\colorZpattern \fi
+
+%D New and experimental.
+
+\def\dodefinespotcolor[#1][#2][#3]% todo: always global
+  {\doifnot{#1}{#2}
+     {\@@resetcolorparameters
+      \ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi
+      \edef\@@cl@@n{#2}%
+      \getparameters[\??cl @@][#3]%
+      \doifnothing\@@cl@@p{\let\@@cl@@p\!!plusone}%
+      \ifx\@@cl@@e\empty \else
+        \doregisterspotcolorname{#2}\@@cl@@e
+      \fi
+      \doglobal\addtocommalist{#2}\allspotcolors
+      \setxvalue{\??cr#1}{\colorPpattern}% was \setevalue
+      \setgvalue{#1}{\switchtocolor[#1]}}} % was \setvalue
+
+\def\registerusedspotcolors
+  {\ifx\allspotcolors\empty \else
+     \bgroup
+     \let\usedspotcolors\empty
+     \def\docommand##1%
+       {\doifdefined{\??cs##1}{\addtocommalist{##1}\usedspotcolors}}%
+     \processcommacommand[\allspotcolors]\docommand
+     \savecurrentvalue\usedspotcolors\usedspotcolors
+     \egroup
+   \fi}
+
+\def\registerusedcolorchannels
+  {\bgroup
+   \doifdefinedelse{\??cs c}
+     {\def\usedcolorchannels{c,m,y,k}}%
+     {\let\usedcolorchannels\empty}%
+   \doifdefined{\??cs r}
+     {\addtocommalist{r,g,b}\usedcolorchannels}%
+   \doifdefined{\??cs s}
+     {\ExpandBothAfter\doifnotinset{k}\usedcolorchannels
+        {\addtocommalist{s}\usedcolorchannels}}%
+   \savecurrentvalue\usedcolorchannels\usedcolorchannels
+   \egroup}
+
+\prependtoks
+  \registerusedspotcolors
+  \registerusedcolorchannels
+\to \everylastshipout
+
+\def\registerusedspotcolor#1%
+  {\global\@EA\chardef\csname\??cs#1\endcsname\zerocount}
+
+%D On top of spotcolors, we define multitone colors. You'd better know
+%D what you're doing because invalid definitions will lead to invalid
+%D documents (i.e.\ resources).
+
+% \definecolor [darkblue]   [c=.5,m=.5]
+% \definecolor [darkyellow] [y=.5]
+%
+% \definemultitonecolor [whatever] [darkblue=.5,darkyellow=.5] [c=.25,m=.25,y=.25] [a=1,t=.5]
+% \definemultitonecolor [another]  [darkblue=.5,darkyellow=.5] [c=.25,m=.25,y=.25]
+
+\def\dodefinemultitonecolor[#1][#2][#3][#4]%
+  {\let\@@cl@@cl@@D\empty % n's
+   \let\@@cl@@cl@@P\empty % p's
+   \let\@@cl@@cl@@N\empty % name
+   \scratchcounter\zerocount
+   \processcommacommand[#2]\dododefinemultitonecolor
+   \bgroup
+     \lccode`\.=`\_%
+     \lccode`\,=`\_%
+     \lccode`\:=`\_%
+     \lccode`\;=`\_%
+     \lccode`\+=`\_%
+     \lccode`\-=`\_%
+     \lccode`\*=`\_%
+     \lccode`\/=`\_%
+%      \lccode`\_=`\_%
+     % not needed, other attribute in driver:
+     %
+     % \@@resetcolorparameters
+     % \getparameters[#4]%
+     % \ifx\@@cl@@t\@@cl@@z\else
+     %   \edef\@@cl@@cl@@N{\@@cl@@cl@@N_\@@cl@@t_\@@cl@@a}%
+     % \fi
+     \lowercase\@EA{\@EA\xdef\@EA\@@cleancolor\@EA{\@@cl@@cl@@N}}%
+   \egroup
+   \setxvalue{\??cl\@@cleancolor\s!check}{\noexpand\docheckmultitonecolor{\@@cl@@cl@@D}}%
+   \expanded{\defineglobalcolor[\@@cleancolor][#3,#4]}%
+   \expanded{\definespotcolor[#1][\@@cleancolor][#4,f=\the\scratchcounter,p={\@@cl@@cl@@P},d={\@@cl@@cl@@D}]}}
+
+\def\docheckmultitonecolor#1%
+  {\flushatshipout
+     {\let\checkmultitonecolor\gobbleoneargument
+      \def\docommand##1{\hbox{\definecolor[\s!dummy-100][##1][p=1]\color[\s!dummy-100]}}%
+      \processcommalist[#1]\docommand}}
+
+\def\checkmultitonecolor#1%
+  {\csname\??cl#1\s!check\endcsname\letgvalue{\??cl#1\s!check}\relax}
+
+\def\dodefinespotcolor[#1][#2][#3]% todo: always global (REDEFINED)
+  {\doifnot{#1}{#2}
+     {\@@resetcolorparameters
+      \ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi
+      \edef\@@cl@@n{#2}%
+      \getparameters[\??cl @@][#3]%
+      \doifnothing  \@@cl@@p{\let\@@cl@@p\!!plusone}%
+      \doifsomething\@@cl@@e{\doregisterspotcolorname{#2}\@@cl@@e}%
+      \doglobal\addtocommalist{#2}\allspotcolors
+      \setxvalue{\??cr#1}{\colorPpattern}% was \setevalue
+      \setgvalue{#1}{\switchtocolor[#1]}}}% was \setvalue
+
+\def\dododefinemultitonecolor#1%
+  {\advance\scratchcounter\plusone
+   \splitstring#1\at=\to\!!stringa\and\!!stringb
+   \ifx\@@cl@@cl@@D\empty
+     \let\@@cl@@cl@@D\!!stringa
+     \let\@@cl@@cl@@P\!!stringb
+     \normalizecolor\!!stringb
+     \edef\@@cl@@cl@@N{\!!stringa_\!!stringb}%
+   \else
+     \edef\@@cl@@cl@@D{\@@cl@@cl@@D,\!!stringa}%
+     \edef\@@cl@@cl@@P{\@@cl@@cl@@P,\!!stringb}%
+     \normalizecolor\!!stringb
+     \edef\@@cl@@cl@@N{\@@cl@@cl@@N_\!!stringa_\!!stringb}%
+   \fi}
+
+% \def\dododefinemultitonecolor#1% a/b safe
+%   {\advance\scratchcounter\plusone
+%    \splitstring#1\at=\to\@@cl@@one\and\@@cl@@two
+%    \ifx\@@cl@@cl@@D\empty
+%      \let\@@cl@@cl@@D\@@cl@@one
+%      \let\@@cl@@cl@@P\@@cl@@two
+%      \normalizecolor\@@cl@@two
+%      \edef\@@cl@@cl@@N{\@@cl@@one_\@@cl@@two}%
+%    \else
+%      \edef\@@cl@@cl@@D{\@@cl@@cl@@D,\@@cl@@one}%
+%      \edef\@@cl@@cl@@P{\@@cl@@cl@@P,\@@cl@@two}%
+%      \normalizecolor\@@cl@@two
+%      \edef\@@cl@@cl@@N{\@@cl@@cl@@N_\@@cl@@one_\@@cl@@two}%
+%    \fi}
+
+%D The names of colors are stored in a comma separated list
+%D only for the purpose of showing them with \type {\showcolor}.
+%D
+%D \startbuffer
+%D \definecolor [SomeKindOfRed] [r=.8,g=.05,b=.05]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D \getbuffer
+%D
+%D This color shows up as \color [SomeKindOfRed] {some kind
+%D of red}.
+%D
+%D \starttyping
+%D \setupcolors[state=start]
+%D
+%D \definecolor[mygreen][green]
+%D \definecolor[green][g=.5]
+%D
+%D \startcolor[mygreen]test\stopcolor
+%D
+%D \setupcolors[expansion=no]
+%D
+%D \definecolor[mygreen][green]
+%D \definecolor[green][g=.5]
+%D
+%D \startcolor[mygreen]test\stopcolor
+%D \stoptyping
+
+%D \macros
+%D   {startcolormode,stopcolormode,permitcolormode}
+%D
+%D We use \type{\stopcolormode} to reset the color in
+%D whatever color space and do so by calling the corresponding
+%D special. Both commands can be used for fast color
+%D switching, like in colored verbatim,
+
+\newif\ifpermitcolormode \permitcolormodetrue
+
+\def\dowithcolor#1#2% #1=\action #2=color
+  {\ifincolor\ifpermitcolormode
+     \ifcsname\??cr\currentpalet#2\endcsname
+       \handlecolorwith#1\csname\??cr\currentpalet#2\endcsname\od
+     \else\ifcsname\??cr#2\endcsname
+       \handlecolorwith#1\csname\??cr#2\endcsname\od
+     \fi\fi
+   \fi\fi}
+
+\def\startcolormode % includes \ifincolor\ifpermitcolormode
+  {%\dostoptransparency % needed for: {test \trans test \notrans test}
+   \conditionalstoptransparency
+   \dowithcolor\execcolorRCSP}
+
+\def\stopcolormode
+  {\ifincolor\ifpermitcolormode
+     \supportedstoptransparency
+     \dostopcolormode
+   \fi\fi}
+
+\def\restorecolormode
+  {\ifincolor\ifpermitcolormode
+     \supportedstoptransparency
+     \dostopcolormode
+     \ifx\maintextcolor\empty \else
+       \startcolormode\maintextcolor
+     \fi
+   \fi\fi}
+
+%D Color modes are entered using the next set of commands.
+%D The \type{\stop} alternatives are implemented in a way
+%D that permits non||grouped use.
+%D
+%D The, for this module redundant, check if we are in color
+%D mode is needed when we use these macros in other modules.
+
+\def\execcolorRCSP#1:%
+  {\csname execcolor#1\endcsname}
+
+\def\execcolorR
+  {\iffilterspotcolor
+     \@EA\noexeccolorR
+   \else
+     \@EA\doexeccolorR
+   \fi}
+
+\def\execcolorC
+  {\iffilterspotcolor
+     \@EA\noexeccolorC
+   \else
+     \@EA\doexeccolorC
+   \fi}
+
+\def\execcolorS
+  {\iffilterspotcolor
+     \@EA\noexeccolorS
+   \else
+     \@EA\doexeccolorS
+   \fi}
+
+\def\execcolorP
+  {\iffilterspotcolor
+     \@EA\doexeccolorPP
+   \else\ifcase\currentcolorchannel
+     \@EAEAEA\doexeccolorP
+   \else
+     \@EAEAEA\noexeccolorP
+   \fi\fi}
+
+\def\doexeccolorR#1:#2:#3:%
+  {\edef\@@cl@@r{#1}\edef\@@cl@@g{#2}\edef\@@cl@@b{#3}%
+   \ifpreferGRAY\ifx\@@cl@@r\@@cr@@g\ifx\@@cl@@r\@@cl@@b
+     \GRAYpreferedtrue
+   \fi\fi\fi
+   \ifincolor\else\RGBsupportedfalse\CMYKsupportedfalse\fi
+   \ifGRAYprefered
+     \registercolorchannel\c!s
+     \let\@@cl@@s\@@cl@@r
+     \normalizeGRAY
+     \doexeccolorgray
+   \else\ifRGBsupported
+     \registercolorchannel\c!r
+     \normalizeRGB
+     \doexeccolorrgb
+   \else\ifCMYKsupported
+     \registercolorchannel\c!c
+     \convertRGBtoCMYK\@@cl@@r\@@cl@@g\@@cl@@b
+     \normalizeCMYK
+     \doexeccolorcmyk
+   \else
+     \registercolorchannel\c!s
+     \convertRGBtoGRAY\@@cl@@r\@@cl@@g\@@cl@@b
+     \normalizeGRAY
+     \doexeccolorgray
+   \fi\fi\fi
+   \exectransparency}
+
+\def\doexeccolorC#1:#2:#3:#4:%
+  {\edef\@@cl@@c{#1}\edef\@@cl@@m{#2}\edef\@@cl@@y{#3}\edef\@@cl@@k{#4}%
+   \ifpreferGRAY\ifx\@@cl@@k\@@cl@@z\ifx\@@cl@@c\@@cr@@m\ifx\@@cl@@c\@@cl@@y
+     \GRAYpreferedtrue
+   \fi\fi\fi\fi
+   \ifincolor\else\RGBsupportedfalse\CMYKsupportedfalse\fi
+   \ifGRAYprefered
+     \registercolorchannel\c!s
+     \let\@@cl@@s\@@cl@@c
+     \normalizeGRAY
+     \doexeccolorgray
+   \else\ifCMYKsupported
+     \registercolorchannel\c!c
+     \ifreduceCMYK
+       \convertCMYKtoCMY\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
+     \fi
+     \normalizeCMYK
+     \doexeccolorcmyk
+   \else\ifRGBsupported
+     \registercolorchannel\c!r
+     \convertCMYKtoRGB\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
+     \normalizeRGB
+     \doexeccolorrgb
+   \else
+     \registercolorchannel\c!s
+     \convertCMYKtoGRAY\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
+     \normalizeGRAY
+     \doexeccolorgray
+   \fi\fi\fi
+   \exectransparency}
+
+\def\doexeccolorS#1:%
+  {\edef\@@cl@@s{#1}%
+   \registercolorchannel\c!s
+   \normalizeGRAY
+   \doexeccolorgray
+   \exectransparency}
+
+% \def\doexeccolorP#1:#2:%
+%   {\edef\@@cl@@n{#1}%
+%    \edef\@@cl@@p{#2}%
+%    \registerusedspotcolor\@@cl@@n
+%    \ifSPOTsupported
+%      \dowithcolor\registerspotcolor\@@cl@@n
+%      \dostartspotcolormode\@@cl@@n\@@cl@@p
+%    \else
+%      \doingspotcolortrue
+%      \let\spotcolorfactor\@@cl@@p
+%      \factorizecolortrue            % using counter and array
+%      \dowithcolor\execcolorRCSP\@@cl@@n
+%      \factorizecolorfalse
+%      \let\spotcolorfactor\@@cl@@o
+%      \doingspotcolorfalse
+%    \fi
+%    \exectransparency}
+
+\def\doexeccolorP#1:#2:#3:#4:%
+  {\edef\@@cl@@n{#1}% name
+   \edef\@@cl@@f{#2}% fractions
+   \edef\@@cl@@d{#3}% definitions
+   \edef\@@cl@@p{#4}%
+   \ifx\@@cl@@d\empty
+     \let\@@cl@@d\@@cl@@n
+   \fi
+   \registerusedspotcolor\@@cl@@n
+   \ifSPOTsupported
+     \checkmultitonecolor\@@cl@@n
+     \dowithcolor\registerspotcolor\@@cl@@n
+     \dostartspotcolormode\@@cl@@n\@@cl@@p
+   \else
+     \doingspotcolortrue
+     \normalizespotcolor\@@cl@@p
+     \let\spotcolorfactor\@@cl@@p
+     \factorizecolortrue            % using counter and array
+     \dowithcolor\execcolorRCSP\@@cl@@n
+     \factorizecolorfalse
+     \let\spotcolorfactor\@@cl@@o
+     \doingspotcolorfalse
+   \fi
+   \exectransparency}
+
+\def\doexeccolorPindex#1:#2:#3:#4:%
+  {\edef\@@cl@@n{#1}%
+   \edef\@@cl@@f{#2}%
+   \edef\@@cl@@d{#3}%
+   \edef\@@cl@@p{#4}%
+   \ifx\@@cl@@d\empty
+     \let\@@cl@@d\@@cl@@n
+   \fi
+   \ifSPOTsupported
+     \checkmultitonecolor\@@cl@@n
+     \dowithcolor\registerindexcolor\@@cl@@n
+   \fi
+   \noexectransparency}
+
+\def\doexeccolorPP#1:#2:%
+  {\edef\@@cl@@n{#1}%
+   \edef\@@cl@@p{#2}%
+   \registerusedspotcolor\@@cl@@n
+   \ifx\@@cl@@n\currentspotcolor
+     \normalizeSPOT
+     \dostartgraycolormode\@@cl@@p % was spotcolormode
+   \else
+     \dovidecolor\@@cl@@p\@@cl@@o
+   \fi
+   \exectransparency}
+
+\def\doexeccolorrgb
+  {\ifcase\currentcolorchannel
+     \dostartrgbcolormode\@@cl@@r\@@cl@@g\@@cl@@b
+   \or \or \or \or
+   \or \dostartgraycolormode\@@cl@@r
+   \or \dostartgraycolormode\@@cl@@g
+   \or \dostartgraycolormode\@@cl@@b
+   \fi}
+
+\def\doexeccolorcmyk
+  {\ifcase\currentcolorchannel
+       \dostartcmykcolormode\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
+   \or \negatecolorcomponent\@@cl@@c\dostartgraycolormode\@@cl@@c
+   \or \negatecolorcomponent\@@cl@@m\dostartgraycolormode\@@cl@@m
+   \or \negatecolorcomponent\@@cl@@y\dostartgraycolormode\@@cl@@y
+   \or \negatecolorcomponent\@@cl@@k\dostartgraycolormode\@@cl@@k
+   \fi}
+
+\def\doexeccolorgray
+  {\ifcase\currentcolorchannel
+       \dostartgraycolormode\@@cl@@s
+   \or \or \or
+   \or \dostartgraycolormode\@@cl@@s
+   \or \or \or
+   \or \dostartgraycolormode\@@cl@@s
+   \fi}
+
+%D When filtering colors, we need to either erase
+%D the background, or ignore the foreground.
+
+% \newif\ifhidesplitcolor \hidesplitcolortrue
+%
+% \def\noexeccolor#1\od
+%   {\dostartgraycolormode\@@cl@@o}
+%
+% \let\noexeccolorS\noexeccolor
+% \let\noexeccolorP\noexeccolor
+
+%D Well, here comes some real trickery. When we have the 100\%
+%D spot color or black color, we don't want to erase the
+%D background. So, instead we hide the content by giving it
+%D zero transparency.
+
+% todo : #1#2#3 met #2 > of < and #3 een threshold
+
+\def\dohidecolor#1#2%
+  {\ifhidesplitcolor
+     \ifx#1#2%
+       \dostartgraycolormode\@@cl@@o
+     \else
+       \doregisternonecolor
+       \dostartnonecolormode
+     \fi
+   \else
+     \dostartgraycolormode\@@cl@@o
+   \fi}
+
+\def\dovidecolor#1#2%
+  {\ifhidesplitcolor
+     \ifx#1#2%
+       \doregisternonecolor
+       \dostartnonecolormode
+     \else
+       \dostartgraycolormode\@@cl@@o
+     \fi
+   \else
+     \dostartgraycolormode\@@cl@@o
+   \fi}
+
+% \def\fullytransparentcolor % fails on floats
+%   {\dostartgraycolormode\@@cl@@o % better than z
+%   %\global\@EA\chardef\csname\@@currenttransparent\endcsname\plusone
+%   %\global\intransparenttrue
+%    \dostarttransparency10}
+
+\def\noexeccolorR#1:#2:#3:#4\od
+  {\edef\@@cl@@r{#1}\edef\@@cl@@g{#2}\edef\@@cl@@b{#3}%
+   \dohidecolor\@@cl@@s\@@cl@@o}
+
+\def\noexeccolorC#1:#2:#3:#4:#5\od
+  {\edef\@@cl@@c{#1}\edef\@@cl@@m{#2}\edef\@@cl@@y{#3}\edef\@@cl@@k{#4}%
+   \dohidecolor\@@cl@@s\@@cl@@o}
+
+\def\noexeccolorS#1:#2\od
+  {\edef\@@cl@@s{#1}%
+   \dohidecolor\@@cl@@s\@@cl@@o}
+
+\def\noexeccolorP#1:#2:#3:#4:#5\od
+  {\edef\@@cl@@p{#4}%
+   \dohidecolor\@@cl@@p\@@cl@@z}
+
+%D For the sake of postprocessing (i.e.\ color separation)
+%D we can normalize colors, which comes down to giving equal
+%D values an equal accuracy and format. This feature is
+%D turned off by default due to a speed penalty. This macro
+%D also handles spot color percentages.
+
+\newif\iffactorizecolor
+\newif\ifnormalizecolor
+
+\def\spotcolorfactor{1}
+
+% \def\normalizecolor#1%
+%   {\colordimen#1\thousandpoint
+%    \colordimen\spotcolorfactor\colordimen
+%    \colorcount\colordimen
+%    \advance\colorcount \medcard
+%    \divide\colorcount \maxcard
+%    \edef#1{\realcolorvalue\colorcount}}
+
+\def\normalizecolor#1%
+  {\colorcount\numexpr(\dimexpr\spotcolorfactor\dimexpr#1\thousandpoint\relax\relax+\medcard)/\maxcard\relax
+   \edef#1{\realcolorvalue\colorcount}}
+
+% \def\normalizespotcolor#1%
+%   {\colordimen-#1\thousandpoint
+%    \advance\colordimen\thousandpoint
+%    \colorcount\colordimen
+%    \advance\colorcount \medcard
+%    \divide\colorcount \maxcard
+%    \edef#1{\realcolorvalue\colorcount}}
+
+\def\normalizespotcolor#1%
+  {\colorcount\numexpr(\dimexpr\thousandpoint-#1\thousandpoint\relax+\medcard)/\maxcard\relax
+   \edef#1{\realcolorvalue\colorcount}}
+
+\def\donormalizeRGB
+  {\normalizecolor\@@cl@@r
+   \normalizecolor\@@cl@@g
+   \normalizecolor\@@cl@@b}
+
+\def\normalizeRGB
+  {\ifnormalizecolor
+     \donormalizeRGB
+   \else\iffactorizecolor
+     \donormalizeRGB
+   \fi\fi}
+
+\def\donormalizeCMYK
+  {\normalizecolor\@@cl@@c
+   \normalizecolor\@@cl@@m
+   \normalizecolor\@@cl@@y
+   \normalizecolor\@@cl@@k}
+
+\def\normalizeCMYK
+  {\ifnormalizecolor
+     \donormalizeCMYK
+   \else\iffactorizecolor
+     \donormalizeCMYK
+   \fi\fi}
+
+\def\donormalizeGRAY
+  {\normalizecolor\@@cl@@s}
+
+\def\normalizeGRAY
+  {\ifnormalizecolor
+     \donormalizeGRAY
+   \else\iffactorizecolor
+     \donormalizeGRAY
+   \fi\fi}
+
+\def\normalizeSPOT
+  {\normalizespotcolor\@@cl@@p}
+
+%D We need to register spot colors (i.e.\ resources need to
+%D be created.
+
+\def\registerspotcolor#1:%
+  {\ifcsname\??cl:\c!p:\@@cl@@n\endcsname
+     \@EA\dontregisterspotcolor
+   \else
+     \letgvalue{\??cl:\c!p:\@@cl@@n}\empty
+     %\@EA\@EA\csname registerspotcolor#1\endcsname
+     \csname registerspotcolor#1\@EA\endcsname
+   \fi}
+
+% todo: convert to rgb if needed, will will do this in mkiv
+
+\def\dontregisterspotcolor         #1\od{}
+\def\registerspotcolorR   #1:#2:#3:#4\od{\doregisterrgbspotcolor \@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}}
+\def\registerspotcolorC#1:#2:#3:#4:#5\od{\doregistercmykspotcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}{#4}}
+\def\registerspotcolorS         #1:#2\od{\doregistergrayspotcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}}
+\def\registerspotcolorP      #1:#2:#3\od{\doregistergrayspotcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#2}}
+
+%D Experimental feature:
+
+% \definecolor [darkblue]   [c=1,m=.38,y=0,k=.64] % pantone pms 2965 uncoated m
+% \definecolor [darkyellow] [c=0,m=.28,y=1,k=.06] % pantone pms  124 uncoated m
+%
+% \definecolor [darkblue-50]    [darkblue]   [p=.5]
+% \definecolor [darkyellow-50]  [darkyellow] [p=.5]
+% \definecolor [darkblue-80]    [darkblue]   [p=.8]
+% \definecolor [darkyellow-80]  [darkyellow] [p=.8]
+%
+% \definecolor [darkblue,darkyellow]  [r=.8]
+% \definecolor [darkdull-5030] [darkblue,darkyellow]  [p={.5,.3}]
+%
+% \setupcolors[state=start]
+%
+% \blackrule[width=4cm,height=3cm,color=darkblue-50]
+% \blackrule[width=4cm,height=3cm,color=darkblue-80]
+% \blackrule[width=4cm,height=3cm,color=darkyellow-50]
+% \blackrule[width=4cm,height=3cm,color=darkyellow-80]
+% \blackrule[width=4cm,height=3cm,color=darkdull-5030]
+
+%D Experimental too (special purpose code).
+
+\def\registerindexcolor#1:%
+  {\ifcsname\??cl:i:\@@cl@@n\endcsname
+     \@EA\dontregisterindexcolor
+   \else
+     \letgvalue{\??cl:i:\@@cl@@n}\empty % signal
+     \showmessage\m!colors{12}\@@cl@@n
+     \@EA\@EA\csname registerindexcolor#1\endcsname
+   \fi}
+
+\let\dontregisterindexcolor\dontregisterspotcolor
+
+\def\registerindexcolorR   #1:#2:#3:#4\od{\doregisterrgbindexcolor \@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}}
+\def\registerindexcolorC#1:#2:#3:#4:#5\od{\doregistercmykindexcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}{#4}}
+\def\registerindexcolorS         #1:#2\od{\doregistergrayindexcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}}
+\def\registerindexcolorP      #1:#2:#3\od{\doregistergrayindexcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#2}}
+
+\def\predefinecolor[#1]%
+  {\bgroup
+   \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% real ones
+   \egroup}
+
+\def\predefineindexcolor[#1]%
+  {\bgroup
+   \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% real ones
+   \let\doexeccolorP\doexeccolorPindex
+   \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% index one
+   \egroup}
+
+% \def\checkpredefinedcolor[#1]%
+%   {\ifcase\internalspotcolorsize{#1}\relax
+%      \@EA\predefinecolor\or\@EA\predefinecolor\else\@EA\predefineindexcolor
+%    \fi[#1]}
+
+\let\checkpredefinedcolor\predefineindexcolor % we need an index in order to negate bitmaps
+
+%D Transparency is handled similar for all three color modes. We
+%D can turn transparency off with the following switch:
+
+\newif\iftransparencysupported \transparencysupportedtrue % only mkii
+
+\def\exectransparency
+  {\iftransparencysupported
+     \expandafter\doexectransparency
+   \else
+     \expandafter\noexectransparency
+   \fi}
+
+\def\doexectransparency#1:#2\od
+  {\ifcase#1\space
+     \global\intransparentfalse
+   \else
+     \global\intransparentfalse
+    %\dostarttransparency{#1}{#2}%
+     \supportedstarttransparency{#1}{#2}%
+     \global\intransparenttrue
+   \fi}
+
+\def\noexectransparency#1\od
+  {}
+
+%D Experimental: minimize transparency resets.
+
+\newif\ifintransparent
+\newif\ifoptimizetransparency \optimizetransparencytrue % under test
+
+\let\supportedstoptransparency\relax
+
+\def\conditionalstoptransparency
+  {\ifoptimizetransparency
+     \ifintransparent
+       \global\intransparentfalse
+       \supportedstoptransparency
+     \fi
+   \else
+     \supportedstoptransparency
+   \fi}
+
+\def\supportedstarttransparency
+  {\iftransparencysupported
+     \globallet\supportedstoptransparency\dostoptransparency
+     \expandafter\dostarttransparency
+   \else
+     \expandafter\gobbletwoarguments
+   \fi}
+
+%D We now use the \type {\@@cl@@A} hook to implement
+%D symbolic names. These are converted into numbers
+%D at definition time (which saves runtime).
+
+\def\dodefinetransparency[#1][#2]%
+  {\@EA\chardef\csname\??cl-#1\endcsname#2\relax}
+
+\def\transparencynumber#1%
+  {\number\executeifdefined{\??cl-#1}{#1}}
+
+%D Now we hook 'm into the patterns:
+
+\def\@@cl@@A{\transparencynumber\@@cl@@a}
+
+%D The next macro can be used to return to the (normal)
+%D page color. This macro is used in the same way as
+%D \type {\color}.
+
+\def\startregistercolor[#1]%
+  {\permitcolormodefalse\startcolor[#1]\permitcolormodetrue}
+
+\def\stopregistercolor
+  {\permitcolormodefalse\stopcolor\permitcolormodetrue}
+
+\def\starttextcolor[#1]%
+  {\doifsomething{#1}
+     {\bgroup
+      \def\stoptextcolor          % also goes ok with \page after
+        {\let\maintextcolor\empty % this one because the top of
+         \stopregistercolor       % page sets the color right (side
+         \egroup}%                % effect)
+      \def\starttextcolor[##1]%
+        {\bgroup
+         % \@@themaintextcolor==##1 is catched in \definecolor
+         \definecolor[\@@themaintextcolor][##1]%
+         \let\stoptextcolor\egroup}%
+      \startregistercolor[\@@themaintextcolor]%
+      \definecolor[\@@themaintextcolor][#1]%
+      \let\maintextcolor\@@themaintextcolor}}
+
+\let\stoptextcolor\relax
+
+%D The following hook permits proper support at the text
+%D level. This definition actually belongs in another
+%D module. (May need a different \MKIV\ implementation.)
+
+% \ifx\initializemaintextcolor\undefined
+
+  \let\@@clprevcolor\empty
+
+  \def\initializemaintextcolor
+    {% saveguard for setting text color to empty after
+     % it has been set
+     \doifnothing\@@cltextcolor
+       {\ifx\@@clprevcolor\empty\else
+          \let\@@cltextcolor\defaulttextcolor
+        \fi}%
+     \doifelsenothing\@@cltextcolor
+       {\let\maintextcolor\empty}
+       {\edef\@@clprevcolor{\@@cltextcolor}%
+        \let\maintextcolor\@@themaintextcolor
+        \doifelsenothing\@@cltextcolor % another saveguard
+          {\definecolor[\@@themaintextcolor][\defaulttextcolor]}%
+          {\definecolor[\@@themaintextcolor][\@@cltextcolor]}%
+        \doinitializemaintextcolor}}
+
+  \def\doinitializemaintextcolor
+    {\appendtoks\starttextcolor[\@@themaintextcolor]\to\everystarttext
+     \appendtoks\stoptextcolor                      \to\everystoptext
+     \let\doinitializemaintextcolor\relax}
+
+% \fi
+
+\def\localstarttextcolor
+  {\ifx\maintextcolor\empty
+     \startcolormode\defaulttextcolor
+   \else
+     \startcolormode\maintextcolor
+   \fi}
+
+% \def\localstoptextcolor
+%   {\stopcolormode}
+%
+% better:
+
+\def\localstoptextcolor
+  {\restorecolormode}
+
+\def\restoretextcolor
+  {\ifx\maintextcolor\empty
+     \expandafter\dorestoretextcolor
+   \else
+     % obey main text color
+   \fi}
+
+\def\dorestoretextcolor
+  {\color[\defaulttextcolor]}
+
+%D We use some reserved names for local color components.
+%D Consistent use of these scratch variables saves us
+%D unneccessary hash entries.
+%D
+%D \starttyping
+%D \@@cl@@r \@@cl@@g \@@cl@@b
+%D \@@cl@@c \@@cl@@m \@@cl@@y \@@cl@@k
+%D \@@cl@@s
+%D \stoptyping
+%D
+%D We implement several conversion routines.
+%D
+%D \starttyping
+%D \convertRGBtoCMYK  {r} {g} {b}
+%D \convertRGBtoGRAY  {r} {g} {b}
+%D \convertCMYKtoRGB  {c} {m} {y} {k}
+%D \convertCMYKtoGRAY {c} {m} {y} {k}
+%D \convertCMYKtoCMY  {c} {m} {y} {k}
+%D \stoptyping
+%D
+%D The relation between \cap{Gray}, \cap{RGB} and \cap{CMYK}
+%D is:
+%D
+%D \placeformula[-]
+%D   \startformula
+%D   G = .30r + .59g + .11b
+%D     = 1.0 - \min(1.0,\ .30c + .59m + .11y + k)
+%D   \stopformula
+%D
+%D When converting from \cap{CMYK} to \cap{RGB} we use the
+%D formula:
+%D
+%D \placeformula[-]
+%D   \startformula
+%D   \eqalign
+%D     {r &= 1.0 - \min(1.0,\ c+k) \cr
+%D      g &= 1.0 - \min(1.0,\ m+k) \cr
+%D      b &= 1.0 - \min(1.0,\ y+k)}
+%D   \stopformula
+%D
+%D In the conversion routine the color components are calculated
+%D in three digits precision.
+
+\def\realcolorvalue#1%
+  {\ifnum#1>\zerocount    % important, first encountered in --modu supp-mpe
+   \ifnum#1<\plusten      0.00\the#1\else
+   \ifnum#1<\plushundred  0.0\the#1\else
+   \ifnum#1<\plusthousand 0.\the#1\else
+                          1\fi\fi\fi
+   \else                  0\fi}
+
+% \def\doconvertCMYKtoRGB#1\k#2\to#3%
+%   {\ifdim#2\points>#1\points% >= problem, repaired 2/12/2002
+%      \let#3\@@cl@@z % k >= color
+%    \else
+%      \colordimen\onepoint
+%      \advance\colordimen -#1\points
+%      \advance\colordimen -#2\points
+%      \multiply\colordimen \plusthousand
+%      \colorcount\colordimen
+%      \advance\colorcount \medcard
+%      \divide\colorcount \maxcard
+%      \edef#3{\realcolorvalue\colorcount}%
+%    \fi}
+
+\def\doconvertCMYKtoRGB#1\k#2\to#3%
+  {\colorcount\numexpr(\dimexpr\plusthousand\dimexpr\onepoint-#1\points-#2\points\relax\relax+\medcard)/\maxcard\relax
+   \ifnum\colorcount>\zeropoint
+     \edef#3{\realcolorvalue\colorcount}%
+   \else
+     \let#3\@@cl@@z
+   \fi}
+
+\def\convertCMYKtoRGB#1#2#3#4%
+  {\doconvertCMYKtoRGB#1\k#4\to\@@cl@@r
+   \doconvertCMYKtoRGB#2\k#4\to\@@cl@@g
+   \doconvertCMYKtoRGB#3\k#4\to\@@cl@@b}
+
+% \def\doconvertRGBtoCMYK#1\to#2%
+%   {\colordimen#1\points
+%    \multiply\colordimen \plusthousand
+%    \colorcount\colordimen
+%    \advance\colorcount \medcard
+%    \divide\colorcount \maxcard
+%    \colorcount-\colorcount
+%    \advance\colorcount \plusthousand
+%    \edef#2{\realcolorvalue\colorcount}}
+
+\def\doconvertRGBtoCMYK#1\to#2%
+  {\colorcount\numexpr\plusthousand-(\dimexpr\plusthousand\dimexpr#1\points\relax\relax+\medcard)/\maxcard\relax
+   \edef#2{\realcolorvalue\colorcount}}
+
+\def\convertRGBtoCMYK#1#2#3%
+  {\doconvertRGBtoCMYK#1\to\@@cl@@c
+   \doconvertRGBtoCMYK#2\to\@@cl@@m
+   \doconvertRGBtoCMYK#3\to\@@cl@@y
+   \let\@@cl@@k\@@cl@@z}
+
+%D The following switch is mainly meant for (hidden)
+%D documentation purposes.
+
+\def\nGRAYfactor{333.333}
+\def\rGRAYfactor{\ifweightGRAY300\else\nGRAYfactor\fi}
+\def\gGRAYfactor{\ifweightGRAY590\else\nGRAYfactor\fi}
+\def\bGRAYfactor{\ifweightGRAY110\else\nGRAYfactor\fi}
+
+% \def\convertRGBtoGRAY#1#2#3%
+%   {\colordimen#1\points
+%    \colordimen\rGRAYfactor\colordimen
+%    \colorcount\colordimen
+%    \colordimen#2\points
+%    \colordimen\gGRAYfactor\colordimen
+%    \advance\colorcount \colordimen
+%    \colordimen#3\points
+%    \colordimen\bGRAYfactor\colordimen
+%    \advance\colorcount \colordimen
+%    \advance\colorcount \medcard
+%    \divide\colorcount \maxcard
+%    \edef\@@cl@@s{\realcolorvalue\colorcount}}
+
+\def\convertRGBtoGRAY#1#2#3%
+  {\colorcount\numexpr
+     (\dimexpr\rGRAYfactor\dimexpr#1\points\relax\relax+
+      \dimexpr\gGRAYfactor\dimexpr#2\points\relax\relax+
+      \dimexpr\bGRAYfactor\dimexpr#3\points\relax\relax+
+      \medcard)/\maxcard
+   \relax
+   \edef\@@cl@@s{\realcolorvalue\colorcount}}
+
+\def\convertCMYKtoGRAY#1#2#3#4%
+  {\convertCMYKtoRGB{#1}{#2}{#3}{#4}%
+   \convertRGBtoGRAY\@@cl@@r\@@cl@@g\@@cl@@b}
+
+% \def\doconvertCMYKtoCMY#1\k#2\to#3%
+%   {\colordimen#1\points
+%    \advance\colordimen #2\points\relax
+%    \ifdim\colordimen>\onepoint
+%      \colordimen\onepoint
+%    %\else
+%    % \colordimen\colordimen
+%    \fi
+%    \multiply\colordimen \plusthousand
+%    \colorcount\colordimen
+%    \advance\colorcount \medcard
+%    \divide\colorcount \maxcard
+%    \edef#3{\realcolorvalue\colorcount}}
+
+\def\doconvertCMYKtoCMY#1\k#2\to#3%
+  {\colorcount\numexpr(\dimexpr\plusthousand\dimexpr#1\points+#2\points\relax\relax+\medcard)/\maxcard\relax
+   \ifnum\colorcount>\plusthousand
+     \let#3\@@cl@@o
+   \else
+     \edef#3{\realcolorvalue\colorcount}%
+   \fi}
+
+\def\convertCMYKtoCMY#1#2#3#4%
+  {\doconvertCMYKtoCMY#1\k#4\to\@@cl@@c
+   \doconvertCMYKtoCMY#2\k#4\to\@@cl@@m
+   \doconvertCMYKtoCMY#3\k#4\to\@@cl@@y
+   \let\@@cl@@k\@@cl@@z}
+
+%D Before we present the color macros, we first define the
+%D setup command. This command takes care of setting up the
+%D booleans that control local and global behavior (more on
+%D that later) and conversion to other color spaces.
+
+\let\currentspotcolor \empty
+\let\previousspotcolor\empty
+
+%D The tests depend on the use of constants. If we use the \MKIV\
+%D method we can share more.
+
+\def\doifcolorelse#1%
+  {\ifcsname\??cr\ifcsname\??cr\currentpalet#1\endcsname\currentpalet\fi#1\endcsname
+     \expandafter\firstoftwoarguments
+   \else
+     \expandafter\secondoftwoarguments
+   \fi}
+
+\def\doifcolor#1%
+  {\ifcsname\??cr\ifcsname\??cr\currentpalet#1\endcsname\currentpalet\fi#1\endcsname
+     \expandafter\firstofoneargument
+   \else
+     \expandafter\gobbleoneargument
+   \fi}
+
+%D There are a couple of different color switching macros,
+%D the local ones can be used to speed up things (only in \MKII).
+
+\def\localstartcolor
+  {\ifincolor
+     \localcolortrue
+     \expandafter\doglobalstartcolor
+   \else
+     \expandafter\noglobalstartcolor
+   \fi}
+
+\def\localstopcolor
+  {\ifincolor
+     \doglobalstopcolor
+   \else
+     \noglobalstopcolor
+   \fi}
+
+\unexpanded\def\startcolor
+  {\ifincolor
+     \expandafter\doglobalstartcolor
+   \else
+     \expandafter\noglobalstartcolor
+   \fi}
+
+\unexpanded\def\stopcolor
+  {\ifincolor
+     \doglobalstopcolor
+   \else
+     \noglobalstopcolor
+   \fi}
+
+%D This macros call the global color switching ones. Starting
+%D a global, i.e. a possible page boundary crossing, color
+%D mode also sets a \type{\mark} in \TEX's internal list.
+
+\newcount\colorlevel
+
+\letvalue{\??cl0C}\empty % saved color
+\letvalue{\??cl0S}\empty % stop command
+
+%D We keep a positive color stack for foreground colors, and
+%D a negative one for backgrounds. Not that brilliant a
+%D solution, but it suits. The signs are swapped when the
+%D page ornaments are typeset.
+
+\let\@@colorplus \plusone
+\let\@@colorminus\minusone
+
+\def\@@currentcolorname  {\??cl\the\colorlevel C}
+\def\@@currentcolorstop  {\??cl\the\colorlevel S}
+%def\@@currenttransparent{\??cl\the\colorlevel T}
+
+\letvalue{\??cl*\s!black}\s!black
+
+\def\currentcolorname
+  {\csname
+     \ifcsname\@@currentcolorname\endcsname
+       \expandafter\ifx\csname\@@currentcolorname\endcsname\empty
+         \??cl*\s!black
+       \else
+         \@@currentcolorname
+       \fi
+     \else
+       \??cl*\s!black
+     \fi
+   \endcsname}
+
+\def\outercolorname
+  {\ifcsname\@@currentcolorname\endcsname
+     \expandafter\ifx\csname\@@currentcolorname\endcsname\empty
+       \s!black
+     \else
+       currentcolor%
+     \fi
+   \else
+     \s!black
+   \fi}
+
+% not the following, because we need a different tag in order to trick the stack
+%
+% \def\outercolorname{\executeifdefined\@@currentcolorname\s!black}
+%
+% \def\startcurrentcolor{\expanded{\startcolor[\s!black]\noexpand\startcolor[\outercolorname]}}
+% \def\stopcurrentcolor {\stopcolor\stopcolor}
+%
+% test case:
+%
+% \setupcolors[state=start,textcolor=red]
+% \starttext
+%     red
+%         \color[green]{green
+%             \startMPcode
+%                 label(\sometxt{green\color[blue]{blue}green}, origin) withcolor red;
+%                 draw fullcircle scaled 1cm xscaled 2;
+%             \stopMPcode
+%         green}
+%     red
+% \stoptext
+
+\def\dodoglobalstartcolor
+  {\global\@EA\let\@EA\@@currentcolor\csname\@@currentcolorname\endcsname
+   \global\advance\colorlevel \@@colorplus
+   \global\@EA\let\csname\@@currentcolorname\endcsname\@@askedcolor
+  %\debuggerinfo\m!colors
+  %  {start \@@askedcolor\space at level \the\colorlevel}%
+   \ifx\@@askedcolor\empty
+     \global\@EA\let\csname\@@currentcolorname\endcsname\@@currentcolor
+     \global\@EA\let\csname\@@currentcolorstop\endcsname\donoglobalstopcolor
+   \else\ifx\@@askedcolor\@@currentcolor
+     \global\@EA\let\csname\@@currentcolorstop\endcsname\donoglobalstopcolor
+   \else
+     \doifcolorelse\@@askedcolor
+       {%\docolormark\@@askedcolor
+        \ifpermitcolormode\docolormark\@@askedcolor\fi
+        \global\@EA\let\csname\@@currentcolorstop\endcsname\dodoglobalstopcolor
+        \startcolormode\@@askedcolor}
+       {\global\@EA\let\csname\@@currentcolorstop\endcsname\donoglobalstopcolor
+        \showmessage\m!colors3\@@askedcolor\empty}%
+   \fi\fi}
+
+\def\doglobalstartcolor[#1]%
+  {\edef\@@askedcolor{#1}%
+   \ifcase\colorlevel\relax
+     \ifx\@@askedcolor\empty
+       \global\@EA\let\csname\@@currentcolorstop\endcsname\empty
+     \else
+       \dodoglobalstartcolor
+     \fi
+   \else
+     \dodoglobalstartcolor
+   \fi
+   \ignorespaces}
+
+\def\noglobalstartcolor[#1]%
+  {}
+
+\def\dodoglobalstopcolor
+  {\ifcase\colorlevel \else
+     \donoglobalstopcolor
+     \global\@EA\let\@EA\@@previouscolor\csname\@@currentcolorname\endcsname
+     \ifcase\colorlevel\relax
+       \ifpermitcolormode
+         \docolormark\empty
+         \conditionalstoptransparency
+         \dostopcolormode
+       \fi
+     \else % let's do a bit redundant testing here
+       \docolormark\@@previouscolor
+       \ifx\@@previouscolor\empty
+         \ifpermitcolormode
+           \conditionalstoptransparency
+           \dostopcolormode
+         \fi
+       \else
+         \doifcolorelse\@@previouscolor
+           {\ifx\@@currentcolor\@@previouscolor\else
+              % alternatively we could let \startcolormode handle this
+              \ifpermitcolormode
+                \conditionalstoptransparency % really needed
+                % more safe but less efficient: \dostopcolormode
+              \fi
+              \startcolormode\@@previouscolor
+            \fi}
+           {\ifpermitcolormode
+              \conditionalstoptransparency
+              \dostopcolormode
+            \fi}%
+       \fi
+     \fi
+   \fi}
+
+\def\donoglobalstopcolor
+  {\ifcase\colorlevel \else
+     \global\@EA\let\@EA\@@currentcolor\csname\@@currentcolorname\endcsname
+    %\debuggerinfo{\m!colors}
+    %  {stop \@@currentcolor\normalspace at level \the\colorlevel}%
+     \global\advance\colorlevel \@@colorminus
+   \fi}
+
+\def\doglobalstopcolor
+  {\csname\@@currentcolorstop\endcsname}
+
+\let\noglobalstopcolor\relax
+
+\let\faststartcolor\doglobalstartcolor
+\let\faststopcolor \doglobalstopcolor
+
+%D We don't use grouping and save each stop alternative. This
+%D permits be especially useful in for instance local color
+%D support in verbatim. Using \type{\bgroup}||\type{\egroup}
+%D pairs could interfere with calling commands
+
+%D This color mechanism takes care of nested colors, like in:
+%D
+%D \startbuffer
+%D \color[green]{groen \color[green]{groen \color[red]{rood}} groen}
+%D \color[green]{groen \color[]{groen \color[red]{rood}} groen}
+%D \color[green]{groen \color[red]{rood \color[red]{rood}} groen}
+%D \color[green]{groen \color[green]{groen \color[]{groen}} groen}
+%D \color[green]{groen \color[red]{rood} groen}
+%D \color[green]{groen \color[]{groen} groen}
+%D \color[]{zwart \color[red]{rood} zwart}
+%D \color[]{zwart}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D or
+%D
+%D \startvoorbeeld
+%D \startlines
+%D \getbuffer
+%D \stoplines
+%D \stopvoorbeeld
+%D
+%D Crossing page boundaries is of course also handled.
+%D Undefined or empty color specifications are treated as
+%D efficient as possible.
+%D
+%D \startbuffer
+%D \startcolor[green]
+%D   [green] \input tufte [green] \par
+%D   \startcolor[]
+%D     [green] \input knuth [green] \par
+%D     \startcolor[red]
+%D       [red] \input tufte [red] \par
+%D       \startcolor[yellow]
+%D         [yellow] \input knuth [yellow] \par
+%D       \stopcolor
+%D       [red] \input tufte [red] \par
+%D     \stopcolor
+%D     [green] \input knuth [green] \par
+%D   \stopcolor
+%D   [green] \input tufte [green] \par
+%D \stopcolor
+%D \stopbuffer
+%D
+%D \startpacked
+%D \getbuffer
+%D \stoppacked
+%D
+%D These quotes are typeset by saying:
+%D
+%D \typebuffer
+
+%D We already mentioned that colors interfere with building
+%D the pagebody. This means that when the page is composed,
+%D the colors temporary have to be reset. After the page is
+%D shipped out, we have to revive the current color.
+%D
+%D We use \type{\mark}s to keep track of colors across page
+%D boundaries. Unfortunately standard \TEX\ supports only one mark,
+%D and using this one for color support only would be a waste.
+%D We therefore use an adapted version of J.~Fox's multiple mark
+%D mechanism as (re|)|implemented in \module{supp-mrk}.
+
+\doifdefinedelse{rawnewmark}
+  {\rawnewmark\colormark}
+  {\let\colormark\gobbleoneargument}
+
+%D Using this mark mechanism with lots of colors has one
+%D major drawback: \TEX's memory tends to overflow when
+%D very colorful text is stored in a global box. Even worse is that
+%D the processing time grows considerably. We therefore support
+%D local as well as global color switching.
+%D
+%D Of the next macros, \type {\popcolor} is to be used after
+%D the actual \type {\shipout} and \type {\startcolorpage} and
+%D \type {\stopcolorpage} are called when entering and leaving
+%D the \type {\pagebody} builder. In case of emergencies
+%D \type {\pushcolor} can be used to undo the current color,
+%D for instance when insertions are appended to the page.
+%D
+%D Out of efficiency we only use marks when needed. The next
+%D macro tries to find out if indeed a mark should be set.
+%D This macro uses the boolean \type {\ifinpagebody}, which can
+%D be defined and set in the module that handles the pagebody.
+
+\def\docolormark#1%
+  {\iflocalcolor \else \ifinpagebody \else \ifinframed \else
+     \dodocolormark{#1}%
+   \fi \fi \fi}
+
+\let\lastcolormark=\empty
+
+\def\dodocolormark#1%
+  {\edef\newcolormark{#1}%
+   \ifx\newcolormark\lastcolormark\else
+     \global\let\lastcolormark\newcolormark
+     \@EA\rawsetmark\@EA\colormark\@EA{\lastcolormark}%
+   \fi}
+
+%D \macros
+%D   {pushcolor, popcolor}
+%D
+%D Pushing the current state in the output routine simply comes
+%D to resetting the color to black, while popping restores the
+%D color state to that of before the break.
+
+\def\topofpagecolor{\rawgetbotmark\colormark} % see postponing
+
+\def\pushcolor
+  {\stopcolormode}
+
+\def\popcolor
+  {\doifsomething{\rawgetbotmark\colormark}
+     {%\debuggerinfo\m!colors{popping \getbotmark\colormark}%
+      \startcolormode{\rawgetbotmark\colormark}}}
+
+\def\popsplitcolor
+  {\getsplitmarks\colormark  % hier wel
+   \doifsomething{\rawgetsplitbotmark\colormark}
+     {%\debuggerinfo\m!colors{split popping \getsplitbotmark\colormark}%
+      \startcolormode{\rawgetsplitbotmark\colormark}}}
+
+\appendtoks\pushcolor    \to\everypushproperties
+\appendtoks\popcolor     \to\everypopproperties
+\appendtoks\popsplitcolor\to\everypopsplitproperties
+
+% Private macro: only needed in test cases (like multiple
+% seperations in one file); no user command!
+
+\def\resynccolor
+  {\ifcase\pagetotal % \ifdim\pagetotal=\zeropoint
+     \popcolor
+   \else\ifx\@@currentcolor\empty
+     \ifx\maintextcolor\empty\else
+       \startcolormode\maintextcolor
+     \fi
+   \else
+     \startcolormode\@@currentcolor
+   \fi\fi}
+
+% weird stuff
+
+\def\pushpostponedpagecolor
+  {\edef\savedtopofpagecolor{\topofpagecolor}%
+   \doifsomething\savedtopofpagecolor\restorecolormode} % \stopcolormode
+
+\def\poppostponedpagecolor
+   {\doifsomething\savedtopofpagecolor\startcolormode\savedtopofpagecolor}
+
+%D \macros
+%D   {startcolorpage, stopcolorpage}
+%D
+%D Local use can be forced with the next two macros. Nesting
+%D is still supported but colors are no longer marked.
+%D
+%D The next implementation makes (simple) color separation more
+%D easy. It also supports nested colors in page backgrounds
+%D and texts.
+
+\def\startcolorpage
+  {\bgroup
+   \let\@@colorplus \minusone
+   \let\@@colorminus\plusone
+   \let\docolormark\gobbleoneargument
+   \edef\savedcolorlevel{\the\colorlevel}%
+   \global\colorlevel\zerocount % before \localstartcolor of
+   \ifx\maintextcolor\empty     % course, ugly bug removed
+     \localstartcolor[\defaulttextcolor]%
+   \else
+     \localstartcolor[\maintextcolor]%
+   \fi}
+
+\def\stopcolorpage
+  {\localstopcolor
+   \global\colorlevel\savedcolorlevel
+   \egroup}
+
+\appendtoks \startcolorpage\to\everystarttextproperties
+\prependtoks\stopcolorpage \to\everystoptextproperties
+
+%D We want color support to be similar to font support and
+%D therefore implement \type{\color} using grouping.
+%D
+%D When \type {\somecolor} is issued, we can savely assume
+%D grouping. Using \type {\groupedcommand} here (i.e.\ the
+%D definition of \type {\color}) is unsafe because in
+%D interferes with for instance switching attributes.
+
+\unexpanded\def\color[#1]%
+  {\groupedcommand{\startcolor[#1]}\stopcolor}
+
+%D This implementation enables use of defined colors like:
+%D
+%D \starttyping
+%D Look at the {\brightgreen bright} side of life and get
+%D yourself no \red{red} head!
+%D \stoptyping
+
+%D Also wrong, test in combinations: \type{...{}{\red test}}
+%D
+%D \def\switchtocolor[#1]%
+%D   {\startcolor[#1]\aftergroup\stopcolor}
+
+\def\switchtocolor[#1]% grouping is realy needed, else migration
+  {\bgroup\startcolor[#1]\aftergroup\stopcolor\aftergroup\egroup}
+
+\unexpanded\def\color[#1]%
+  {\groupedcommand{\startcolor[#1]}\stopcolor}
+
+\unexpanded\def\graycolor[#1]% not \gray because this is a color
+  {\groupedcommand{\RGBsupportedfalse\CMYKsupportedfalse\SPOTsupportedfalse\startcolor[#1]}\stopcolor}
+
+\unexpanded\def\colored[#1]%
+  {\groupedcommand{\definecolor[@colored@][#1]\startcolor[@colored@]}\stopcolor}
+
+%D We can speed the following macros a bit up, but this
+%D hardly pays off; they are only used in the manual.
+
+\def\realcolorformat#1%
+  {\ifnum#1<\plusten      0.00\the#1\else
+   \ifnum#1<\plushundred  0.0\the#1\else
+   \ifnum#1<\plusthousand 0.\the#1\else
+                          1.000\fi\fi\fi}
+
+\def\dodoformatcolor#1%
+  {\colordimen#1\points\relax
+   \ifdim\colordimen>\onepoint
+     \colordimen\onepoint
+   \fi
+   \multiply\colordimen \plusthousand
+   \colorcount\colordimen
+   \advance\colorcount \medcard
+   \divide\colorcount \maxcard \relax
+   \realcolorformat\colorcount}
+
+\def\doformatcolorR#1:#2:#3:#4:#5\od
+  {\dodoformatcolor{#1}\colorformatseparator
+   \dodoformatcolor{#2}\colorformatseparator
+   \dodoformatcolor{#3}}
+
+\def\doformatcolorC#1:#2:#3:#4:#5:#6\od
+  {\dodoformatcolor{#1}\colorformatseparator
+   \dodoformatcolor{#2}\colorformatseparator
+   \dodoformatcolor{#3}\colorformatseparator
+   \dodoformatcolor{#4}}
+
+\def\doformatcolorS#1:#2:#3\od
+  {\dodoformatcolor{#1}}
+
+\def\doformatcolorP#1:#2:#3:#4:#5:#6\od
+  {#1\colorformatseparator
+   \dodoformatcolor{#2}\colorformatseparator
+   \dodoformatcolor{#3}\colorformatseparator
+   \dodoformatcolor{#4}\colorformatseparator}
+
+\def\doformatcolor#1:%
+  {\csname doformatcolor#1\endcsname}
+
+\def\colorvalue
+  {\dowithcolor\doformatcolor}
+
+\def\doformatgrayR#1:#2:#3:#4:#5\od
+  {\convertRGBtoGRAY{#1}{#2}{#3}%
+   \dodoformatcolor\@@cl@@s}
+
+\def\doformatgrayC#1:#2:#3:#4:#5:#6\od
+  {\convertCMYKtoGRAY{#1}{#2}{#3}{#4}%
+   \dodoformatcolor\@@cl@@s}
+
+\def\doformatgrayS#1:#2:#3\od
+  {\dodoformatcolor{#1}}
+
+% \def\doformatgrayP#1:#2:#3:#4:#5:#6\od
+%   {\convertSPOTtoGRAY{#1}{#2}{#3}{#4}%
+%    \dodoformatcolor\@@cl@@s}
+
+\def\doformatgrayP#1:#2:#3:#4:#5:#6\od
+  {todo}
+
+\def\doformatgray#1:%
+  {\csname doformatgray#1\endcsname}
+
+\def\grayvalue
+  {\dowithcolor\doformatgray}
+
+%D \macros
+%D   {localstartraster,localstopraster,
+%D    startraster,stopraster}
+%D
+%D The previous conversions are not linear and treat each color
+%D component according to human perception curves. Pure gray
+%D (we call them rasters) has equal color components. In
+%D \CONTEXT\ rasters are only used as backgrounds and these
+%D don't cross page boundaries in the way color does. Therefore
+%D we don't need stacks and marks. Just to be compatible with
+%D color support we offer both 'global' and 'local' commands.
+%D
+%D \starttyping
+%D \def\localstartraster[#1]%
+%D   {\doifelsenothing{#1}
+%D      {\dostartgraymode\@@rsscreen}
+%D      {\dostartgraymode{#1}}}
+%D
+%D \def\localstopraster
+%D   {\dostopgraymode}
+%D
+%D \let\startraster\localstartraster
+%D \let\stopraster \localstopraster
+%D \stoptyping
+%D
+%D The next alternative is slower, since it works on top of the
+%D color (stack) mechanism, but it does provide nesting.
+
+\def\dosetrastercolor#1%
+  {\edef\@@cl@@s{#1}%
+   \ifx\@@cl@@s\empty
+     \let\@@cl@@s\@@rsscreen
+   \fi
+   \let\@@cl@@t\@@cl@@z % else we get rogue
+   \let\@@cl@@a\@@cl@@z % transpancies
+   \setevalue{\??cr\??rs}{\colorSpattern}}
+
+% beware, don't add extra grouping, else color in tables
+% fails
+
+\def\localstartraster[#1]%
+  {\ifincolor\dosetrastercolor{#1}\localstartcolor[\??rs]\fi}
+
+\def\startraster[#1]%
+  {\ifincolor\dosetrastercolor{#1}\startcolor[\??rs]\fi}
+
+\def\localstopraster{\ifincolor\localstopcolor\fi}
+\def\stopraster     {\ifincolor\stopcolor\fi}
+
+\def\raster[#1]{\groupedcommand{\startraster[#1]}{\stopraster}}
+
+%D Palets use an auxiliary macro:
+
+\def\dodefinepaletcolor#1#2#3%
+  {\doifassignmentelse{#3}
+     {% == \definepalet[test][xx={y=.4}]
+      \definecolor[\??pa#1:#2][#3]%
+       \iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi{\??cr#1:#2}{\csname\??cr\??pa#1:#2\endcsname}}
+     {% == \definepalet[test][xx=green]
+      \doifdefinedelse{\??cr#3}
+        {\iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi{\??cr#1:#2}{\csname\??cr#3\endcsname}}
+        {\letvalue{\??cr#1:#2}\colorXpattern}}}
+
+%D \MP\ related conversions:
+
+\def\scaledMPcolor#1#2%
+  {\ifMPgraphics
+     \handlecolorwith\doMPcolor
+       \csname\??cr
+         \ifcsname\??cr\currentpalet#2\endcsname\currentpalet\fi
+       #2\endcsname
+     :::::::\end#1\end
+   \else
+     #2%
+   \fi}
+
+\def\MPcolor{\scaledMPcolor1}
+
+%D Before we had transparency available, the following
+%D conversion macro was available:
+%D
+%D \starttyping
+%D \def\doMPcolor#1:#2:#3:#4:#5:#6:#7:#8\end
+%D   {\if     #1R(#2,#3,#4)%
+%D    \else\if#1C\ifMPcmykcolors cmyk(#2,#3,#4,#5)\else(1-#2-#5,1-#3-#5,1-#4-#5)\fi
+%D    \else\if#1S(#2,#2,#2)%
+%D    \else      (0,0,0)%
+%D    \fi\fi\fi}
+%D \stoptyping
+%D
+%D In order to be useful, this macro is to be fully
+%D expandabele.
+
+\def\doMPcolor#1:% #1 can be \relax ! ! ! i.e. an empty color
+  {\csname MPc\@EA\ifx\csname MPc\string#1\endcsname\relax B\else#1\fi\endcsname}
+
+\def\MPcR{\doMPrgb}
+\def\MPcC{\ifMPcmykcolors\@EA\doMPcmykY\else\@EA\doMPcmykN\fi}
+\def\MPcS{\doMPgray}
+\def\MPcP{\ifMPspotcolors\@EA\doMPspotY\else\@EA\doMPspotN\fi}
+\def\MPcB{\doMPblack}
+
+\def\transparentMP {transparent}
+\def\cmykMP        {scaledcmyk}
+\def\cmykASrgbMP   {scaledcmykasrgb} % not really needed any more
+\def\rgbMP         {scaledrgb}
+\def\grayMP        {scaledgray}
+\def\spotMP        {spotcolor}
+
+\def\doMPtransparent#1#2:#3:#4\end
+  {\ifcase#2\space(#1)\else\transparentMP(#2,#3,(#1))\fi}
+
+\def\doMPgray#1:#2\end#3\end
+  {\doMPtransparent{\grayMP(#1,#3)}#2\end}
+
+\def\doMPrgb#1:#2:#3:#4\end#5\end
+  {\doMPtransparent{\rgbMP(#1,#2,#3,#5)}#4\end}
+
+\def\doMPcmykY#1:#2:#3:#4:#5\end#6\end
+  {\doMPtransparent{\cmykMP(#1,#2,#3,#4,#6)}#5\end}
+
+\def\doMPcmykN#1:#2:#3:#4:#5\end#6\end
+  {\doMPtransparent{\cmykASrgbMP(#1,#2,#3,#4,#6)}#5\end}
+
+\def\doMPspotY#1:#2:#3:#4:#5\end#6\end % best make #3 same as #1 when empty
+  {\doMPtransparent{multitonecolor("#1",#2,"#3","#4")}#5\end}
+
+\def\doMPspotN#1:#2:#3:#4:#5\end#6\end
+  {\scaledMPcolor{#4}{#1}}
+
+\def\doMPblack#1\end#2\end
+  {\unknownMPcolor}
+
+\def\unknownMPcolor
+  {(0,0,0)}
+
+\let\processMP\spotMP % for some time, will become obsolete, brrr
+
+%D \PDF\ related conversions:
+
+\def\PDFcolor     #1{\handlecolorwith\doPDFcolor     \csname\??cr#1\endcsname:::::::\end}
+\def\PDFcolorvalue#1{\handlecolorwith\doPDFcolorvalue\csname\??cr#1\endcsname:::::::\end}
+\def\FDFcolor     #1{\handlecolorwith\doFDFcolor     \csname\??cr#1\endcsname:::::::\end}
+
+\def\doPDFcolor#1:#2:#3:#4:#5:#6:#7:#8\end
+  {\if     #1R#2 #3 #4 rg%
+   \else\if#1C#2 #3 #4 #5 k%
+   \else\if#1S#2 g%
+   \else\if#1P#5 g%
+   \else       0 g%
+   \fi\fi\fi\fi}
+
+\def\doPDFcolorvalue#1:#2:#3:#4:#5:#6:#7:#8\end
+  {\if     #1R#2 #3 #4%
+   \else\if#1C#2 #3 #4 #5%
+   \else\if#1S#2%
+   \else\if#1P#5%
+   \else       0%
+   \fi\fi\fi\fi}
+
+\def\doFDFcolor#1:#2:#3:#4:#5:#6:#7:#8\end
+  {[\if     #1R#2 #3 #4%
+    \else\if#1C#2 #3 #4 #5%
+    \else\if#1S#2%
+    \else\if#1P#5%
+    \else       0%
+    \fi\fi\fi\fi]}
+
+\def\internalspotcolorname#1{\handlecolorwith\dointernalspotcolorname\csname\??cr#1\endcsname:::::::\end}
+\def\internalspotcolorsize#1{\handlecolorwith\dointernalspotcolorsize\csname\??cr#1\endcsname:::::::\end}
+
+\def\dointernalspotcolorname#1:#2:#3:#4:#5:#6:#7:#8\end{\if#1P\ifcase0#3 #1\else#2\fi\else#1\fi}
+\def\dointernalspotcolorsize#1:#2:#3:#4:#5:#6:#7:#8\end{\if#1P\ifcase0#3  0\else#3\fi\else 0\fi}
+
+%D Because it's a persitent issue, we also provide
+
+\def\pgf at context@registercolor#1%
+  {\handlecolorwith\pgf at context@registercolor at indeed\csname\??cr#1\endcsname:::::::>#1\end}
+
+\def\pgf at context@registercolor at indeed#1:#2:#3:#4:#5:#6>#7\end
+  {\setevalue{\string\color@#7}{\noexpand\xcolor@{}{}%
+   \if#1R{rgb}{#2,#3,#4}\else
+   \if#1C{cmyk}{#2,#3,#4,#5}\else
+   \if#1S{gray}{#2}\else
+         {gray}{0}\fi\fi\fi}}
+
+%D Slow but ok \unknown
+
+\def\colorcomponents#1% might be broken
+  {\startnointerference
+     \localcolortrue
+     \globallet\thecolorcomponents\empty
+     \def\doexeccolorR    ##1:##2:##3:##4:##5\od{\gdef\thecolorcomponents{r=\twodigitrounding{##1} g=\twodigitrounding{##2} b=\twodigitrounding{##3}}}%
+     \def\doexeccolorC##1:##2:##3:##4:##5:##6\od{\gdef\thecolorcomponents{c=\twodigitrounding{##1} m=\twodigitrounding{##2} y=\twodigitrounding{##3} k=\twodigitrounding{##4}}}%
+     \def\doexeccolorS            ##1:##2:##3\od{\gdef\thecolorcomponents{s=\twodigitrounding{##1}}}%
+     \def\doexeccolorP##1:##2:##3:##4:##5:##6\od{\gdef\thecolorcomponents{p=\twodigitrounding{##4} n=##1}}%
+     \let\doexeccolorPindex\doexeccolorP
+     \backgroundline[#1]{}%
+   \stopnointerference
+   \thecolorcomponents}
+
+\def\transparencycomponents#1%
+  {\startnointerference
+     \localcolortrue
+     \globallet\thetransparencycomponents\empty
+     \def\doexeccolorR    ##1:##2:##3:##4:##5\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##4} t=\twodigitrounding{##5}}}%
+     \def\doexeccolorC##1:##2:##3:##4:##5:##6\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##5} t=\twodigitrounding{##6}}}%
+     \def\doexeccolorS            ##1:##2:##3\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##2} t=\twodigitrounding{##3}}}%
+     \def\doexeccolorP##1:##2:##3:##4:##5:##6\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##5} t=\twodigitrounding{##6}}}%
+     \let\doexeccolorPindex\doexeccolorP
+     \backgroundline[#1]{}%
+   \stopnointerference
+   \thetransparencycomponents}
+
+%D \macros
+%D   {everyshapebox}
+%D
+%D A terrible hack, needed because we cannot have marks in
+%D shape boxes.
+
+\appendtoks \localcolortrue \to \everyshapebox
+
+%D \macros
+%D   {forcecolorhack}
+%D
+%D Awful \unknown
+
+\let\forcecolorhack\relax
+
+%D We default to the colors defined in \module{colo-rgb} and
+%D support both \cap{RGB} and \cap{CMYK} output. As you can
+%D see, color support is turned off by default. Reduction of
+%D gray colors to gray scales is turned on.
+
+\definecolor[black][s=0]
+\definecolor[white][s=1]
+
+\definetransparency [none]        [0]
+\definetransparency [normal]      [1]
+\definetransparency [multiply]    [2]
+\definetransparency [screen]      [3]
+\definetransparency [overlay]     [4]
+\definetransparency [softlight]   [5]
+\definetransparency [hardlight]   [6]
+\definetransparency [colordodge]  [7]
+\definetransparency [colorburn]   [8]
+\definetransparency [darken]      [9]
+\definetransparency [lighten]    [10]
+\definetransparency [difference] [11]
+\definetransparency [exclusion]  [12]
+\definetransparency [hue]        [13]
+\definetransparency [saturation] [14]
+\definetransparency [color]      [15]
+\definetransparency [luminosity] [16]
+
+\setupcolors
+  [\c!state=\v!stop,
+   \c!conversion=\v!yes,
+   \c!reduction=\v!no,
+   \c!rgb=\v!yes,
+   \c!cmyk=\v!yes,
+   \c!spot=\v!yes,
+   \c!mp\c!cmyk=\@@clcmyk,
+   \c!mp\c!spot=\@@clspot,
+   \c!expansion=\v!no,
+   \c!textcolor=,
+   \c!split=\v!no,
+   \c!criterium=\v!all]
+
+\setupcolor
+  [\v!rgb]
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/colo-rgb.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/colo-rgb.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/colo-rgb.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,530 @@
+%D \module
+%D   [       file=colo-rgb,
+%D        version=1995.01.01,
+%D          title=\CONTEXT\ Color Macros,
+%D       subtitle=RGB,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for 
+%C details. 
+
+%D Just to give users a start we define some colors. While
+%D switching fonts is as international as can be, thanks to the
+%D mnemonics, naming colors is very interface dependant. To
+%D support international setups, we define both english and
+%D interface dependant colors. We use the color inheritance
+%D mechanisms to implement the interface dependant ones.
+
+%D First we define some simple primary \cap{RGB} and \cap{CMYK} 
+%D colors. All colors are defined in \cap{RGB} color space.
+
+\definecolor [red]           [r=1,   g=0,   b=0]
+\definecolor [green]         [r=0,   g=1,   b=0]
+\definecolor [blue]          [r=0,   g=0,   b=1]
+
+\definecolor [cyan]          [r=0,   g=1,   b=1]
+\definecolor [magenta]       [r=1,   g=0,   b=1]
+\definecolor [yellow]        [r=1,   g=1,   b=0]
+
+\definecolor [white]         [s=1] % [r=1,   g=1,   b=1]
+\definecolor [black]         [s=0] 
+\definecolor [gray]          [s=.9]
+
+\definecolor [darkred]       [r=.8,  g=0,   b=0]
+\definecolor [middlered]     [r=.9,  g=0,   b=0]
+\definecolor [lightred]      [r=1,   g=0,   b=0]
+
+\definecolor [darkgreen]     [r=0,   g=.6,  b=0]
+\definecolor [middlegreen]   [r=0,   g=.8,  b=0]
+\definecolor [lightgreen]    [r=0,   g=1,   b=0]
+
+\definecolor [darkblue]      [r=0,   g=0,   b=.8]
+\definecolor [middleblue]    [r=0,   g=0,   b=.9]
+\definecolor [lightblue]     [r=0,   g=0,   b=1]
+
+\definecolor [darkcyan]      [r=.6,  g=.8,  b=.8]
+\definecolor [middlecyan]    [r=0,   g=.8,  b=.8]
+
+\definecolor [darkmagenta]   [r=.8,  g=.6,  b=.8]
+\definecolor [middlemagenta] [r=1,   g=0,   b=.6]
+
+\definecolor [darkyellow]    [r=.8,  g=.8,  b=.6]
+\definecolor [middleyellow]  [r=1,   g=1,   b=.2]
+
+\definecolor [darkgray]      [s=.5]
+\definecolor [middlegray]    [s=.7]
+\definecolor [lightgray]     [s=.9]
+
+%D These colors are mapped to interface dependant colornames.
+
+\startinterface dutch
+
+  \definecolor [rood]          [red]
+  \definecolor [groen]         [green]
+  \definecolor [blauw]         [blue]
+
+  \definecolor [cyaan]         [cyan]
+  \definecolor [magenta]       [magenta]
+  \definecolor [geel]          [yellow]
+
+  \definecolor [wit]           [white]
+  \definecolor [grijs]         [gray]
+  \definecolor [zwart]         [black]
+
+  \definecolor [donkerrood]    [darkred]
+  \definecolor [middelrood]    [middlered]
+  \definecolor [lichtrood]     [lightred]
+
+  \definecolor [donkergroen]   [darkgreen]
+  \definecolor [middelgroen]   [middlegreen]
+  \definecolor [lichtgroen]    [lightgreen]
+
+  \definecolor [donkerblauw]   [darkblue]
+  \definecolor [middelblauw]   [middleblue]
+  \definecolor [lichtblauw]    [lightblue]
+
+  \definecolor [donkercyaan]   [darkcyan]
+  \definecolor [middelcyaan]   [middlecyan]
+
+  \definecolor [donkermagenta] [darkmagenta]
+  \definecolor [middelmagenta] [middlemagenta]
+
+  \definecolor [donkergeel]    [darkyellow]
+  \definecolor [middelgeel]    [middleyellow]
+
+  \definecolor [donkergrijs]   [darkgray]
+  \definecolor [middengrijs]   [middlegray]
+  \definecolor [lichtgrijs]    [lightgray]
+
+\stopinterface
+
+\startinterface german
+
+  \definecolor [rot]           [red]
+  \definecolor [gruen]         [green]
+  \definecolor [blau]          [blue]
+
+  \definecolor [cyan]          [cyan]
+  \definecolor [magenta]       [magenta]
+  \definecolor [gelb]          [yellow]
+
+  \definecolor [weiss]         [white]
+  \definecolor [grau]          [gray]
+  \definecolor [schwarz]       [black]
+
+  \definecolor [dunkelrot]     [darkred]
+  \definecolor [mittelrot]     [middlered]
+  \definecolor [hellrot]       [lightred]
+
+  \definecolor [dunkelgruen]   [darkgreen]
+  \definecolor [mittelgruen]   [middlegreen]
+  \definecolor [hellgruen]     [lightgreen]
+
+  \definecolor [dunkelblau]    [darkblue]
+  \definecolor [mittelblau]    [middleblue]
+  \definecolor [hellblau]      [lightblue]
+
+  \definecolor [dunkelcyan]    [darkcyan]
+  \definecolor [mittelcyan]    [middlecyan]
+
+  \definecolor [dunkelmagenta] [darkmagenta]
+  \definecolor [mittelmagenta] [middlemagenta]
+
+  \definecolor [dunkelgelb]    [darkyellow]
+  \definecolor [mittelgelb]    [middleyellow]
+
+  \definecolor [dunkelgrau]    [darkgray]
+  \definecolor [mittelgrau]    [middlegray]
+  \definecolor [hellgrau]      [lightgray]
+
+\stopinterface
+
+\startinterface czech
+
+  \definecolor [cervena]        [red]
+  \definecolor [zelena]         [green]
+  \definecolor [modra]          [blue]
+
+  \definecolor [azurova]        [cyan]
+  \definecolor [fialova]        [magenta]
+  \definecolor [zluta]          [yellow]
+
+  \definecolor [bila]           [white]
+  \definecolor [cerna]          [black]
+
+  \definecolor [tmavecervena]   [darkred]
+  \definecolor [strednecervena] [middlered]
+  \definecolor [svetlecervena]  [lightred]
+
+  \definecolor [tmavezelena]    [darkgreen]
+  \definecolor [strednezelena]  [middlegreen]
+  \definecolor [svetlezelena]   [lightgreen]
+
+  \definecolor [tmavemodra]     [darkblue]
+  \definecolor [strednemodra]   [middleblue]
+  \definecolor [svetlemodra]    [lightblue]
+
+  \definecolor [tmaveazurova]   [darkcyan]
+  \definecolor [stredneazurova] [middlecyan]
+
+  \definecolor [tmavefialova]   [darkmagenta]
+  \definecolor [strednefialova] [middlemagenta]
+
+  \definecolor [tmavezluta]     [darkyellow]
+  \definecolor [strednezluta]   [middleyellow]
+
+  \definecolor [tmaveseda]      [darkgray]
+  \definecolor [stredneseda]    [middlegray]
+  \definecolor [svetleseda]     [lightgray]
+
+\stopinterface
+
+\startinterface italian
+
+  \definecolor [rosso]         [red]
+  \definecolor [verde]         [green]
+  \definecolor [blu]           [blue]
+
+  \definecolor [azzurro]       [cyan]
+  \definecolor [turchino]      [cyan]
+  \definecolor [ciano]         [cyan]
+  \definecolor [cremisi]       [magenta]
+  \definecolor [giallo]        [yellow]
+
+  \definecolor [bianco]        [white]
+  \definecolor [grigio]        [gray]
+  \definecolor [nero]          [black]
+
+  \definecolor [rossoscuro]    [darkred]
+  \definecolor [rossomedio]    [middlered]
+  \definecolor [rossochiaro]   [lightred]
+
+  \definecolor [verdescuro]    [darkgreen]
+  \definecolor [verdemedio]    [middlegreen]
+  \definecolor [verdechiaro]   [lightgreen]
+
+  \definecolor [bluscuro]      [darkblue]
+  \definecolor [blumedio]      [middleblue]
+  \definecolor [bluchiaro]     [lightblue]
+
+  \definecolor [azzurroscuro]  [darkcyan]
+  \definecolor [azzurrochiaro] [middlecyan]      
+
+  \definecolor [cremisiscuro]  [darkmagenta]    
+  \definecolor [cremisichiaro] [middlemagenta]  
+
+
+  \definecolor [gialloscuro]     [darkyellow]
+  \definecolor [giallomedio]     [middleyellow]
+
+  \definecolor [grigioscuro]     [darkgray]
+  \definecolor [grigiomedio]     [middlegray]
+  \definecolor [grigiochiaro]    [lightgray]
+
+\stopinterface
+
+\startinterface romanian
+
+  \definecolor [rosu]            [red]
+  \definecolor [verde]           [green]
+  \definecolor [albastru]        [blue]
+
+  \definecolor [cian]            [cyan]
+  \definecolor [magenta]         [magenta]
+  \definecolor [galben]          [yellow]
+
+  \definecolor [alb]             [white]
+  \definecolor [gri]             [gray]
+  \definecolor [negru]           [black]
+
+  \definecolor [rosuinchis]      [darkred]
+  \definecolor [rosumediu]       [middlered]
+  \definecolor [rosudeschis]     [lightred]
+
+  \definecolor [verdeinchis]     [darkgreen]
+  \definecolor [verdemediu]      [middlegreen]
+  \definecolor [verdedeschis]    [lightgreen]
+
+  \definecolor [albastruinchis]  [darkblue]
+  \definecolor [albastrumediu]   [middleblue]
+  \definecolor [albastrudeschis] [lightblue]
+
+  \definecolor [cianinchis]      [darkcyan]
+  \definecolor [cianmediu]       [middlecyan]
+
+  \definecolor [magentainchis]   [darkmagenta]
+  \definecolor [magentamediu]    [middlemagenta]
+
+  \definecolor [galbeninchis]    [darkyellow]
+  \definecolor [galbenmediu]     [middleyellow]
+
+  \definecolor [griinchis]       [darkgray]
+  \definecolor [grimediu]        [middlegray]
+  \definecolor [grideschis]      [lightgray]
+
+\stopinterface
+
+%D Like colors, we first define the english colorgroups. These
+%D colorgroups are tuned for distinctive gray scale printing.
+
+% todo : more efficient and real gray 
+
+\definecolorgroup
+  [gray]
+  [0.95:0.95:0.95,
+   0.90:0.90:0.90,
+   0.80:0.80:0.80,
+   0.70:0.70:0.70,
+   0.60:0.60:0.60,
+   0.50:0.50:0.50,
+   0.40:0.40:0.40,
+   0.30:0.30:0.30,
+   0.20:0.20:0.20,
+   0.10:0.10:0.10,
+   0.00:0.00:0.00]
+
+\definecolorgroup
+  [red]
+  [1.00:0.90:0.90,
+   1.00:0.80:0.80,
+   1.00:0.70:0.70,
+   1.00:0.55:0.55,
+   1.00:0.40:0.40,
+   1.00:0.25:0.25,
+   1.00:0.15:0.15,
+   0.90:0.00:0.00]
+
+\definecolorgroup
+  [green]
+  [0.90:1.00:0.90,
+   0.70:1.00:0.70,
+   0.50:1.00:0.50,
+   0.30:1.00:0.30,
+   0.15:0.90:0.15,
+   0.00:0.80:0.00,
+   0.00:0.65:0.00,
+   0.00:0.50:0.00]
+
+\definecolorgroup
+  [blue]
+  [0.90:0.95:1.00,
+   0.80:0.90:1.00,
+   0.55:0.85:1.00,
+   0.30:0.80:1.00,
+   0.15:0.75:1.00,
+   0.00:0.70:1.00,
+   0.00:0.55:1.00,
+   0.00:0.40:1.00]
+
+\definecolorgroup
+  [cyan]
+  [0.80:1.00:1.00,
+   0.60:1.00:1.00,
+   0.30:1.00:1.00,
+   0.00:0.95:0.95,
+   0.00:0.85:0.85,
+   0.00:0.75:0.75,
+   0.00:0.60:0.60,
+   0.00:0.50:0.50]
+
+\definecolorgroup
+  [magenta]
+  [1.00:0.90:1.00,
+   1.00:0.80:1.00,
+   1.00:0.65:1.00,
+   1.00:0.50:1.00,
+   1.00:0.35:1.00,
+   1.00:0.15:1.00,
+   0.90:0.05:0.90,
+   0.80:0.00:0.80]
+
+\definecolorgroup
+   [yellow]
+   [1.00:1.00:0.70,
+    1.00:1.00:0.00,
+    1.00:0.85:0.05,
+    1.00:0.70:0.00,
+    1.00:0.55:0.00,
+    0.95:0.40:0.00,
+    0.80:0.30:0.00,
+    0.60:0.30:0.00]
+
+\definecolorgroup
+  [red*]
+  [1.00:0.95:0.95,
+   1.00:0.90:0.90,
+   1.00:0.80:0.80,
+   1.00:0.70:0.70,
+   1.00:0.60:0.60,
+   1.00:0.50:0.50,
+   1.00:0.40:0.40,
+   1.00:0.30:0.30]
+
+\definecolorgroup
+  [green*]
+  [0.95:1.00:0.95,
+   0.90:1.00:0.90,
+   0.80:1.00:0.80,
+   0.70:1.00:0.70,
+   0.60:1.00:0.60,
+   0.50:1.00:0.50,
+   0.40:1.00:0.40,
+   0.30:1.00:0.30]
+
+\definecolorgroup
+  [blue*]
+  [0.95:0.95:1.00,
+   0.90:0.90:1.00,
+   0.80:0.80:1.00,
+   0.70:0.70:1.00,
+   0.60:0.60:1.00,
+   0.50:0.50:1.00,
+   0.40:0.40:1.00,
+   0.30:0.30:1.00]
+
+\definecolorgroup
+  [yellow*]
+  [1.00:1.00:0.10,
+   1.00:1.00:0.00,
+   0.90:0.90:0.00,
+   0.80:0.80:0.00,
+   0.70:0.70:0.00,
+   0.60:0.60:0.00,
+   0.50:0.50:0.00,
+   0.40:0.40:0.00]
+
+%D For the sake of implementing interface dependant color
+%D groups we support colorgroup duplication.
+
+\startinterface dutch
+  \definecolorgroup [grijs]   [gray]
+  \definecolorgroup [rood]    [red]
+  \definecolorgroup [groen]   [green]
+  \definecolorgroup [blauw]   [blue]
+  \definecolorgroup [cyaan]   [cyan]
+  \definecolorgroup [magenta] [magenta]
+  \definecolorgroup [geel]    [yellow]
+  \definecolorgroup [rood*]   [red*]
+  \definecolorgroup [groen*]  [green*]
+  \definecolorgroup [blauw*]  [blue*]
+  \definecolorgroup [geel*]   [yellow*]
+\stopinterface
+
+\startinterface german
+  \definecolorgroup [grau]    [gray]
+  \definecolorgroup [rot]     [red]
+  \definecolorgroup [gruen]   [green]
+  \definecolorgroup [blau]    [blue]
+  \definecolorgroup [cyan]    [cyan]
+  \definecolorgroup [magenta] [magenta]
+  \definecolorgroup [gelb]    [yellow]
+  \definecolorgroup [rot*]    [red*]
+  \definecolorgroup [gruen*]  [green*]
+  \definecolorgroup [blau*]   [blue*]
+  \definecolorgroup [gelb*]   [yellow*]
+\stopinterface
+
+\startinterface czech
+  \definecolorgroup [seda]     [gray]
+  \definecolorgroup [cervena]  [red]
+  \definecolorgroup [zelena]   [green]
+  \definecolorgroup [modra]    [blue]
+  \definecolorgroup [azurova]  [cyan]
+  \definecolorgroup [fialova]  [magenta]
+  \definecolorgroup [zluta]    [yellow]
+  \definecolorgroup [cervena*] [red*]
+  \definecolorgroup [zelena*]  [green*]
+  \definecolorgroup [modra*]   [blue*]
+  \definecolorgroup [zluta*]   [yellow*]
+\stopinterface
+
+\startinterface italian
+  \definecolorgroup [grigio]  [gray]
+  \definecolorgroup [rosso]   [red]
+  \definecolorgroup [verde]   [green]
+  \definecolorgroup [blu]     [blue]
+  \definecolorgroup [ciano]   [cyan]
+  \definecolorgroup [azzurro] [cyan]
+  \definecolorgroup [turchino][cyan]
+  \definecolorgroup [magenta] [magenta]
+  \definecolorgroup [cremisi] [magenta]
+  \definecolorgroup [giallo]  [yellow]
+  \definecolorgroup [rosso*]  [red*]
+  \definecolorgroup [verde*]  [green*]
+  \definecolorgroup [blu*]    [blue*]
+  \definecolorgroup [giallo*] [yellow*]
+\stopinterface
+
+%D The next set of color palets is quite language independant.
+%D These palets are meant as examples.
+
+\definepalet
+  [alfa]
+  [     top=red:7,
+     bottom=green:6,
+         up=blue:5,
+       down=cyan:4,
+    strange=magenta:3,
+      charm=yellow:2]
+
+\definepalet
+  [beta]
+  [     top=red:7,
+     bottom=green:5,
+         up=blue:3,
+       down=cyan:6,
+    strange=magenta:2,
+      charm=yellow:1]
+
+\definepalet
+  [gamma]
+  [     top=red:2,
+     bottom=green:5,
+         up=blue:3,
+       down=cyan:6,
+    strange=magenta:7,
+      charm=yellow:4]
+
+\definepalet
+  [delta]
+  [     top=yellow*:5,
+     bottom=yellow*:3,
+         up=yellow*:2,
+       down=magenta:6,
+    strange=blue:4,
+      charm=blue:1]
+
+\definepalet
+  [epsilon]
+  [     top=cyan:7,
+     bottom=cyan:5,
+         up=blue:3,
+       down=yellow:6,
+    strange=yellow:4,
+      charm=yellow:2]
+
+\definepalet
+  [zeta]
+  [     top=red:6,
+     bottom=green:5,
+         up=blue:7,
+       down=cyan:4,
+    strange=magenta:3,
+      charm=yellow:2]
+
+%D The next four colors are used for typesetting verbatim \TEX\
+%D in color.
+
+\definecolor [texcolorone]   [middlered]
+\definecolor [texcolortwo]   [middlegreen]
+\definecolor [texcolorthree] [middleblue]
+\definecolor [texcolorfour]  [darkyellow]
+
+%D Bonus (needed for FO test): 
+
+\definecolor [orange]        [r=1,g=.5]
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/colo-run.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/colo-run.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/colo-run.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,257 @@
+%D \module
+%D   [       file=colo-run,
+%D        version=1997.04.01,
+%D          title=\CONTEXT\ Color Macros,
+%D       subtitle=Runtime loaded commands,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+% temp hack (not do be documented)
+
+% \gdef\doformatcolorP#1:#2:#3:#4:#5:#6\od % was undefined in colo-ini
+%   {#1\colorformatseparator
+%    \dodoformatcolor{#2}\colorformatseparator
+%    \dodoformatcolor{#3}\colorformatseparator
+%    \dodoformatcolor{#4}\colorformatseparator}
+
+% \gdef\doformatgrayP#1:#2:#3:#4:#5:#6\od
+%   {todo}
+
+% so far
+
+\gdef\showpalet
+  {\dodoubleargument\doshowpalet}
+
+\gdef\doshowpalet[#1][#2]%
+  {\doifdefined{\??pa#1}
+     {\doifinsetelse\v!vertical{#2}
+        {\showverticalpalet[#1][#2]}
+        {\showhorizontalpalet[#1][#2]}}}
+
+\gdef\showverticalpalet[#1][#2]%
+  {\localvbox
+     {\offinterlineskip
+      \setuppalet[#1]
+      \def\rule
+        {\vrule\!!width3em\!!height\strutht\!!depth\strutdp}
+      \tabskip\zeropoint
+      \def\doshowpalet##1%
+        {\doifinsetelse\v!number{#2}{##1\hskip.5em}{}&
+         \color[##1]{\rule}\graycolor[##1]{\rule}&
+         \doifinset\v!value{#2}{\hskip.5em\colorvalue{##1}}\crcr}
+      \halign
+        {\hss##&\hss##\hss&##\cr
+         &\doifinset{\v!name}{#2}{\strut#1}&\cr%
+         \processpalet[#1]\doshowpalet\crcr}}}
+
+\gdef\showhorizontalpalet[#1][#2]%
+  {\localvbox
+     {\offinterlineskip
+      \setuppalet[#1]
+      \tabskip\zeropoint
+      \!!widtha\zeropoint
+      \doifinset\v!number{#2}
+        {\def\doshowpalet##1%
+           {\setbox0\hbox{##1}%
+            \ifdim\!!widtha<\wd0\!!widtha\wd0\fi}%
+         \processpalet[#1]\doshowpalet}%
+      \advance\!!widtha 1em
+      \ifdim\!!widtha<5em
+        \!!widtha5em
+      \fi
+      \halign
+        {##&&\hbox to \!!widtha{\hss##\hss}\cr
+         \doifinset\v!number{#2}
+           {\def\doshowpalet##1{&\strut##1}%
+            \processpalet[#1]\doshowpalet}\cr
+         \doifinset\v!name{#2}{#1\hskip.5em}%
+         \def\doshowpalet##1%
+           {&\strut\color[##1]{\vrule\!!width\!!widtha\!!height\strutht\!!depth\zeropoint}}%
+         \processpalet[#1]\doshowpalet\crcr
+         \noalign{\vskip-\strutdepth}%
+         \def\doshowpalet##1%
+           {&\graycolor[##1]{\vrule\!!width\!!widtha\!!height\zeropoint\!!depth\strutdp}}%
+         \processpalet[#1]\doshowpalet\crcr
+         \doifinset\v!value{#2}
+           {\def\doshowpalet##1%
+             {&\vbox
+                {\hsize\!!widtha
+                 \vskip.25ex
+                 \everypar{\strut}
+                 \veryraggedcenter
+                 \let\colorformatseparator=\endgraf
+                 \colorvalue{##1}}}%
+            \processpalet[#1]\doshowpalet}%
+         \crcr}}}
+
+\gdef\processpalet[#1]%
+  {\expanded{\globalprocesscommalist[\getvalue{\??pa#1}]}}
+
+\gdef\showcolorgroup
+  {\dodoubleargument\doshowcolorgroup}
+
+\gdef\doshowcolorgroup[#1][#2]%
+  {\doifcolor{#1:1}
+     {\doifinsetelse\v!vertical{#2}
+        {\showverticalcolorgroup[#1][#2]}
+        {\showhorizontalcolorgroup[#1][#2]}}}
+
+\gdef\showhorizontalcolorgroup[#1][#2]%
+  {\localvbox
+     {\offinterlineskip
+      \setuppalet
+      \tabskip\zeropoint
+      \def\rule
+        {\vrule\!!width4em\!!height\strutht\!!depth\strutdp}
+      \def\colorformatseparator{\strut\cr}
+      \def\dodoshowgroup##1%
+        {\halign
+           {\hss####\hss\cr
+            \doifinset\v!number{#2}{\strut##1}\cr
+            \color[#1:##1]{\vrule\!!width4em\!!height\strutht\!!depth\zeropoint}\cr
+            \graycolor[#1:##1]{\vrule\!!width4em\!!height\zeropoint\!!depth\strutdp}\cr
+            \doifinset\v!value{#2}{\colorvalue{#1:##1}\strut}\crcr}}
+      \def\doshowgroup##1%
+        {\doifcolor{#1:##1}
+           {\vbox{\dodoshowgroup{##1}}}}%
+      \hbox
+        {\doifinset\v!name{#2}
+           {\strut
+            \doifinsetelse\v!value{#2}
+              {\raise3\lineheight\hbox{#1\hskip.5em}}
+              {#1}%
+            \hskip.5em}%
+         \doshowgroup1\doshowgroup2\doshowgroup3\doshowgroup4%
+         \doshowgroup5\doshowgroup6\doshowgroup7\doshowgroup8}}}
+
+\gdef\showverticalcolorgroup[#1][#2]%
+  {\localvbox
+     {\offinterlineskip
+      \setuppalet
+      \tabskip\zeropoint
+      \def\rule
+        {\vrule\!!width2.5em\!!height\strutht\!!depth\strutdp}%
+      \def\doshowgroup##1%
+        {\doifcolor{#1:##1}
+           {\doifinset\v!number{#2}{##1\hskip.5em}&
+            \color[#1:##1]{\rule}\graycolor[#1:##1]{\rule}&
+            \doifinset\v!value{#2}{\hskip.5em\colorvalue{#1:##1}}\crcr}}%
+      \halign
+        {\hss##&\hss##\hss&##\hss\cr
+         &\doifinset\v!name{#2}{\strut#1}&\crcr
+         \doshowgroup1\doshowgroup2\doshowgroup3\doshowgroup4%
+         \doshowgroup5\doshowgroup6\doshowgroup7\doshowgroup8}}}
+
+\gdef\showcolor
+  {\dosingleempty\doshowcolor}
+
+\gdef\doshowcolor[#1]%
+  {\bgroup
+     \iffirstargument
+       \let\colorlist\empty % not really used, only for colo-run
+       \let\colorstyle\empty
+       \settrue\collectcolorsinlist
+       \setupcolor[#1]%
+     \fi
+     \def\rule
+       {\vrule\!!width4em\!!height\strutht\!!depth\strutdp}%
+     \def\docommand##1%
+       {\NC\graycolor[##1]{\rule}\NC\color[##1]{\rule}\NC\grayvalue{##1}\NC\colorvalue{##1}\NC##1\NC\NR}%
+     \starttabulate[|l|l|l|l|l|l|l|]
+       \expanded{\globalprocesscommalist[\colorlist]}\docommand
+     \stoptabulate
+   \egroup}
+
+\gdef\comparepalet
+  {\dosingleargument\docomparepalet}
+
+\gdef\docomparepalet[#1]%
+  {\doifdefined{\??pa#1}
+     {\hbox
+        {\dodocomparepalet\color[#1]%
+         \quad
+         \dodocomparepalet\graycolor[#1]}}}
+
+\gdef\dodocomparepalet#1[#2]%
+  {\localvbox
+     {\offinterlineskip
+      \setuppalet[#2]
+      \getcommacommandsize[\getvalue{\??pa#2}]
+      \!!widtha2em\relax
+      \hsize\commalistsize\!!widtha
+      \def\rule%
+        {\vrule\!!width.5\!!widtha\!!height2.25ex\!!depth-.75ex}
+      \def\dododocomparepalet##1%
+        {\hbox
+           {\setbox0\hbox
+              {#1[##1]{\vrule\!!width\hsize\!!height3ex}}%
+            \wd0\zeropoint
+            \box0
+            \hbox to \hsize
+              {\def\dododocomparepalet####1%
+                 {\hbox to \!!widtha
+                    {\hss#1[####1]{\rule}\hss}}%
+               \processcommacommand[\getvalue{\??pa#2}]\dododocomparepalet}}
+         \endgraf}
+      \processcommacommand[\getvalue{\??pa#2}]\dododocomparepalet}}
+
+\gdef\comparecolorgroup
+  {\dosingleargument\docomparecolorgroup}
+
+\gdef\docomparecolorgroup[#1]%
+  {\doifcolor{#1:1}
+     {\hbox
+        {\dodocomparecolorgroup\color[#1]%
+         \quad
+         \dodocomparecolorgroup\graycolor[#1]}}}
+
+\gdef\dodocomparecolorgroup#1[#2]%
+  {\localvbox
+     {\!!counta\zerocount
+      \dorecurse{15}
+        {\doifcolor{#2:\recurselevel}{\advance\!!counta\plusone}}
+      \!!widtha2em\relax
+      \hsize\!!counta\!!widtha
+      \def\rule
+        {\vrule\!!width.5\!!widtha\!!height2.25ex\!!depth-.75ex}
+      \def\dododocomparecolorgroup##1%
+        {\hbox to \hsize
+           {\setbox0\hbox
+              {#1[#2:##1]{\vrule\!!width\hsize\!!height3ex}}%
+            \wd0\zeropoint
+            \box0
+            \hbox to \hsize
+              {\hss\dorecurse\!!counta{#1[#2:\recurselevel]{\rule}\hss}}}
+         \endgraf}
+      \dorecurse\!!counta{\dododocomparecolorgroup\recurselevel}}}
+
+\gdef\dogetcolorcomponents#1%
+  {\doifelsenothing{#1}
+     {\appendtoks
+        \TB
+      \to \scratchtoks}
+     {\appendtoks
+        \NC\showcolorbar[#1]\NC#1\NC\transparencycomponents{#1}\NC\colorcomponents{#1}\NC \NR
+      \to \scratchtoks}}
+
+\gdef\showcolorbar[#1]%
+  {\backgroundline[#1]{\strut\enspace\color[white]{white}\enspace\color[black]{black}\enspace}}
+
+\gdef\showcolorcomponents[#1]%
+  {\begingroup
+   \scratchtoks{\TB}%
+   \processcommacommand[#1]\dogetcolorcomponents
+   \starttabulate[|lT|lT|lT|lT|]
+   \NC color \NC name \NC transparency \NC specification \NC\NR
+   \the\scratchtoks
+   \stoptabulate
+   \endgroup}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/colo-x11.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/colo-x11.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/colo-x11.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,677 @@
+%D \module
+%D   [       file=colo-x11,
+%D        version=2009.11.13,
+%D          title=\CONTEXT\ Color Macros,
+%D       subtitle=X11,
+%D         author=Alan Braslau]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Standard X11 rgb colors (from \type {/usr/share/X11/rgb.txt}):
+
+\doifnotmode{mkiv} {
+    \input colo-hex.mkii
+}
+
+\definecolor [snow]                 [h=fffafa]
+\definecolor [ghostwhite]           [h=f8f8ff]
+\definecolor [whitesmoke]           [s=0.96]
+\definecolor [gainsboro]            [s=0.86]
+\definecolor [floralwhite]          [h=fffaf0]
+\definecolor [oldlace]              [h=fdf5e6]
+\definecolor [linen]                [h=faf0e6]
+\definecolor [antiquewhite]         [h=faebd7]
+\definecolor [papayawhip]           [h=ffefd5]
+\definecolor [blanchedalmond]       [h=ffebcd]
+\definecolor [bisque]               [h=ffe4c4]
+\definecolor [peachpuff]            [h=ffdab9]
+\definecolor [navajowhite]          [h=ffdead]
+\definecolor [moccasin]             [h=ffe4b5]
+\definecolor [cornsilk]             [h=fff8dc]
+\definecolor [ivory]                [h=fffff0]
+\definecolor [lemonchiffon]         [h=fffacd]
+\definecolor [seashell]             [h=fff5ee]
+\definecolor [honeydew]             [h=f0fff0]
+\definecolor [mintcream]            [h=f5fffa]
+\definecolor [azure]                [h=f0ffff]
+\definecolor [aliceblue]            [h=f0f8ff]
+\definecolor [lavender]             [h=e6e6fa]
+\definecolor [lavenderblush]        [h=fff0f5]
+\definecolor [mistyrose]            [h=ffe4e1]
+\definecolor [white]                [s=1]
+\definecolor [black]                [s=0]
+\definecolor [darkslategray]        [h=2f4f4f]
+\definecolor [darkslategrey]        [darkslategray]
+\definecolor [dimgray]              [s=0.41]
+\definecolor [dimgrey]              [dimgray]
+\definecolor [slategray]            [h=708090]
+\definecolor [slategrey]            [slategray]
+\definecolor [lightslategray]       [h=778899]
+\definecolor [lightslategrey]       [lightslategray]
+\definecolor [gray]                 [s=0.75]
+\definecolor [grey]                 [gray]
+\definecolor [lightgrey]            [s=0.83]
+\definecolor [lightgray]            [lightgrey]
+\definecolor [midnightblue]         [h=191970]
+\definecolor [navy]                 [h=000080]
+\definecolor [navyblue]             [navy]
+\definecolor [cornflowerblue]       [h=6495ed]
+\definecolor [darkslateblue]        [h=483d8b]
+\definecolor [slateblue]            [h=6a5acd]
+\definecolor [mediumslateblue]      [h=7b68ee]
+\definecolor [lightslateblue]       [h=8470ff]
+\definecolor [mediumblue]           [h=0000cd]
+\definecolor [royalblue]            [h=4169e1]
+\definecolor [blue]                 [h=0000ff]
+\definecolor [dodgerblue]           [h=1e90ff]
+\definecolor [deepskyblue]          [h=00bfff]
+\definecolor [skyblue]              [h=87ceeb]
+\definecolor [lightskyblue]         [h=87cefa]
+\definecolor [steelblue]            [h=4682b4]
+\definecolor [lightsteelblue]       [h=b0c4de]
+\definecolor [lightblue]            [h=add8e6]
+\definecolor [powderblue]           [h=b0e0e6]
+\definecolor [paleturquoise]        [h=afeeee]
+\definecolor [darkturquoise]        [h=00ced1]
+\definecolor [mediumturquoise]      [h=48d1cc]
+\definecolor [turquoise]            [h=40e0d0]
+\definecolor [cyan]                 [h=00ffff]
+\definecolor [lightcyan]            [h=e0ffff]
+\definecolor [cadetblue]            [h=5f9ea0]
+\definecolor [mediumaquamarine]     [h=66cdaa]
+\definecolor [aquamarine]           [h=7fffd4]
+\definecolor [darkgreen]            [h=006400]
+\definecolor [darkolivegreen]       [h=556b2f]
+\definecolor [darkseagreen]         [h=8fbc8f]
+\definecolor [seagreen]             [h=2e8b57]
+\definecolor [mediumseagreen]       [h=3cb371]
+\definecolor [lightseagreen]        [h=20b2aa]
+\definecolor [palegreen]            [h=98fb98]
+\definecolor [springgreen]          [h=00ff7f]
+\definecolor [lawngreen]            [h=7cfc00]
+\definecolor [green]                [h=00ff00]
+\definecolor [chartreuse]           [h=7fff00]
+\definecolor [mediumspringgreen]    [h=00fa9a]
+\definecolor [greenyellow]          [h=adff2f]
+\definecolor [limegreen]            [h=32cd32]
+\definecolor [yellowgreen]          [h=9acd32]
+\definecolor [forestgreen]          [h=228b22]
+\definecolor [olivedrab]            [h=6b8e23]
+\definecolor [darkkhaki]            [h=bdb76b]
+\definecolor [khaki]                [h=f0e68c]
+\definecolor [palegoldenrod]        [h=eee8aa]
+\definecolor [lightgoldenrodyellow] [h=fafad2]
+\definecolor [lightyellow]          [h=ffffe0]
+\definecolor [yellow]               [h=ffff00]
+\definecolor [gold]                 [h=ffd700]
+\definecolor [lightgoldenrod]       [h=eedd82]
+\definecolor [goldenrod]            [h=daa520]
+\definecolor [darkgoldenrod]        [h=b8860b]
+\definecolor [rosybrown]            [h=bc8f8f]
+\definecolor [indianred]            [h=cd5c5c]
+\definecolor [saddlebrown]          [h=8b4513]
+\definecolor [sienna]               [h=a0522d]
+\definecolor [peru]                 [h=cd853f]
+\definecolor [burlywood]            [h=deb887]
+\definecolor [beige]                [h=f5f5dc]
+\definecolor [wheat]                [h=f5deb3]
+\definecolor [sandybrown]           [h=f4a460]
+\definecolor [tan]                  [h=d2b48c]
+\definecolor [chocolate]            [h=d2691e]
+\definecolor [firebrick]            [h=b22222]
+\definecolor [brown]                [h=a52a2a]
+\definecolor [darksalmon]           [h=e9967a]
+\definecolor [salmon]               [h=fa8072]
+\definecolor [lightsalmon]          [h=ffa07a]
+\definecolor [orange]               [h=ffa500]
+\definecolor [darkorange]           [h=ff8c00]
+\definecolor [coral]                [h=ff7f50]
+\definecolor [lightcoral]           [h=f08080]
+\definecolor [tomato]               [h=ff6347]
+\definecolor [orangered]            [h=ff4500]
+\definecolor [red]                  [h=ff0000]
+\definecolor [hotpink]              [h=ff69b4]
+\definecolor [deeppink]             [h=ff1493]
+\definecolor [pink]                 [h=ffc0cb]
+\definecolor [lightpink]            [h=ffb6c1]
+\definecolor [palevioletred]        [h=db7093]
+\definecolor [maroon]               [h=b03060]
+\definecolor [mediumvioletred]      [h=c71585]
+\definecolor [violetred]            [h=d02090]
+\definecolor [magenta]              [h=ff00ff]
+\definecolor [violet]               [h=ee82ee]
+\definecolor [plum]                 [h=dda0dd]
+\definecolor [orchid]               [h=da70d6]
+\definecolor [mediumorchid]         [h=ba55d3]
+\definecolor [darkorchid]           [h=9932cc]
+\definecolor [darkviolet]           [h=9400d3]
+\definecolor [blueviolet]           [h=8a2be2]
+\definecolor [purple]               [h=a020f0]
+\definecolor [mediumpurple]         [h=9370db]
+\definecolor [thistle]              [h=d8bfd8]
+\definecolor [snow1]                [h=fffafa]
+\definecolor [snow2]                [h=eee9e9]
+\definecolor [snow3]                [h=cdc9c9]
+\definecolor [snow4]                [h=8b8989]
+\definecolor [seashell1]            [h=fff5ee]
+\definecolor [seashell2]            [h=eee5de]
+\definecolor [seashell3]            [h=cdc5bf]
+\definecolor [seashell4]            [h=8b8682]
+\definecolor [antiquewhite1]        [h=ffefdb]
+\definecolor [antiquewhite2]        [h=eedfcc]
+\definecolor [antiquewhite3]        [h=cdc0b0]
+\definecolor [antiquewhite4]        [h=8b8378]
+\definecolor [bisque1]              [h=ffe4c4]
+\definecolor [bisque2]              [h=eed5b7]
+\definecolor [bisque3]              [h=cdb79e]
+\definecolor [bisque4]              [h=8b7d6b]
+\definecolor [peachpuff1]           [h=ffdab9]
+\definecolor [peachpuff2]           [h=eecbad]
+\definecolor [peachpuff3]           [h=cdaf95]
+\definecolor [peachpuff4]           [h=8b7765]
+\definecolor [navajowhite1]         [h=ffdead]
+\definecolor [navajowhite2]         [h=eecfa1]
+\definecolor [navajowhite3]         [h=cdb38b]
+\definecolor [navajowhite4]         [h=8b795e]
+\definecolor [lemonchiffon1]        [h=fffacd]
+\definecolor [lemonchiffon2]        [h=eee9bf]
+\definecolor [lemonchiffon3]        [h=cdc9a5]
+\definecolor [lemonchiffon4]        [h=8b8970]
+\definecolor [cornsilk1]            [h=fff8dc]
+\definecolor [cornsilk2]            [h=eee8cd]
+\definecolor [cornsilk3]            [h=cdc8b1]
+\definecolor [cornsilk4]            [h=8b8878]
+\definecolor [ivory1]               [h=fffff0]
+\definecolor [ivory2]               [h=eeeee0]
+\definecolor [ivory3]               [h=cdcdc1]
+\definecolor [ivory4]               [h=8b8b83]
+\definecolor [honeydew1]            [h=f0fff0]
+\definecolor [honeydew2]            [h=e0eee0]
+\definecolor [honeydew3]            [h=c1cdc1]
+\definecolor [honeydew4]            [h=838b83]
+\definecolor [lavenderblush1]       [h=fff0f5]
+\definecolor [lavenderblush2]       [h=eee0e5]
+\definecolor [lavenderblush3]       [h=cdc1c5]
+\definecolor [lavenderblush4]       [h=8b8386]
+\definecolor [mistyrose1]           [h=ffe4e1]
+\definecolor [mistyrose2]           [h=eed5d2]
+\definecolor [mistyrose3]           [h=cdb7b5]
+\definecolor [mistyrose4]           [h=8b7d7b]
+\definecolor [azure1]               [h=f0ffff]
+\definecolor [azure2]               [h=e0eeee]
+\definecolor [azure3]               [h=c1cdcd]
+\definecolor [azure4]               [h=838b8b]
+\definecolor [slateblue1]           [h=836fff]
+\definecolor [slateblue2]           [h=7a67ee]
+\definecolor [slateblue3]           [h=6959cd]
+\definecolor [slateblue4]           [h=473c8b]
+\definecolor [royalblue1]           [h=4876ff]
+\definecolor [royalblue2]           [h=436eee]
+\definecolor [royalblue3]           [h=3a5fcd]
+\definecolor [royalblue4]           [h=27408b]
+\definecolor [blue1]                [h=0000ff]
+\definecolor [blue2]                [h=0000ee]
+\definecolor [blue3]                [h=0000cd]
+\definecolor [blue4]                [h=00008b]
+\definecolor [dodgerblue1]          [h=1e90ff]
+\definecolor [dodgerblue2]          [h=1c86ee]
+\definecolor [dodgerblue3]          [h=1874cd]
+\definecolor [dodgerblue4]          [h=104e8b]
+\definecolor [steelblue1]           [h=63b8ff]
+\definecolor [steelblue2]           [h=5cacee]
+\definecolor [steelblue3]           [h=4f94cd]
+\definecolor [steelblue4]           [h=36648b]
+\definecolor [deepskyblue1]         [h=00bfff]
+\definecolor [deepskyblue2]         [h=00b2ee]
+\definecolor [deepskyblue3]         [h=009acd]
+\definecolor [deepskyblue4]         [h=00688b]
+\definecolor [skyblue1]             [h=87ceff]
+\definecolor [skyblue2]             [h=7ec0ee]
+\definecolor [skyblue3]             [h=6ca6cd]
+\definecolor [skyblue4]             [h=4a708b]
+\definecolor [lightskyblue1]        [h=b0e2ff]
+\definecolor [lightskyblue2]        [h=a4d3ee]
+\definecolor [lightskyblue3]        [h=8db6cd]
+\definecolor [lightskyblue4]        [h=607b8b]
+\definecolor [slategray1]           [h=c6e2ff]
+\definecolor [slategray2]           [h=b9d3ee]
+\definecolor [slategray3]           [h=9fb6cd]
+\definecolor [slategray4]           [h=6c7b8b]
+\definecolor [lightsteelblue1]      [h=cae1ff]
+\definecolor [lightsteelblue2]      [h=bcd2ee]
+\definecolor [lightsteelblue3]      [h=a2b5cd]
+\definecolor [lightsteelblue4]      [h=6e7b8b]
+\definecolor [lightblue1]           [h=bfefff]
+\definecolor [lightblue2]           [h=b2dfee]
+\definecolor [lightblue3]           [h=9ac0cd]
+\definecolor [lightblue4]           [h=68838b]
+\definecolor [lightcyan1]           [h=e0ffff]
+\definecolor [lightcyan2]           [h=d1eeee]
+\definecolor [lightcyan3]           [h=b4cdcd]
+\definecolor [lightcyan4]           [h=7a8b8b]
+\definecolor [paleturquoise1]       [h=bbffff]
+\definecolor [paleturquoise2]       [h=aeeeee]
+\definecolor [paleturquoise3]       [h=96cdcd]
+\definecolor [paleturquoise4]       [h=668b8b]
+\definecolor [cadetblue1]           [h=98f5ff]
+\definecolor [cadetblue2]           [h=8ee5ee]
+\definecolor [cadetblue3]           [h=7ac5cd]
+\definecolor [cadetblue4]           [h=53868b]
+\definecolor [turquoise1]           [h=00f5ff]
+\definecolor [turquoise2]           [h=00e5ee]
+\definecolor [turquoise3]           [h=00c5cd]
+\definecolor [turquoise4]           [h=00868b]
+\definecolor [cyan1]                [h=00ffff]
+\definecolor [cyan2]                [h=00eeee]
+\definecolor [cyan3]                [h=00cdcd]
+\definecolor [cyan4]                [h=008b8b]
+\definecolor [darkslategray1]       [h=97ffff]
+\definecolor [darkslategray2]       [h=8deeee]
+\definecolor [darkslategray3]       [h=79cdcd]
+\definecolor [darkslategray4]       [h=528b8b]
+\definecolor [aquamarine1]          [h=7fffd4]
+\definecolor [aquamarine2]          [h=76eec6]
+\definecolor [aquamarine3]          [h=66cdaa]
+\definecolor [aquamarine4]          [h=458b74]
+\definecolor [darkseagreen1]        [h=c1ffc1]
+\definecolor [darkseagreen2]        [h=b4eeb4]
+\definecolor [darkseagreen3]        [h=9bcd9b]
+\definecolor [darkseagreen4]        [h=698b69]
+\definecolor [seagreen1]            [h=54ff9f]
+\definecolor [seagreen2]            [h=4eee94]
+\definecolor [seagreen3]            [h=43cd80]
+\definecolor [seagreen4]            [h=2e8b57]
+\definecolor [palegreen1]           [h=9aff9a]
+\definecolor [palegreen2]           [h=90ee90]
+\definecolor [palegreen3]           [h=7ccd7c]
+\definecolor [palegreen4]           [h=548b54]
+\definecolor [springgreen1]         [h=00ff7f]
+\definecolor [springgreen2]         [h=00ee76]
+\definecolor [springgreen3]         [h=00cd66]
+\definecolor [springgreen4]         [h=008b45]
+\definecolor [green1]               [h=00ff00]
+\definecolor [green2]               [h=00ee00]
+\definecolor [green3]               [h=00cd00]
+\definecolor [green4]               [h=008b00]
+\definecolor [chartreuse1]          [h=7fff00]
+\definecolor [chartreuse2]          [h=76ee00]
+\definecolor [chartreuse3]          [h=66cd00]
+\definecolor [chartreuse4]          [h=458b00]
+\definecolor [olivedrab1]           [h=c0ff3e]
+\definecolor [olivedrab2]           [h=b3ee3a]
+\definecolor [olivedrab3]           [h=9acd32]
+\definecolor [olivedrab4]           [h=698b22]
+\definecolor [darkolivegreen1]      [h=caff70]
+\definecolor [darkolivegreen2]      [h=bcee68]
+\definecolor [darkolivegreen3]      [h=a2cd5a]
+\definecolor [darkolivegreen4]      [h=6e8b3d]
+\definecolor [khaki1]               [h=fff68f]
+\definecolor [khaki2]               [h=eee685]
+\definecolor [khaki3]               [h=cdc673]
+\definecolor [khaki4]               [h=8b864e]
+\definecolor [lightgoldenrod1]      [h=ffec8b]
+\definecolor [lightgoldenrod2]      [h=eedc82]
+\definecolor [lightgoldenrod3]      [h=cdbe70]
+\definecolor [lightgoldenrod4]      [h=8b814c]
+\definecolor [lightyellow1]         [h=ffffe0]
+\definecolor [lightyellow2]         [h=eeeed1]
+\definecolor [lightyellow3]         [h=cdcdb4]
+\definecolor [lightyellow4]         [h=8b8b7a]
+\definecolor [yellow1]              [h=ffff00]
+\definecolor [yellow2]              [h=eeee00]
+\definecolor [yellow3]              [h=cdcd00]
+\definecolor [yellow4]              [h=8b8b00]
+\definecolor [gold1]                [h=ffd700]
+\definecolor [gold2]                [h=eec900]
+\definecolor [gold3]                [h=cdad00]
+\definecolor [gold4]                [h=8b7500]
+\definecolor [goldenrod1]           [h=ffc125]
+\definecolor [goldenrod2]           [h=eeb422]
+\definecolor [goldenrod3]           [h=cd9b1d]
+\definecolor [goldenrod4]           [h=8b6914]
+\definecolor [darkgoldenrod1]       [h=ffb90f]
+\definecolor [darkgoldenrod2]       [h=eead0e]
+\definecolor [darkgoldenrod3]       [h=cd950c]
+\definecolor [darkgoldenrod4]       [h=8b6508]
+\definecolor [rosybrown1]           [h=ffc1c1]
+\definecolor [rosybrown2]           [h=eeb4b4]
+\definecolor [rosybrown3]           [h=cd9b9b]
+\definecolor [rosybrown4]           [h=8b6969]
+\definecolor [indianred1]           [h=ff6a6a]
+\definecolor [indianred2]           [h=ee6363]
+\definecolor [indianred3]           [h=cd5555]
+\definecolor [indianred4]           [h=8b3a3a]
+\definecolor [sienna1]              [h=ff8247]
+\definecolor [sienna2]              [h=ee7942]
+\definecolor [sienna3]              [h=cd6839]
+\definecolor [sienna4]              [h=8b4726]
+\definecolor [burlywood1]           [h=ffd39b]
+\definecolor [burlywood2]           [h=eec591]
+\definecolor [burlywood3]           [h=cdaa7d]
+\definecolor [burlywood4]           [h=8b7355]
+\definecolor [wheat1]               [h=ffe7ba]
+\definecolor [wheat2]               [h=eed8ae]
+\definecolor [wheat3]               [h=cdba96]
+\definecolor [wheat4]               [h=8b7e66]
+\definecolor [tan1]                 [h=ffa54f]
+\definecolor [tan2]                 [h=ee9a49]
+\definecolor [tan3]                 [h=cd853f]
+\definecolor [tan4]                 [h=8b5a2b]
+\definecolor [chocolate1]           [h=ff7f24]
+\definecolor [chocolate2]           [h=ee7621]
+\definecolor [chocolate3]           [h=cd661d]
+\definecolor [chocolate4]           [h=8b4513]
+\definecolor [firebrick1]           [h=ff3030]
+\definecolor [firebrick2]           [h=ee2c2c]
+\definecolor [firebrick3]           [h=cd2626]
+\definecolor [firebrick4]           [h=8b1a1a]
+\definecolor [brown1]               [h=ff4040]
+\definecolor [brown2]               [h=ee3b3b]
+\definecolor [brown3]               [h=cd3333]
+\definecolor [brown4]               [h=8b2323]
+\definecolor [salmon1]              [h=ff8c69]
+\definecolor [salmon2]              [h=ee8262]
+\definecolor [salmon3]              [h=cd7054]
+\definecolor [salmon4]              [h=8b4c39]
+\definecolor [lightsalmon1]         [h=ffa07a]
+\definecolor [lightsalmon2]         [h=ee9572]
+\definecolor [lightsalmon3]         [h=cd8162]
+\definecolor [lightsalmon4]         [h=8b5742]
+\definecolor [orange1]              [h=ffa500]
+\definecolor [orange2]              [h=ee9a00]
+\definecolor [orange3]              [h=cd8500]
+\definecolor [orange4]              [h=8b5a00]
+\definecolor [darkorange1]          [h=ff7f00]
+\definecolor [darkorange2]          [h=ee7600]
+\definecolor [darkorange3]          [h=cd6600]
+\definecolor [darkorange4]          [h=8b4500]
+\definecolor [coral1]               [h=ff7256]
+\definecolor [coral2]               [h=ee6a50]
+\definecolor [coral3]               [h=cd5b45]
+\definecolor [coral4]               [h=8b3e2f]
+\definecolor [tomato1]              [h=ff6347]
+\definecolor [tomato2]              [h=ee5c42]
+\definecolor [tomato3]              [h=cd4f39]
+\definecolor [tomato4]              [h=8b3626]
+\definecolor [orangered1]           [h=ff4500]
+\definecolor [orangered2]           [h=ee4000]
+\definecolor [orangered3]           [h=cd3700]
+\definecolor [orangered4]           [h=8b2500]
+\definecolor [red1]                 [h=ff0000]
+\definecolor [red2]                 [h=ee0000]
+\definecolor [red3]                 [h=cd0000]
+\definecolor [red4]                 [h=8b0000]
+\definecolor [debianred]            [h=d70751]
+\definecolor [deeppink1]            [h=ff1493]
+\definecolor [deeppink2]            [h=ee1289]
+\definecolor [deeppink3]            [h=cd1076]
+\definecolor [deeppink4]            [h=8b0a50]
+\definecolor [hotpink1]             [h=ff6eb4]
+\definecolor [hotpink2]             [h=ee6aa7]
+\definecolor [hotpink3]             [h=cd6090]
+\definecolor [hotpink4]             [h=8b3a62]
+\definecolor [pink1]                [h=ffb5c5]
+\definecolor [pink2]                [h=eea9b8]
+\definecolor [pink3]                [h=cd919e]
+\definecolor [pink4]                [h=8b636c]
+\definecolor [lightpink1]           [h=ffaeb9]
+\definecolor [lightpink2]           [h=eea2ad]
+\definecolor [lightpink3]           [h=cd8c95]
+\definecolor [lightpink4]           [h=8b5f65]
+\definecolor [palevioletred1]       [h=ff82ab]
+\definecolor [palevioletred2]       [h=ee799f]
+\definecolor [palevioletred3]       [h=cd6889]
+\definecolor [palevioletred4]       [h=8b475d]
+\definecolor [maroon1]              [h=ff34b3]
+\definecolor [maroon2]              [h=ee30a7]
+\definecolor [maroon3]              [h=cd2990]
+\definecolor [maroon4]              [h=8b1c62]
+\definecolor [violetred1]           [h=ff3e96]
+\definecolor [violetred2]           [h=ee3a8c]
+\definecolor [violetred3]           [h=cd3278]
+\definecolor [violetred4]           [h=8b2252]
+\definecolor [magenta1]             [h=ff00ff]
+\definecolor [magenta2]             [h=ee00ee]
+\definecolor [magenta3]             [h=cd00cd]
+\definecolor [magenta4]             [h=8b008b]
+\definecolor [orchid1]              [h=ff83fa]
+\definecolor [orchid2]              [h=ee7ae9]
+\definecolor [orchid3]              [h=cd69c9]
+\definecolor [orchid4]              [h=8b4789]
+\definecolor [plum1]                [h=ffbbff]
+\definecolor [plum2]                [h=eeaeee]
+\definecolor [plum3]                [h=cd96cd]
+\definecolor [plum4]                [h=8b668b]
+\definecolor [mediumorchid1]        [h=e066ff]
+\definecolor [mediumorchid2]        [h=d15fee]
+\definecolor [mediumorchid3]        [h=b452cd]
+\definecolor [mediumorchid4]        [h=7a378b]
+\definecolor [darkorchid1]          [h=bf3eff]
+\definecolor [darkorchid2]          [h=b23aee]
+\definecolor [darkorchid3]          [h=9a32cd]
+\definecolor [darkorchid4]          [h=68228b]
+\definecolor [purple1]              [h=9b30ff]
+\definecolor [purple2]              [h=912cee]
+\definecolor [purple3]              [h=7d26cd]
+\definecolor [purple4]              [h=551a8b]
+\definecolor [mediumpurple1]        [h=ab82ff]
+\definecolor [mediumpurple2]        [h=9f79ee]
+\definecolor [mediumpurple3]        [h=8968cd]
+\definecolor [mediumpurple4]        [h=5d478b]
+\definecolor [thistle1]             [h=ffe1ff]
+\definecolor [thistle2]             [h=eed2ee]
+\definecolor [thistle3]             [h=cdb5cd]
+\definecolor [thistle4]             [h=8b7b8b]
+\definecolor [gray0]                [s=0.00]
+\definecolor [grey0]                [gray0]
+\definecolor [gray1]                [s=0.01]
+\definecolor [grey1]                [gray1]
+\definecolor [gray2]                [s=0.02]
+\definecolor [grey2]                [gray2]
+\definecolor [gray3]                [s=0.03]
+\definecolor [grey3]                [gray3]
+\definecolor [gray4]                [s=0.04]
+\definecolor [grey4]                [gray4]
+\definecolor [gray5]                [s=0.05]
+\definecolor [grey5]                [gray5]
+\definecolor [gray6]                [s=0.06]
+\definecolor [grey6]                [gray6]
+\definecolor [gray7]                [s=0.07]
+\definecolor [grey7]                [gray7]
+\definecolor [gray8]                [s=0.08]
+\definecolor [grey8]                [gray8]
+\definecolor [gray9]                [s=0.09]
+\definecolor [grey9]                [gray9]
+\definecolor [gray10]               [s=0.10]
+\definecolor [grey10]               [gray10]
+\definecolor [gray11]               [s=0.11]
+\definecolor [grey11]               [gray11]
+\definecolor [gray12]               [s=0.12]
+\definecolor [grey12]               [gray12]
+\definecolor [gray13]               [s=0.13]
+\definecolor [grey13]               [gray13]
+\definecolor [gray14]               [s=0.14]
+\definecolor [grey14]               [gray14]
+\definecolor [gray15]               [s=0.15]
+\definecolor [grey15]               [gray15]
+\definecolor [gray16]               [s=0.16]
+\definecolor [grey16]               [gray16]
+\definecolor [gray17]               [s=0.17]
+\definecolor [grey17]               [gray17]
+\definecolor [gray18]               [s=0.18]
+\definecolor [grey18]               [gray18]
+\definecolor [gray19]               [s=0.19]
+\definecolor [grey19]               [gray19]
+\definecolor [gray20]               [s=0.20]
+\definecolor [grey20]               [gray20]
+\definecolor [gray21]               [s=0.21]
+\definecolor [grey21]               [gray21]
+\definecolor [gray22]               [s=0.22]
+\definecolor [grey22]               [gray22]
+\definecolor [gray23]               [s=0.23]
+\definecolor [grey23]               [gray23]
+\definecolor [gray24]               [s=0.24]
+\definecolor [grey24]               [gray24]
+\definecolor [gray25]               [s=0.25]
+\definecolor [grey25]               [gray25]
+\definecolor [gray26]               [s=0.26]
+\definecolor [grey26]               [gray26]
+\definecolor [gray27]               [s=0.27]
+\definecolor [grey27]               [gray27]
+\definecolor [gray28]               [s=0.28]
+\definecolor [grey28]               [gray28]
+\definecolor [gray29]               [s=0.29]
+\definecolor [grey29]               [gray29]
+\definecolor [gray30]               [s=0.30]
+\definecolor [grey30]               [gray30]
+\definecolor [gray31]               [s=0.31]
+\definecolor [grey31]               [gray31]
+\definecolor [gray32]               [s=0.32]
+\definecolor [grey32]               [gray32]
+\definecolor [gray33]               [s=0.33]
+\definecolor [grey33]               [gray33]
+\definecolor [gray34]               [s=0.34]
+\definecolor [grey34]               [gray34]
+\definecolor [gray35]               [s=0.35]
+\definecolor [grey35]               [gray35]
+\definecolor [gray36]               [s=0.36]
+\definecolor [grey36]               [gray36]
+\definecolor [gray37]               [s=0.37]
+\definecolor [grey37]               [gray37]
+\definecolor [gray38]               [s=0.38]
+\definecolor [grey38]               [gray38]
+\definecolor [gray39]               [s=0.39]
+\definecolor [grey39]               [gray39]
+\definecolor [gray40]               [s=0.40]
+\definecolor [grey40]               [gray40]
+\definecolor [gray41]               [s=0.41]
+\definecolor [grey41]               [gray41]
+\definecolor [gray42]               [s=0.42]
+\definecolor [grey42]               [gray42]
+\definecolor [gray43]               [s=0.43]
+\definecolor [grey43]               [gray43]
+\definecolor [gray44]               [s=0.44]
+\definecolor [grey44]               [gray44]
+\definecolor [gray45]               [s=0.45]
+\definecolor [grey45]               [gray45]
+\definecolor [gray46]               [s=0.46]
+\definecolor [grey46]               [gray46]
+\definecolor [gray47]               [s=0.47]
+\definecolor [grey47]               [gray47]
+\definecolor [gray48]               [s=0.48]
+\definecolor [grey48]               [gray48]
+\definecolor [gray49]               [s=0.49]
+\definecolor [grey49]               [gray49]
+\definecolor [gray50]               [s=0.50]
+\definecolor [grey50]               [gray50]
+\definecolor [gray51]               [s=0.51]
+\definecolor [grey51]               [gray51]
+\definecolor [gray52]               [s=0.52]
+\definecolor [grey52]               [gray52]
+\definecolor [gray53]               [s=0.53]
+\definecolor [grey53]               [gray53]
+\definecolor [gray54]               [s=0.54]
+\definecolor [grey54]               [gray54]
+\definecolor [gray55]               [s=0.55]
+\definecolor [grey55]               [gray55]
+\definecolor [gray56]               [s=0.56]
+\definecolor [grey56]               [gray56]
+\definecolor [gray57]               [s=0.57]
+\definecolor [grey57]               [gray57]
+\definecolor [gray58]               [s=0.58]
+\definecolor [grey58]               [gray58]
+\definecolor [gray59]               [s=0.59]
+\definecolor [grey59]               [gray59]
+\definecolor [gray60]               [s=0.60]
+\definecolor [grey60]               [gray60]
+\definecolor [gray61]               [s=0.61]
+\definecolor [grey61]               [gray61]
+\definecolor [gray62]               [s=0.62]
+\definecolor [grey62]               [gray62]
+\definecolor [gray63]               [s=0.63]
+\definecolor [grey63]               [gray63]
+\definecolor [gray64]               [s=0.64]
+\definecolor [grey64]               [gray64]
+\definecolor [gray65]               [s=0.65]
+\definecolor [grey65]               [gray65]
+\definecolor [gray66]               [s=0.66]
+\definecolor [grey66]               [gray66]
+\definecolor [gray67]               [s=0.67]
+\definecolor [grey67]               [gray67]
+\definecolor [gray68]               [s=0.68]
+\definecolor [grey68]               [gray68]
+\definecolor [gray69]               [s=0.69]
+\definecolor [grey69]               [gray69]
+\definecolor [gray70]               [s=0.70]
+\definecolor [grey70]               [gray70]
+\definecolor [gray71]               [s=0.71]
+\definecolor [grey71]               [gray71]
+\definecolor [gray72]               [s=0.72]
+\definecolor [grey72]               [gray72]
+\definecolor [gray73]               [s=0.73]
+\definecolor [grey73]               [gray73]
+\definecolor [gray74]               [s=0.74]
+\definecolor [grey74]               [gray74]
+\definecolor [gray75]               [s=0.75]
+\definecolor [grey75]               [gray75]
+\definecolor [gray76]               [s=0.76]
+\definecolor [grey76]               [gray76]
+\definecolor [gray77]               [s=0.77]
+\definecolor [grey77]               [gray77]
+\definecolor [gray78]               [s=0.78]
+\definecolor [grey78]               [gray78]
+\definecolor [gray79]               [s=0.79]
+\definecolor [grey79]               [gray79]
+\definecolor [gray80]               [s=0.80]
+\definecolor [grey80]               [gray80]
+\definecolor [gray81]               [s=0.81]
+\definecolor [grey81]               [gray81]
+\definecolor [gray82]               [s=0.82]
+\definecolor [grey82]               [gray82]
+\definecolor [gray83]               [s=0.83]
+\definecolor [grey83]               [gray83]
+\definecolor [gray84]               [s=0.84]
+\definecolor [grey84]               [gray84]
+\definecolor [gray85]               [s=0.85]
+\definecolor [grey85]               [gray85]
+\definecolor [gray86]               [s=0.86]
+\definecolor [grey86]               [gray86]
+\definecolor [gray87]               [s=0.87]
+\definecolor [grey87]               [gray87]
+\definecolor [gray88]               [s=0.88]
+\definecolor [grey88]               [gray88]
+\definecolor [gray89]               [s=0.89]
+\definecolor [grey89]               [gray89]
+\definecolor [gray90]               [s=0.90]
+\definecolor [grey90]               [gray90]
+\definecolor [gray91]               [s=0.91]
+\definecolor [grey91]               [gray91]
+\definecolor [gray92]               [s=0.92]
+\definecolor [grey92]               [gray92]
+\definecolor [gray93]               [s=0.93]
+\definecolor [grey93]               [gray93]
+\definecolor [gray94]               [s=0.94]
+\definecolor [grey94]               [gray94]
+\definecolor [gray95]               [s=0.95]
+\definecolor [grey95]               [gray95]
+\definecolor [gray96]               [s=0.96]
+\definecolor [grey96]               [gray96]
+\definecolor [gray97]               [s=0.97]
+\definecolor [grey97]               [gray97]
+\definecolor [gray98]               [s=0.98]
+\definecolor [grey98]               [gray98]
+\definecolor [gray99]               [s=0.99]
+\definecolor [grey99]               [gray99]
+\definecolor [gray100]              [s=1.00]
+\definecolor [grey100]              [gray100]
+\definecolor [darkgrey]             [s=0.66]
+\definecolor [darkgray]             [darkgrey]
+\definecolor [darkblue]             [h=00008b]
+\definecolor [darkcyan]             [h=008b8b]
+\definecolor [darkmagenta]          [h=8b008b]
+\definecolor [darkred]              [h=8b0000]
+\definecolor [lightgreen]           [h=90ee90]
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/colo-xwi.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/colo-xwi.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/colo-xwi.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,143 @@
+%D \module
+%D   [       file=colo-xwi,
+%D        version=1995.01.01,
+%D          title=\CONTEXT\ Color Macros,
+%D       subtitle=X Windows,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D I've forgotten where I got these definitions from, but maybe
+%D they can be of use. Watch out, these colors are in the rgb
+%D color space, so cyan is not defined in cmyk!
+
+\definecolor [aliceblue]            [r=0.94,g=0.97,b=1.00]
+\definecolor [antiquewhite]         [r=0.98,g=0.92,b=0.84]
+\definecolor [aquamarine]           [r=0.50,g=1.00,b=0.83]
+\definecolor [azure]                [r=0.94,g=1.00,b=1.00]
+\definecolor [beige]                [r=0.96,g=0.96,b=0.86]
+\definecolor [bisque]               [r=1.00,g=0.89,b=0.77]
+\definecolor [black]                [s=0] % [r=0.00,g=0.00,b=0.00]
+\definecolor [blanchedalmond]       [r=1.00,g=0.92,b=0.80]
+\definecolor [blue]                 [r=0.00,g=0.00,b=1.00]
+\definecolor [blueviolet]           [r=0.54,g=0.17,b=0.89]
+\definecolor [brown]                [r=0.65,g=0.16,b=0.16]
+\definecolor [burlywood]            [r=0.87,g=0.72,b=0.53]
+\definecolor [cadetblue]            [r=0.37,g=0.62,b=0.63]
+\definecolor [chartreuse]           [r=0.50,g=1.00,b=0.00]
+\definecolor [chocolate]            [r=0.82,g=0.41,b=0.12]
+\definecolor [coral]                [r=1.00,g=0.50,b=0.31]
+\definecolor [cornflowerblue]       [r=0.39,g=0.58,b=0.93]
+\definecolor [cornsilk]             [r=1.00,g=0.97,b=0.86]
+\definecolor [cyan]                 [r=0.00,g=1.00,b=1.00]
+\definecolor [darkgoldenrod]        [r=0.72,g=0.53,b=0.04]
+\definecolor [darkgreen]            [r=0.00,g=0.39,b=0.00]
+\definecolor [darkkhaki]            [r=0.74,g=0.72,b=0.42]
+\definecolor [darkolivegreen]       [r=0.33,g=0.42,b=0.18]
+\definecolor [darkorange]           [r=1.00,g=0.55,b=0.00]
+\definecolor [darkorchid]           [r=0.60,g=0.20,b=0.80]
+\definecolor [darksalmon]           [r=0.91,g=0.59,b=0.48]
+\definecolor [darkseagreen]         [r=0.56,g=0.74,b=0.56]
+\definecolor [darkslateblue]        [r=0.28,g=0.24,b=0.55]
+\definecolor [darkturquoise]        [r=0.00,g=0.81,b=0.82]
+\definecolor [darkviolet]           [r=0.58,g=0.00,b=0.83]
+\definecolor [deeppink]             [r=1.00,g=0.08,b=0.58]
+\definecolor [deepskyblue]          [r=0.00,g=0.75,b=1.00]
+\definecolor [dodgerblue]           [r=0.12,g=0.56,b=1.00]
+\definecolor [firebrick]            [r=0.70,g=0.13,b=0.13]
+\definecolor [floralwhite]          [r=1.00,g=0.98,b=0.94]
+\definecolor [forestgreen]          [r=0.13,g=0.55,b=0.13]
+\definecolor [gainsboro]            [r=0.86,g=0.86,b=0.86]
+\definecolor [ghostwhite]           [r=0.97,g=0.97,b=1.00]
+\definecolor [gold]                 [r=1.00,g=0.84,b=0.00]
+\definecolor [goldenrod]            [r=0.85,g=0.65,b=0.13]
+\definecolor [green]                [r=0.00,g=1.00,b=0.00]
+\definecolor [greenyellow]          [r=0.68,g=1.00,b=0.18]
+\definecolor [honeydew]             [r=0.94,g=1.00,b=0.94]
+\definecolor [hotpink]              [r=1.00,g=0.41,b=0.71]
+\definecolor [indianred]            [r=0.80,g=0.36,b=0.36]
+\definecolor [ivory]                [r=1.00,g=1.00,b=0.94]
+\definecolor [khaki]                [r=0.94,g=0.90,b=0.55]
+\definecolor [lavender]             [r=0.90,g=0.90,b=0.98]
+\definecolor [lavenderblush]        [r=1.00,g=0.94,b=0.96]
+\definecolor [lawngreen]            [r=0.49,g=0.99,b=0.00]
+\definecolor [lemonchiffon]         [r=1.00,g=0.98,b=0.80]
+\definecolor [lightblue]            [r=0.68,g=0.85,b=0.90]
+\definecolor [lightcoral]           [r=0.94,g=0.50,b=0.50]
+\definecolor [lightcyan]            [r=0.88,g=1.00,b=1.00]
+\definecolor [lightgoldenrod]       [r=0.93,g=0.87,b=0.51]
+\definecolor [lightgoldenrodyellow] [r=0.98,g=0.98,b=0.82]
+\definecolor [lightpink]            [r=1.00,g=0.71,b=0.76]
+\definecolor [lightsalmon]          [r=1.00,g=0.63,b=0.48]
+\definecolor [lightseagreen]        [r=0.13,g=0.70,b=0.67]
+\definecolor [lightskyblue]         [r=0.53,g=0.81,b=0.98]
+\definecolor [lightslateblue]       [r=0.52,g=0.44,b=1.00]
+\definecolor [lightsteelblue]       [r=0.69,g=0.77,b=0.87]
+\definecolor [lightyellow]          [r=1.00,g=1.00,b=0.88]
+\definecolor [limegreen]            [r=0.20,g=0.80,b=0.20]
+\definecolor [linen]                [r=0.98,g=0.94,b=0.90]
+\definecolor [magenta]              [r=1.00,g=0.00,b=1.00]
+\definecolor [maroon]               [r=0.69,g=0.19,b=0.38]
+\definecolor [mediumaquamarine]     [r=0.40,g=0.80,b=0.67]
+\definecolor [mediumblue]           [r=0.00,g=0.00,b=0.80]
+\definecolor [mediumorchid]         [r=0.73,g=0.33,b=0.83]
+\definecolor [mediumpurple]         [r=0.58,g=0.44,b=0.86]
+\definecolor [mediumseagreen]       [r=0.24,g=0.70,b=0.44]
+\definecolor [mediumslateblue]      [r=0.48,g=0.41,b=0.93]
+\definecolor [mediumspringgreen]    [r=0.00,g=0.98,b=0.60]
+\definecolor [mediumturquoise]      [r=0.28,g=0.82,b=0.80]
+\definecolor [mediumvioletred]      [r=0.78,g=0.08,b=0.52]
+\definecolor [midnightblue]         [r=0.10,g=0.10,b=0.44]
+\definecolor [mintcream]            [r=0.96,g=1.00,b=0.98]
+\definecolor [mistyrose]            [r=1.00,g=0.89,b=0.88]
+\definecolor [moccasin]             [r=1.00,g=0.89,b=0.71]
+\definecolor [navajowhite]          [r=1.00,g=0.87,b=0.68]
+\definecolor [navy]                 [r=0.00,g=0.00,b=0.50]
+\definecolor [navyblue]             [r=0.00,g=0.00,b=0.50]
+\definecolor [oldlace]              [r=0.99,g=0.96,b=0.90]
+\definecolor [olivedrab]            [r=0.42,g=0.56,b=0.14]
+\definecolor [orange]               [r=1.00,g=0.65,b=0.00]
+\definecolor [orangered]            [r=1.00,g=0.27,b=0.00]
+\definecolor [orchid]               [r=0.85,g=0.44,b=0.84]
+\definecolor [palegoldenrod]        [r=0.93,g=0.91,b=0.67]
+\definecolor [palegreen]            [r=0.60,g=0.98,b=0.60]
+\definecolor [paleturquoise]        [r=0.69,g=0.93,b=0.93]
+\definecolor [palevioletred]        [r=0.86,g=0.44,b=0.58]
+\definecolor [papayawhip]           [r=1.00,g=0.94,b=0.84]
+\definecolor [peachpuff]            [r=1.00,g=0.85,b=0.73]
+\definecolor [peru]                 [r=0.80,g=0.52,b=0.25]
+\definecolor [pink]                 [r=1.00,g=0.75,b=0.80]
+\definecolor [plum]                 [r=0.87,g=0.63,b=0.87]
+\definecolor [powderblue]           [r=0.69,g=0.88,b=0.90]
+\definecolor [purple]               [r=0.63,g=0.13,b=0.94]
+\definecolor [red ]                 [r=1.00,g=0.00,b=0.00]
+\definecolor [rosybrown]            [r=0.74,g=0.56,b=0.56]
+\definecolor [royalblue]            [r=0.25,g=0.41,b=0.88]
+\definecolor [saddlebrown]          [r=0.55,g=0.27,b=0.07]
+\definecolor [salmon]               [r=0.98,g=0.50,b=0.45]
+\definecolor [sandybrown]           [r=0.96,g=0.64,b=0.38]
+\definecolor [seagreen]             [r=0.18,g=0.55,b=0.34]
+\definecolor [seashell]             [r=1.00,g=0.96,b=0.93]
+\definecolor [sienna]               [r=0.63,g=0.32,b=0.18]
+\definecolor [skyblue]              [r=0.53,g=0.81,b=0.92]
+\definecolor [slateblue]            [r=0.42,g=0.35,b=0.80]
+\definecolor [snow]                 [r=1.00,g=0.98,b=0.98]
+\definecolor [springgreen]          [r=0.00,g=1.00,b=0.50]
+\definecolor [steelblue]            [r=0.27,g=0.51,b=0.71]
+\definecolor [tancolor]             [r=0.82,g=0.71,b=0.55] % we don't want it to clash
+\definecolor [thistle]              [r=0.85,g=0.75,b=0.85]
+\definecolor [tomato]               [r=1.00,g=0.39,b=0.28]
+\definecolor [turquoise]            [r=0.25,g=0.88,b=0.82]
+\definecolor [violet]               [r=0.93,g=0.51,b=0.93]
+\definecolor [violetred]            [r=0.82,g=0.13,b=0.56]
+\definecolor [wheat]                [r=0.96,g=0.87,b=0.70]
+\definecolor [white]                [r=1.00,g=1.00,b=1.00]
+\definecolor [whitesmoke]           [s=0.96] % [r=0.96,g=0.96,b=0.96]
+\definecolor [yellow]               [r=1.00,g=1.00,b=0.00]
+\definecolor [yellowgreen]          [r=0.60,g=0.80,b=0.20]
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/cont-cs.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/cont-cs.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/cont-cs.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,21 @@
+%D \module
+%D   [       file=cont-cs,
+%D        version=1998.12.02,
+%D          title=\CONTEXT,
+%D       subtitle=\CONTEXT\ Czech Format Generation,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\catcode`\{=1 \catcode`\}=2
+
+\def\defaultinterface  {czech}
+\def\defaultlanguagetag{cs}
+
+\input context.mkii
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/cont-de.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/cont-de.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/cont-de.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,21 @@
+%D \module
+%D   [       file=cont-de,
+%D        version=1997.08.19,
+%D          title=\CONTEXT,
+%D       subtitle=\CONTEXT\ German Format Generation,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\catcode`\{=1 \catcode`\}=2
+
+\def\defaultinterface  {german}
+\def\defaultlanguagetag{de}
+
+\input context.mkii
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/cont-en.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/cont-en.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/cont-en.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,21 @@
+%D \module
+%D   [       file=cont-en,
+%D        version=1997.08.19,
+%D          title=\CONTEXT,
+%D       subtitle=\CONTEXT\ English Format Generation,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\catcode`\{=1 \catcode`\}=2
+
+\def\defaultinterface  {english}
+\def\defaultlanguagetag{en}
+
+\input context.mkii
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/cont-err.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/cont-err.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/cont-err.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,18 @@
+%D \module
+%D   [       file=cont-err,
+%D        version=2003.08.12,
+%D          title=\CONTEXT\ System Files,
+%D       subtitle=Just A warning,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\writestatus\m!systems{no file 'cont-sys.tex', using 'cont-sys.rme' instead}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/cont-fil.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/cont-fil.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/cont-fil.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,131 @@
+%D \module
+%D   [       file=cont-fil,
+%D        version=1997.11.15,
+%D          title=\CONTEXT\ Miscellaneous Macros,
+%D       subtitle=File Synonyms,
+%D         author=J. Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt File Synonyms}
+
+\definefilesynonym [chemie]          [chemic]
+\definefilesynonym [chemics]         [chemic]
+
+\definefilesynonym [unit]            [units]
+\definefilesynonym [eenheid]         [units]
+\definefilesynonym [einheit]         [units]
+
+\definefilesynonym [pstric]          [pstricks]
+\definefilesynonym [pstrick]         [pstricks]
+
+\definefilesynonym [finance]         [financ]
+
+\definefilesynonym [con-01]          [contml] % will go away
+
+%definefilesynonym [sch-base]        [sch-00]
+%definefilesynonym [sch-make]        [sch-01]
+
+\definefilesynonym [dir-make]        [dir-01]
+\definefilesynonym [dir-identify]    [dir-05]
+
+\definefilesynonym [xml-format]      [xml-01]
+\definefilesynonym [xml-pretty]      [xml-02]
+\definefilesynonym [xml-analyze]     [xml-11]
+
+\definefilesynonym [int-load]        [set-11]
+\definefilesynonym [int-make]        [set-12]
+
+\definefilesynonym [fig-base]        [fig-00]
+\definefilesynonym [fig-make]        [fig-01]
+\definefilesynonym [fig-fake]        [fig-02]
+\definefilesynonym [fig-missing]     [fig-06]
+
+\definefilesynonym [exi-interface]   [exi-21]
+
+\definefilesynonym [res-make]        [res-01]
+\definefilesynonym [res-base]        [res-04]
+\definefilesynonym [res-crop]        [res-07]
+\definefilesynonym [res-trace]       [res-08]
+\definefilesynonym [res-log]         [res-09]
+\definefilesynonym [res-identify]    [res-12]
+
+\definefilesynonym [med-show]        [res-50]
+
+\definefilesynonym [pre-general]     [pre-00]
+
+\definefilesynonym [pre-original]    [pre-01]
+\definefilesynonym [pre-green]       [pre-02]
+\definefilesynonym [pre-funny]       [pre-03]
+\definefilesynonym [pre-colorful]    [pre-04]
+\definefilesynonym [pre-fuzzy]       [pre-05]
+\definefilesynonym [pre-polish]      [pre-06]
+\definefilesynonym [pre-spider]      [pre-07]
+\definefilesynonym [pre-wonder]      [pre-08]
+\definefilesynonym [pre-windows]     [pre-09]
+\definefilesynonym [pre-grow]        [pre-10]
+\definefilesynonym [pre-stack]       [pre-11]
+\definefilesynonym [pre-arrows]      [pre-12]
+\definefilesynonym [pre-writing]     [pre-13]
+\definefilesynonym [pre-split]       [pre-14]
+\definefilesynonym [pre-balls]       [pre-15]
+\definefilesynonym [pre-knot]        [pre-16]
+\definefilesynonym [pre-weird]       [pre-17]
+\definefilesynonym [pre-shade]       [pre-18]
+\definefilesynonym [pre-organic]     [pre-19]
+\definefilesynonym [pre-speckle]     [pre-20]
+\definefilesynonym [pre-zoom]        [pre-21]
+\definefilesynonym [pre-cycle]       [pre-22]
+\definefilesynonym [pre-super]       [pre-23]
+
+%definefilesynonym [pre-more]        [pre-24]
+%definefilesynonym [pre-more]        [pre-25]
+
+\definefilesynonym [pre-more]        [pre-26]
+
+%definefilesynonym [pre-more]        [pre-27]
+%definefilesynonym [pre-more]        [pre-28]
+%definefilesynonym [pre-more]        [pre-29]
+%definefilesynonym [pre-more]        [pre-30]
+
+\definefilesynonym [pre-stepwise]    [pre-60]
+\definefilesynonym [pre-stepper]     [pre-61]
+
+\definefilesynonym [pre-punk]        [pre-70]
+\definefilesynonym [pre-random]      [pre-71]
+
+\definefilesynonym [abr-pseudocaps]  [abr-01]
+\definefilesynonym [abr-smallcaps]   [abr-02]
+\definefilesynonym [abr-03]          [abr-01]
+\definefilesynonym [abr-04]          [abr-01]
+
+\definefilesynonym [chinese]         [chi-00]
+\definefilesynonym [japanese]        [jap-00]
+
+%definefilesynonym [chi-simplified]  [chi-01]
+%definefilesynonym [chi-traditional] [chi-02]
+
+\definefilesynonym [greek]           [grk-00]
+
+\definefilesynonym [unic-chi]        [unic-cjk]
+\definefilesynonym [unic-jap]        [unic-cjk]
+
+%definefilesynonym [practexjournal]  [ptj-01]
+\definefilesynonym [pracjourn]       [ptj-01]
+
+\definefilesynonym [maps]            [map-10]
+\definefilesynonym [map-se]          [map-10] % for some time
+
+\definefilesynonym [mml]             [mathml]
+\definefilesynonym [cml]             [chemml]
+
+\definefilesynonym [letter]          [cor-01]
+\definefilesynonym [memo]            [cor-02]
+
+\definefilesynonym [syn-01]          [syntax]
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/cont-fr.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/cont-fr.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/cont-fr.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,21 @@
+%D \module
+%D   [       file=cont-de,
+%D        version=1997.08.19,
+%D          title=\CONTEXT,
+%D       subtitle=\CONTEXT\ French Format Generation,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\catcode`\{=1 \catcode`\}=2
+
+\def\defaultinterface  {french}
+\def\defaultlanguagetag{fr}
+
+\input context.mkii
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/cont-gb.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/cont-gb.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/cont-gb.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,21 @@
+%D \module
+%D   [       file=cont-uk,
+%D        version=1997.08.19,
+%D          title=\CONTEXT,
+%D       subtitle=\CONTEXT\ English Format Generation,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\catcode`\{=1 \catcode`\}=2
+
+\def\defaultinterface  {english}
+\def\defaultlanguagetag{gb}
+
+\input context.mkii
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/cont-it.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/cont-it.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/cont-it.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,21 @@
+%D \module
+%D   [       file=cont-it,
+%D        version=1997.08.19,
+%D          title=\CONTEXT,
+%D       subtitle=\CONTEXT\ Italian Format Generation,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\catcode`\{=1 \catcode`\}=2
+
+\def\defaultinterface  {italian}
+\def\defaultlanguagetag{it}
+
+\input context.mkii
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/cont-log.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/cont-log.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/cont-log.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,304 @@
+%D \module
+%D   [       file=cont-log,
+%D        version=1995.10.10,
+%D          title=\CONTEXT\ Miscellaneous Macros,
+%D       subtitle=\TEX\ Logos,
+%D         author=J. Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt TeX Logos}
+
+%D The system that is used to typeset this text is called \TEX,
+%D typeset with an lowered~E. From te beginning of \TEX,
+%D authors of macro packages adapted this raising and lowering
+%D style. In this module we define some of those logos.
+
+%D The Computer Modern detection hack is gone as we now have Latin
+%D Modern which has more kerning pairs.
+
+\unprotect
+
+\def\Mkern#1%
+  {{\setbox\scratchbox\hbox{M}\kern#1\wd\scratchbox}}
+
+\unexpanded\def\TeX
+  {T%
+   \Mkern{-.1667}\lower.5ex\hbox{E}%
+   \Mkern{-.125}X}
+
+\unexpanded\def\ConTeXt{Con\TeX t}
+\unexpanded\def\PPCHTeX{ppch\TeX}
+\unexpanded\def\PRAGMA {Pragma ADE}
+
+\unexpanded\def\LaTeX % requested by erik frambach
+  {{\setbox\scratchbox\hbox{L}%
+    \scratchdimen\ht\scratchbox
+    \setbox\scratchbox\hbox{\txx A}%
+    L\kern-.55\wd\scratchbox
+    \raise\scratchdimen\hbox{\lower\ht\scratchbox\copy\scratchbox}%
+    \kern-.2\wd\scratchbox\TeX}}
+
+\unexpanded\def\TaBlE
+  {T%
+   \kern-.27em\lower.5ex\hbox{A}%
+   \kern-.18emB%
+   \kern-.1em\lower.5ex\hbox{L}%
+   \kern-.075emE}
+
+\unexpanded\def\PiCTeX
+  {P%
+   \kern-.12em\lower.5ex\hbox{I}%
+   \kern-.075em C%
+   \kern-.11em\TeX}
+
+\def\AMSswitch#1%
+  {$\cal\ifdim\bodyfontsize>1.1em\scriptstyle\fi#1$}
+
+\unexpanded\def\AmSTeX
+  {\AMSswitch A%
+   \kern-.1667em\lower.5ex\hbox{\AMSswitch M}%
+   \kern-.125em\AMSswitch S%
+   -\TeX}
+
+\unexpanded\def\LamSTeX
+  {L%
+   \kern-.4em\raise.3ex\hbox{\AMSswitch A}%
+   \kern-.25em\lower.4ex\hbox{\AMSswitch M}%
+   \kern-.1em{\AMSswitch S}%
+   -\TeX}
+
+\unexpanded\def\AmSLaTeX
+  {\AMSswitch A%
+   \kern-.1667em\lower.5ex\hbox{\AMSswitch M}%
+   \kern-.125em\AMSswitch S%
+   -\LaTeX}
+
+%D Alternative \CONTEXT\ logo, first Idris S.~Hamid's version:
+%D
+%D \def\Context
+%D   {{\sc C\kern -.0667emo\kern -.0667emn\kern -.0549emt\kern
+%D    -.1667em\lower.5ex\hbox {e}\kern -.125emx\kern -.0549emt}}
+%D
+%D I changed this into one that adapts itself:
+
+\unexpanded\def\Context
+  {{C\kern -.0667em\getscaledglyph{.8}\empty{O\kern -.0667emN\kern
+   -.0549emT\doifitalicelse{\kern-.1em}{\kern-.1667em}\lower.5ex\hbox
+   {E}\doifitalicelse\empty{\kern-.11em}X\kern-.055emT}}}
+
+%D The \METAFONT\ and \METAPOST\ logos adapt themselves to the
+%D current fontsize, an ugly but usefull hack.
+
+% rather hard coded
+%
+% \loadmapfile[original-base.map] % \loadmapfile[original-vogel-symbol]
+%
+% \unexpanded\def\setMFPfont
+%   {\font\logofont=logo%
+%      \ifnum\fam=\bffam\c!bf\else
+%      \ifnum\fam=\slfam\c!sl\else
+%      \ifnum\fam=\itfam\c!sl\else
+%      \ifnum\fam=\bsfam\c!bf\else
+%      \ifnum\fam=\bifam\c!bf\else
+%      \fi\fi\fi\fi\fi
+%      10 at \currentfontscale\bodyfontsize
+%    \logofont}
+%
+% or:
+%
+% \definefontsynonym [MetaLogo]            [logo10]
+% \definefontsynonym [MetaLogoBold]        [logobf10]
+% \definefontsynonym [MetaLogoSlanted]     [logosl10]
+% \definefontsynonym [MetaLogoItalic]      [logosl10]
+% \definefontsynonym [MetaLogoBoldSlanted] [logobf10]
+% \definefontsynonym [MetaLogoBoldtalic]   [logobf10]
+%
+% \loadmapfile[original-base.map] % \loadmapfile[original-vogel-symbol]
+%
+% \def\setMFPfont{\symbolicfont{MetaLogo}}
+
+\let\logofont\nullfont
+
+\loadmapfile[original-base.map]
+
+\unexpanded\def\setMFPfont% more sensitive for low level changes
+  {\font\logofont=logo%
+     \ifx\fontalternative\c!bf\else
+     \ifx\fontalternative\c!it\else
+     \ifx\fontalternative\c!sl\else
+     \ifx\fontalternative\c!bi\else
+     \ifx\fontalternative\c!bs\else
+     \fi\fi\fi\fi\fi
+     10 at \currentfontscale\bodyfontsize
+   \logofont}
+
+%\unexpanded\def\MetaFont%
+%  {\hbox{\setMFPfont METAFONT}}
+%
+%\unexpanded\def\MetaPost%
+%  {\hbox{\setMFPfont METAPOST}}
+
+\def\MetaHyphen% there is no hyphenchar in this font
+  {\discretionary{\vrule\!!height.33em\!!depth-.27em\!!width.33em}{}{}}
+
+\unexpanded\def\MetaFont
+  {{\setMFPfont META\MetaHyphen FONT}}
+
+\unexpanded\def\MetaPost
+  {{\setMFPfont META\MetaHyphen POST}}
+
+\unexpanded\def\MetaFun
+  {MetaFun}
+
+%D \macros
+%D  {TEX, METAFONT, METAPOST, METAFUN,
+%D   PICTEX, TABLE,
+%D   CONTEXT, PPCHTEX,
+%D   AMSTEX, LATEX, LAMSTEX}
+%D
+%D We define the funny written ones as well as the less
+%D error prone upper case names (in \CONTEXT\ we tend to
+%D write all user defined commands, like abbreviations, in
+%D uppercase.)
+
+\unexpanded\def\METAFONT {\MetaFont}
+\unexpanded\def\METAPOST {\MetaPost}
+\unexpanded\def\PPCHTEX  {\PPCHTeX}
+\unexpanded\def\CONTEXT  {\ConTeXt}
+\unexpanded\def\METAFUN  {\MetaFun}
+
+\unexpanded\def\TEX      {\TeX}
+\unexpanded\def\LATEX    {\LaTeX}
+\unexpanded\def\PICTEX   {\PiCTeX}
+\unexpanded\def\TABLE    {\TaBlE}
+\unexpanded\def\AMSTEX   {\AmSTeX}
+\unexpanded\def\LAMSTEX  {\LamSTeX}
+\unexpanded\def\INRSTEX  {inrs\TeX}
+
+%D And this is how they show up: \TeX, \MetaFont, \MetaPost,
+%D \PiCTeX, \TaBlE, \ConTeXt, \PPCHTeX, \AmSTeX, \LaTeX,
+%D \LamSTeX.
+
+%D Some placeholders:
+
+\unexpanded\def\eTeX   {\mathematics{\varepsilon}-\TeX}
+\unexpanded\def\pdfTeX {pdf\TeX}
+\unexpanded\def\pdfeTeX{pdfe-\TeX}
+\unexpanded\def\luaTeX {lua\TeX}
+\unexpanded\def\metaTeX{meta\TeX}
+\unexpanded\def\XeTeX  {X\lower.5ex\hbox{\kern-.15em\mirror{E}}\kern-.1667em\TeX}
+
+% Adapted from a patch by Mojca:
+
+\def\@XeTeX@
+  {\setbox\scratchbox\hbox{E}%
+   \raise\dimexpr\ht\scratchbox+\dp\scratchbox\relax\hbox{\rotate[\c!rotation=180]{\box\scratchbox}}}
+
+\ifnum\texengine=\pdftexengine
+
+    \unexpanded\def\XeTeX
+      {X\lower.5ex
+       \hbox
+         {\kern-.15em
+          \ifx\fontalternative\c!bf\mirror{E}\else
+          \ifx\fontalternative\c!it  \@XeTeX@\else
+          \ifx\fontalternative\c!sl  \@XeTeX@\else
+          \ifx\fontalternative\c!bi  \@XeTeX@\else
+          \ifx\fontalternative\c!bs  \@XeTeX@\else
+                                   \mirror{E}\fi\fi\fi\fi\fi}%
+       \kern-.1667em \TeX}
+
+\else
+
+    \unexpanded\def\XeTeX
+      {X\lower.5ex
+       \hbox
+         {\kern-.15em
+          \iffontchar\font"018E\relax
+            \char"018E%
+          \else
+            \ifx\fontalternative\c!bf\mirror{E}\else
+            \ifx\fontalternative\c!it  \@XeTeX@\else
+            \ifx\fontalternative\c!sl  \@XeTeX@\else
+            \ifx\fontalternative\c!bi  \@XeTeX@\else
+            \ifx\fontalternative\c!bs  \@XeTeX@\else
+                                     \mirror{E}\fi\fi\fi\fi\fi
+          \fi}%
+       \kern-.1667em \TeX}
+
+\fi
+
+\let\ETEX   \eTeX
+\let\PDFTEX \pdfTeX
+\let\PDFETEX\pdfeTeX
+\let\LUATEX \luaTeX
+\let\LuaTeX \luaTeX
+\let\XETEX  \XeTeX
+
+\unexpanded\def\MkApproved % joke, not used so it might move
+  {\dontleavehmode\rotate
+     [\c!rotation={\ifnum\texengine=\luatexengine\ctxlua{tex.write(45-45*\the\luatexversion/100)}\else0\fi},
+      \c!align=\v!middle,
+      \c!foregroundstyle=\v!type,
+      \c!foregroundcolor=darkred,
+      \c!frame=\v!on,
+      \c!offset=1ex,
+      \c!background=\v!color,
+      \c!backgroundcolor=lightgray,
+      \c!framecolor=darkred,
+      \c!rulethickness=2pt]
+     {Mk\ifnum\texengine=\luatexengine IV\else II\fi\\approved}}
+
+% \unexpanded\def\luaTeX
+%   {\dontleavehmode\begingroup
+%    Lua%
+%    \setbox0\hbox{oT}%
+%    \setbox2\hbox{o\kern0ptT}%
+%    \ifdim\wd0=\wd2
+%      \setbox0\hbox dir TRT{To}%
+%      \setbox2\hbox{T\kern0pto}%
+%      \hskip\dimexpr\wd0-\wd2\relax
+%    \fi
+%    \TeX
+%    \endgroup}
+%
+% a further iteration from the list, patched again
+
+% \ifx\fontalternative\c!it -\else
+% \ifx\fontalternative\c!sl -\else
+% \ifx\fontalternative\c!bi -\else
+% \ifx\fontalternative\c!bs -\fi\fi\fi\fi
+
+\def\LuaTeX
+  {\dontleavehmode
+   \begingroup
+     Lua%
+     % hope for kerning, try aT
+     \setbox0\hbox{aT}%
+     \setbox2\hbox{a\kern\zeropoint T}%
+     \ifdim\wd0=\wd2 % kerns can go two ways
+       % no aT kerning, try oT as a is not symmetrical
+       \setbox0\hbox{oT}%
+       \setbox2\hbox{o\kern\zeropoint T}%
+       \ifdim\wd0=\wd2 % kerns can go two ways
+         % no aT and oT kerning, try To
+         \setbox0\hbox{To}%
+         \setbox2\hbox{T\kern\zeropoint o}%
+         % maybe we need to compensate for the angle (sl/it/bs/bi)
+       \fi
+       \ifdim\wd0=\wd2\else
+         \kern\dimexpr\wd0-\wd2\relax
+       \fi
+     \fi
+     \TeX
+   \endgroup}
+
+\let\luaTeX \LuaTeX
+\let\LUATEX \LuaTeX
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/cont-new.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/cont-new.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/cont-new.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,943 @@
+%D \module
+%D   [       file=cont-new,
+%D        version=1995.10.10,
+%D          title=\CONTEXT\ Miscellaneous Macros,
+%D       subtitle=New Macros,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\newcontextversion{2023.09.18 21:10}
+
+%D This file is loaded at runtime, thereby providing an
+%D excellent place for hacks, patches, extensions and new
+%D features.
+
+\unprotect
+
+% it's about time to clean up this file ...
+
+\writestatus\m!systems{beware: some patches loaded from cont-new.mkii}
+
+% \ifx\pdfmapfile \undefined \else \pdfmapfile{ } \fi
+
+% \font\f=dummyfont  \rpcode\f0=500 \hbox{..}\char0
+% todo: mp-new
+% caption: grid=top|bottom in xml defs
+

+\def\fastscale#1%
+  {\begingroup
+   \ifnum#1=1000\relax
+     \setfalse\scaleboxdone
+   \else
+     \settrue\scaleboxdone
+     \edef\finalscaleboxxscale{\withoutpt\the\dimexpr#1pt/1000\relax}%
+     \let\finalscaleboxyscale\finalscaleboxxscale
+   \fi
+   \dowithnextbox{\doscaleboxindeed\flushnextbox\endgroup}\hbox}
+

+% \setupcaption [figure]   [align=flushleft]
+% \setupcaption [figure-1] [align=flushleft,leftmargin=10mm]
+% \setupcaption [figure-2] [align=flushleft,leftmargin=10mm,rightmargin=-10mm,width=\textwidth]
+%
+% \startsetups somefigure
+%     \ifdim\floatsetupwidth>\textwidth
+%         \placesetupfloat[figure-2]
+%     \else
+%         \placesetupfloat[figure-1]
+%     \fi
+% \stopsetups
+%
+% \placefloatwithsetups[somefigure]{}{\externalfigure[dummy][width=5cm,height=2cm]}
+
+\def\placefloatwithsetups
+  {\dotripleempty\doplacefloatwithsetups}
+
+\long\def\doplacefloatwithsetups[#1][#2][#3]#4%
+  {\def\floatsetupcaption   {#4}%
+   \def\floatsetupcontent   {\copy\nextbox}%
+   \def\floatsetupwidth     {\wd\nextbox}%
+   \def\floatsetupheight    {\ht\nextbox}%
+   \def\placesetupfloat[##1]{\placefloat[##1][#2][#3]{#4}{\floatsetupcontent}}% #4 and not \floatsetupcaption (unexpanded)
+   \dowithnextbox{\setups[#1]}\vbox}
+

+\def\dividedsize#1#2#3% size gap n
+  {\dimexpr
+     \ifnum\dimexpr#1\relax>\plusone
+       (\dimexpr#1\relax-\numexpr#3-1\relax\dimexpr#2\relax)/#3\else#1%
+     \fi
+   \relax}
+

+% \setuplabeltext[\s!itemcount1={{I(},{)}}]
+% \def\labeledcountervalue#1{\labeltexts{#1}{\countervalue{#1}}}
+

+\def\singlewidened     #1{\hbox spread 1em{\hss#1\hss}}
+\def\complexwidened[#1]#2{\hbox spread  #1{\hss#2\hss}}
+
+\definecomplexorsimple\widened
+

+% todo
+%
+% \def\definelocation{\dodoubleargument\dodefinelocation}
+% \def\dodefinelocation[#1][#2]{\setvalue{loc:#1}{#2}}
+%
+% \definelocation[lt]           [\v!left\v!top]
+% \definelocation[tl]           [\v!left\v!top]
+% \definelocation[\v!top\v!left][\v!left\v!top]
+%
+% \def\getlocation#1{\executeifdefined{loc:#1}{#1}}
+

+% just in case we load something from a file (pdfr-ec for instance)
+
+\prependtoks \restoreendofline \to \everybeforeshipout
+

+% \let\cs\getvalue % no, we want \cs to be czech
+

+% experimental so this may change
+
+\def\startdescriptions
+  {\dosingleempty\dostartdescriptions}
+
+\def\dostartdescriptions[#1]%
+  {\begingroup
+   \def\item{\getvalue{#1}}%
+   \let\dostoppairdescription \donothing
+   \let\@@description         \dostartpairdescription
+   \let\@@startsomedescription\dostartsomedescription}
+
+\def\stopdescriptions
+  {\dostoppairdescription
+   \endgroup}
+
+\def\dostartpairdescription[#1][#2]%
+  {\dostoppairdescription
+   \def\dostoppairdescription{\@@stopdescription{#1}}%
+   \bgroup
+   \def\currentdescription{#1}%
+   \doifelse{\descriptionparameter{\s!do\c!state}}\v!start
+     {\@@makedescription{#1}[#2]{}}
+     {\@@makedescription{#1}[#2]}}
+
+\def\dostartsomedescription% #1[#2]#3%
+  {\bgroup
+   \@@makedescription} % {#1}[#2]{#3}}
+
+% \starttext
+%
+% \definedescription[test]
+%
+% \startdescriptions
+% \test{Foo} Bar bar bar
+% \test{Foo} Bar bar bar
+% \test{Foo} Bar bar bar
+% \stopdescriptions
+%
+% \startdescriptions[test]
+% \item{Foo} Bar bar bar
+% \item{Foo} Bar bar bar
+% \item{Foo} Bar bar bar
+% \stopdescriptions
+%
+% \startdescriptions
+% \starttest{Foo} Bar bar bar \stoptest
+% \starttest{Foo} Bar bar bar \stoptest
+% \starttest{Foo} Bar bar bar \stoptest
+% \stopdescriptions
+%
+% \startdescriptions[test]
+% \item{Foo} Bar bar bar
+% \item{Foo} Bar bar bar
+% \item{Foo} Bar bar bar
+% \stopdescriptions
+%
+% \stoptext
+

+% to do:
+%
+% \def\defineshapesynonym
+%   {\dodoubleargument\dodefineshapesynonym}
+%
+% \def\dodefineshapesynonym[#1][#2]%
+%   {\setvalue{shsy:#1}{#2}}
+%
+% \def\shapesynonym#1%
+%   {\ifcsname shsy:#1\endcsname
+%      \expandafter\shapesynonym\csname shsy:#1\endcsname\else#1%
+%    \fi}
+%
+%\defineshapesynonym[eacute] [e]
+%\defineshapesynonym[egrave] [e]
+%\defineshapesynonym[eumlaut [e]
+%\defineshapesynonym[eogonek][e]
+%
+% more reduction
+%
+%\defineshapesynonym[e][o]
+%\defineshapesynonym[w][v]
+%\defineshapesynonym[m][n]
+%
+% \shapesynonym{eacute}
+

+% this will be activated when
+
+% \newinsert\thispageinsert % <- installinsertion
+
+% \def\flushatthispage
+%   {\bgroup
+%    \dowithnextbox{\insert\thispageinsert{\box\nextbox}\egroup}%
+%    \hbox}
+
+% \appendtoks
+%     \ifvoid\thispageinsert\else\hbox{\smashedbox\thispageinsert}\fi
+% \to \everyshipout
+

+% \definemarkedpage[nobackgrounds]
+% \markpage[nobackgrounds]
+% \doifmarkedpageelse{nobackgrounds}
+
+\newcounter\nofmarkedpages
+
+\def\definemarkedpage[#1]%
+  {\definetwopasslist{\v!page:#1}}
+
+\def\markpage[#1]% looks very much like domarginreference
+  {\iftrialtypesetting\else
+     \doglobal\increment\nofmarkedpages\relax
+     \lazysavetwopassdata{\v!page:#1}{\nofmarkedpages}{\noexpand\realfolio}%
+   \fi}
+
+\def\doifmarkedpageelse#1%
+  {\gettwopassdatalist{\v!page:#1}%
+   \expanded{\doifinsetelse{\realfolio}{\twopassdatalist}}}
+

+% Just a simple and fast hanger, for usage in macros.
+
+\def\setuphanging
+  {\dodoubleempty\getparameters[\??ha]}
+
+\setuphanging
+  [\c!distance=.5em]
+
+\def\starthanging
+  {\noindent\bgroup
+   \dowithnextbox
+     {\setbox\nextbox\hbox{\flushnextbox\hskip\@@hadistance}%
+      \hangindent\nextboxwd
+      \hangafter\plusone
+      \flushnextbox\ignorespaces}
+   \hbox}
+
+\def\stophanging
+  {\endgraf
+   \egroup}
+
+% experimental
+
+\def\stophangaround
+  {\endgraf
+   \egroup}
+
+\def\starthangaround
+  {\noindent\bgroup
+   \dowithnextbox
+     {\ifdim\nextboxht>\strutht\setbox\nextbox\tbox{\flushnextbox}\fi
+      \setbox\nextbox\hbox{\flushnextbox\hskip\@@hadistance}%
+      \getboxheight\scratchdimen\of\box\nextbox
+      \getnoflines\scratchdimen
+      \nextboxht\strutht
+      \nextboxdp\strutdp
+      \hangindent\nextboxwd
+      \hangafter-\noflines
+      \llap{\flushnextbox}\ignorespaces}
+   \hbox}
+

+\def\modevalue#1#2#3%
+  {\@EA\ifx\csname\@mode@\systemmodeprefix#1\endcsname\endcsname\enabledmode#2\else#2\fi}
+
+\def\systemmodevalue#1%
+  {\modevalue{\systemmodeprefix#1}}
+

+% \getmulticolumnlines -> now in cont-loc, to be tested and really needed
+

+% \tracefonthandlingtrue
+

+% new, still to be improved
+%
+% \dorecurse{10}
+%   {\input thuan
+%    \placefigure{}{\framed[height=1.5cm]{test}}
+%    \placefloatplaceholder}
+
+\def\placefloatplaceholder
+  {\ifroomforfloat \else
+     \scratchdimen\pagegoal
+     \advance\scratchdimen-\pagetotal
+     \advance\scratchdimen-3\lineheight
+     \ifdim\scratchdimen>\zeropoint
+       \startlinecorrection[blank]
+       \mhbox{\inframed{\labeltexts{placeholder}{\lastcaptiontag}}}%
+       \stoplinecorrection
+     \else
+       \allowbreak
+     \fi
+   \fi}
+
+\setuplabeltext
+  [placeholder={, moved}]
+

+% etex only, of course we could just parse (scan for \% in string)
+
+\newif\ifpercentdimendone
+
+\bgroup % usage: \setpercentdimen\somedimen{% or dimen} todo: pct
+\catcode124=\@@comment
+\catcode 37=\@@active
+\gdef\setpercentdimen#1#2|
+  {\xdef\@@expanded{#2}|
+   \ifx\@@expanded\empty\else
+     \bgroup
+     \global\percentdimendonefalse
+     \def\%{\dimexpr#1/100\relax\global\percentdimendonetrue\ignorespaces}| scantokens add's a space
+     \catcode`%=\@@active
+     \catcode`\\=\@@escape
+     \let%\%|
+     \scratchdimen#1|
+     \xdef\@@expanded{\@@expanded\scratchdimen\!!zeropoint}| trick: when 1.2 => .2\scratchdimen and 0pt typeset
+     \startnointerference
+     \global\globalscratchdimen\scantokens\@EA{\@@expanded}| i'm lazy and use etex
+     \stopnointerference
+     \egroup
+     #1\globalscratchdimen
+   \fi}
+\egroup
+
+% TEX alternative, in principle accurate enough and also a bit faster
+
+% \bgroup
+%
+% \catcode`\%=\@@other
+% \catcode`\|=\@@comment
+%
+% \gdef\setpercentdimen#1#2|
+%   {\beforesplitstring#2\at%\to\ascii
+%    \doifelse\ascii{#2}
+%     {#1=#2}
+%     {\divide#1by100\relax#1=\ascii#1\relax}} | or: {#1=\ascii#1\divide#1by100\relax}}
+%
+% \egroup
+%
+% \dimen0=1000pt \setpercentdimen{\dimen0}{10%} \the\dimen0
+% \dimen0= 100pt \setpercentdimen{\dimen0}{10%} \the\dimen0
+% \dimen0=  95pt \setpercentdimen{\dimen0}{10%} \the\dimen0
+% \dimen0=  10pt \setpercentdimen{\dimen0}{10%} \the\dimen0
+% \dimen0=   1pt \setpercentdimen{\dimen0}{10%} \the\dimen0
+

+\bgroup
+
+\obeylines % don't remove %'s !
+
+\gdef\collapsedspace#1%
+  {\ifx#1^^M%
+     \expandafter\collapsedspace
+   \else
+     \space
+     \expandafter#1%
+   \fi}
+
+\gdef\collapsespaces
+  {\prependtoksonce\relax\to\everyeof%
+   \ignorelines%
+   \ignoretabs%
+   \let\obeyedspace\collapsedspace%
+   \obeyspaces}
+
+\egroup
+

+\def\inlinedbox
+  {\bgroup
+   \dowithnextbox
+     {\scratchdimen\nextboxht
+      \advance\scratchdimen\nextboxdp
+      \advance\scratchdimen-\lineheight
+      \divide\scratchdimen\plustwo
+      \advance\scratchdimen\strutdepth
+      \setbox\nextbox\hbox{\lower\scratchdimen\flushnextbox}%
+      \nextboxht\strutht
+      \nextboxdp\strutdp
+      \flushnextbox
+      \egroup}%
+     \hbox}
+

+% \readfile{cont-exp}\donothing\donothing % speed up (5-20%)
+

+\def\dimenratio#1#2% etex only
+  {\withoutpt\the\dimexpr2\dimexpr(#1)/\dimexpr(#2)/32768\relax\relax}
+

+\def\doxprecurse#1#2%
+  {\ifnum#1=\zerocount % no \ifcase
+     \expandafter\gobblethreearguments
+   \else
+     #2\expandafter\expandafter\expandafter\doxprecurse\expandafter
+   \fi\expandafter{\the\numexpr#1-1\relax}{#2}}
+

+\def\buttonframed{\dodoubleempty\localframed[\??bt]} % goodie
+

+\unexpanded\def\asciistr#1{\dontleavehmode{\defconvertedargument\ascii{#1}\verbatimfont\ascii}}
+

+\def\shapefill{\vskip\zeropoint\!!plus\lineheight\!!minus\lineheight\relax}
+

+\let\normaltype\type
+
+\ifx\scantextokens\undefined
+    \ifx\scantokens\undefined
+        \unexpanded\def\retype#1{\dontleavehmode{\defconvertedargument\ascii{#1}\@EA\normaltype\@EA{\ascii}}}
+    \else
+        \unexpanded\def\retype#1{\dontleavehmode\scantokens{\normaltype{#1}\ignorespaces}\relax}
+    \fi
+\else
+  \unexpanded\def\retype#1{\dontleavehmode\scantextokens{\normaltype{#1}}}
+\fi
+
+\def\simplifytype{\let\type\retype}
+

+% \ruledhbox
+%   {\startignorespaces
+%      \def\oeps{a}
+%      \startignorespaces
+%        \def\oeps{a}
+%      \stopignorespaces
+%      \def\oeps{a}
+%    \stopignorespaces
+%    \oeps}
+
+\newsignal\boissignal
+\newcount \boislevel
+
+\long\def\startignorespaces
+  {\advance\boislevel\plusone
+   \ifcase\boislevel\or \ifhmode
+     \hskip\boissignal
+   \fi \fi
+   \ignorespaces}
+
+\long\def\stopignorespaces
+  {\ifcase\boislevel\or \ifhmode
+    \doloop
+      {\ifdim\lastskip=\zeropoint
+         \exitloop
+       \else\ifdim\lastskip=\boissignal
+         \unskip
+         \exitloop
+       \else
+         \unskip
+       \fi\fi}%
+   \fi \fi
+   \advance\boislevel\minusone}
+

+\def\minimalhbox#1#%
+  {\dowithnextbox
+     {\bgroup
+      \setbox\scratchbox\hbox#1{\hss}%
+      \ifdim\nextboxwd<\wd\scratchbox\nextboxwd\wd\scratchbox\fi
+      \flushnextbox
+      \egroup}
+     \hbox}
+

+% \def\dodimchoice#1#2#3%
+%   {\ifx#3\relax
+%      #1\@EA\gobbleuntilrelax
+%    \else\ifdim#1#2%
+%      #3\@EAEAEA\gobbleuntilrelax
+%    \else
+%      \@EAEAEA\dodimchoice
+%    \fi\fi{#1}}
+
+% \def\donumchoice#1#2#3%
+%   {\ifx#3\relax
+%      #1\@EA\gobbleuntilrelax
+%    \else\ifnum#1#2%
+%      #3\@EAEAEA\gobbleuntilrelax
+%    \else
+%      \@EAEAEA\dodimchoice
+%    \fi\fi{#1}}
+
+% \def\dimchoice#1#2{\dodimchoice{#1}#2\empty\relax}
+% \def\numchoice#1#2{\donumchoice{#1}#2\empty\relax}
+
+\def\gobbleuntilempty#1\empty{}
+
+\def\dodimchoice#1#2#3%
+  {\ifdim#1#2%
+     #3\@EA\gobbleuntilempty
+   \else
+     \@EA\dodimchoice
+   \fi{#1}}
+
+\def\donumchoice#1#2#3%
+  {\ifnum#1#2%
+     #3\@EA\gobbleuntilempty
+   \else
+     \@EA\dodimchoice
+   \fi{#1}}
+
+\def\dimchoice#1#2{\dodimchoice{#1}#2{=#1}{#1}\empty}
+\def\numchoice#1#2{\donumchoice{#1}#2{=#1}{#1}\empty}
+
+% \the\dimexpr(\dimchoice {7pt}{{<10pt}{8pt}{<12pt}{9pt}{<15pt}{10pt}{=11pt}{12pt}})
+% \the\dimexpr(\dimchoice{11pt}{{<10pt}{8pt}{<12pt}{9pt}{<15pt}{10pt}{=11pt}{12pt}})
+% \the\dimexpr(\dimchoice{14pt}{{<10pt}{8pt}{<12pt}{9pt}{<15pt}{10pt}{=11pt}{12pt}})
+

+\def\showsetupsdefinition[#1]{\showvalue{\??su:#1}} % temp hack for debugging
+

+% will be a MyWay
+%
+% \setuplayout[grid=yes] \setupcaption[figure][inbetween=] \useMPlibrary[dum] \setupcolors[state=start]
+%
+% \starttext \showgrid \showstruts
+%
+% \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=yes]}
+% \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=fit]}
+% \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=height]}
+% \input ward
+% \page
+% \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=yes]}
+% \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=fit]}
+% \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=height]}
+% \input ward
+% \page
+% \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=yes]}
+% \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=fit]}
+% \input ward \placefigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=height]}
+% \input ward
+% \page
+% \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=yes]}
+% \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=fit]}
+% \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=height]}
+% \input ward
+% \page
+% \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=yes]}
+% \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=fit]}
+% \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=height]}
+% \input ward
+% \page
+% \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=yes]}
+% \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=fit]}
+% \input ward \placefigure[none]{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=height]}
+% \input ward
+%
+% \stoptext
+

+% funny, as field action with e.g. dissolve ... only the field dissolves, bug?
+
+\setglobalsystemreference\rt!exec{Transition}{transition}
+
+%def\PDFexecutetransition {/Trans /Trans <</Type /Trans \executeifdefined{PDFpage\argumentA}\PDFpagereplace>>}
+\def\PDFexecutetransition {/Trans /Trans <<\executeifdefined{PDFpage\argumentA}\PDFpagereplace>>}
+

+% new, continuous blocks, \som \par \startdoorlopendblok ...
+
+% \startitemize
+%   \item                                      bagger
+%   \item                                      bagger
+%   \item          \startdoorlopendblok        bagger \stopdoorlopendblok
+%   \item \endgraf \startdoorlopendblok        bagger \stopdoorlopendblok
+%   \item \endgraf \startdoorlopendblok \strut bagger \stopdoorlopendblok
+%   \item \startdoorlopendblok
+%         \starttabulate
+%         \NC test \NC test \NC \NR
+%         \NC test \NC test \NC \NR
+%         \NC test \NC test \NC \NR
+%         \stoptabulate
+%         \stopdoorlopendblok
+%   \item test
+% \stopitemize
+
+\def\startdoorlopendblok % for special cases, don't change it too much and don't rely on it
+  {\ifhmode\endgraf\nobreak\fi % don't remove the \nobreak
+   \dowithnextboxcontent
+     {\setlocalhsize \hsize\localhsize \forgetall}
+     {\bgroup
+      \forgeteverypar
+      \forgetparskip
+      \scratchdimen\nextboxht
+      \advance\scratchdimen\nextboxdp
+      \getnoflines\scratchdimen
+      \advance\scratchdimen-\strutheight
+      \setbox\nextbox\hbox{\lower\scratchdimen\box\nextbox}%
+      \ht\nextbox\strutheight
+      \dp\nextbox\strutdepth
+      \setbox\nextbox\vbox
+        {\indent\box\nextbox
+         \endgraf
+         \nobreak
+         \advance\noflines\minusone
+         \dorecurse\noflines{\crlf\nobreak}}%
+      \verticalstrut
+      \endgraf
+      \nobreak
+      \offinterlineskip
+      \kern-2\lineheight % 2\lineheight when no vertical struts in main \vbox
+      \nobreak
+      \unvbox\nextbox
+      \prevdepth\strutdepth
+      % evt (eerst testen) een signal zodat een direct volgend blok goed gaat)
+      \egroup}
+     \vbox\bgroup
+       \vskip-\lineheight \verticalstrut\endgraf
+       \insidefloattrue
+       \doinhibitblank} % beware, no \inhibitblank ! ! ! ! ! !
+
+\def\stopdoorlopendblok
+  {\endgraf\verticalstrut\endgraf\kern-2\lineheight
+   \egroup}
+

+\def\tabulaterule % to be redone, not correct
+  {\dotabulaterule
+     {\hrule\!!height.5\scratchdimen\!!depth.5\scratchdimen\relax
+      \doifvalue{\??tt\currenttabulate\c!distance}\v!grid
+        {\kern-\scratchdimen}}} % experimental tm-prikkels
+

+% experimental: \synchronizegrid bla bla bla
+
+\newcounter\currentgridsync
+
+\def\gridsynctag{grs:\currentgridsync}
+
+\def\synchronizegrid
+  {\doglobal\increment\currentgridsync
+   \par\prevdepth\zeropoint
+   \nointerlineskip
+   \hpos\gridsynctag{\strut}\par
+   \vskip-\lineheight
+   \nointerlineskip
+   % top of text
+   \scratchdimen\MPy{\v!text:\MPp\gridsynctag}%
+   \advance\scratchdimen\MPh{\v!text:\MPp\gridsynctag}%
+   % move to first baseline
+   \advance\scratchdimen-\topskip
+   % subtract wrong baseline
+   \advance\scratchdimen-\MPy\gridsynctag
+   % get minimal number of lines
+   \advance\scratchdimen\lineheight
+   \getnoflines\scratchdimen
+   % calculate difference
+   \advance\scratchdimen-\noflines\lineheight\relax
+   \scratchdimen-\scratchdimen\relax
+   \ifdim\scratchdimen>\zeropoint
+     \nointerlineskip
+     \advance\scratchdimen-\lineheight
+     \vskip\scratchdimen \dontleavehmode \quad \strut
+     \par
+  %\else
+  %  \message{no grid correction: \the\scratchdimen}\wait
+   \fi}
+

+% between alignment lines certain rules apply, and even a
+% simple test can mess up a table, which is why we have a
+% special test facility
+%
+% \ruledvbox
+%   {\starttabulate[|l|p|]
+%    \NC 1test \NC test \NC \NR
+%    \tableifelse{\doifelse{a}{a}}{\NC Xtest \NC test \NC \NR}{}%
+%    \stoptabulate}
+
+\long\def\tableifelse#1%
+  {\tablenoalign
+     {#1%
+       {\aftergroup \firstoftwoarguments}%
+       {\aftergroup\secondoftwoarguments}}}
+
+\long \def\tableiftextelse#1{\tableifelse{\doiftextelse{#1}}}
+

+% experiment, not yet to be used
+
+\def\displaybreak
+  {\ifhmode
+     \removeunwantedspaces
+     \ifcase\raggedstatus\hfill\fi
+     \strut\penalty-9999 % \break fails on case (3)
+   \fi}
+
+\def\startdisplay{\displaybreak\ignorespaces\startpacked}
+\def\stopdisplay {\stoppacked\displaybreak\ignorespaces}
+

+\def\tightvbox{\dowithnextbox{\nextboxdp\zeropoint\flushnextbox}\vbox}
+\def\tightvtop{\dowithnextbox{\nextboxht\zeropoint\flushnextbox}\vtop}
+

+% what is this stupid macro meant for:
+
+\def\hyphenationpoint
+  {\hskip\zeropoint}
+
+\def\hyphenated#1%
+  {\bgroup
+   \!!counta\zerocount
+   \def\hyphenated##1{\advance\!!counta\plusone}%
+   \handletokens#1\with\hyphenated
+   \!!countb\plusone
+   \def\hyphenated##1%
+     {##1%
+      \advance\!!countb\plusone\relax
+      \ifnum\!!countb>2 \ifnum\!!countb<\!!counta
+        \hyphenationpoint
+      \fi\fi}%
+   \handletokens#1\with\hyphenated
+   \egroup}
+

+\def\obeysupersubletters
+  {\let\super\normalsuper
+   \let\suber\normalsuber
+   \let\normalsuper\letterhat
+   \let\normalsuber\letterunderscore
+   \enablesupersub}
+
+\def\obeysupersubmath
+  {\let\normalsuper\letterhat
+   \let\normalsuber\letterunderscore
+   \enablesupersub}
+
+%\let\normaltype\type
+%
+%\def\type#1%
+%  {\expanded{\normaltype{\detokenize{#1}}}}
+

+% {x123 \os x123} {\tfa x123 \os x123} {x123 \tx x123 \os x123}
+% \definefontsynonym[OldStyle][Serif]
+% {x123 \os x123} {\tfa x123 \os x123} {x123 \tx x123 \os x123}
+

+% testen :
+%
+% \appendtoks
+%   \let\registerparoptions\relax
+% \to \everyforgetall
+

+\def\startgridcorrection
+  {\dosingleempty\dostartgridcorrection}
+
+\def\dostartgridcorrection[#1]%
+  {\ifgridsnapping
+     \iffirstargument\doifsomething{#1}{\moveongrid[#1]}\fi
+     \snaptogrid\vbox\bgroup
+   \else
+     \startbaselinecorrection
+   \fi}
+
+\def\stopgridcorrection
+  {\ifgridsnapping
+     \egroup
+   \else
+     \stopbaselinecorrection
+   \fi}
+

+\def\checkgridsnapping
+  {\lineskip\ifgridsnapping\zeropoint\else\normallineskip\fi}
+

+\def\startplaatsen
+  {\dosingleempty\dostartplaatsen}
+
+\def\dostartplaatsen[#1]% tzt n*links etc
+  {\endgraf
+   \noindent\bgroup
+   \setlocalhsize
+   \hbox to \localhsize\bgroup
+     \doifnot{#1}\v!left\hss
+     \def\stopplaatsen
+       {\unskip\unskip\unskip
+        \doifnot{#1}\v!right\hss
+        \egroup
+        \egroup
+        \endgraf}%
+     \gobblespacetokens}
+
+% \startplaatsen[links] bla \stopplaatsen
+

+% we don't register the paragraph characteristics, only the
+% width
+
+\appendtoks
+  \setinnerparpositions % see "techniek" for application
+\to \everytabulate
+

+\def\fontclassname#1#2%
+  {\ifcsname\??ff#1#2\endcsname
+     \fontclassname{#1}{\csname\??ff#1#2\endcsname}%
+   \else\ifcsname\??ff#2\endcsname
+     \fontclassname{#1}{\csname\??ff#2\endcsname}%
+   \else
+     #2%
+   \fi\fi}
+
+\def\defineclassfontsynonym
+  {\dotripleargument\dodefineclassfontsynonym}
+
+\def\dodefineclassfontsynonym[#1][#2][#3]%
+  {\definefontsynonym[#1][\fontclassname{#2}{#3}]}
+
+%\definefontsynonym [KopFont] [\fontclassname{officina}{SerifBold}]
+%
+%\defineclassfontsynonym [KopFont] [officina] [SerifBold]
+

+\def\startcolumnmakeup % don't change
+  {\bgroup
+   \getrawnoflines\textheight % teksthoogte kan topskip hebben, dus raw
+   \scratchdimen\noflines\lineheight
+   \advance\scratchdimen-\lineheight
+   \advance\scratchdimen\topskip
+   \setbox\scratchbox
+   \ifcase\showgridstate\vbox\else\ruledvbox\fi to \scratchdimen\bgroup
+   \forgetall} % ! don't change
+
+\def\stopcolumnmakeup
+  {\egroup
+   \dp\scratchbox\zeropoint
+   \wd\scratchbox\textwidth
+   \box\scratchbox
+   \egroup
+   \synchronizehsize}
+

+\long\def\startexternalfigure
+  {\dotripleempty\dostartexternalfigure}
+
+\long\def\dostartexternalfigure[#1][#2][#3]#4\stopexternalfigure
+  {\gdef\figuredescription{#4}%
+   \externalfigure[#1][#2][#3]%
+   \globallet\figuredescription\empty}
+
+\let\figuredescription\empty
+

+%% where does this come from, old code probably
+%%
+%%
+%% \newif\ifpagechanged \let\lastchangedpage\empty
+%%
+%% \def\checkpagechange#1%
+%%   {\gettwopassdata\s!paragraph
+%%    \pagechangedfalse
+%%    \iftwopassdatafound
+%%      \ifnum\twopassdata>0\getvalue{\s!paragraph:p:#1}\relax
+%%        \pagechangedtrue
+%%      \fi
+%%    \fi
+%%    \ifpagechanged
+%%      \letgvalue{\s!paragraph:p:#1}\twopassdata
+%%      \globallet\lastchangedpage\twopassdata
+%%    \else
+%%      \globallet\lastchangedpage\realfolio
+%%    \fi
+%%    \doparagraphreference}
+%%
+%% \def\changedpage#1%
+%%   {\getvalue{\s!paragraph:p:#1}}
+

+\newcount\nofprofiled
+
+\def\profilemacro#1%
+  {\nofprofiled\zerocount
+   \letvalue{\string#1\string#1}#1%
+   \appendtoks
+     \normalwritestatus\m!systems{profile \string#1: \number\nofprofiled}%
+   \to \everystoptext
+   \unexpanded\def#1%
+     {\global\advance\nofprofiled\plusone
+      \csname\string#1\string#1\endcsname}}
+

+% incomplete, will be a special case of float placement
+
+\def\startfixed{\dosingleempty\dostartfixed}
+
+\def\dostartfixed[#1]%
+  {\expanded{\dowithnextbox{\noexpand\dodofixed{\ifhmode0\else1\fi}{#1}}}%
+   \vbox\bgroup
+   \setlocalhsize}
+
+\def\stopfixed
+  {\egroup}
+
+\def\dodofixed#1#2%
+  {\ifcase#1\relax
+     \processaction
+       [#2]
+       [   \v!high=>\bbox   {\flushnextbox},
+           \v!low=>\tbox    {\flushnextbox},
+         \v!middle=>\vcenter{\flushnextbox},
+           \v!lohi=>\vcenter{\flushnextbox},
+        \s!unknown=>\tbox   {\flushnextbox},
+        \s!default=>\tbox   {\flushnextbox}]%
+   \else
+     \startbaselinecorrection
+       \noindent\flushnextbox
+     \stopbaselinecorrection
+   \fi}
+
+% \startitemize
+%
+% \item \externalfigure[koe][height=2cm]
+% \item \externalfigure[koe][height=2cm]
+% \item \externalfigure[koe][height=2cm]
+% \item \externalfigure[koe][height=2cm]
+%
+% \page
+%
+% \item \startfixed      \externalfigure[koe][height=2cm]\stopfixed
+% \item \startfixed[high]\externalfigure[koe][height=2cm]\stopfixed
+% \item \startfixed[low] \externalfigure[koe][height=2cm]\stopfixed
+% \item \startfixed[lohi]\externalfigure[koe][height=2cm]\stopfixed
+%
+% \page
+%
+% \item test \startfixed      \externalfigure[koe][height=2cm]\stopfixed
+% \item test \startfixed[high]\externalfigure[koe][height=2cm]\stopfixed
+% \item test \startfixed[low] \externalfigure[koe][height=2cm]\stopfixed
+% \item test \startfixed[lohi]\externalfigure[koe][height=2cm]\stopfixed
+%
+% \page
+%
+% \item test \par \startfixed      \externalfigure[koe][height=2cm]\stopfixed
+% \item test \par \startfixed[high]\externalfigure[koe][height=2cm]\stopfixed
+% \item test \par \startfixed[low] \externalfigure[koe][height=2cm]\stopfixed
+% \item test \par \startfixed[lohi]\externalfigure[koe][height=2cm]\stopfixed
+%
+% \stopitemize
+

+\def\obeyfollowingtoken{{}}  % end \cs scanning
+

+% \def\comparedimension#1#2%
+%   {\chardef\compresult
+%      \ifdim#1<#2%
+%        \zerocount
+%      \else\ifdim#1<#2%
+%        \plusone
+%      \else
+%        \plustwo
+%      \fi\fi}
+% \newdimen\roundingeps \roundingeps=10sp
+% \def\comparedimensioneps#1#2%
+%   {\chardef\compresult
+%      \ifdim\dimexpr(#1-#2)<\roudingeps
+%        \zerocount
+%      \else\ifdim\dimexpr(#2-#1)<\roudingeps
+%        \zerocount
+%      \else\ifdim#1<#2%
+%        \plusone
+%      \else
+%        \plustwo
+%      \fi\fi\fi}
+

+%D Next we load a few local optimizations and new features. They
+%D live on on my machine and are not distributed, but they may end
+%D up in the distributed files.
+
+\enablemode[mkii] \enablemode[*mkii]
+
+\long\def\startluacode#1\stopluacode{}
+\long\def\ctxlua      #1{}
+
+\def\enabletrackers [#1]{}
+\def\disabletrackers[#1]{}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/cont-nl.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/cont-nl.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/cont-nl.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,21 @@
+%D \module
+%D   [       file=cont-nl,
+%D        version=1997.08.19,
+%D          title=\CONTEXT,
+%D       subtitle=\CONTEXT\ Dutch Format Generation,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\catcode`\{=1 \catcode`\}=2
+
+\def\defaultinterface  {dutch}
+\def\defaultlanguagetag{nl}
+
+\input context.mkii
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/cont-ro.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/cont-ro.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/cont-ro.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,22 @@
+%D \module
+%D   [       file=cont-ro,
+%D        version=2000.01.09,
+%D          title=\CONTEXT,
+%D       subtitle=\CONTEXT\ Romanian Format Generation,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\catcode`\{=1 \catcode`\}=2
+
+\def\defaultinterface  {romanian}
+\def\defaultlanguagetag{ro}
+
+\input context.mkii
+
+\endinput
+

Added: trunk/Master/texmf-dist/tex/context/base/mkii/cont-sys.ori
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/cont-sys.ori	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/cont-sys.ori	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,186 @@
+%D \module
+%D   [       file=cont-sys,
+%D        version=1995.10.10,
+%D          title=\CONTEXT\ Miscellaneous Macros,
+%D       subtitle=System Specific Setups,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Beware, this is a MkII specific file. In MkIV we only load
+%D cont-sys.mkiv but in MkII we load the first found of
+%D cont-sys.mkii, cont-sys.tex, cont-sys.rme.
+
+\unprotect
+
+% Speed up typescript loading, but at the cost of much memory:
+
+\preloadtypescripts
+
+% If you want another default font:
+%
+% \let\preloadfonts\relax
+% \usetypescript[palatino][\defaultencoding]
+% \setupbodyfont[palatino,rm,12pt]
+%
+% Please make sure that this defines rm, ss, tt and mm.
+
+% Occasionally we will support both A4 and letter in
+% styles. If you want letter size paper to be the default,
+% uncomment:
+%
+% \enablemode[\systemmodeprefix letter]
+%
+% If you always want to default to letter, you may uncomment
+% the following line, but beware: it makes your documents less
+% portable:
+%
+% \setuppapersize[letter][letter]
+
+% If you want some extras, just uncomment the following
+% line:
+%
+% \usemodule[plus] % experimental code
+%
+% Here you can take care of overloading some (style)
+% defaults. What goes here, depends on your local system.
+
+% The following commands sets the default font encoding:
+%
+% \setupencoding [\s!default=texnansi]
+%
+% or:
+
+\setupencoding [\s!default=ec]
+
+% If you want the default berry names:
+%
+% \usetypescript [berry] [\defaultencoding]
+%
+% or, if you also want other encodings:
+
+\usetypescript [berry] [ec,t5,8r] % texnansi is never present
+
+% If you run into missing font metrics kind of problems,
+% you may want to uncomment:
+%
+% \usetypescript[adobekb] [\defaultencoding]
+
+% You can let \CONTEXT\ load the map files for \PDFTEX.
+
+\autoloadmapfilestrue
+
+% (1) you can prevent loading with:
+%
+% \preloadmapfile[<...somename...>.map]
+%
+% (2) otherwise, use this if you have a fast machine
+%
+% \resetmapfiles \usetypescript [map] [base] [all]
+%
+% (3) or this if it's a slow one:
+
+\resetmapfiles
+
+% more recent versions of pdftex support map loading on each page
+
+\donefalse \ifx\pdftexversion\undefined \else \ifnum\number\pdftexversion>119
+  \donetrue
+\fi \fi \ifdone
+
+  \loadmapfile[original-base.map]
+  \loadmapfile[original-ams-base.map]
+  \loadmapfile[original-ams-euler.map]
+  \loadmapfile[original-public-lm.map]
+
+\else
+
+  \loadmapfile[original-base.map]
+  \loadmapfile[texnansi-base.map]
+  \loadmapfile[ec-base.map]
+  \loadmapfile[qx-base.map]
+  \loadmapfile[t5-base.map]
+  %loadmapfile[il2-base.map]
+  %loadmapfile[pl0-base.map]
+  \loadmapfile[8r-base.map]
+
+  \loadmapfile[original-ams-base.map]
+  \loadmapfile[original-ams-euler.map]
+
+  \loadmapfile[original-public-lm.map]
+
+  %loadmapfile[texnansi-public-lm.map]
+  %loadmapfile[ec-public-lm.map]
+  %loadmapfile[qx-public-lm.map]
+  %loadmapfile[t5-public-lm.map]
+  %loadmapfile[pl0-public-lm.map]
+  %loadmapfile[il2-public-lm.map]
+
+\fi
+
+% When you have your own fonts installed, you may want to predefine:
+%
+% \usetypescriptfile[type-buy]
+
+% Some styles default to Lucida Bright. You can overload
+% Lucida by Times cum suis. Watch out, the pos collection
+% is not scaled relatively.
+%
+% \definetypescriptsynonym [lbr] [pos]
+
+% Compensate for missing files:
+%
+% \definefontsynonym [gbhei]   [gbsong]
+% \definefontsynonym [gbheisl] [gbsong]
+% \definefontsynonym [gbheisl] [gbsong]
+
+% Setting up a global figure path
+%
+% \setupexternalfigures [\c!directory={e:/fig/eps,t:/mine/figs}]
+%
+% Loading a specific special driver:
+%
+% \setupoutput [dviwindo]
+
+% Changing language defaults
+%
+% \setuplanguage
+%   [nl]
+%   [\c!leftquote=\upperleftsinglesixquote,
+%    \c!leftquotation=\upperleftdoublesixquote]
+
+% Loading local preferences, for example
+%
+% \input prag-gen % company styles
+% \input prag-log % more company styles
+%
+% Enabling run time \METAPOST\ (also enable \write18 in
+% texmf.cnf):
+
+\runMPgraphicstrue
+\runMPTEXgraphicstrue
+
+% This saves some runtime, but needs a format, which you can
+% make with 'texexec --make --alone metafun'. Make sure that
+% the mem files are moved to the used web2c path (locate with
+% 'kpsewhich plain.mem').
+
+\useMETAFUNformattrue
+
+% This can be a way to get things working on system with
+% name clashes. (Some \TeX's tend do search system wide.)
+
+\protectbufferstrue
+
+% You can enable a more extensive figure searching, but
+% normally this is not really needed and even annoying.
+%
+% \runutilityfiletrue
+
+% So far.
+
+\protect \endinput


Property changes on: trunk/Master/texmf-dist/tex/context/base/mkii/cont-sys.ori
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/context/base/mkii/context.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/context.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/context.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,436 @@
+    %D \module
+%D   [       file=context,
+%D        version=2008.28.10, % 1995.10.10,
+%D          title=\CONTEXT,
+%D       subtitle=\CONTEXT\ Format Generation,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\catcode`\{=1 \catcode`\}=2 \catcode`\#=6
+
+%D From the next string (which is set by the script that assembles the
+%D distribution) later on we will calculate a number that can be used
+%D by use modules to identify the feature level. Starting with version
+%D 2004.8.30 the low level interface is english. Watch out and adapt
+%D your styles an modules.
+
+\edef\contextformat {\jobname}
+\edef\contextversion{2023.09.18 21:10}
+
+%D For those who want to use this:
+
+\let\fmtname   \contextformat
+\let\fmtversion\contextversion
+
+%D Loading:
+
+\edef\mksuffix   {mkii}
+\edef\contextmark{MKII}
+
+\ifx\normalinput\undefined \let\normalinput\input \fi
+
+\def\loadmarkfile#1{\normalinput#1.\mksuffix\relax}
+
+%D First we load the system modules. These implement a lot of
+%D manipulation macros. The first one loads \PLAIN\ \TEX, as
+%D minimal as possible.
+
+\loadmarkfile{syst-ini}
+
+%D Some checking (more primitives are now defined):
+
+\ifdefined\defaultinterface   \else \def\defaultinterface  {english}         \fi
+%ifdefined\messageinterface   \else \let\messageinterface  \defaultinterface \fi
+\ifdefined\defaultlanguagetag \else \def\defaultlanguagetag{en}              \fi
+
+%D More core code.
+
+\loadmarkfile{syst-pln}
+
+\loadmarkfile{norm-tex}
+\loadmarkfile{norm-etx}
+\loadmarkfile{norm-ptx}
+\loadmarkfile{norm-xtx}
+\loadmarkfile{norm-ctx}
+
+\loadmarkfile{catc-ini}
+\loadmarkfile{catc-act}
+\loadmarkfile{catc-def}
+\loadmarkfile{catc-ctx}
+\loadmarkfile{catc-sym}
+\loadmarkfile{catc-xml}
+
+\loadmarkfile{syst-gen}
+\loadmarkfile{syst-ext}
+\loadmarkfile{syst-new}
+\loadmarkfile{syst-con}
+\loadmarkfile{thrd-trg}  % based on: David Carlisle
+
+\loadmarkfile{syst-fnt}
+\loadmarkfile{syst-str}
+\loadmarkfile{syst-rtp}
+
+\ifnum\texengine=\xetexengine
+    \loadmarkfile{xetx-ini}
+    \loadmarkfile{xetx-utf}
+    \loadmarkfile{xetx-chr}
+    \loadmarkfile{xetx-cls}
+\fi
+
+
+%D To enable selective loading, we say:
+
+\newif\ifCONTEXT \CONTEXTtrue % will disappear
+
+%D In order to conveniently load files, we need a few
+%D support modules.
+
+\loadmarkfile{supp-fil}
+\loadmarkfile{supp-dir}
+
+%D This is for mkii bibtex users who expect \LATEX\ commands.
+
+\loadmarkfile{supp-lat}
+
+%D After this we're ready for the multi||lingual interface
+%D modules.
+
+\loadmarkfile{mult-ini}
+\loadmarkfile{mult-fst}
+\loadmarkfile{mult-sys}
+\loadmarkfile{mult-def}
+\loadmarkfile{mult-chk}
+\loadmarkfile{mult-aux}
+
+%D Now we're ready for some general support modules. These
+%D modules implement some basic typesetting functionality.
+
+\loadmarkfile{core-var}
+\loadmarkfile{core-env}
+
+\loadmarkfile{supp-box}
+\loadmarkfile{supp-mrk}
+\loadmarkfile{supp-vis}
+\loadmarkfile{supp-fun}
+%loadmarkfile{supp-eps}
+\loadmarkfile{supp-spe}
+\loadmarkfile{supp-ran}
+\loadmarkfile{supp-mps}
+\loadmarkfile{supp-tpi}
+\loadmarkfile{supp-mat}
+\loadmarkfile{supp-ali}
+\loadmarkfile{supp-num}
+
+%D Verbatim typesetting is implemented in a separate class of
+%D modules. The pretty typesetting modules are loaded at run
+%D time.
+
+\loadmarkfile{verb-ini}
+
+%D The following modules are not sequentially dependent,
+%D i.e. they have ugly dependencies, which will be cleaned
+%D up by adding more overloading.
+
+%D When loading the font, color and special modules, we need a
+%D bit more advanced file handling as well as some general
+%D variables, and features, so next we load:
+
+\loadmarkfile{page-ins}
+\loadmarkfile{core-fil}
+\loadmarkfile{core-con}
+
+%D We already need some synonyms (patterns).
+
+\loadmarkfile{cont-fil}
+
+%D \CONTEXT\ does not implement its own table handling. We
+%D just go for the best there is and load \TABLE. Just to be
+%D sure we do it here, before we redefine \type{|}.
+
+\loadmarkfile{thrd-tab} % based on: Michael Wichura's TaBlE
+
+%D Here comes the last support modules. They take care of
+%D some language specific things.
+
+\loadmarkfile{supp-pat}
+
+%D The next few modules do what their names state. They
+%D load additional definition modules when needed.
+
+\loadmarkfile{regi-ini}
+\loadmarkfile{regi-syn}
+\loadmarkfile{enco-ini}
+%loadmarkfile{filt-ini}
+\loadmarkfile{hand-ini}
+
+\loadmarkfile{lang-ini}
+\loadmarkfile{lang-spe}
+\loadmarkfile{lang-lab}
+
+\loadmarkfile{unic-ini}
+
+\loadmarkfile{core-gen}
+\loadmarkfile{core-uti}
+\loadmarkfile{core-two}
+\loadmarkfile{core-stg}
+
+\loadmarkfile{spec-ini}
+\loadmarkfile{spec-mis}
+\loadmarkfile{spec-def}
+\loadmarkfile{spec-var}
+
+\loadmarkfile{colo-ini}
+\loadmarkfile{colo-ext}
+
+%D For the moment we load a lot of languages. In the future
+%D we'll have to be more space conservative.
+
+\loadmarkfile{lang-mis}
+\loadmarkfile{lang-url}
+
+\loadmarkfile{lang-ger}
+\loadmarkfile{lang-ita}
+\loadmarkfile{lang-sla}
+\loadmarkfile{lang-alt}
+\loadmarkfile{lang-ana}
+\loadmarkfile{lang-art}
+\loadmarkfile{lang-bal}
+\loadmarkfile{lang-cel}
+\loadmarkfile{lang-grk}
+\loadmarkfile{lang-ind}
+\loadmarkfile{lang-ura}
+\loadmarkfile{lang-vn}
+\loadmarkfile{lang-cyr}
+
+\loadmarkfile{typo-ini}
+
+%D All kind of symbols are handled in:
+
+\loadmarkfile{symb-ini}
+
+%D Sorting:
+
+\loadmarkfile{sort-ini}
+
+%D Next we load some core macro's. These implement the
+%D macros' that are seen by the users. The order of loading
+%D is important, due to dependancies.
+
+\loadmarkfile{spac-gen}
+\loadmarkfile{spac-grd}
+
+\loadmarkfile{strc-mar}
+\loadmarkfile{anch-pos}
+
+\loadmarkfile{buff-ver}
+\loadmarkfile{buff-ini}
+
+\loadmarkfile{pack-rul}
+\loadmarkfile{trac-vis}
+\loadmarkfile{strc-num}
+\loadmarkfile{tabl-com}
+\loadmarkfile{tabl-pln}
+\loadmarkfile{tabl-tab}
+\loadmarkfile{tabl-tsp}
+\loadmarkfile{scrn-nav}
+\loadmarkfile{strc-ref}
+\loadmarkfile{pack-obj}
+\loadmarkfile{strc-lst}
+\loadmarkfile{strc-itm}
+\loadmarkfile{strc-des}
+\loadmarkfile{strc-mat} % should come after math-pln etc
+\loadmarkfile{strc-syn}
+\loadmarkfile{core-sys}
+
+\loadmarkfile{page-ini}
+\loadmarkfile{page-bck}
+\loadmarkfile{page-not}
+\loadmarkfile{page-one}
+\loadmarkfile{page-lay}
+\loadmarkfile{page-log}
+\loadmarkfile{page-txt}
+\loadmarkfile{page-sid}
+\loadmarkfile{strc-flt}
+\loadmarkfile{page-mis}
+\loadmarkfile{page-mul}
+\loadmarkfile{page-set}
+\loadmarkfile{pack-lyr}
+\loadmarkfile{page-mak}
+\loadmarkfile{strc-pag}
+\loadmarkfile{page-lin}
+\loadmarkfile{page-par}
+\loadmarkfile{page-mar}
+
+\loadmarkfile{core-job} % why so late?
+
+% so far
+
+\loadmarkfile{strc-sec}
+\loadmarkfile{strc-swd}
+\loadmarkfile{strc-blk}
+
+\loadmarkfile{page-imp}
+\loadmarkfile{tabl-tbl}
+\loadmarkfile{scrn-int}
+\loadmarkfile{tabl-ntb}
+\loadmarkfile{tabl-nte}
+\loadmarkfile{tabl-ltb}
+
+%D A few more languages, that have specifics using core
+%D functionality:
+
+%loadmarkfile{lang-ara} % undefined
+\loadmarkfile{lang-chi}
+\loadmarkfile{lang-jap}
+
+%D How about fill||in fields and related stuff?
+
+\loadmarkfile{java-ini}
+\loadmarkfile{scrn-fld}
+\loadmarkfile{scrn-hlp}
+
+%D Registers can depend on fields, so we load that now.
+
+\loadmarkfile{strc-reg}
+
+%D Of course we do need fonts. There are no \TFM\ files
+%D loaded yet, so the format file is independant of their
+%D content. Here we also redefine \type{\it} as {\it italic}
+%D instead of italian.
+
+\loadmarkfile{font-ini}
+
+\ifnum\texengine=\xetexengine
+    \loadmarkfile{font-xtx}
+\fi
+
+\loadmarkfile{font-unk}
+\loadmarkfile{font-uni}
+\loadmarkfile{font-bfm}
+
+\loadmarkfile{enco-pfr}
+
+\loadmarkfile{type-ini}
+\loadmarkfile{type-set}
+\loadmarkfile{type-def}
+
+%D Properties. Don't ask.
+
+\loadmarkfile{prop-ini}
+\loadmarkfile{prop-lay}
+\loadmarkfile{prop-mis}
+
+%D Like languages, fonts, encodings and symbols, \METAPOST\
+%D support is also organized in its own class of modules.
+
+\loadmarkfile{meta-ini}
+\loadmarkfile{meta-tex}
+\loadmarkfile{meta-pdf}
+
+\loadmarkfile{meta-pag}
+
+%D Special page handling (maybe even later)
+
+\loadmarkfile{page-flw}
+\loadmarkfile{page-spr}
+\loadmarkfile{page-plg}
+\loadmarkfile{page-str}
+
+%D Anchoring graphics:
+
+\loadmarkfile{anch-pgr}
+\loadmarkfile{anch-bar}
+\loadmarkfile{anch-snc}
+
+%D Math.
+
+\loadmarkfile{math-pln}
+\loadmarkfile{math-ini}
+\loadmarkfile{math-arr}
+\loadmarkfile{math-frc}
+
+%D Now we're ready for more core modules.
+
+\loadmarkfile{core-fnt}
+\loadmarkfile{strc-not}
+\loadmarkfile{strc-lnt}
+
+\loadmarkfile{core-mis}
+
+\loadmarkfile{grph-trf}
+\loadmarkfile{grph-inc}
+\loadmarkfile{grph-fig}
+
+\loadmarkfile{core-par}
+
+\loadmarkfile{pack-box}
+\loadmarkfile{page-app}
+\loadmarkfile{meta-fig}
+
+%D Language specific spacing.
+
+\loadmarkfile{lang-spa}
+
+%D Bibliographies:
+
+\loadmarkfile{bibl-tra}
+
+%D Only the basic XML parser and remapper are part of the core.
+%D These macros are loaded last since they overload and|/|or
+%D extend previously defined ones.
+
+\loadmarkfile{xtag-ini}
+\loadmarkfile{xtag-ext}
+\loadmarkfile{xtag-exp}
+\loadmarkfile{xtag-pre}
+\loadmarkfile{xtag-xsd}
+\loadmarkfile{xtag-rng}
+
+%D How about this:
+
+\loadmarkfile{meta-xml}
+
+%D \TEX\ related logo's are always typeset in a special way.
+%D Here they come:
+
+\loadmarkfile{cont-log}
+
+%D This one overloads af few things:
+
+\loadmarkfile{core-ctx}
+
+%D Defaults go here (more will be moved to this module
+%D later):
+
+\loadmarkfile{core-ini}
+\loadmarkfile{core-def}
+
+%D Preloaded modules (some need xml support):
+
+%usemodule[x][res-04] % xml resource libraries
+%usemodule[x][res-08] % rlx runtime conversion
+\usemodule[x][res-12] % rli external indentification
+
+%D At run time, a few more files are loaded, like:
+%D
+%D \startitemize[packed]
+%D \item \type{cont-sys}: local (system dependant) defaults
+%D \item \type{cont-old}: substitutes for old (obsolete) macros
+%D \item \type{cont-new}: new macro implementations (for testing)
+%D \item \type{cont-fil}: filename and module synonyms
+%D \stopitemize
+
+\setupcurrentlanguage[\defaultlanguagetag]
+
+\setupencoding[default=ec]
+
+\usetypescript[fallback][\defaultencoding]
+
+\setupbodyfont[rm,12pt]
+
+\errorstopmode \dump \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-con.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-con.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-con.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,969 @@
+%D \module
+%D   [       file=core-con,
+%D        version=1997.26.08,
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=Conversion,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / Conversion}
+
+\unprotect
+
+\ifx\currentlanguage\undefined \let\currentlanguage\empty \fi
+\ifx\labeltext      \undefined \let\labeltext\firstofoneargument \fi
+
+%D This module deals with all kind of conversions from numbers
+%D and dates. I considered splitting this module in a support
+%D one and a core one, but to keep things simple as well as
+%D preserve the overview, I decided against splitting.
+
+\let\spr\firstofoneargument % separator
+\let\stp\firstofoneargument % stopper
+
+% cleaner, some day:
+%
+% \def\isolateseparators % etex only, even works with list separator overloading
+%   {\unexpanded\def\spr##1{{##1}}%
+%    \unexpanded\def\stp##1{{##1}}}
+
+% needed for arab :
+
+\def\isolateseparators % even works with list separator overloading
+  {\def\spr##1{{##1}}%
+   \def\stp##1{{##1}}}
+
+%D \macros
+%D   {numbers}
+%D
+%D First we deal with the dummy conversion of numbers using the
+%D \TEX\ primitive \type{\number}. The uppercase alternative is
+%D only there for compatibility with the other conversion
+%D macros. We could do without \type{#1} but this way we get
+%D rid of unwanted braces. For the savety we also define a
+%D non||sence uppercase alternative.
+%D
+%D \showsetup{numbers}
+%D
+%D \starttyping
+%D \def\numbers#1{\number#1}
+%D \def\Numbers#1{\number#1}
+%D \stoptyping
+%D
+%D Due to read ahead, as in \type{[\pagenumber\space]} the space will
+%D disappear, unless we use:
+
+\def\numbers#1{\purenumber{#1}}
+\def\Numbers#1{\purenumber{#1}}
+
+%D \macros
+%D   {romannumerals,Romannumerals}
+%D
+%D \TEX\ the program uses a rather tricky conversion from
+%D numbers to their roman counterparts. This conversion could
+%D of course be programmed in \TEX\ itself, but I guess Knuth
+%D found the programming trick worth presenting.
+%D
+%D \showsetup{romannumerals}
+%D \showsetup{Romannumerals}
+
+%D When upcasing the result, we just follow the text book rules
+%D of expansion. Later on we'll see some more uppercase tricks.
+
+\def\romannumerals#1%
+  {\romannumeral#1}
+
+%D For some years we had \unknown
+%D
+%D \starttyping
+%D \def\Romannumerals#1%
+%D   {\uppercase\expandafter{\romannumeral#1}}
+%D \stoptyping
+%D
+%D \unknown but we need to be fully expandable in order to get
+%D the utility output file right, so now we have the following
+%D solution. It was Patrick Gundlach who first noticed this
+%D ommision.
+
+\def\Romannumerals#1%
+  {\expandafter\doRomannumerals\number#1\relax}
+
+\def\doRomannumerals#1#2\relax % spaces after ifcase prevent \relax
+  {\ifnum#1#2<10
+     \ifcase0#1#2 \or I\or II\or III\or IV\or V\or VI\or VII\or VIII\or IX\fi
+   \else\ifnum#1#2<100
+     \ifcase0#1   \or X\or XX\or XXX\or XL\or L\or LX\or LXX\or LXXX\or XC\fi
+     \doRomannumerals#2\relax
+   \else\ifnum#1#2<1000
+     \ifcase0#1   \or C\or CC\or CCC\or CD\or D\or DC\or DCC\or DCCC\or CM\fi
+     \doRomannumerals#2\relax
+   \else\ifnum#1#2<4000
+     \ifcase0#1   \or M\or MM\or MMM\fi
+     \doRomannumerals#2\relax
+   \else
+     \uppercase\expandafter{\romannumeral#1#2}%
+   \fi\fi\fi\fi}
+
+%D \macros
+%D   {character,Character}
+%D
+%D Converting a number into a character can of course only
+%D be done with numbers less or equal to~26. At the cost of
+%D much more macros a faster conversion is possible, using:
+%D
+%D \starttyping
+%D \setvalue{char1}{a} \def\character#1{\getvalue{char#1}}
+%D \stoptyping
+%D
+%D But we prefer a simpel \type{\case}.
+%D
+%D \showsetup{character}
+%D \showsetup{Character}
+
+\def\unknowncharacter{-} % else in lists \relax
+
+%D Big case statements but pretty fast:
+
+\def\character#1%
+  {\ifcase#1\unknowncharacter
+     \or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m%
+     \or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z%
+   \else
+     \unknowncharacter
+   \fi}
+
+\def\Character#1%
+  {\ifcase#1\unknowncharacter
+     \or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or K\or L\or M%
+     \or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or Z%
+   \else
+     \unknowncharacter
+   \fi}
+
+%D \macros
+%D   {characters,Characters}
+%D
+%D Converting large numbers is supported by the next two
+%D macros. This time we just count on: $\cdots$~x, y, z, aa,
+%D ab, ac~$\cdots$.
+%D
+%D \showsetup{characters}
+%D \showsetup{Characters}
+
+%D The fully expandable alternative:
+
+\def\dodoconvertcharacters#1#2#3%
+  {\ifcase#3\else
+     \ifnum#3>#1
+       \expandafter\doconvertcharacters\expandafter#2\expandafter{\the\numexpr(#3+12)/#1-1\relax}%
+       \expandafter#2\expandafter{\the\numexpr#3-((#3+12)/#1-1)*#1\relax}%
+     \else
+       \expandafter#2\expandafter{\number#3}%
+     \fi
+   \fi}
+
+\def\doconvertcharacters{\dodoconvertcharacters{26}}
+
+\def\characters{\doconvertcharacters\character}
+\def\Characters{\doconvertcharacters\Character}
+
+%D \macros
+%D   {greeknumerals,Greeknumerals}
+%D
+%D Why should we only honour the romans, and not the greek?
+
+\def\greeknumerals#1%
+  {% no longer needed: \mathematics
+     {\ifcase#1\unknowncharacter\or
+        \alpha      \or \beta  \or \gamma   \or \delta   \or
+        \varepsilon \or \zeta  \or \eta     \or \theta   \or
+        \iota       \or \kappa \or \lambda  \or \mu      \or
+        \nu         \or \xi    \or \omicron \or \pi      \or
+        \varrho     \or \sigma \or \tau     \or \upsilon \or
+        \phi        \or \chi   \or \psi     \or \omega
+      \else
+        \unknowncharacter
+      \fi}}
+
+\def\Greeknumerals#1%
+  {% no longer needed: \mathematics
+     {\ifcase#1\unknowncharacter \or
+        \Alpha   \or \Beta  \or \Gamma   \or \Delta   \or
+        \Epsilon \or \Zeta  \or \Eta     \or \Theta   \or
+        \Iota    \or \Kappa \or \Lambda  \or \Mu      \or
+        \Nu      \or \Xi    \or \Omicron \or \Pi      \or
+        \Rho     \or \Sigma \or \Tau     \or \Upsilon \or
+        \Phi     \or \Xi    \or \Psi     \or \Omega
+      \else
+        \unknowncharacter
+      \fi}}
+
+%D \macros
+%D   {oldstylenumerals,oldstyleromannumerals}
+%D
+%D These conversions are dedicated to Frans Goddijn.
+
+\unexpanded\def\oldstylenumerals#1%
+  {{\os\number#1}}
+
+\unexpanded\def\oldstyleromannumerals#1%
+  {{\leftrulefalse\rightrulefalse\ss\txx\boxrulewidth.15ex
+    \ruledhbox spread .15em{\hss\uppercased{\romannumerals{#1}}\hss}}}
+
+%D \macros
+%D   {protectconversion}
+%D
+%D The previous two commands are not robust enough to be
+%D passed to \type{\write} en \type{\message}. That's why we
+%D introduce:
+
+\def\protectconversion
+  {\def\doconvertcharacters##1{##1}} % was \relax
+ %{\def\doconvertcharacters##1{\ifcase0##1 0\else##1\fi}} more save
+
+%D \macros
+%D   {normaltime,normalyear,normalmonth,normalday}
+%D
+%D The last part of this module is dedicated to converting
+%D dates. Because we want to use as meaningful commands as
+%D possible, and because \TEX\ already uses up some of those,
+%D we save the original meanings.
+
+\savenormalmeaning\time
+\savenormalmeaning\year
+\savenormalmeaning\month
+\savenormalmeaning\day
+
+%D \macros
+%D   {month,MONTH}
+%D
+%D Converting the month number into a month name is done
+%D using a case statement, abstact values and the label
+%D mechanism. This way users can easily redefine a label from
+%D for instance german into austrian.
+%D
+%D \starttyping
+%D \setuplabeltext [de] [january=J\"anner]
+%D \stoptyping
+%D
+%D Anyhow, the conversion looks like:
+
+\def\domonthtag#1%
+  {\ifcase#1%
+     \or \v!january   \or \v!february \or \v!march    \or \v!april
+     \or \v!may       \or \v!june     \or \v!july     \or \v!august
+     \or \v!september \or \v!october  \or \v!november \or \v!december
+   \else
+     \v!unknown
+   \fi}
+
+\def\doconvertmonthlong #1{\labeltext{\domonthtag{#1}}}
+\def\doconvertmonthshort#1{\labeltext{\domonthtag{#1}:\s!mnem}}
+
+\let\doconvertmonth\doconvertmonthlong
+
+%D We redefine the \TEX\ primitive \type{\month} as:
+%D
+%D \showsetup{month}
+%D \showsetup{MONTH}
+
+\def\monthlong {\doconvertmonthlong}
+\def\monthshort{\doconvertmonthshort}
+\def\month     {\doconvertmonth}
+
+\def\MONTH     #1{{\let\labeltext\LABELTEXT\month     {#1}}}
+\def\MONTHLONG #1{{\let\labeltext\LABELTEXT\monthlong {#1}}}
+\def\MONTHSHORT#1{{\let\labeltext\LABELTEXT\monthshort{#1}}}
+
+%D We never explicitly needed this, but Tobias Burnus pointed
+%D out that it would be handy to convert to the day of the
+%D week. In doing so, we have to calculate the total number of
+%D days, taking leapyears into account. For those who are
+%D curious:
+%D
+%D \startitemize[packed]
+%D \item  years that can be divided by 4 are leapyears
+%D \item  exept years that can be divided by 100
+%D \item  unless years can be divided by 400
+%D \stopitemize
+%D
+%D This makes the year 1900 into a normal year and 1996 and
+%D 2000 into leap years, right? Well, converting to string
+%D looks familiar:
+
+\def\doconvertday#1%
+  {\labeltext
+     {\ifcase#1
+      \or \v!sunday   \or \v!monday \or \v!tuesday  \or \v!wednesday
+      \or \v!thursday \or \v!friday \or \v!saturday \fi}}
+
+%D \macros
+%D   {getdayoftheweek, dayoftheweek}
+%D
+%D The conversion algoritm is an old one and a translation from
+%D a procedure written in MODULA~2 back in the 80's. I finaly
+%D found the 4--100-400 rules in some enclopedia. Look at this
+%D messy low level routine that takes the day, month and year
+%D as arguments:
+
+\newcount\normalweekday
+
+\def\getdayoftheweek#1#2#3%
+  {\bgroup
+   \!!counta#3\relax
+   \advance\!!counta \minusone
+   \!!countb\!!counta
+   \multiply\!!countb 365
+   \advance\!!countb \ifcase#2\relax
+     0 \or  0 \or 31 \or 59 \or 90 \or120 \or151 \or
+   181 \or212 \or243 \or273 \or304 \or334 \or365 \fi
+   \advance\!!countb #1\relax
+   \ifnum#2>2
+     \doifleapyearelse{#3}{\advance\!!countb 1}{}\relax
+   \fi
+   \!!countc\!!counta
+   \dosetdivision\!!countc4\!!countc
+   \advance\!!countb \!!countc
+   \!!countc\!!counta
+   \dosetdivision\!!countc{100}\!!countc
+   \advance\!!countb -\!!countc
+   \!!countc\!!counta
+   \dosetdivision\!!countc{400}\!!countc
+   \advance\!!countb \!!countc
+   \dosetmodulo\!!countb7\!!countb
+   \advance\!!countb \plusone
+   \@EA\egroup\@EA\normalweekday\the\!!countb\relax}
+
+\def\dayoftheweek#1#2#3%
+  {\getdayoftheweek{#1}{#2}{#3}\doconvertday{\normalweekday}}
+
+%D Using this macro in
+%D
+%D \startbuffer
+%D monday:   \dayoftheweek  {4} {5} {1992}
+%D friday:   \dayoftheweek {16} {6} {1995}
+%D monday:   \dayoftheweek {25} {8} {1997}
+%D saturday: \dayoftheweek {30} {8} {1997}
+%D tuesday:  \dayoftheweek  {2} {1} {1996}
+%D tuesday:  \dayoftheweek  {7} {1} {1997}
+%D tuesday:  \dayoftheweek {13} {1} {1998}
+%D friday:   \dayoftheweek  {1} {1} {2000}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D gives
+%D
+%D \startvoorbeeld
+%D \startlines
+%D \getbuffer
+%D \stoplines
+%D \stopvoorbeeld
+%D
+%D The macro \type {\getdayoftheweek} can be used to calculate
+%D the number \type {\normalweekday}.
+
+%D \macros
+%D   {weekday,WEEKDAY}
+%D
+%D The first one is sort of redundant. It takes the day
+%D number argument.
+%D
+%D \showsetup{weekday}
+%D \showsetup{WEEKDAY}
+
+\def\weekday
+  {\doconvertday}
+
+\def\WEEKDAY#1%
+  {{\let\labeltext\LABELTEXT\doconvertday{#1}}}
+
+%D \macros
+%D   {weekoftheday}
+%D
+%D {\em not yet implemented:}
+%D
+%D \starttyping
+%D \def\weekoftheday#1#2#3%
+%D  {}
+%D \stoptyping
+
+%D \macros
+%D   {doifleapyearelse,
+%D    getdayspermonth}
+%D
+%D Sometimes we need to know if we're dealing with a
+%D leapyear, so here is a testmacro:
+%D
+%D \starttyping
+%D \doifleapyearelse{year}{yes}{no}
+%D \stoptyping
+%D
+%D An example of its use can be seen in the macro
+%D
+%D \starttyping
+%D \getdayspermonth{year}{month}
+%D \stoptyping
+%D
+%D The number of days is available in the macro \type
+%D {\numberofdays}.
+
+\def\doifleapyearelse#1% #2#3%
+  {\bgroup
+   \!!doneafalse
+   \!!counta#1%
+   \dosetmodulo\!!counta4\!!countb
+   \ifcase\!!countb
+     \dosetmodulo\!!counta{100}\!!countb
+     \ifcase\!!countb \else \!!doneatrue \fi
+     \dosetmodulo\!!counta{400}\!!countb
+     \ifcase\!!countb \!!doneatrue \fi
+   \fi
+   \if!!donea
+     \egroup\@EA\firstoftwoarguments  % \def\next{#2}%
+   \else
+     \egroup\@EA\secondoftwoarguments % \def\next{#3}%
+   \fi}                               % \next}
+
+% untested but cleaner:
+%
+% \def\doifleapyearelse#1% #2#3%
+%   {\bgroup
+%    \dosetmodulo{#1}{400}\scratchcounter
+%    \ifcase\scratchcounter
+%    \else
+%      \dosetmodulo{#1}{100}\scratchcounter
+%      \ifcase\scratchcounter
+%        \scratchcounter\plusone
+%      \else
+%        \dosetmodulo{#1}4\scratchcounter
+%      \fi
+%    \fi
+%    \ifcase\scratchcounter
+%      \egroup\@EA\firstoftwoarguments
+%    \else
+%      \egroup\@EA\secondoftwoarguments
+%    \fi}
+
+\def\getdayspermonth#1#2%
+  {\doifleapyearelse{#1}
+     {\def\numberofdays{29}}
+     {\def\numberofdays{28}}%
+   \edef\numberofdays
+     {\ifcase#2 \or31\or\numberofdays\or31\or30\or
+        31\or30\or31\or31\or30\or31\or30\or31\fi}}
+
+%D \macros
+%D   {currentdate, date}
+%D
+%D We use these conversion macros in the date formatting
+%D macro:
+%D
+%D \showsetup{currentdate}
+%D
+%D This macro takes care of proper spacing and delivers for
+%D instance:
+%D
+%D \startbuffer
+%D \currentdate[weekday,day,month,year] % still dutch example
+%D \currentdate[WEEKDAY,day,MONTH,year] % still dutch example
+%D \stopbuffer
+%D
+%D \startvoorbeeld
+%D \startlines
+%D \getbuffer
+%D \stoplines
+%D \stopvoorbeeld
+%D
+%D depending of course on the keywords. Here we gave:
+%D
+%D \typebuffer
+%D
+%D If needed one can also add non||keywords, like in
+%D
+%D \startbuffer
+%D \currentdate[dd,--,mm,--,yy]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D or typeset: \getbuffer.
+%D
+%D When no argument is passed, the current date is given as
+%D specified per language (using \type{\installlanguage}).
+%D
+%D \showsetup{currentdate}
+%D
+%D \startbuffer
+%D \date
+%D \date[d=12,m=12,y=1998][weekday]
+%D \date[d=12,m=12,y=1998]
+%D \stopbuffer
+%D
+%D We can also typeset arbitrary dates, using the previous
+%D command.
+%D
+%D \typebuffer
+%D
+%D The date is specified by one character keys. When no date
+%D is given, we get the current date.
+%D
+%D \startlines
+%D \getbuffer
+%D \stoplines
+
+\def\kenmerkdatumpatroon{j,mm,dd} % jj,mm,dd changed at januari 1-1-2000
+
+\newsignal\datesignal
+
+\def\dobetweendates
+  {\ifdim\lastskip=\datesignal\relax\else
+     \unskip\space
+     \hskip\datesignal\relax
+   \fi}
+
+\newtoks \everycurrentdate
+
+\def\complexcurrentdate[#1]%
+  {\bgroup
+   \the\everycurrentdate
+   \def\betweendates{\let\betweendates\dobetweendates}%
+   % was \processcommacommandp[#1]\docomplexcurrentdate
+   \safeedef\ascii{\empty#1}% keep encoded chars
+   \@EA\processcommalist\@EA[\ascii]\docomplexcurrentdate
+   \ifdim\lastskip=\datesignal\relax
+     \unskip
+   \fi
+   \egroup}
+
+\def\docomplexcurrentdate#1%
+  {\lowercase{\edef\!!stringa{#1}}% permits usage in \smallcapped
+   \expanded{\processaction[\!!stringa]}% [#1]
+     [    \v!day=>\betweendates\the\normalday,
+        %\v!day+=>\betweendates\ordinaldaynumber\normalday,
+         \v!day+=>\betweendates\convertnumber{\v!day+}\normalday,
+        \v!month=>\betweendates\month\normalmonth,
+         \v!year=>\betweendates\the\normalyear,
+        \v!space=>\unskip\ \hskip\datesignal,% optimization -)
+              \ =>\unskip\ \hskip\datesignal,% optimization -)
+               d=>\convertnumber\v!day\normalday,
+             %d+=>\ordinaldaynumber\normalday,
+              d+=>\convertnumber{\v!day+}\normalday,
+               m=>\convertnumber\v!month\normalmonth,
+               j=>\convertnumber\v!year\normalyear,
+               y=>\convertnumber\v!year\normalyear,
+               w=>\betweendates\dayoftheweek\normalday\normalmonth\normalyear,
+              dd=>\ifnum\normalday  >9 \else0\fi\the\normalday,
+            %dd+=>\ordinaldaynumber{\ifnum\normalday >9 \else0\fi\the\normalday},
+             dd+=>\convertnumber{\v!day+}{\ifnum\normalday >9 \else0\fi\the\normalday},
+              mm=>\ifnum\normalmonth>9 \else0\fi\the\normalmonth,
+              jj=>\expandafter\gobbletwoarguments\the\normalyear,
+              yy=>\expandafter\gobbletwoarguments\the\normalyear,
+      \v!weekday=>\betweendates\dayoftheweek\normalday\normalmonth\normalyear,
+     \v!referral=>\expanded{\complexcurrentdate[\kenmerkdatumpatroon]},
+      \s!unknown=>\unskip
+                  % #1 and not the lowercased \commalistelement, vietnamese has text
+                  % {} because #1 can have comma, like: {\ ,}
+                  {#1}%
+                  \hskip\datesignal
+                  \def\betweendates{\let\betweendates\dobetweendates}]}
+
+\def\simplecurrentdate
+  {\expanded{\complexcurrentdate[\currentdatespecification]}}
+
+\definecomplexorsimple\currentdate
+
+\def\dodate[#1][#2]%
+  {\bgroup
+   \iffirstargument
+     \getparameters[\??da][d=\normalday,m=\normalmonth,y=\normalyear,#1]%
+     \normalday  \@@dad\relax
+     \normalmonth\@@dam\relax
+     \normalyear \@@day\relax
+     \ifsecondargument
+       \currentdate[#2]%
+     \else
+       \currentdate
+     \fi
+   \else
+     \currentdate
+   \fi
+   \egroup}
+
+\def\date
+  {\dodoubleempty\dodate}
+
+%D \macros
+%D   {currenttime}
+%D
+%D The currenttime is actually the jobtime. You can specify
+%D a pattern similar to the previous date macro using the
+%D keys \type {h}, \type {m} and a separator.
+
+\def\calculatecurrenttime
+  {\dosetdivision\time{60}\scratchcounter
+   \edef\currenthour  {\ifnum\scratchcounter<10 0\fi \the\scratchcounter}%
+   \dosetmodulo  \time{60}\scratchcounter
+   \edef\currentminute{\ifnum\scratchcounter<10 0\fi \the\scratchcounter}}
+
+\let\currenthour  \!!plusone
+\let\currentminute\!!plusone
+
+\def\currenttimespecification{h,:,m}
+
+\def\complexcurrenttime[#1]%
+  {\calculatecurrenttime
+   \processallactionsinset[#1]
+     [h=>\currenthour,m=>\currentminute,\s!unknown=>\commalistelement]}
+
+\def\simplecurrenttime
+  {\expanded{\complexcurrenttime[\currenttimespecification]}}
+
+\definecomplexorsimple\currenttime
+
+%D Because we're dealing with dates, we also introduce a few
+%D day loops:
+%D
+%D \starttyping
+%D \processmonth{year}{month}{command}
+%D \processyear{year}{command}{before}{after}
+%D \stoptyping
+%D
+%D The counters \type {\normalyear}, \type {\normalmonth} and
+%D \type{\normalday} can be used for for date manipulations.
+
+\long\def\processmonth#1#2#3% year month command
+  {\bgroup
+   \getdayspermonth{#1}{#2}%
+   \dostepwiserecurse1\numberofdays1%
+     {\normalyear #1\relax
+      \normalmonth#2\relax
+      \normalday  \recurselevel\relax
+      #3}%
+   \egroup}
+
+\def\lastmonth{12} % can be set to e.g. 1 when testing
+
+\long\def\processyear#1#2#3#4% year command before after
+  {\bgroup
+   \dorecurse\lastmonth
+     {\normalyear #1\relax
+      \normalmonth\recurselevel\relax
+      #3\processmonth\normalyear\normalmonth{#2}#4}%
+   \egroup}
+
+%D \macros
+%D   {defineconversion, convertnumber}
+%D
+%D Conversion involves the macros that we implemented earlier
+%D in this module.
+%D
+%D \showsetup{defineconversion}
+%D \showsetup{convertnumber}
+%D
+%D We can feed this command with conversion macros as well as
+%D a set of conversion symbols. Both need a bit different
+%D treatment.
+%D
+%D \starttyping
+%D \defineconversion [roman] [\romannumerals]
+%D \defineconversion [set 1] [$\star$,$\bullet$,$\ast$]
+%D \stoptyping
+%D
+%D You can define a language dependent conversion with:
+%D
+%D \starttyping
+%D \defineconversion [en] [whatever] [\something]
+%D \stoptyping
+
+% \def\dodefineconversion[#1][#2]%
+%   {\ConvertConstantAfter\doifinstringelse{,}{#2}
+%      {\scratchcounter=0
+%       \def\docommand##1%
+%         {\advance\scratchcounter 1
+%          \setvalue{\??cv#1\the\scratchcounter}{##1}}%
+%       \processcommalist[#2]\docommand
+%       \setvalue{\??cv#1}##1{\csname\??cv#1##1\endcsname}}
+%      {\setvalue{\??cv#1}{#2}}}
+%
+% \def\defineconversion%
+%   {\dodoubleargument\dodefineconversion}
+
+\def\defineconversion
+  {\dotripleempty\dodefineconversion}
+
+\def\dodefineconversion[#1][#2][#3]%
+  {\ifthirdargument
+     \dododefineconversion[#1][#2][#3]%
+   \else
+     \dododefineconversion[][#1][#2]%
+   \fi}
+
+%D \starttyping
+%D \def\dododefineconversion[#1][#2][#3]%
+%D   {\ConvertConstantAfter\doifinstringelse{,}{#3}
+%D      {\scratchcounter\zerocount
+%D       \def\docommand##1%
+%D         {\advance\scratchcounter \plusone
+%D          \setvalue{\??cv#1#2\the\scratchcounter}{##1}}%
+%D       \processcommalist[#3]\docommand
+%D       \setvalue{\??cv#1#2}##1{\executeifdefined{\??cv#1#2##1}\unknown}} % catch out-of-range numbers
+%D      {\setvalue{\??cv#1#2}{#3}}}
+%D \stoptyping
+
+%D This approach has the disadvantage that when you run out of
+%D symbols you get unknown results. The following implementation
+%D permits overloading of the converter:
+
+\def\dododefineconversion[#1][#2][#3]%
+  {\ConvertConstantAfter\doifinstringelse{,}{#3}
+     {\scratchcounter\zerocount
+      \def\docommand##1%
+        {\advance\scratchcounter \plusone
+         \setvalue{\??cv#1#2\the\scratchcounter}{##1}}%
+      \processcommalist[#3]\docommand
+      \setevalue{\??cv#1#2}##1%
+        {\noexpand\docheckedconversion{#1#2}{\the\scratchcounter}{##1}}}
+     {\setvalue{\??cv#1#2}{#3}}}
+
+\def\docheckedconversion#1#2#3% class maxnumber number
+  {\executeifdefined{\??cv#1#3}\unknown}
+
+%D When Gerben reported problems with footnote numbering per page,
+%D Taco came with the following wrap around solution. So, let's
+%D overload the checked conversion macro:
+
+\def\docheckedconversion#1#2#3% class maxnumber number
+  {\executeifdefined{\??cv#1\modulatednumber{#2}{#3}}\unknown}
+
+%D Taco's modulo code is implemented in the system module
+%D \type {syst-con}.
+
+%D If a conversion is just a font switch then we need to make sure
+%D that the number is indeed end up as number in the input, so we
+%D need to handle the second argument.
+
+\def\convertnumber#1#2%
+  {\csname\??cv
+     \ifcsname\??cv\currentlanguage#1\endcsname
+       \currentlanguage#1%
+     \else\ifcsname\??cv#1\endcsname
+       #1%
+     \else
+       \s!default
+     \fi\fi
+   \endcsname{\number#2}}
+
+\def\doifconversiondefinedelse#1%
+  {\ifcsname\??cv\currentlanguage#1\endcsname
+     \@EA\firstoftwoarguments
+   \else\ifcsname\??cv#1\endcsname
+     \@EAEAEA\firstoftwoarguments
+   \else
+     \@EAEAEA\secondoftwoarguments
+   \fi\fi}
+
+\def\doifelseconversionnumber#1#2% slow but seldom used
+  {\doifdefinedelse{\??cv#1#2}}
+
+%D Handy.
+
+\setvalue{\??cv:\c!n:\v!one  }{1}
+\setvalue{\??cv:\c!n:\v!two  }{2}
+\setvalue{\??cv:\c!n:\v!three}{3}
+\setvalue{\??cv:\c!n:\v!four }{4}
+\setvalue{\??cv:\c!n:\v!five }{5}
+
+\def\wordtonumber#1#2{\ifcsname\??cv:\c!n:#1\endcsname\csname\??cv:\c!n:#1\endcsname\else#2\fi}
+
+% \defineconversion[ctx][c,o,n,t,e,x,t]
+%
+% \doloop{\doifelseconversionnumber{ctx}{\recurselevel}{[\recurselevel]}{\exitloop}}
+
+\defineconversion [\s!default] [\numbers]
+
+%D As longs as symbols are linked to levels or numbers, we can
+%D also use the conversion mechanism, but in for instance the
+%D itemization macros, we prefer symbols because they can more
+%D easier be (partially) redefined. Symbols are implemented
+%D in another module.
+
+\defineconversion []   [\numbers] % the default conversion
+
+\defineconversion [a]  [\characters]
+\defineconversion [A]  [\Characters]
+\defineconversion [AK] [\smallcapped\characters]
+\defineconversion [KA] [\smallcapped\characters]
+
+\defineconversion [n]  [\numbers]
+\defineconversion [N]  [\Numbers]
+\defineconversion [m]  [\mediaeval]
+
+\defineconversion [i]  [\romannumerals]
+\defineconversion [I]  [\Romannumerals]
+\defineconversion [r]  [\romannumerals]
+\defineconversion [R]  [\Romannumerals]
+\defineconversion [KR] [\smallcapped\romannumerals]
+\defineconversion [RK] [\smallcapped\romannumerals]
+
+\defineconversion [g]  [\greeknumerals]
+\defineconversion [G]  [\Greeknumerals]
+
+\defineconversion [o]  [\oldstylenumerals]
+\defineconversion [O]  [\oldstylenumerals]
+\defineconversion [or] [\oldstyleromannumerals]
+
+\defineconversion [\v!character]     [\character]
+\defineconversion [\v!Character]     [\Character]
+
+\defineconversion [\v!characters]    [\characters]
+\defineconversion [\v!Characters]    [\Characters]
+
+\defineconversion [\v!numbers]       [\numbers]
+\defineconversion [\v!Numbers]       [\Numbers]
+\defineconversion [\v!mediaeval]     [\mediaeval]
+
+\defineconversion [\v!romannumerals] [\romannumerals]
+\defineconversion [\v!Romannumerals] [\Romannumerals]
+
+\defineconversion [\v!greek]         [\greeknumerals]
+\defineconversion [\v!Greek]         [\Greeknumerals]
+
+\defineconversion [arabicnumerals]   [\arabicnumerals]
+\defineconversion [persiannumerals]  [\arabicnumerals]
+
+\defineconversion [month]            [\doconvertmonthlong]
+\defineconversion [month:mnem]       [\doconvertmonthshort]
+
+% Some bonus ones:
+
+\defineconversion [\v!empty]         [\gobbleoneargument]
+\defineconversion [\v!none]          [\numbers]
+
+\ifx\symbol\undefined \def\symbol[#1]{#1} \fi % todo
+
+\defineconversion
+  [set 0]
+  [{\symbol[bullet]},
+   {\symbol[dash]},
+   {\symbol[star]},
+   {\symbol[triangle]},
+   {\symbol[circle]},
+   {\symbol[medcircle]},
+   {\symbol[bigcircle]},
+   {\symbol[square]}]
+
+\defineconversion
+  [set 1]
+  [\mathematics{\star},
+   \mathematics{\star\star},
+   \mathematics{\star\star\star},
+   \mathematics{\ddagger},
+   \mathematics{\ddagger\ddagger},
+   \mathematics{\ddagger\ddagger\ddagger},
+   \mathematics{\ast},
+   \mathematics{\ast\ast},
+   \mathematics{\ast\ast\ast}]
+
+\defineconversion
+  [set 2]
+  [\mathematics{*},
+   \mathematics{\dag},
+   \mathematics{\ddag},
+   \mathematics{**},
+   \mathematics{\dag\dag},
+   \mathematics{\ddag\ddag},
+   \mathematics{***},
+   \mathematics{\dag\dag\dag},
+   \mathematics{\ddag\ddag\ddag},
+   \mathematics{****},
+   \mathematics{\dag\dag\dag\dag},
+   \mathematics{\ddag\ddag\ddag\ddag}]
+
+\defineconversion
+  [set 3]
+  [\mathematics{\star},
+   \mathematics{\star\star},
+   \mathematics{\star\star\star},
+   \mathematics{\ddagger},
+   \mathematics{\ddagger\ddagger},
+   \mathematics{\ddagger\ddagger\ddagger},
+   \mathematics{\P},
+   \mathematics{\P\P},
+   \mathematics{\P\P\P},
+   \mathematics{\S},
+   \mathematics{\S\S},
+   \mathematics{\S\S\S},
+   \mathematics{\ast},
+   \mathematics{\ast\ast},
+   \mathematics{\ast\ast\ast}]
+
+%D \macros
+%D   {defineconversionvector,conversionnumber} % bad names so no danger for clash
+%D
+%D For Adam and friends \unknown
+%D
+%D \startitemize[persiannummerals]
+%D \item test \item test \item test \item test
+%D \stopitemize
+
+\def\defineconversionvector#1#2% name base
+  {\bgroup
+   % dirty trick
+   \uccode`\*=`\1
+   % plain:
+   % \uccode`\0=\numexpr#2+0\relax \uccode`\1=\numexpr#2+1\relax
+   % \uccode`\2=\numexpr#2+2\relax \uccode`\3=\numexpr#2+3\relax
+   % \uccode`\4=\numexpr#2+4\relax \uccode`\5=\numexpr#2+5\relax
+   % \uccode`\6=\numexpr#2+6\relax \uccode`\7=\numexpr#2+7\relax
+   % \uccode`\8=\numexpr#2+8\relax \uccode`\9=\numexpr#2+9\relax
+   % context:
+   \dostepwiserecurse091{\expandafter\uccode\expandafter`\recurselevel=\numexpr#2+\recurselevel}%
+   % prepared macro
+   \uppercase\expandafter{\expandafter\gdef\csname::cvn::#1::\endcsname##*%
+     {\ifcase##* 0\or1\or2\or3\or4\or5\or6\or7\or8\or9\fi}}%
+   \egroup}
+
+\def\conversionnumber#1#2%
+  {\ifcsname::cvn::#1::\endcsname
+     \expandafter\doconversionnumber\csname::cvn::#1::\expandafter\endcsname\number#2\relax
+   \else
+      \number#2%
+   \fi}
+
+\def\doconversionnumber#1#2%
+  {\ifx#2\relax
+     \expandafter\gobbleoneargument
+   \else
+     #1{#2}%
+     \expandafter\doconversionnumber
+   \fi#1}
+
+% actually mkiii code
+
+\ifnum\texengine=\xetexengine
+
+    \defineconversionvector{arabicnumerals}    {"0660}
+    \defineconversionvector{persiannumerals}   {"06F0}
+    \defineconversionvector{thainumerals}      {"0E50}
+    \defineconversionvector{devanagarinumerals}{"0966}
+    \defineconversionvector{gurmurkhinumerals} {"0A66}
+    \defineconversionvector{gujaratinumerals}  {"0AE6}
+    \defineconversionvector{tibetannumerals}   {"0F20}  % also "half numerals?"
+
+    \defineconversion[arabicnumerals]    [\conversionnumber{arabicnumerals}]
+    \defineconversion[persiannumerals]   [\conversionnumber{persiannumerals}]
+    \defineconversion[thainumerals]      [\conversionnumber{thainumerals}]
+    \defineconversion[devanagarinumerals][\conversionnumber{devanagarinumerals}]
+    \defineconversion[gurmurkhinumerals] [\conversionnumber{gurmurkhinumerals}]
+    \defineconversion[gujaratinumerals]  [\conversionnumber{gujaratinumerals}]
+    \defineconversion[tibetannumerals]   [\conversionnumber{tibetannumerals}]
+
+\fi
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-ctx.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-ctx.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-ctx.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,203 @@
+%D \module
+%D   [       file=core-ctx,
+%D        version=2006.08.16, % old stuff
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=Job Control,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / Job Control}
+
+\unprotect
+
+\chardef\preprocessmethod 2 % 0=no check 1=present_check 2=log_check
+\chardef\preprocessstate  0 % 1=found 2=not_present (skip)
+\chardef\preprocesslocal  0 % 0=no 1=yes
+\def    \preprocesssuffix {.prep}
+
+\def\loadctxpreplist
+  {\begingroup
+   \chardef\XMLtokensreduction\plusone
+   \ifcase\preprocessmethod
+     % no checking
+   \or
+     % simple checking
+   \or
+     \doiffileexistselse{./\jobname.ctl}
+       {\bgroup
+        \defineXMLenvironment[ctx:preplist][local=no]
+          {\doifelse{\XMLop{local}}{yes}
+              {\global\chardef\preprocesslocal\plusone
+               \writestatus\m!systems{loading ctx log file (local)}}%
+              {\writestatus\m!systems{loading ctx log file (specified)}}}
+          \donothing
+        \defineXMLenvironmentsave[ctx:prepfile][done=no]
+          \donothing
+          {\edef\readfilename{\XMLflush{ctx:prepfile}}%
+           \ifcase\preprocesslocal\else
+              \splitfilename\readfilename
+              \let\readfilename\splitoffbase
+           \fi
+           \writestatus\m!systems{registering \readfilename\space -> \XMLop{done}}%
+           \setxvalue{fp..\readfilename}{\XMLop{done}}}%
+        \processXMLfile{./\jobname.ctl}%
+        \egroup}%
+       {\global\chardef\preprocessmode\plusone}%
+   \fi
+   \global\let\loadctxpreplist\relax
+   \endgroup}
+
+\appendtoks\loadctxpreplist\to\everystarttext % will become: \prependtoks\loadctxpreplist\to\everyjob
+
+\def\docheckprepfile
+  {\ifcase\preprocessmethod
+     \iftracefiles\writestatus\m!systems{preprocessing - not needed}\fi
+     % no preprocessing
+   \or
+     % only check for existence
+     \iftracefiles\writestatus\m!systems{preprocessing - check existence of \readfilename\preprocesssuffix}\fi
+     \doiffileexistselse{\readfilename\preprocesssuffix}
+       {\chardef\preprocessstate\plusone}
+       \donothing
+   \or
+     % check when in list, otherwise assume normal file
+     \bgroup
+     \splitfilename\readfilename
+     \ifx\splitofftype\empty
+       % saveguard and speed up
+       \iftracefiles\writestatus\m!systems{preprocessing - no suffix}\fi
+       \egroup
+     \else\ifcase\preprocesslocal
+       % also ./ strippen
+       \iftracefiles\writestatus\m!systems{preprocessing - check presence of \readfilename\preprocesssuffix}\fi
+       \doifdefinedelse{fp..\readfilename}
+         {\egroup
+          \doiffileexistselse{\readfilename\preprocesssuffix}
+            {\chardef\preprocessstate\plusone}
+            {\chardef\preprocessstate\plustwo}}%
+         {\doifdefinedelse{fp.../\readfilename}
+            {\egroup
+             \edef\readfilename{./\readfilename}%
+             \doiffileexistselse{\readfilename\preprocesssuffix}
+               {\chardef\preprocessstate\plusone}
+               {\chardef\preprocessstate\plustwo}}%
+            {\doifdefinedelse{fp..\splitoffbase}%
+               {\egroup
+                \doiffileexistselse{\readfilename\preprocesssuffix}
+                  {\chardef\preprocessstate\plusone}
+                  {\chardef\preprocessstate\plustwo}}%
+               {\egroup}}}%
+     \else
+       % maybe just filecheck, why ctl
+       \iftracefiles\writestatus\m!systems{preprocessing - check local presence of \readfilename\preprocesssuffix}\fi
+       \doifdefinedelse{fp..\readfilename}
+         {\egroup
+          \doiffileexistselse{\readfilename\preprocesssuffix}
+            {\chardef\preprocessstate\plusone}
+            {\chardef\preprocessstate\plustwo}}%
+         {\egroup}%
+     \fi
+   \fi\fi}
+
+% beware, \readfilename keeps the original one, but we load and store the
+% suffixed with .prep file (if present)
+
+\def\doreadfile#1#2#3#4% beware, this one already works at format generation time!
+  {\sanitizefilename#2\to\readfilename
+   \ifx\readfilename\empty
+     % silently ignore
+   \else
+     \let\trackedfilename\readfilename
+     \chardef\preprocessstate\zerocount
+     \ifconditional\trackfilenames
+       \doifundefinedelse{fn..\trackedfilename}\donetrue\donefalse
+     \else
+       \donetrue
+     \fi
+     \ifdone
+       \checkfilename\readfilename
+       \ifcase\kindoffile
+         % not a full path or url, check for existence
+         \doifelsenothing{#1}
+           {\iftracefiles\writestatus\m!systems{searching for \readfilename\space on tex path}\fi
+            \def\next{\redoreadfile\readfilename{#3}{#4}}}%
+           {\iftracefiles\writestatus\m!systems{searching for \readfilename\space on #1}\fi
+            \def\next{\redoreadfile{\pathplusfile{#1}{\readfilename}}{#3}{#4}}}%
+       \else
+         % a full path or url, no further checking done
+         \docheckprepfile
+         \ifcase\preprocessstate
+           \doiffileexistselse\readfilename
+             {\iftracefiles\writestatus\m!systems{located \readfilename}\fi
+              \def\next{#3\dodoreadfile}}%
+             {\iftracefiles\writestatus\m!systems{not found \readfilename}\fi
+              \def\next{#4}}%
+         \or
+           \iftracefiles\writestatus\m!systems{located \readfilename\preprocesssuffix}\fi
+           \def\next{#3\dodoreadfile}%
+         \or
+           \iftracefiles\writestatus\m!systems{not found \readfilename\preprocesssuffix}\fi
+           \def\next{#4}%
+         \fi
+       \fi
+     \else
+       \edef\readfilename{\getvalue{fn..\readfilename}}% ??? is done !
+       \iftracefiles\writestatus\m!systems{already located \readfilename}\fi
+       \def\next{#3\dodoreadfile}%
+     \fi
+     \expandafter\next
+   \fi}
+
+\def\redoreadfile#1#2#3%
+  {\docheckprepfile
+   \ifcase\preprocessstate
+     \doiffileexistselse{#1}%
+       {\edef\readfilename{#1}%
+        \iftracefiles\writestatus\m!systems{#1 located}\fi
+        \def\next{#2\dodoreadfile}}%
+       {\iftracefiles\writestatus\m!systems{cannot locate #1}\fi
+        \advance\readlevel\minusone
+        \ifnum\readlevel>\zerocount
+          \edef\readfilename{\pathplusfile{\f!parentpath}{\readfilename}}%
+          \def\next{\redoreadfile\readfilename{#2}{#3}}%
+        \else
+          \def\next{#3}%
+        \fi}%
+   \or
+     \ifcase\preprocesslocal
+       \edef\readfilename{#1}% nor found
+     \else
+       % no path prepending
+     \fi
+     \iftracefiles\writestatus\m!systems{#1\preprocesssuffix\space located}\fi
+     \def\next{#2\dodoreadfile}%
+   \or
+     \def\next{#3}%
+   \fi
+   \next}
+
+\def\dodoreadfile % we provide hooks, for instance for \enableXML
+  {\ifconditional\trackfilenames
+     \setxvalue{fn..\trackedfilename}{\readfilename\ifcase\preprocessstate\or\preprocesssuffix\fi}%
+   \fi
+   \the\everybeforereadfile
+   \ifcase\preprocessstate
+     % no checking or not found when using method 1
+     \def\dodoreadfileindeed{\inputgivenfile\readfilename}%
+   \or
+     % found when using method 1 or 2
+     \def\dodoreadfileindeed{\inputgivenfile{\readfilename\preprocesssuffix}}%
+   \or
+     % not found when using method 2
+     \let\dodoreadfileindeed\relax
+   \fi
+   \dodoreadfileindeed
+   \relax
+   \the\everyafterreadfile}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-def.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-def.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-def.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,105 @@
+%D \module
+%D   [       file=core-def,
+%D        version=2002.05.07,
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=Defaults,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / Defaults}
+
+%D Here we collect settings that cannot be done earlier due to
+%D depedencies. More code will moved to this module later.
+
+\unprotect
+
+\usesymbols[mis,mvs] % 'glm' no longer needed due to lm
+
+\usesymbols[nav] \setupsymbolset[navigation 1]
+
+\setupinteraction[\c!symbolset=navigation 1]
+
+% initialization order:
+
+%appendtoks  \initializeluainstances               \to \everyjob
+\appendtoks  \showcontextbanner                    \to \everyjob
+\appendtoks  \initializenewlinechar                \to \everyjob
+\appendtoks  \checksystemcommandmode               \to \everyjob
+\appendtoks  \calculatecurrenttime                 \to \everyjob
+\appendtoks  \loadsystemfiles                      \to \everyjob
+
+\appendtoks  \loadoptionfile                       \to \everyjob % can load files !
+
+\appendtoks  \preloadfonts                         \to \everyjob
+\appendtoks  \settopskip                           \to \everyjob
+\appendtoks  \preloadlanguages                     \to \everyjob
+\appendtoks  \preloadspecials                      \to \everyjob
+\appendtoks  \openspecialfile                      \to \everyjob
+\appendtoks  \openutilities                        \to \everyjob
+\appendtoks  \splitjobfilename                     \to \everyjob
+\appendtoks  \checknotes                           \to \everyjob % depends on bodyfont
+\appendtoks  \initializeMPgraphics                 \to \everyjob % after loading system files
+\appendtoks  \reportsystemcommandmode              \to \everyjob
+\appendtoks  \initializemainlanguage               \to \everyjob
+\appendtoks  \settrue\trackfilenames               \to \everyjob
+\appendtoks  \newbackgroundfalse                   \to \everyjob % global
+
+\ifdefined\initializepagecounters
+    \appendtoks \initializepagecounters            \to \everyjob
+\fi
+
+\appendtoks  \directsetup{*runtime:options}        \to \everyjob % we could erase them afterwards % order can change
+\appendtoks  \directsetup{*runtime:modules}        \to \everyjob % we could erase them afterwards % order can change
+
+\appendtoks  \checkpreprocessor                    \to \everyjob
+
+%appendtoks  \page[\v!last] \page                  \to \everybye % moved to core-job, we need to do this cleaner
+\appendtoks  \ifarrangingpages\poparrangedpages\fi \to \everybye
+\appendtoks  \registerfileinfo[end]\jobname        \to \everybye
+\appendtoks  \savenofpages                         \to \everybye
+\appendtoks  \savenofsubpages                      \to \everybye
+
+\appendtoks  \closeutilities                       \to \everygoodbye
+\appendtoks  \stopcopyingblocks                    \to \everygoodbye
+\appendtoks  \closespecialfile                     \to \everygoodbye
+
+\prependtoks \resetutilities                       \to \everystarttext % moved 28-02-2002
+\prependtoks \loadtwopassdata                      \to \everystarttext % moved 28-02-2002
+\appendtoks  \checkreferences                      \to \everystarttext % new   04-12-1999
+
+% \appendtoks\everyjob\expandafter{\the\everyjob\checkpreprocessor}\to\everydump
+
+% temporary here:
+
+% \in \at \about \from \over
+
+\unexpanded\def\arg{\mathortext\normalmatharg\normaltextarg}
+
+% brrr
+% normally one does not want this to happen nested, maybe there
+% is more; non public vars btw, will become conditionals
+
+\ifx\writetoregisterfalse\undefined \else \appendtoks \writetoregisterfalse \to \everybeforeutilityread \fi
+\ifx\writetolistfalse    \undefined \else \appendtoks \writetolistfalse     \to \everybeforeutilityread \fi
+\ifx\notesenabledfalse   \undefined \else \appendtoks \notesenabledfalse    \to \everybeforeutilityread \fi
+
+\def\synctexwarning
+  {\ifdefined\synctex \ifnum\synctex=\zerocount \else
+     \writeline
+     \writestatus\m!systems{BEWARE: synctex functionality is enabled!}%
+     \writeline
+     \globallet\synctexwarning\relax
+   \fi \fi}
+
+\prependtoks \synctexwarning \to \everyjob
+\prependtoks \synctexwarning \to \everystarttext
+\appendtoks  \synctexwarning \to \everystoptext
+
+% last minute hacks
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-env.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-env.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-env.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,543 @@
+%D \module
+%D   [       file=core-env, % was core-new
+%D        version=1995.01.01, % wrong
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=New ones,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / Environments}
+
+\unprotect
+
+% Clean labels:
+
+\bgroup % some day this will go away / we could use detokenize as well
+
+% actually we should handle all discretionaries here
+
+\catcode`:=\@@active
+
+\gdef\cleanuplabel#1%
+  {\begingroup
+   \let:\lettercolon
+   \xdef\cleanlabel{#1}%
+   \endgroup}
+
+\gdef\cleanupprefixedlabel#1#2%
+  {\begingroup
+   \let:\lettercolon
+   \xdef\cleanprefix{#1}%
+   \xdef\cleanlabel {#2}%
+   \endgroup}
+
+\gdef\protectlabels
+  {\let:\lettercolon}
+
+\global\def\blabelgroup {\begingroup \let:\lettercolon}
+\global\let\elabelgroup  \endgroup
+
+\gdef\labelcsname
+  {\begingroup\let:\lettercolon
+   \expandafter\endgroup\csname}
+
+\gdef\labelvalue#1%
+  {\labelcsname#1\endcsname}
+
+\egroup
+
+%D Modes:
+%D
+%D \starttyping
+%D \enablemode[screen,paper,bound]
+%D
+%D \doifmodeelse {paper}        {this} {that}
+%D \doifmode     {paper,screen} {this}
+%D \doifnotmode  {paper,bound}  {that}
+%D
+%D \startmode [list]
+%D \stopmode
+%D
+%D \startnotmode [list]
+%D \stopnotmode
+%D \stoptyping
+%D
+%D system modes have a * as prefix
+%D
+%D Sometimes, we want to prevent a mode for being set. Think
+%D of situations where a style enables a mode, but an outer
+%D level style does not want that. Preventing can be
+%D considered a permanent disabling on forehand.
+
+\def\@mode@{@md@}
+
+\def\systemmodeprefix{*}
+
+\def\disabledmode    {0}
+\def\enabledmode     {1}
+\def\preventedmode   {2}
+
+% fast internal ones
+
+\def\setmode  #1{\@EA\let\csname\@mode@#1\endcsname\enabledmode }
+\def\resetmode#1{\@EA\let\csname\@mode@#1\endcsname\disabledmode}
+
+\def\setsystemmode  #1{\@EA\let\csname\@mode@\systemmodeprefix#1\endcsname\enabledmode }
+\def\resetsystemmode#1{\@EA\let\csname\@mode@\systemmodeprefix#1\endcsname\disabledmode}
+
+% user ones
+
+\def\preventmode{\unprotect\dopreventmode}
+\def\enablemode {\unprotect\doenablemode }
+\def\disablemode{\unprotect\dodisablemode}
+
+\def\dopreventmode[#1]{\protect\cleanuplabel{#1}\rawprocesscommalist[\cleanlabel]\dodopreventmode}
+\def\doenablemode [#1]{\protect\cleanuplabel{#1}\rawprocesscommalist[\cleanlabel]\dodoenablemode }
+\def\dodisablemode[#1]{\protect\cleanuplabel{#1}\rawprocesscommalist[\cleanlabel]\dododisablemode}
+
+\def\dodopreventmode#1%
+  {\@EA\let\csname\@mode@#1\endcsname\preventedmode}
+
+\def\dodoenablemode#1% mode can be relax
+  {\ifcase0\csname\@mode@#1\endcsname\relax
+     \@EA\let\csname\@mode@#1\endcsname\enabledmode
+   \fi}
+
+\def\dododisablemode#1%
+  {\ifcase0\csname\@mode@#1\endcsname\or
+     \@EA\let\csname\@mode@#1\endcsname\disabledmode
+   \fi}
+
+% handy for mp
+
+\def\booleanmodevalue#1% can be \relax
+  {\expandafter\ifx\csname\@mode@#1\endcsname\relax
+     fals%
+   \else\ifnum0\csname\@mode@#1\endcsname=0
+     fals%
+   \else
+     tru%
+   \fi\fi e}
+
+% check macros
+
+\newif\ifcheckedmode
+
+\def\dodocheckformode#1%
+  {\ifcase0\csname\@mode@#1\endcsname\or\checkedmodetrue\fi}
+
+\def\docheckformode#1#2#3% will be sped up with a quit
+  {\cleanuplabel{#3}%
+   \protect\checkedmodefalse\rawprocesscommacommand[\cleanlabel]\dodocheckformode
+   \ifcheckedmode\@EA#1\else\@EA#2\fi}
+
+\def\dodocheckforallmodes#1%
+  {\ifcase0\csname\@mode@#1\endcsname\relax\checkedmodefalse\or\or\checkedmodefalse\fi}
+
+\def\docheckforallmodes#1#2#3% will be sped up with a quit
+  {\cleanuplabel{#3}%
+   \protect\checkedmodetrue\rawprocesscommacommand[\cleanlabel]\dodocheckforallmodes
+   \ifcheckedmode\@EA#1\else\@EA#2\fi}
+
+% simple ones
+
+\def\doifmodeelse{\unprotect\dodoifmodeelse}
+\def\doifmode    {\unprotect\dodoifmode}
+\def\doifnotmode {\unprotect\dodoifnotmode}
+\def\startmode   {\unprotect\dostartmode}
+\def\startnotmode{\unprotect\dostartnotmode}
+
+\def\dodoifmodeelse
+  {\docheckformode\firstoftwoarguments\secondoftwoarguments}
+
+\def\dodoifmode
+  {\docheckformode\firstofoneargument\gobbleoneargument}
+
+\def\dodoifnotmode
+  {\docheckformode\gobbleoneargument\firstofoneargument}
+
+\long\def\dostartmode[#1]%
+  {\docheckformode\donothing\dostopmode{#1}}
+
+\long\def\dostartnotmode[#1]%
+  {\docheckformode\dostopnotmode\donothing{#1}}
+
+\let\stopmode   \donothing
+\let\stopnotmode\donothing
+
+\long\def\dostopmode   #1\stopmode   {}
+\long\def\dostopnotmode#1\stopnotmode{}
+
+\def\doifallmodeselse{\unprotect\dodoifallmodeselse}
+\def\doifallmodes    {\unprotect\dodoifallmodes}
+\def\doifnotallmodes {\unprotect\dodoifnotallmodes}
+\def\startallmodes   {\unprotect\dostartallmodes}
+\def\startnotallmodes{\unprotect\dostartnotallmodes}
+
+\def\dodoifallmodeselse
+  {\docheckforallmodes\firstoftwoarguments\secondoftwoarguments}
+
+\def\dodoifallmodes
+  {\docheckforallmodes\firstofoneargument\gobbleoneargument}
+
+\def\dodoifnotallmodes
+  {\docheckforallmodes\gobbleoneargument\firstofoneargument}
+
+\long\def\dostartallmodes[#1]%
+  {\docheckforallmodes\donothing\dostopallmodes{#1}}
+
+\long\def\dostartnotallmodes[#1]%
+  {\docheckforallmodes\dostopnotallmodes\donothing{#1}}
+
+\let\stopallmodes   \donothing
+\let\stopnotallmodes\donothing
+
+\long\def\dostopallmodes   #1\stopallmodes   {}
+\long\def\dostopnotallmodes#1\stopnotallmodes{}
+
+% Setups
+
+\let\startsetups\relax % to please dep checker
+\let\stopsetups \relax % to please dep checker
+
+\expanded
+  {\long\def\@EA\noexpand\csname\e!start\v!setups\endcsname
+     {\begingroup\noexpand\doifnextoptionalelse
+        {\noexpand\startsetupsA\@EA\noexpand\csname\e!stop\v!setups\endcsname}
+        {\noexpand\startsetupsB\@EA\noexpand\csname\e!stop\v!setups\endcsname}}}
+
+\letvalue{\e!stop\v!setups}\relax
+
+\unexpanded \def\setups{\doifnextbgroupelse\dosetupsA\dosetupsB} % {..} or [..]
+\unexpanded \def\setup {\doifnextbgroupelse\dosetups \dosetupsC} % {..} or [..]
+
+\def\dosetupsA  #1{\cleanuplabel{#1}\processcommacommand[\cleanlabel]\dosetups} % {..}
+\def\dosetupsB[#1]{\cleanuplabel{#1}\processcommacommand[\cleanlabel]\dosetups} % [..]
+\def\dosetupsC[#1]{\cleanuplabel{#1}\dosetups\cleanlabel} % [..]
+
+% \def\dosetups#1% the grid option will be extended to other main modes
+%   {\executeifdefined{\??su\ifgridsnapping\v!grid\fi:#1}
+%   {\executeifdefined{\??su                         :#1}\gobbleoneargument}\empty} % takes one argument
+%
+% \def\setupwithargument#1% the grid option will be extended to other main modes
+%   {\executeifdefined{\??su:#1}\gobbleoneargument}
+
+% better:
+
+% \def\dosetups#1% the grid option will be extended to other main modes
+%   {\executeifdefined{\??su\ifgridsnapping\v!grid\fi:#1}
+%   {\executeifdefined{\??su                         :#1}\gobbleoneargument}\empty} % takes one argument
+%
+% \def\setupwithargument#1% the grid option will be extended to other main modes
+%   {\executeifdefined{\??su:#1}\gobbleoneargument}
+
+% faster:
+
+\letvalue{\??su:\letterpercent}\gobbleoneargument
+
+\def\dosetups#1% the grid option will be extended to other main modes
+  {\csname\??su
+     \ifgridsnapping
+         \ifcsname\??su\v!grid:#1\endcsname\v!grid:#1\else\ifcsname\??su:#1\endcsname:#1\else:\letterpercent\fi\fi
+     \else
+                                                          \ifcsname\??su:#1\endcsname:#1\else:\letterpercent\fi
+     \fi
+   \endcsname\empty} % takes one argument
+
+\def\setupwithargument#1% the grid option will be extended to other main modes
+  {\csname\??su:\ifcsname\??su:#1\endcsname#1\else\letterpercent\fi\endcsname}
+
+\let\directsetup\dosetups
+
+% somehow fails ...
+%
+% \letvalue{\??su:..}\gobbleoneargument
+%
+% \def\dosetups#1% the grid option will be extended to other main modes
+%   {\csname    \??su
+%      \ifcsname\??su\ifgridsnapping\v!grid\fi:#1\endcsname\v!grid:#1\else
+%      \ifcsname\??su                         :#1\endcsname       :#1\else
+%                                                                 :..\fi\fi
+%    \endcsname\empty} % takes one argument
+%
+% \def\setupwithargument#1% the grid option will be extended to other main modes
+%   {\csname\??su:\ifcsname\??su:#1\endcsname#1\else..\fi\endcsname}
+
+\let\directsetup\dosetups
+
+\def\doifsetupselse#1% to be done: grid
+  {\doifdefinedelse{\??su:#1}}
+
+\chardef\setupseolmode\plusone
+
+\def\startsetups     {\xxstartsetups\plusone  \stopsetups     } \let\stopsetups     \relax
+\def\startlocalsetups{\xxstartsetups\plusone  \stoplocalsetups} \let\stoplocalsetups\relax
+\def\startrawsetups  {\xxstartsetups\zerocount\stoprawsetups  } \let\stoprawsetups  \relax
+\def\startxmlsetups  {\xxstartsetups\plustwo  \stopxmlsetups  } \let\stopxmlsetups  \relax
+
+\def\xxstartsetups#1#2%
+  {\begingroup\chardef\setupseolmode#1\doifnextoptionalelse{\startsetupsA#2}{\startsetupsB#2}}
+
+\def\startsetupsA#1% [ ] delimited
+  {\ifcase\setupseolmode\or\catcode`\^^M\@@ignore\or\catcode`\^^M\@@ignore\catcode`\|\@@other\fi
+   \dotripleempty\dostartsetups[#1]}
+
+\def\startsetupsB#1#2 % space delimited
+  {\ifcase\setupseolmode\or\catcode`\^^M\@@ignore\or\catcode`\^^M\@@ignore\catcode`\|\@@other\fi
+   \dodostartsetups#1\empty{#2}}
+
+\def\startsetupsC[#1][#2][#3]{\dodostartsetups#1{#2}{#3}}   % [..] [..]
+\def\startsetupsD[#1][#2][#3]{\dodostartsetups#1\empty{#2}} % [..]
+
+\def\dostartsetups
+  {\ifthirdargument\@EA\startsetupsC\else\@EA\startsetupsD\fi}
+
+% \long\def\dodostartsetups#1#2#3% watch out: not \grabuntil
+%   {\dograbuntil#1{\endgroup\dodoglobal\long\setvalue{\??su#2:#3}}} % \doglobal
+%
+% better:
+
+% \long\def\dodostartsetups#1#2#3% watch out: not \grabuntil
+%   {\cleanuplabel{\??su#2:#3}\dograbuntil#1{\endgroup\dodoglobal\long\setvalue\cleanlabel}} % \doglobal
+
+% \long\def\dodostartsetups#1#2#3%
+%   {\cleanuplabel{\??su#2:#3}%
+%    \long\def\dododostartsetups##1#1{\endgroup\dodoglobal\long\setvalue\cleanlabel####1{##1}}\dododostartsetups}
+
+\long\def\dodostartsetups#1#2#3%
+  {\cleanuplabel{\??su#2:#3}%
+   \long\def\dododostartsetups##1#1%
+     {\endgroup
+      \dodoglobal % bah
+      \long\expandafter\setvalue\expandafter\cleanlabel\expandafter####\expandafter1\expandafter{##1}}%
+   \dododostartsetups\empty} % the empty trick prevents the { } in {arg} from being eaten up
+
+\def\systemsetupsprefix{*}
+
+\def\systemsetups#1{\dosetups{\systemsetupsprefix#1}}
+
+\def\resetsetups[#1]% see x-fo for usage
+  {\ifundefined{\??su\ifgridsnapping\v!grid\fi:#1}%
+     \dodoglobal\letbeundefined{\??su:#1}%
+   \else
+     \dodoglobal\letbeundefined{\??su\ifgridsnapping\v!grid\fi:#1}%
+   \fi}
+
+% or
+%
+% \def\resetsetups[#1]%
+%   {\letbeundefined
+%      {\??su:%
+%       \ifundefined{\??su\ifgridsnapping\v!grid\fi:#1}#1\else\ifgridsnapping\v!grid\fi%
+%       #1}}
+

+%D new and beta and will become a module instead
+
+\def\defineshortcut
+  {\dotripleargument\dodefineshortcut}
+
+\def\dodefineshortcut[#1][#2][#3]%
+  {\ifthirdargument
+     \doifelsenothing{#1}
+       {\dododefineshortcut[<>][#2][#3]}
+       {\dododefineshortcut[#1][#2][#3]}%
+   \else\ifsecondargument
+     \dododefineshortcut[<>][#1][#2]%
+   \else
+     \dododefineshortcut[<>][][#1]%
+   \fi\fi}
+
+\def\dododefineshortcut[#1#2][#3][#4]% #1 is the trigger, #2 the delimiter/tag
+  {\doifundefined{\??te\??te\string#2}{\letvalue{\??te\??te\string#2}=#1}%
+   \defineactivecharacter #1 {\@EA\doshortcut\string#2} %
+   \getparameters
+     [\??te\string#2#3]
+     [\c!commands=,\c!command=,\c!style=,\c!color=,#4]}
+
+\def\doshortcut#1%
+  {\ifmmode
+     \getvalue{\??te\??te#1}%
+   \else
+     \bgroup
+     \catcode`#1=\@@other
+     \def\dodoshortcut##1#1%
+       {\def\shorttag{\??te#1}%
+        \def\shortcut{##1}%
+        \dododoshortcut##1:\end}%
+     \@EA\dodoshortcut
+   \fi}
+
+\def\dododoshortcut#1:#2\end
+  {\doifelsenothing{#2}
+     {\doifundefinedelse{\shorttag\c!commands}
+        {\shortcut}
+        {\@EA\dodododoshortcut\@EA\shorttag\@EA:\shortcut:\end}}
+     {\doifundefinedelse{\shorttag#1\c!commands}
+        {\shortcut}
+        {\dodododoshortcut\shorttag#1:#2\end}}%
+   \egroup}
+
+\def\dodododoshortcut#1:#2:\end
+  {\getvalue{#1\c!commands}%
+   \doattributes{#1}\c!style\c!color{\getvalue{#1\c!command}{#2}}}
+
+%D \defineshortcut     [style=type]
+%D \defineshortcut [b] [style=bold]
+%D \defineshortcut [e] [style=\em]
+%D \defineshortcut [t] [style=type]
+%D \defineshortcut [c] [style=cap]
+%D \defineshortcut [k] [style=cap]
+%D \defineshortcut [u] [style=type,command=\hyphenatedurl]
+%D
+%D \startlines
+%D test <ziezo> test
+%D test test <t:ziezo>
+%D test test <b:ziezo>
+%D test test <w:ziezo>
+%D zus<>zo zus<:>zo zus<::>zo
+%D test test <t:ziezo> dat (ziezo)
+%D test test <t::ziezo> dat (:ziezo)
+%D test test <t:ziezo:> dat (ziezo:)
+%D test test <t:zi:ezo:> dat (zi:ezo:)
+%D well, <u:http://www.pragma-ade.nl> looks fuzzy
+%D $10<20$
+%D \stoplines
+%D
+%D \defineshortcut [<>] [i] [style=\it]
+%D \defineshortcut [()] [b] [style=\bf]
+%D \defineshortcut [++] [s] [style=\sl]
+%D \defineshortcut [//] [u] [style=\underbars]
+%D \defineshortcut [--] [a] [style=\overstrike]
+%D
+%D \startlines
+%D it seems <i:to work> well
+%D it seems (b:to work) well
+%D it seems +s:to work+ well
+%D it seems /u:to work/ well
+%D it seems -a:to work- well
+%D \stoplines
+

+%D \macros
+%D   {setvariables,getvariable,getvariabledefault}
+%D
+%D \starttyping
+%D \setvariables[xx][title=]
+%D \setvariables[xx][title=test test]
+%D \setvariables[xx][title=test $x=1$ test]   % fatal error reported
+%D \setvariables[xx][title=test {$x=1$} test]
+%D \setvariables[xx][title]                   % fatal error reported
+%D \setvariables[xx][titletitel=e]
+%D \stoptyping
+
+\def\??vars{@@vars}
+
+\def\setvariables {\dotripleargument\dosetvariables[\getrawparameters ]}
+\def\setevariables{\dotripleargument\dosetvariables[\getraweparameters]}
+\def\setgvariables{\dotripleargument\dosetvariables[\getrawgparameters]}
+\def\setxvariables{\dotripleargument\dosetvariables[\getrawxparameters]}
+
+\def\globalsetvariables % obsolete
+  {\dotripleargument\dosetvariables[\globalgetrawparameters]}
+
+\long\def\dosetvariables[#1][#2][#3]% tricky, test on s-pre-60
+  {\errorisfataltrue
+   \doifelse{#2}\currentvariableclass
+     {#1[\??vars:#2:][#3]}%
+     {\pushmacro\currentvariableclass
+      \def\currentvariableclass{#2}%
+      \getvariable{#2}\s!reset
+      #1[\??vars:#2:][#3]%
+      \getvariable{#2}\s!set
+      \popmacro\currentvariableclass}%
+   \errorisfatalfalse}
+
+\long\def\setvariable #1#2#3{\long\setvalue {\??vars:#1:#2}{#3}}
+\long\def\setevariable#1#2#3{\long\setevalue{\??vars:#1:#2}{#3}}
+\long\def\setgvariable#1#2#3{\long\setgvalue{\??vars:#1:#2}{#3}}
+\long\def\setxvariable#1#2#3{\long\setxvalue{\??vars:#1:#2}{#3}}
+
+\def\getvariable#1#2% to be sped up
+  {\csname
+     \ifcsname\??vars:#1:#2\endcsname\??vars:#1:#2\else\s!empty\fi
+   \endcsname}
+
+\def\showvariable#1#2%
+  {\showvalue{\ifcsname\??vars:#1:#2\endcsname\??vars:#1:#2\else\s!empty\fi}}
+
+\let\currentvariableclass\empty
+
+%D \macros
+%D   {doifelsevariable,doifvariable,doifnotvariable}
+%D
+%D A few trivial macros:
+
+\def\doifelsevariable#1#2%
+  {\ifcsname\??vars:#1:#2\endcsname
+     \expandafter\firstoftwoarguments
+   \else
+     \expandafter\secondoftwoarguments
+   \fi}
+
+\def\doifvariable#1#2%
+  {\ifcsname\??vars:#1:#2\endcsname
+     \expandafter\firstofoneargument
+   \else
+     \expandafter\gobbleoneargument
+   \fi}
+
+\def\doifnotvariable#1#2%
+  {\ifcsname\??vars:#1:#2\endcsname
+     \expandafter\gobbleoneargument
+   \else
+     \expandafter\firstofoneargument
+   \fi}
+
+\def\getvariabledefault#1#2% #3% can be command, so no ifcsname here
+  {\executeifdefined{\??vars:#1:#2}}% {#3}
+
+%D \macros
+%D   {checkvariables}
+%D
+%D I'll probably forget that this on exists.
+
+\def\checkvariables
+  {\dodoubleargument\docheckvariables}
+
+\def\docheckvariables
+  {\dogetparameters\docheckrawvalue}
+
+\def\docheckrawvalue#1#2#3%
+  {\doifundefined   {\??vars:#1:#2}{\setvalue{\??vars:#1:#2}{#3}}
+  {\doifvaluenothing{\??vars:#1:#2}{\setvalue{\??vars:#1:#2}{#3}}}}
+

+% \def\setupenv{\dodoubleargument\rawgetparameters[\??en]}
+%
+% \def\doifenvelse#1{\doifdefinedelse{\??en#1}} % speed up
+% \def\doifenv    #1{\doifdefined    {\??en#1}} % speed up
+% \def\doifnotenv #1{\doifundefined  {\??en#1}} % speed up
+%
+% \def\env#1{\csname\??en#1\endcsname}
+%
+% \def\envvar#1#2%
+%   {\ifcsname\??en#1\endcsname
+%      \csname\??en#1\endcsname\else#2%
+%    \fi}
+
+% low level change, now also accessible as \getvariable{environment}{...}; the
+% next macros will become obsolete some day in favor of normal variables
+
+\def\s!environment{environment}
+
+\def\setupenv   {\dotripleargument\dosetvariables[\getrawparameters][\s!environment]}
+\def\doifenvelse{\doifelsevariable  \s!environment}
+\def\doifenv    {\doifvariable      \s!environment}
+\def\doifnotenv {\doifnotvariable   \s!environment}
+\def\env        {\getvariable       \s!environment}
+\def\envvar     {\getvariabledefault\s!environment}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-fil.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-fil.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-fil.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,357 @@
+%D \module
+%D   [       file=core-fil,
+%D        version=1997.11.15,
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=File Support,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / File Support}
+
+\unprotect
+
+%D Files registered as temporary files will be deleted after a
+%D run by texexec:
+
+% \starttext
+%     \immediate\openout\scratchwrite=oeps.tmp
+%     \immediate\write\scratchwrite{oeps}
+%     \immediate\closeout\scratchwrite
+%     \registertempfile{oeps.tmp}
+%     \typefile{oeps.tmp}
+% \stoptext
+
+\let\usedtempfile\gobbleoneargument
+
+\def\registertempfile#1{\immediatewriteutility{f t {#1}}}
+
+%D \macros
+%D   {definefilesynonym}
+%D
+%D One of the problems with loading files is that their names
+%D can depend on the interface language. We therefore need a
+%D method to define filesynonyms. The actual synonyms are
+%D defined elsewhere, but look like:
+%D
+%D \starttyping
+%D \definefilesynonym [chemic]  [chemie]
+%D \definefilesynonym [einheit] [unit]
+%D \definefilesynonym [unit]    [unit]
+%D \stoptyping
+%D
+%D So we can say in english:
+%D
+%D \starttyping
+%D \usemodules[pictex,chemic,unit]
+%D \stoptyping
+%D
+%D and in dutch:
+%D
+%D \starttyping
+%D \usemodules[pictex,chemie,unit]
+%D \stoptyping
+
+% will be redone in mkiv
+
+\def\definefilesynonym
+  {\dodoubleempty\dodefinefilesynonym}
+
+\def\dodefinefilesynonym[#1][#2]%
+  {\ifundefined{\??fs#1}\else
+     \doifnotvalue{\??fs#1}{#2}{\showmessage\m!files1{#1 (#2),\getvalue{\??fs#1}}}%
+   \fi
+   \doifelse{#1}{#2}{\letbeundefined{\??fs#1}{#2}}{\setevalue{\??fs#1}{#2}}}
+
+%D \macros
+%D   {definefilefallback}
+
+\def\definefilefallback
+  {\dodoubleargument\dodefinefilefallback}
+
+\def\dodefinefilefallback[#1][#2]%
+  {\doifnotfile{#1}
+     {\def\docommand##1{\doiffile{##1}{\definefilesynonym[#1][##1]\quitcommalist}}%
+      \processcommalist[#2]\docommand}}
+
+%D \macros
+%D   {truefilename}
+%D
+%D At the system level such a filename can be called upon by
+%D saying:
+%D
+%D \starttyping
+%D \truefilename{filename/filesynonym}
+%D \stoptyping
+%D
+%D The implementation shows that nesting is supported.
+
+\def\truefilename#1%
+  {\ifundefined{\??fs#1}#1\else\truefilename{\csname\??fs#1\endcsname}\fi}
+
+%D \macros
+%D   {makeshortfilename}
+%D
+%D To prevent cross platform problems with filenames, we
+%D lowercase them as well as only use the first 8~characters.
+%D
+%D \starttyping
+%D \def\domakeshortfilename[#1#2#3#4#5#6#7#8#9]%
+%D   {\lowercase{\edef\shortfilename{#1#2#3#4#5#6#7#8.}}%
+%D    \expandafter\beforesplitstring\shortfilename\at.\to\shortfilename}
+%D
+%D \def\makeshortfilename[#1]%
+%D   {\edef\fullfilename{#1.........}%
+%D    \expanded{\domakeshortfilename[\fullfilename]}}
+%D \stoptyping
+%D
+%D In 2005 there is no need for the 8~character limit any more, so:
+
+\def\makeshortfilename[#1]% no need for further cleanup and shortening
+  {\lowercase{\edef\shortfilename{#1.}}%
+   \expandafter\beforesplitstring\shortfilename\at.\to\shortfilename}
+
+%D \macros
+%D   {usemodule}
+%D
+%D Most of \CONTEXT is preloaded in the format file. Some very
+%D domain specific typesetting topics are however dealt with in
+%D separate modules, e.g. typesetting of chemical structure
+%D formulas. These modules are loaded by:
+%D
+%D \showsetup{usemodule}
+%D
+%D More information on the specific modules can be found in
+%D their dedicated manuals. We use \type {\next} so that we
+%D can \type {\end} in modules.
+%D
+%D In \MKIV\ we load the \type {mkiv} file when there is a \type
+%D {tex} file on the same path but in \MKII\ we start with the \type
+%D {tex} file as in many cases a \type {mkii} will be the same as an
+%D (old) \type {tex} one simply because we don't update drastically
+%D (or load a mark file indirectly).
+
+\newconditional\moduleisloaded
+
+\def\dododousemodules#1#2% no \unprotect/\protect when loading,
+  {\relax                % since we need to use ? ! unprotected
+   \ifconditional\moduleisloaded % sometimes (see xtag-map)
+     \let\next\relax % or: \expandafter\gobbleoneargument
+   \else
+     \makeshortfilename[#1\truefilename{#2}]% beware: *- is not part of syn
+     \doifelseflagged\shortfilename
+       {\showmessage\m!systems7{#2 (line \number\inputlineno)}%
+        \settrue\moduleisloaded
+        \let\next\relax}
+       {\doglobal\setflag\shortfilename
+        \def\next
+          {\startreadingfile
+             \readsysfile\shortfilename
+               {\showmessage\m!systems5{#2}\settrue\moduleisloaded}
+               {\readsysfile{\shortfilename.\mksuffix} % new
+                  {\showmessage\m!systems5{#2 (\mksuffix)}\settrue\moduleisloaded}
+                  \donothing}%
+           \stopreadingfile}}%
+   \fi
+   \next}
+
+\def\dodousemodules#1#2%
+  {\setfalse\moduleisloaded
+   \doifelsenothing{#1}
+     {\dododousemodules\f!moduleprefix {#2}%
+      \dododousemodules\f!privateprefix{#2}%
+      \dododousemodules\f!styleprefix  {#2}%
+      \dododousemodules\f!xstyleprefix {#2}%
+      \dododousemodules\f!thirdprefix  {#2}%
+      \dododousemodules\empty          {#2}}% new, fall back on raw name
+     {\dododousemodules{#1-}{#2}}%
+   \ifconditional\moduleisloaded\else
+     \showmessage\m!systems6{#2}%
+     \appendtoks\showmessage\m!systems6{#2}\to\everynotabene
+   \fi}
+
+% \def\usemodules
+%   {\dodoubleempty\dousemodules}
+%
+% \def\dousemodules[#1][#2]%
+%   {\ifsecondargument
+%      \doifelsenothing{#2}
+%        {\let\next\relax}
+%        {\def\next{\processcommalist[#2]{\dodousemodules{#1}}}}%
+%    \else
+%      \def\next{\usemodules[][#1]}%
+%    \fi
+%    \next}
+%
+% \let\usemodule\usemodules
+
+\def\usemodules
+  {\dotripleempty\dousemodules}
+
+\def\dousemodules[#1][#2][#3]%
+  {\pushmacro\currentmodule
+   \pushmacro\currentmoduleparameters
+   \let\currentmoduleparameters\empty
+   \ifthirdargument
+     \doifelsenothing{#2}
+       {\let\next\relax}
+       {\def\currentmoduleparameters{#3}%
+        \def\next{\processcommalist[#2]{\dodousemodules{#1}}}}%
+   \else\ifsecondargument
+     \doifelsenothing{#2}
+       {\let\next\relax}
+       {\doifassignmentelse{#2}
+          {\def\currentmoduleparameters{#2}%
+           \def\next{\processcommalist[#1]{\dodousemodules{}}}}
+          {\def\next{\processcommalist[#2]{\dodousemodules{#1}}}}}%
+   \else
+     \def\next{\processcommalist[#1]{\dodousemodules{}}}%
+   \fi\fi
+   \next
+   \popmacro\currentmoduleparameters
+   \popmacro\currentmodule}
+
+\let\currentmoduleparameters\empty
+\let\currentmodule          \s!unknown
+
+\def\startmodule
+  {\doifnextoptionalelse\dostartmodule\nostartmodule}
+
+\def\nostartmodule #1 %
+  {\dostartmodule[#1]}
+
+\def\dostartmodule[#1]%
+  {\pushmacro\currentmodule
+   \pushmacro\currentmoduleparameters
+   \def\currentmodule{#1}}
+
+\def\stopmodule
+  {\popmacro\currentmoduleparameters
+   \popmacro\currentmodule}
+
+\def\setupmodule
+  {\dodoubleempty\dosetupmodule}
+
+\def\dosetupmodule[#1][#2]%
+  {\scratchtoks\expandafter{\currentmoduleparameters}%
+   \ifsecondargument
+     \getparameters[\??md:#1:][#2]%
+     \expanded{\getparameters[\??md:#1:][\the\scratchtoks]}%
+   \else
+     \getparameters[\??md:\currentmodule:][#1]%
+     \expanded{\getparameters[\??md:\currentmodule:][\the\scratchtoks]}%
+   \fi
+   \let\currentmoduleparameters\empty}
+
+\def\moduleparameter     #1#2{\executeifdefined{\??md:#1:#2}\s!empty}
+\def\currentmoduleparameter#1{\executeifdefined{\??md:\currentmodule:#1}\s!empty}
+
+% \usemodule[newmml]
+% \usemodule[newmml][a=b]
+% \usemodule[x][newmml]
+% \usemodule[x][newmml][a=b]
+%
+% \startmodule [mathml]
+%   \setupmodule[a=c] \relax [\currentmoduleparameter{a}] % user vars will be set afterwards
+%   \setupmodule[a=c] \relax [\currentmoduleparameter{a}] % user vars are now forgotten
+% \stopmodule
+
+% one can introduce test sections with:
+%
+% \enablemode[newmml:test:\currentmoduleparameter{test}]
+% \startmode[newmml:test:yes} ... \stopmode
+%
+% these will be ignored unless test=yes
+%
+% however, a better way is:
+
+\let\stopmoduletestsection\donothing
+
+\def\startmoduletestsection
+  {\bgroup
+   \setupmodule % we need to make sure that the vars are set
+   \doifelse{\currentmoduleparameter\v!test}\v!yes
+     {\egroup
+      \writestatus{\currentmodule}{loading experimental code}}
+     {\egroup
+      \writestatus{\currentmodule}{skipping experimental code}%
+      \gobbleuntil\stopmoduletestsection}}
+
+%D We also support a singular call, which saves us for
+%D frustrations when we do a typo.
+
+\let\usemodule=\usemodules
+
+% %D The definition shows that the language specific settings
+% %D are activated after loading all the modules specified.
+
+%D \macros
+%D   {ifprotectbuffers, bufferprefix,
+%D    TEXbufferfile, MPgraphicfile}
+%D
+%D The next switch enables protection of temporary filenames,
+%D which is needed when we process more files on one path at
+%D the same time.
+
+\newif\ifprotectbuffers
+
+\def\bufferprefix{\ifprotectbuffers\jobname-\fi}
+
+% The following filenames are defined here:
+
+\def\TEXbufferfile   #1{\bufferprefix#1.\f!temporaryextension}
+\def\MPgraphicfile     {\bufferprefix mp\ifMPrun run\else graph\fi} % not needed in luatex
+\def\convertMPcolorfile{\bufferprefix metacmyk.tmp}
+
+%D To save memory, we implement some seldomly used commands
+%D in a lazy way. Nota bene: such runtime definitions are
+%D global.
+%D
+%D \starttyping
+%D \fetchruntimecommand\showaccents{\f!encodingprefix ...}
+%D \stoptyping
+
+\def\fetchruntimecommand#1#2%
+  {\def#1{\dofetchruntimecommand#1{#2}}}
+
+\def\dofetchruntimecommand#1#2%
+  {\doifnotflagged{#2}
+     {\let#1\undefined
+      \startreadingfile
+      \startnointerference % \bgroup
+      \cleanupfeatures % better \setnormalcatcodes / test first
+      \readfile{#2.\mksuffix}\donothing\donothing
+      \stopnointerference  % \egroup
+      \stopreadingfile
+      \doglobal\setflag{#2}}%
+   \ifx#1\undefined
+     \writestatus\m!systems{command \string#1 not found in file #2}%
+     \def#1{{\infofont[unknown command \string#1]}}%
+   \fi
+   #1}
+
+%D Experimental:
+
+\let\checkpreprocessor\relax
+
+%D To be documented and probably moved
+
+\def\documentresources{\@@erurl}
+
+\def\setupexternalresources
+  {\dodoubleargument\getparameters[\??er]}
+
+\setupexternalresources
+  [url=]
+
+%D Goodie:
+
+\unexpanded\def\continueifinputfile#1{\doifnotfile{#1}{\endinput}}
+
+%D This module will be perfected / changed / weeded.
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-fnt.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-fnt.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-fnt.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,726 @@
+%D \module
+%D   [       file=core-fnt,
+%D        version=1995.10.10,
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=Fonts,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / Fonts}
+
+\unprotect
+
+%D \macros
+%D   {compound}
+%D
+%D We will overload the already active \type {|} so we have
+%D to save its meaning in order to be able to use this handy
+%D macro.
+%D
+%D \starttyping
+%D so test\compound{}test can be used instead of test||test
+%D \stoptyping
+
+\bgroup \catcode`\|=\@@active \gdef\compound#1{|#1|} \egroup
+
+%D Here we hook some code into the clean up mechanism needed
+%D for verbatim data.
+
+\appendtoks
+  \disablecompoundcharacters
+  \disablediscretionaries
+\to \everycleanupfeatures
+
+%D \macros
+%D   {kap,KAP,Kap,Kaps,nokap,userealcaps,usepseudocaps}
+%D
+%D We already introduced \type{\cap} as way to capitalize
+%D words. This command comes in several versions:
+%D
+%D \startbuffer
+%D \cap {let's put on a \cap{cap}}
+%D \cap {let's put on a \nocap{cap}}
+%D \CAP {let's put on a \\{cap}}
+%D \Cap {let's put on a \\{cap}}
+%D \Caps{let's put on a cap}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D Note the use of \type{\nocap}, \type{\\} and the nested
+%D \type{\cap}.
+%D
+%D \startvoorbeeld
+%D \startlines
+%D \getbuffer
+%D \stoplines
+%D \stopvoorbeeld
+%D
+%D These macros show te main reason why we introduced the
+%D smaller \type{\tx} and \type{\txx}.
+%D
+%D \starttyping
+%D \cap\romannumerals{1995}
+%D \stoptyping
+%D
+%D This at first sight unusual capitilization is completely
+%D legal.
+%D
+%D \showsetup{smallcapped}
+%D \showsetup{notsmallcapped}
+%D \showsetup{CAPPED}
+%D \showsetup{SmallCapped}
+%D \showsetup{SmallCaps}
+%D
+%D The difference between pseudo and real caps is demonstrated
+%D below:
+%D
+%D \startbuffer
+%D \usepseudocaps \cap{Hans Hagen}
+%D \userealcaps   \cap{Hans Hagen}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \getbuffer
+%D
+%D The \type {\bgroup} trickery below is needed because of
+%D \type {\groupedcommand}.
+
+\def\usepseudocaps
+  {\def\cap@@uppercase{\the\everyuppercase\uppercased}%
+   \def\cap@@lowercase{\the\everylowercase\lowercased}%
+   \def\cap@@visualize{\tx}}
+
+\def\userealcaps
+  {\let\cap@@uppercase\relax
+  %\let\cap@@lowercase\relax % Definitely not!
+   \def\cap@@visualize{\sc}}
+
+\usepseudocaps
+
+\unexpanded\def\smallcapped % else conflict with math
+  {\futurelet\next\dosmallcapped}
+
+\def\disablepseudocaps
+  {\let\smallcapped\donothing}
+
+\def\dosmallcapped
+  {\ifx\next\bgroup
+     \expandafter\dodosmallcapped\expandafter\relax
+   \else
+     \expandafter\dodosmallcapped
+   \fi}
+
+\def\dodosmallcapped#1#2%
+  {\ifmmode\hbox\fi
+   \bgroup
+   \cap@@visualize
+   \cap@@uppercase{#1{#2}}%
+   \egroup}
+
+\unexpanded\def\notsmallcapped#1%
+  {\cap@@lowercase{#1}}
+
+\unexpanded\def\CAPPED#1%
+  {{\def\\##1{\smallcapped{##1}}#1}}
+
+\unexpanded\def\SmallCapped#1%
+  {\CAPPED{\\#1}}
+
+\unexpanded\def\SmallCaps
+  {\let\processword\SmallCapped
+   \processwords}
+
+%D Sure:
+
+\def\kap{\smallcapped} % for old times sake
+
+%D Some precautions for a \PLAIN\ \TEX\ definition.
+
+\unexpanded\def\normalcap{\dohandlemathtoken{cap}}
+\unexpanded\def\normalCap{\dohandlemathtoken{Cap}}
+
+\def\cap{\mathortext\normalcap\smallcapped}
+\def\Cap{\mathortext\normalCap\SmallCapped}
+
+\appendtoks
+    \let\cap\firstofoneargument
+    \let\Cap\firstofoneargument
+\to \simplifiedcommands
+
+%D \macros
+%D   {setupcapitals}
+%D
+%D By default we use pseudo small caps in titles. This can be
+%D set up with:
+%D
+%D \showsetup{setupcapitals}
+
+\let\normalsmallcapped\smallcapped
+
+\def\setupcapitals
+  {\dosingleempty\dosetupcapitals}
+
+\def\dosetupcapitals[#1]%
+  {\getparameters[\??kk][#1]%
+   \doifelse\@@kktitle\v!yes
+     {\definealternativestyle[\v!capital][\normalsmallcapped][\normalsmallcapped]%
+      \definealternativestyle[\v!smallcaps][\sc][\sc]%
+      \unexpanded\def\smallcapped{\normalsmallcapped}}
+     {\definealternativestyle[\v!capital][\normalsmallcapped][\uppercased]%
+      \definealternativestyle[\v!smallcaps][\sc][\uppercased]%
+      \unexpanded\def\smallcapped{\doconvertfont\v!capital}}%
+   \doifelse\@@kksc\v!yes
+     \userealcaps
+     \usepseudocaps}
+
+\ifx\uppercased\undefined \let\uppercased\uppercase \fi
+\ifx\lowercased\undefined \let\lowercased\lowercase \fi
+
+% pretty tricky stuff:
+%
+% \usemodule[abr-01] \TEX \METAPOST \PPCHTEX \LATEX
+% \usemodule[abr-02] \TEX \METAPOST \PPCHTEX \LATEX
+
+%def\uppercased#1{{\forceunexpanded\xdef\@@globalcrap{\uppercase{#1}}}\@@globalcrap}
+%def\lowercased#1{{\forceunexpanded\xdef\@@globalcrap{\lowercase{#1}}}\@@globalcrap}
+
+\def\uppercased#1{{\forceunexpanded\xdef\@@expanded{\uppercase{#1}}}\@@expanded}
+\def\lowercased#1{{\forceunexpanded\xdef\@@expanded{\lowercase{#1}}}\@@expanded}
+
+\setupcapitals
+  [\c!title=\v!yes,
+   \c!sc=\v!no]
+
+%D \macros
+%D   {Word, Words, WORD, WORDS, doprocesswords}
+%D
+%D This is probably not the right place to present the next set
+%D of macros.
+%D
+%D \starttyping
+%D \Word {far too many words}
+%D \Words{far too many words}
+%D \WORD {far too many words}
+%D \WORDS{far too many words}
+%D \stoptyping
+%D
+%D \typebuffer
+%D
+%D This calls result in:
+%D
+%D \startvoorbeeld
+%D \startlines
+%D \getbuffer
+%D \stoplines
+%D \stopvoorbeeld
+%D
+%D \showsetup{Word}
+%D \showsetup{Words}
+%D \showsetup{WORD}
+%D \showsetup{WORDS}
+
+\def\doWord#1%
+  {\bgroup
+   \the\everyuppercase
+   \uppercase{#1}%
+   \egroup}
+
+\unexpanded\def\Word#1%
+  {\doWord#1}
+
+\def\doprocesswords#1 #2\od
+  {\ConvertToConstant\doifnot{#1}{}
+     {\processword{#1} %
+      \doprocesswords#2 \od}}
+
+\def\processwords#1%
+  {\doprocesswords#1 \od\unskip}
+
+\let\processword\relax
+
+\unexpanded\def\Words
+  {\let\processword\Word
+   \processwords}
+
+\unexpanded\def\WORD#1%
+  {\bgroup
+   \let\smallcapped\firstofoneargument
+   \let\WORD\firstofoneargument
+   \douppercase{#1}%
+   \egroup}
+
+\unexpanded\def\WORDS#1%
+  {\WORD{#1}}
+
+%D \macros
+%D   {stretched}
+%D
+%D Stretching characters in a word is a sort of typographical
+%D murder. Nevertheless we support this manipulation for use in
+%D for instance titles.
+%D
+%D \starttyping
+%D \hbox to 5cm{\stretched{murder}}
+%D \stoptyping
+%D
+%D \typebuffer
+%D
+%D or
+%D
+%D \startvoorbeeld
+%D \getbuffer
+%D \stopvoorbeeld
+%D
+%D \showsetup{stretched}
+
+\def\stretched#1%
+  {\ifvmode\hbox to \hsize\else\ifinner\else\hbox\fi\fi
+   \bgroup\processtokens\relax\hss\relax{\hss\hss}{#1}\egroup}
+
+%D \startbuffer
+%D \stretched{Unknown Box}
+%D \hbox to .5\hsize{\stretched{A Horizontal Box}}
+%D \vbox to 2cm{\stretched{A Vertical Box}}
+%D \hbox to 3cm{\stretched{sp{\'e}c{\`\i}{\"a}l}}
+%D \stopbuffer
+%D
+%D \getbuffer
+%D
+%D The first line of this macros takes care of boxing. Normally
+%D one will use an \type{\hbox} specification. The last line
+%D shows how special characters should be passed.
+%D
+%D \typebuffer
+
+%D \macros
+%D   {stretchednormalcase, stretcheduppercase, stretchedlowercase}
+%D
+%D A convenient alternative is:
+%D
+%D \starttyping
+%D \stretcheduppercase{Is this what you like?}
+%D \stoptyping
+%D
+%D \typebuffer
+%D
+%D this one uses fixed skips and kerns.
+%D
+%D \startvoorbeeld
+%D \getbuffer
+%D \stopvoorbeeld
+%D
+%D The default skip can be set with:
+
+% \def\stretchedspacefactor{4}
+% \def\stretchedspaceamount{.25em}
+%
+% \unexpanded\def\stretcheduppercase#1%
+%   {\bgroup
+%    \the\everyuppercase
+%    \uppercase{\def\textstring{#1}}%
+%    \ifdim\stretchedspaceamount>\zeropoint
+%      \def\textkern%
+%        {\kern\stretchedspaceamount}%
+%      \def\textskip%
+%        {\scratchdimen=\stretchedspaceamount
+%         \hskip\stretchedspacefactor\scratchdimen}%
+%      \@EA\processtokens\@EA\relax\@EA\textkern\@EA\relax\@EA
+%        \textskip\@EA{\textstring}%
+%    \else
+%      \textstring
+%    \fi
+%    \egroup}
+
+%D Given the following settings, the space is 1em by default:
+
+\def\stretchedspacefactor{4}
+\def\stretchedspaceamount{.25em}
+\def\stretchedbreaktokens{.@/}
+
+\unexpanded\def\stretchednormalcase
+  {\stretchedsomecase\firstofoneargument}
+
+\unexpanded\def\stretcheduppercase
+  {\stretchedsomecase{\the\everyuppercase\uppercase}}
+
+\unexpanded\def\stretchedlowercase
+  {\stretchedsomecase{\the\everylowercase\lowercase}}
+
+\def\stretchedsomecase#1#2%
+  {\bgroup
+   #1{\def\textstring{#2}}%
+   \ifdim\stretchedspaceamount=\zeropoint
+     \textstring
+   \else
+     \def\textkern##1%
+       {% beware: ##1 may not be \box\somebox -)
+        \determinemidwordbreak{##1}{\stretchedbreaktokens}%
+        \kern\stretchedspaceamount##1\domidwordbreak}%
+     \def\textskip
+       {\scratchdimen\stretchedspaceamount
+        \hskip\stretchedspacefactor\scratchdimen}%
+     \@EA\processtokens\@EA\relax\@EA\textkern\@EA\relax\@EA
+       \textskip\@EA{\textstring}%
+   \fi
+   \egroup}
+
+%D An auxiliary macro, see for usage \type {\stretcheduppercase}.
+
+\let\domidwordbreak\relax
+
+\def\setmidwordbreaktoken#1%
+  {\sfcode`#1=5000\relax}
+
+\def\determinemidwordbreak#1#2%
+  {\edef\midwordbreaktokens{#2}%
+   \ifx\midwordbreaktokens\empty
+     \global\let\domidwordbreak\relax
+   \else
+     \setbox\scratchbox\hbox
+       {\expandafter\handletokens\midwordbreaktokens\with\setmidwordbreaktoken
+        a\space \!!dimena\lastskip
+        #1\space\!!dimenb\lastskip \relax % needed
+        \ifdim\!!dimena=\!!dimenb
+          \globallet\domidwordbreak\relax
+        \else
+          \globallet\domidwordbreak\allowbreak
+        \fi}%
+   \fi}
+
+%D \macros
+%D   {underbar,underbars,
+%D    overbar,overbars,
+%D    overstrike,overstrikes,
+%D    setupunderbar}
+%D
+%D In the rare case that we need undelined words, for instance
+%D because all font alternatives are already in use, one can
+%D use \type{\underbar} and \type{\overstrike} and their plural
+%D forms.
+%D
+%D \startbuffer
+%D \underbars{drawing \underbar{bars} under words is a typewriter leftover}
+%D \overstrikes{striking words makes them \overstrike{unreadable} but
+%D sometimes even \overbar{top lines} come into view.}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \startvoorbeeld
+%D \startlines
+%D \getbuffer
+%D \stoplines
+%D \stopvoorbeeld
+%D
+%D The next macros are derived from the \PLAIN\ \TEX\ one, but
+%D also supports nesting. The \type{$} keeps us in horizontal
+%D mode and at the same time applies grouping.
+%D
+%D \showsetup{underbar}
+%D \showsetup{underbars}
+%D \showsetup{overbar}
+%D \showsetup{overbars}
+%D \showsetup{overstrike}
+%D \showsetup{overstrikes}
+%D
+%D Although underlining is ill advised, we permit some
+%D alternatives, that can be set up by:
+%D
+%D \showsetup{setupunderbar}
+%D
+%D The alternatives show up as
+%D   {\setupunderbar [alternative=a]\underbar{alternative a}},
+%D   {\setupunderbar [alternative=b]\underbar{alternative b}},
+%D   {\setupunderbar [alternative=c]\underbar{alternative c}}
+%D and
+%D   {\setupunderbar [rulethickness=1pt]\underbar{1pt width}},
+%D   {\setupunderbar [rulethickness=2pt]\underbar{2pt width}},
+%D or whatever. Because \type{\overstrike} uses the same
+%D method, the settings also apply to that macro.
+
+\newcount\underbarlevel
+
+\def\underbarmethoda#1#2#3% RULE
+  {\hbox to #1{\vrule\!!width#1\!!height#2\!!depth#3}}
+
+\def\underbarmethodb#1#2#3% DASH
+  {\hbox to #1
+     {\hskip-.25em
+      \xleaders
+        \hbox{\hskip.25em\vrule\!!width.25em\!!height#2\!!depth#3}
+        \hfil}}
+
+\def\underbarmethodc#1#2#3% PERIOD
+  {\hbox to #1
+     {\dimen4=#3
+      \advance\dimen4 .2ex
+      \hskip-.25em
+      \xleaders
+        \hbox{\hskip.25em\lower\dimen4\hbox{.}}
+        \hfil}}
+
+\def\dododounderbar#1#2#3%
+  {\startmathmode
+   \setbox0\hbox{#3}%
+   \setbox2\hbox{\color[\@@onrulecolor]{\getvalue{underbarmethod\@@onalternative}{\wd0}{#1}{#2}}}%
+   \wd0\zeropoint
+   \ht2\ht0
+   \dp2\dp0
+   \box0\box2
+   \stopmathmode}
+
+\unexpanded\def\dodounderbar#1%
+  {\bgroup
+   \dimen0=\@@onbottomoffset
+   \dimen0=\underbarlevel\dimen0
+   \ifdone \else
+     \advance\dimen0 -\strutht
+   \fi
+   \dimen2\dimen0
+   \advance\dimen2 \@@onrulethickness
+   \dododounderbar{-\dimen0}{\dimen2}{#1}%
+   \egroup}
+
+\def\betweenunderbarwords
+  {\bgroup
+   \setbox0\hbox{\dodounderbar{\hskip\interwordspace}}%
+   \nobreak
+   \hskip\zeropoint\!!minus\interwordshrink
+   \discretionary{}{}{\box0}%
+   \egroup}
+
+\def\betweenunderbarspaces
+  {\hskip\currentspaceskip}
+
+% \unexpanded\def\dounderbar#1#2%
+%   {\let\betweenisolatedwords#1%
+%    \processisolatedwords{#2}\dodounderbar
+%    \egroup}
+
+\unexpanded\def\underbar
+  {\bgroup
+   \advance\underbarlevel\plusone
+   \donetrue
+   \dounderbar\betweenunderbarwords}
+
+\unexpanded\def\dounderbar#1%
+  {\let\betweenisolatedwords#1%
+   \dosingleempty\redounderbar}
+
+\unexpanded\def\redounderbar[#1]#2%
+  {\iffirstargument\setupunderbar[#1]\fi
+   \processisolatedwords{#2}\dodounderbar
+   \egroup}
+
+\unexpanded\def\underbars
+  {\bgroup
+   \advance\underbarlevel\plusone
+   \donetrue
+   \dounderbar\betweenunderbarspaces}
+
+\unexpanded\def\overbar
+  {\bgroup
+   \advance\underbarlevel\minusone
+   \donefalse
+   \dounderbar\betweenunderbarwords}
+
+\unexpanded\def\overbars
+  {\bgroup
+   \advance\underbarlevel\minusone
+   \donefalse
+   \dounderbar\betweenunderbarspaces}
+
+\def\dooverstrike#1%
+  {\bgroup
+   \dimen0=\@@ontopoffset
+   \dimen2=\dimen0
+   \advance\dimen2 \@@onrulethickness
+   \dododounderbar{\dimen2}{-\dimen0}{#1}%
+   \egroup}
+
+\def\betweenoverstrikewords
+  {\bgroup
+   \setbox0\hbox{\dooverstrike{\hskip\interwordspace}}%
+   \nobreak
+   \hskip\zeropoint\!!minus\interwordshrink
+   \discretionary{}{}{\box0}%
+   \egroup}
+
+\unexpanded\def\overstrike#1%
+  {\bgroup
+   \let\betweenisolatedwords\betweenoverstrikewords
+   \processisolatedwords{#1}\dooverstrike
+   \egroup}
+
+\unexpanded\def\overstrikes#1%
+  {\bgroup
+   \processisolatedwords{#1}\dooverstrike
+   \egroup}
+
+\def\underbarparameter#1{\csname\??on#1\csname}
+
+\def\setupunderbar
+  {\dodoubleargument\getparameters[\??on]}
+
+%D \macros
+%D   {shiftedword, shiftedwords}
+%D
+%D Used as \type {\shiftedwords {10pt} {some text}} this macro will
+%D move
+
+% \def\shiftedword#1% #2%
+%   {\raise#1\hbox} % {#2}} % officially: {\ifdim#1>\zeropoint\raise\else\lower\fi#1\hbox{#2}}
+
+% \def\shiftedwords#1#2%
+%   {\processisolatedwords{#2}{\shiftedword{#1}}}
+
+%D \macros
+%D   {low, high, lohi}
+%D
+%D Although \TEX\ is pretty well aware of super- and
+%D subscripts, its mechanism is mainly tuned for math mode.
+%D The next few commands take care of script texts both modes.
+%D
+%D \startbuffer
+%D The higher\high{one goes} the lower\low{one drops}, or\lohi{yes}{no}?
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \getbuffer
+%D
+%D Note the different placement of \type {\lohi}, where we
+%D need a bit more space. The implementation looks a bit
+%D fuzzy, since some \type {\fontdimen}'s are involved to
+%D determine the optimal placement.
+
+\def\dodohighlow
+  {\ifx\fontsize\empty
+     \ifmmode
+       \ifnum\fam<0 \tx \else \holamathfont \fi
+     \else
+       \tx
+     \fi
+   \else
+     \tx
+   \fi}
+
+\def\dohighlow#1#2#3#4#5% todo, named fontdimens
+  {\dontleavehmode
+   \bgroup
+   \scratchdimen\ifdim\fontexheight\textfont2=1ex #2\textfont2\else #3ex\fi
+   \advance\scratchdimen #4ex
+   \kern.1ex
+   \setbox\scratchbox\hbox{#1\scratchdimen\hbox{\dodohighlow#5}}%
+   \ht\scratchbox\strutheight
+   \dp\scratchbox\strutdepth
+   \box\scratchbox
+   \egroup}
+
+\unexpanded\def\high{\dohighlow\raise\mathsupnormal{.86}{0}}
+\unexpanded\def\low {\dohighlow\lower\mathsubnormal{.48}{0}}
+
+% \unexpanded\def\lohi#1#2%
+%   {\dontleavehmode
+%    \hbox
+%      {\setbox4=\hbox{\dohighlow\lower\mathsubnormal{.48}{.1}{#1}}%
+%       \setbox6=\hbox{\dohighlow\raise\mathsupnormal{.86}{.1}{#2}}%
+%       \ifdim\wd4<\wd6
+%         \wd4=\zeropoint\box4\box6
+%       \else
+%         \wd6=\zeropoint\box6\box4
+%       \fi}}
+
+\unexpanded\def\lohi
+  {\dosingleempty\dolohi}
+
+\def\dolohi[#1]#2#3%
+  {\dontleavehmode
+   \hbox
+     {\setbox4\hbox{\dohighlow\lower\mathsubnormal{.48}{.1}{#2}}%
+      \setbox6\hbox{\dohighlow\raise\mathsupnormal{.86}{.1}{#3}}%
+      \doif{#1}{\v!left}
+        {\ifdim\wd4<\wd6
+          \setbox4\hbox to \wd6{\hss\box4}%
+        \else
+          \setbox6\hbox to \wd4{\hss\box6}%
+        \fi}%
+      \ifdim\wd4<\wd6
+        \wd4=\zeropoint\box4\box6
+      \else
+        \wd6=\zeropoint\box6\box4
+      \fi}}
+
+%D You can provide an optional keyword \type {left}, in which
+%D case the super and subscripts will be aligned in a way that
+%D permits placement at the left of a word (which means that
+%D it will be right aligned).
+%D
+%D \startbuffer
+%D \lohi{aha}{ah} test \lohi{aha}{ah} test
+%D \lohi[left]{aha}{ah} test \lohi[left]{aha}{ah} test
+%D \lohi{aha}{ah} test\lohi{aha}{ah} test
+%D \lohi[left]{aha}{ah}test \lohi[left]{aha}{ah}test
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \getbuffer
+
+%D \macros
+%D   {setupinitial,placeinitial,checkinitial}
+%D
+%D {\em To be documented.}
+%D
+%D \starttyping
+%D \setupinitial[state=start] \placeinitial \input tufte
+%D \stoptyping
+%D
+%D and
+%D
+%D \starttyping
+%D \def\bpar{\ifvmode\checkinitial\fi}
+%D \def\epar{\ifhmode\par\fi\checkinitial}
+%D \stoptyping
+
+%  to do: more fine tuning
+
+\def\setupinitial
+  {\dodoubleempty\getparameters[\??dc]}
+
+\definefontsynonym[Initial][Regular] % prefered initial identifier
+\definefontsynonym[initial][Initial] % internal but accepted too
+
+\setupinitial
+  [\c!state=\v!stop,
+   \c!location=\v!text,
+   \c!n=3,
+   \c!distance=.125em,
+   \c!command=,
+   \s!font=initial]
+
+\def\AutoDroppedCapsCommand{\NiceDroppedCaps\@@dccommand\@@dcfont\@@dcdistance\@@dcn}%
+
+\def\placeinitial
+  {\doifelse\@@dclocation\v!margin{\chardef\DropMode\plusone}{\chardef\DropMode\zerocount}%
+   \doif    \@@dcstate\v!start{\ifcase\@@dcn\else\AutoDroppedCaps\fi}}
+
+\let\checkinitial\CheckDroppedCaps
+
+%D This module has only a few setups:
+
+\setupunderbar
+  [\c!alternative=a,
+   \c!rulethickness=\linewidth,
+   \c!bottomoffset=1.5pt,
+   \c!topoffset=2.5pt,
+   \c!rulecolor=]
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-gen.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-gen.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-gen.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,166 @@
+%D \module
+%D   [       file=core-gen,
+%D        version=1995.10.10,
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=General,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / General}
+
+\unprotect
+
+%D \macros
+%D   {assigndimension,assignalfadimension}
+%D
+%D Hieronder worden enkele commando's gedefinieerd rond
+%D toekenningen. Allereerst een commando om waarden aan
+%D een \DIMENSION\ toe te kennen:
+%D
+%D \starttyping
+%D \assigndimension
+%D   {<waarde>|klein|middel|groot|-klein|-middel|-groot|geen}
+%D   {\dimension}
+%D   {waarde klein}
+%D   {waarde middel}
+%D   {waarde groot}
+%D \stoptyping
+%D
+%D Hierbij krijgt de \DIMENSION\ \type{\dimension} een waarde
+%D afhankelijk van het meegegeven trefwoord.
+%D
+%D \startnarrower
+%D \startlines
+%D \type{(-)klein }\qquad (--) waarde klein
+%D \type{(-)middel}\qquad (--) waarde middel
+%D \type{(-)groot }\qquad (--) waarde groot
+%D \type{geen     }\qquad 0pt
+%D \type{waarde   }\qquad waarde
+%D \stoplines
+%D \stopnarrower
+%D
+%D Een trefwoord mag worden voorafgegaan door een \type{-}.
+%D Deze macro toont een voorbeeld van het gebruik van
+%D \type{\processaction} en constanten.
+%D
+%D Analoog aan het bovenstaande commando kennen we een
+%D commando om waarden toe te kennen aan een macro:
+%D
+%D \starttyping
+%D \assignalfadimension
+%D   {<waarde>|klein|middel|groot|geen}
+%D   {\macro}
+%D   {waarde klein}
+%D   {waarde middel}
+%D   {waarde groot}
+%D \stoptyping
+
+% The third (optimized) version:
+
+\def\@ad@{@ad@}
+
+\setvalue{\@ad@ \v!none  }{\zeropoint\gobblethreearguments}
+\setvalue{\@ad@ \v!big   }{\thirdofthreearguments}
+\setvalue{\@ad@ \v!medium}{\secondofthreearguments}
+\setvalue{\@ad@ \v!small }{\firstofthreearguments}
+\setvalue{\@ad at -\v!big   }{-\thirdofthreearguments}
+\setvalue{\@ad at -\v!medium}{-\secondofthreearguments}
+\setvalue{\@ad at -\v!small }{-\firstofthreearguments}
+
+\def\assigndimension#1#2% #3 #4 #5
+  {#2=\ifcsname\@ad@#1\endcsname
+     \csname\@ad@#1\expandafter\endcsname
+   \else
+     #1\expandafter\gobblethreearguments
+   \fi}
+
+\def\@aa@{@aa@}
+
+\setvalue{\@aa@\v!none  }{0\gobblethreearguments}
+\setvalue{\@aa@\v!big   }{\thirdofthreearguments}
+\setvalue{\@aa@\v!medium}{\secondofthreearguments}
+\setvalue{\@aa@\v!small }{\firstofthreearguments}
+
+\def\assignalfadimension#1#2#3#4#5% #3#4#5 are single digits
+  {\edef#2{\ifcsname\@aa@#1\endcsname
+     \csname\@aa@#1\expandafter\endcsname
+   \else
+     #1\expandafter\gobblethreearguments
+   \fi#3#4#5}}
+
+%D \macros
+%D   {assignvalue}
+%D
+%D Een variant hierop is het commando:
+%D
+%D \starttyping
+%D \assignvalue
+%D   {<waarde>|klein|middel|groot}
+%D   {\macro}
+%D   {waarde klein }
+%D   {waarde middel}
+%D   {waarde groot}
+%D \stoptyping
+%D
+%D Hierbij krijgt \type{\macro} een waarde afhankelijk van
+%D het meegegeven trefwoord:
+%D
+%D \startnarrower
+%D \startlines
+%D \type{klein }\qquad waarde klein
+%D \type{middel}\qquad waarde middel
+%D \type{groot }\qquad waarde groot
+%D \type{waarde}\qquad waarde
+%D \stoplines
+%D \stopnarrower
+%D
+%D Hier doet \type{geen} dus niet mee.
+
+\def\@av@{@av@}
+
+\letvalue{\@av@\v!big   }\thirdofthreearguments
+\letvalue{\@av@\v!medium}\secondofthreearguments
+\letvalue{\@av@\v!small }\firstofthreearguments
+
+\def\assignvalue#1#2#3#4#5%
+  {\edef#2{\ifcsname\@av@#1\endcsname
+     \csname\@av@#1\expandafter\endcsname
+   \else
+     #1\expandafter\gobblethreearguments
+   \fi{#3}{#4}{#5}}}
+
+%D \macros
+%D   {assignwidth}
+%D
+%D Een breedte van een opgegeven tekst kan worden berekend en
+%D toegekend aan een \DIMENSION\ met:
+%D
+%D \starttyping
+%D \assignwidth
+%D   {\dimension}
+%D   {<waarde>|passend|ruim}
+%D   {tekst}
+%D \stoptyping
+%D
+%D Dit commando sluit, evenals de bovenstaande
+%D \type{\assign}||commando's, aan op de wijze waarop
+%D in de andere \CONTEXT||modules toekenningen
+%D plaatsvinden. Bij \type{ruim} wordt de gemeten breedte
+%D met 1~em vermeerderd.
+
+\def\assignwidth#1#2#3#4%
+  {\doifelsenothing{#2}
+     {\setbox\scratchbox\hbox{#3}%
+      #1\wd\scratchbox}
+     {\doifinsetelse{#2}{\v!fit,\v!broad}
+        {\setbox\scratchbox\hbox{#3}%
+         #1\wd\scratchbox
+         \doif{#2}\v!broad{\advance#1 #4}}%
+        {#1=#2}}}%
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-ini.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-ini.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-ini.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,67 @@
+%D \module
+%D   [       file=core-ini,
+%D        version=2003.12.01,
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=Additional Initialization,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / Additional Initialization}
+
+%D We will move more code to here, so that we become less dependent of the
+%D orde in which modules are loaded.
+
+\unprotect
+
+\everypar  \emptytoks
+\neverypar \emptytoks
+
+\appendtoks \flushnotes                  \to \everypar
+\appendtoks \synchronizesidefloats       \to \everypar
+
+\appendtoks \checkinlinedirection        \to \everypar
+
+\appendtoks \checkindentation            \to \everypar
+\appendtoks \showparagraphnumber         \to \everypar
+\appendtoks \flushmargincontents         \to \everypar
+\appendtoks \flushcommentanchors         \to \everypar
+\appendtoks \synchronizenotes            \to \everypar
+\appendtoks \OTRSETshowstatus            \to \everypar
+\appendtoks \flushpostponedbookmark      \to \everypar
+\appendtoks \registerparoptions          \to \everypar
+\appendtoks \flushsyncpositions          \to \everypar
+\appendtoks \flushpostponednodedata      \to \everypar
+\appendtoks \dohandlerepeatdelimitedtext \to \everypar
+\appendtoks \insertparagraphintro        \to \everypar
+
+\appendtoks \flushpostponedbookmark      \to \neverypar
+\appendtoks \flushpostponedbookmark      \to \everylistentry
+
+\appendtoks \flushnotes                  \to \everydisplay
+\appendtoks \adjustsidefloatdisplaylines \to \everydisplay
+
+\appendtoks \flushsyncpositions          \to \everyheadstart
+
+\appendtoks \flushsyncresets             \to \everyendoftextbody
+
+\appendtoks \ignorespaces                \to \everybeginofpar
+
+\appendtoks \removeunwantedspaces        \to \everyendofpar
+%appendtoks \strut                       \to \everyendofpar % option ?
+\appendtoks \flushsyncresets             \to \everyendofpar
+\appendtoks \setlastlinewidth            \to \everyendofpar % must happen before endgraf
+\appendtoks \endgraf                     \to \everyendofpar
+
+% Todo: verbatim, xml, tex, move code to here
+
+\ifx\normalcompound\undefined \let\normalcompound=| \fi
+
+\appendtoks \catcode`|=\@@active \let|\normalcompound \to \everyTEXinputmode
+\appendtoks \catcode`|=\@@letter                      \to \everyXMLinputmode
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-job.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-job.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-job.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,419 @@
+%D \module
+%D   [       file=core-job, % copied from main-001,
+%D        version=1997.03.31,
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=Job Handling,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This module is still to be split and documented.
+
+\writestatus{loading}{ConTeXt Core Macros / Job Handling}
+
+\unprotect
+
+\let \currentproject     \empty
+\let \currentproduct     \empty
+\let \currentenvironment \empty
+\let \currentcomponent   \empty
+
+\let \loadedfiles        \empty
+\let \processedfiles     \empty
+
+\let \nomorefiles        \relax
+
+\let \allinputpaths      \empty
+\let \locatedfilepath    \empty
+
+\newcount\textlevel
+\newcount\fileprocesslevel
+
+\setvalue{\c!file::0}{\jobname}
+
+\def\processedfile % is used in styles, don't change !
+  {\getvalue{\c!file::\number\fileprocesslevel}}
+
+\def\dostarttextfile#1%
+  {\global\advance\fileprocesslevel\plusone
+   \setxvalue{\c!file::\number\fileprocesslevel}{#1}%
+   \@EA\doglobal\@EA\addtocommalist\@EA{#1}\processedfiles}
+
+\def\dostoptextfile
+  {\global\advance\fileprocesslevel\minusone}
+
+\def\processlocalfile#1#2%
+  {#1{#2}\donothing{\readfile{#2}\donothing\donothing}}
+
+\def\processfile#1%
+  {\ifx\allinputpaths\empty
+     \def\next{\processlocalfile\readlocfile}%
+   \else
+     \let\filepath\empty
+     \def\docommand##1%
+       {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\filepath{##1}}\donefalse
+        \ifdone\expandafter\quitcommalist\fi}%
+     \doifparentfileelse{#1} % new
+       {\processcommacommand  [\allinputpaths]\docommand}
+       {\processcommacommand[.,\allinputpaths]\docommand}%
+     \ifx\filepath\empty
+       \def\next{\processlocalfile\readlocfile}% fall back ../../..
+     \else
+       \def\next{\processlocalfile{\readsetfile\filepath}}% file found
+     \fi
+   \fi
+   \next{#1}}
+
+\def\doifinputfileelse#1% rarely used
+  {\ifx\allinputpaths\empty
+     \@EA\secondoftwoarguments
+   \else
+     \let\filepath\empty
+     \def\docommand##1%
+       {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\filepath{##1}}\donefalse
+        \ifdone\expandafter\quitcommalist\fi}%
+     \processcommacommand[.,\allinputpaths]\docommand
+     \ifx\filepath\empty
+       \@EAEAEA\secondoftwoarguments
+     \else
+       \@EAEAEA\firstoftwoarguments
+     \fi
+   \fi}
+
+\let\locatedfilepath\empty
+
+\def\locatefilepath#1%
+  {\let\locatedfilepath\empty
+   \ifx\allinputpaths\empty \else
+     \def\docommand##1%
+       {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\locatedfilepath{##1}}\donefalse
+        \ifdone\expandafter\quitcommalist\fi}%
+     \doifparentfileelse{#1} % new
+       {\processcommacommand  [\allinputpaths]\docommand}
+       {\processcommacommand[.,\allinputpaths]\docommand}%
+   \fi}
+
+\def\usepath[#1]%
+  {\def\docommand##1%
+     {\doifelse{##1}\v!reset
+        {\let\allinputpaths\empty}
+        {\sanitizefilename#1\to\ascii
+         \defconvertedcommand\ascii\ascii
+         \addtocommalist\ascii\allinputpaths}}%
+   \processcommalist[#1]\docommand}
+
+\def\usesubpath[#1]% test for a real long time, permits ../{name} i.e. braces
+  {\ifx\allinputpaths\empty
+     \sanitizefilename#1\to\allinputpaths
+   \else
+     \def\docommand##1%
+       {\def\dodocommand####1%
+          {\sanitizefilename####1\to\ascii
+           \defconvertedcommand\ascii\ascii
+           \addtocommalist{##1/\ascii}\allinputpaths}%
+        \processcommalist[#1]\dodocommand}%
+     \processcommacommand[\allinputpaths]\docommand
+   \fi}
+
+\def\registerfileinfo[#1#2]#3% geen \showmessage ?
+  {\writestatus\m!systems{#1#2 file #3 at line \the\inputlineno}%
+   \immediatewriteutility{f #1 {#3}}}
+
+\ifx\preloadfonts   \undefined \let\preloadfonts   \relax \fi
+\ifx\preloadspecials\undefined \let\preloadspecials\relax \fi
+
+\ifx\disableXML\undefined \let\disableXML\relax \fi
+
+\def\doloadsystemfile#1% mkii with fallback to tex
+  {\readsysfile{#1.\mksuffix}
+     {\showmessage\m!systems2{#1.\mksuffix}}
+     {\readsysfile{#1.tex}{\showmessage\m!systems2{#1.tex}}\donothing}}
+
+\def\loadsystemfiles
+  {\reportprotectionstate
+   \doloadsystemfile\f!newfilename
+   \doloadsystemfile\f!locfilename
+   \doloadsystemfile\f!expfilename
+   \readsysfile{\f!sysfilename.\mksuffix}
+     {\showmessage\m!systems2{\f!sysfilename.\mksuffix}}
+     {\readsysfile{\f!sysfilename.tex}
+        {\showmessage\m!systems2{\f!sysfilename.tex}}
+        {\readsysfile{\f!sysfilename.rme}
+           {\showmessage\m!systems2{\f!sysfilename.rme}%
+            \doglobal\appendtoks % brrr better \setcatcodetable\ctxcatcodes
+              \bgroup
+                \disableXML
+                \readsysfile{\f!errfilename.\mksuffix}\donothing\donothing
+              \egroup
+            \to\everygoodbye}%
+           \donothing}}}
+
+%D Loading of \type {cont-usr.tex} (edited by the user)
+%D and \type {cont-fmt.tex} (generated by texexec). This is
+%S obsolete now that we have enough memory for patterns.
+
+% \def\loaduserspecifications
+%   {% this used to be the file where users can tune their system, especially patterns
+%    \readsysfile\f!usrfilename{\showmessage\m!systems2\f!usrfilename}\donothing
+%    % this one took care of user preferences (fonts, messages) but lm made this obsolete
+%    \readjobfile\f!fmtfilename{\showmessage\m!systems2\f!fmtfilename}\donothing
+%    % from now on we preload all patterns (only in mkii)
+%    \preloadallpatterns}
+
+\let\loaduserspecifications\relax
+
+%D We don't want multiple jobfiles to interfere.
+
+\def\loadoptionfile
+  {\readjobfile{\jobname.\f!optionextension}
+     {\showmessage\m!systems2{\jobname.\f!optionextension}}%
+     {\writestatus\m!systems {no \jobname.\f!optionextension}}}
+
+% Most natural ...
+%
+% \def\doateverystarttext
+%   {\the\everystarttext
+%    \global\let\doateverystarttext\relax}
+%
+% ... most practical, since we can load env's in a
+% something.run file (nested \starttext's; see for
+% instance x-res-08, where we definitely want to
+% open the file!).
+
+\def\doateverystarttext
+  {\the\everystarttext
+   \global\everystarttext\emptytoks}
+
+\def\starttext
+  {\doateverystarttext
+   \ifcase\textlevel
+     \registerfileinfo[begin]\jobname
+     \expandafter\startcopyingblocks
+   \fi
+   \global\advance\textlevel\plusone}
+
+\def\stoptext
+  {\global\advance\textlevel\minusone
+   \ifnum\textlevel>\zerocount \else
+     \page[\v!last]\page % new, moved from everybye to here; flushes headers, colors etc etc etc
+     \the\everystoptext
+    %\the\everybye            %
+    %\the\everygoodbye        % == \end (new)
+    %\expandafter\normalend   %
+     \expandafter\finalend
+   \fi}
+
+\def\forcequitjob#1%
+  {\writestatus\m!systems{forcing quit: #1}%
+   \batchmode
+   \dorecurse\textlevel\stoptext
+   \normalend}
+
+\let\autostoptext\relax
+
+\def\autostarttext
+  {\ifcase\textlevel
+     \starttext
+     \writestatus\m!systems{auto \string\starttext..\string\stoptext}%
+     \let\autostoptext\stoptext
+   \fi}
+
+\def\finalend
+  {\ifnum\textlevel>\zerocount \else
+     \the\everybye
+     \the\everygoodbye
+     \doifsometokselse\everynotabene{\writeline\the\everynotabene\writeline}\donothing
+     \global\everybye    \emptytoks % rather unneeded
+     \global\everygoodbye\emptytoks % but for sure
+     \expandafter\normalend
+   \fi}
+
+\let\end\finalend
+
+\def\emergencyend
+  {\writestatus\m!systems{invalid \@EA\string\csname\e!start\v!text\endcsname...\@EA\string\csname\e!stop\v!text\endcsname\space structure}%
+   \stoptext}
+
+\def\currentfile{\inputfilename}
+
+\def\doexecutefileonce#1%
+  {\beforesplitstring#1\at.\to\currentfile
+   \fullexpandtwoargsafter\doifnotinset\currentfile\loadedfiles
+     {\fullexpandoneargafter\addtocommalist\currentfile\loadedfiles
+      \doexecutefile{#1}}}
+
+\def\doexecutefile#1%
+  {\registerfileinfo[begin]{#1}%
+   \dostarttextfile{#1}%
+   \processfile{#1}%
+   \dostoptextfile
+   \registerfileinfo[end]{#1}}
+
+\def\donotexecutefile#1%
+  {}
+
+\def\verwerkfile#1 %
+  {\doexecutefile{#1}}
+
+\def\useenvironment[#1]% maybe commalist
+  {\environment #1 \relax}
+
+\def\environment #1 % at outermost level only (load only once)
+  {\pushmacro\startenvironment
+   \pushmacro\stopenvironment
+   \def\startenvironment ##1 {}%
+   \let\stopenvironment\relax
+   \startreadingfile
+   \doexecutefileonce{#1}
+   \stopreadingfile
+   \popmacro\stopenvironment
+   \popmacro\startenvironment}
+
+\def\component #1 % at outermost level only
+  {\dostarttextfile{#1}%
+   \processfile{#1}%
+   \dostoptextfile}
+
+\newcount\filelevel
+
+\let\currentcomponent    \v!text
+\let\currentcomponentpath\f!currentpath
+
+\def\donextlevel#1#2#3#4#5#6#7\\%
+  {\pushmacro\currentcomponent
+   \pushmacro\currentcomponentpath
+   \let\currentcomponent#1%
+   \setsystemmode\currentcomponent
+   \splitfilename{#1}%
+   \ifx\splitoffpath\empty
+     \let\currentcomponentpath\f!currentpath
+   \else
+     \let\currentcomponentpath\splitoffpath
+   \fi
+   \beforesplitstring#7\at.\to#2\relax % can become path + base
+   \ifcase\filelevel\relax
+     \starttext
+     \def\project     ##1 {#3{##1}}%
+     \def\environment ##1 {#4{##1}}%
+     \def\product     ##1 {#5{##1}}%
+     \def\component   ##1 {#6{##1}}%
+   \fi
+   \advance\filelevel\plusone
+   \fullexpandoneargafter\addtocommalist{#1}\loadedfiles}
+
+\def\doprevlevel
+  {\popmacro\currentcomponentpath
+   \popmacro\currentcomponent
+   \setsystemmode\currentcomponent
+   \ifnum\filelevel=\plusone
+     \expandafter\stoptext
+   \else
+     \advance\filelevel\minusone
+     \expandafter\endinput
+   \fi}
+
+\def\startproject #1 %
+  {\donextlevel\v!project\currentproject
+     \donotexecutefile\doexecutefileonce
+     \doexecutefileonce\doexecutefile#1\\}
+
+\def\startproduct #1 %
+  {\doateverystarttext
+   \donextlevel\v!product\currentproduct
+     \doexecutefileonce\doexecutefileonce
+     \donotexecutefile\doexecutefile#1\\}
+
+\def\startcomponent #1 %
+  {\doateverystarttext
+   \donextlevel\v!component\currentcomponent
+     \doexecutefileonce\doexecutefileonce
+     \donotexecutefile\doexecutefile#1\\}
+
+\def\startenvironment #1 %
+  {\donextlevel\v!environment\currentenvironment
+     \donotexecutefile\doexecutefileonce
+     \donotexecutefile\donotexecutefile#1\\}
+
+% \startproject test
+%     1: \startmode[*project] project \stopmode \endgraf
+%     2: \startmode[*product] product \stopmode \endgraf
+% \stopproject
+
+\def\stopproject    {\doprevlevel}
+\def\stopproduct    {\doprevlevel}
+\def\stopcomponent  {\doprevlevel}
+\def\stopenvironment{\doprevlevel}
+
+% more or less replaced by modes
+
+\setvalue{\e!start\v!localenvironment}[#1]%
+  {\let\loadedlocalenvironments\empty
+   \def\docommand##1%
+     {\beforesplitstring##1\at.\to\someevironment
+      \fullexpandoneargafter\addtocommalist\someevironment\loadedlocalenvironments}%
+   \processcommalist[#1]\docommand
+   \fullexpandtwoargsafter\doifcommonelse % no longer next needed
+       {\currentproject,\currentproduct,%
+        \currentcomponent,\currentenvironment}
+       {\loadedlocalenvironments}
+     {\letvalue{\e!stop\v!localenvironment}\relax}
+     {\grabuntil{\e!stop\v!localenvironment}\gobbleoneargument}} % TH: fixed, was \relax
+
+\setvalue{\v!localenvironment}#1 {\doexecutefileonce{#1}}
+

+% NOT TOEVOEGEN: \the\everytrace
+
+\neverypar=\emptytoks
+
+% \appendtoks \flushnotes                     \to \everypar
+% \appendtoks \synchronizesidefloats          \to \everypar
+% \appendtoks \checkindentation               \to \everypar
+% \appendtoks \showparagraphnumber            \to \everypar
+% \appendtoks \flushmargincontents            \to \everypar
+% \appendtoks \flushcommentanchors            \to \everypar
+% \appendtoks \synchronizenotes               \to \everypar
+
+% \appendtoks \flushnotes                     \to \everydisplay
+% \appendtoks \adjustsidefloatdisplaylines    \to \everydisplay
+

+% soon, when pdftex 1.22 is out in the field:
+
+\chardef\systemcommandmode\zerocount % 0=unknown 1=disabled 2=enabled
+
+\def\checksystemcommandmode
+  {\ifx\pdfshellescape\undefined \else
+     \chardef\systemcommandmode \ifcase\pdfshellescape \plusone \else \plustwo \fi
+   \fi
+   \global\let\checksystemcommandmode\relax}
+
+\def\reportsystemcommandmode
+  {\ifcase\systemcommandmode
+   \or
+     \writestatus\m!systems{system commands are disabled}%
+   \or
+     \writestatus\m!systems{system commands are enabled}%
+   \fi}
+
+% \ifx\etexversion\undefined \else \ifnum\etexversion<202
+%   \prependtoks
+%      \writestatus\m!systems{eTeX version \number\etexversion\space -> too old (bugs)}%
+%      \writeline
+%   \to \everyjob
+% \fi \fi
+
+% \ifx\pdftexversion\undefined \else \ifnum\number\pdftexversion<120
+%   \prependtoks
+%      \writestatus\m!systems{pdfTeX version \number\pdftexversion\space -> please update}%
+%      \writeline
+%   \to \everyjob
+% \fi \fi
+

+% Default-instellingen (verborgen)
+
+\resetutilities
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-mis.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-mis.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-mis.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,2745 @@
+%D \module
+%D   [       file=core-mis,
+%D        version=1998.01.29,
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=Miscelaneous,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / Misc Commands}
+
+% todo: kleur in legenda + letter
+
+% %D You would not expect the next macro in \CONTEXT,
+% %D wouldn't you? It's there to warn \LATEX\ users that
+% %D something is wrong.
+% %D
+% %D Obsolete now:
+% %
+% % \def\documentstyle{\showmessage\m!systems3\empty\stoptekst}
+% %
+% % \let\documentclass=\documentstyle
+% %D \macros
+% %D   {simplifiedcommands, simplifycommands}
+% %D
+% %D I first needed this simplification in bookmarks. Users can
+% %D add their own if needed.
+
+\unprotect
+
+%D Sometimes (for instance in bookmarks) we need to simplify macro
+%D behaviour, so here is the hook.
+
+\ifx\simplifiedcommands\undefined \newtoks\simplifiedcommands \fi
+
+\def\simplifycommands{\the\simplifiedcommands}
+
+%D A possibly growing list:
+
+%appendtoks        \def\executesynonym#1#2#3#4{#3}\to\simplifiedcommands
+%appendtoks             \def\executesort#1#2#3{#3}\to\simplifiedcommands
+
+\appendtoks                                       \def\ { }\to\simplifiedcommands
+\appendtoks  \def\type#1{\letterbackslash\strippedcsname#1}\to\simplifiedcommands
+\appendtoks                  \def\tex#1{\letterbackslash#1}\to\simplifiedcommands
+\appendtoks                                   \def\TeX{TeX}\to\simplifiedcommands
+\appendtoks                           \def\ConTeXt{ConTeXt}\to\simplifiedcommands
+\appendtoks                         \def\MetaPost{MetaPost}\to\simplifiedcommands
+\appendtoks                         \def\MetaFont{MetaFont}\to\simplifiedcommands
+\appendtoks                           \def\MetaFun{MetaFun}\to\simplifiedcommands
+%appendtoks                                       \def||{-}\to\simplifiedcommands
+\appendtoks         \def|#1|{\ifx#1\empty\empty-\else#1\fi}\to\simplifiedcommands
+\appendtoks                                 \let\crlf\space\to\simplifiedcommands
+\appendtoks                                    \let\\\space\to\simplifiedcommands
+
+\appendtoks\let\buildtextaccent\secondoftwoarguments\to\simplifiedcommands
+

+% THIS WAS MAIN-002.TEX
+
+%\def\checkinterlineskip
+%  {\ifvmode
+%     \ifdim\lastskip>\zeropoint
+%       \nointerlineskip
+%     \else\ifdim\lastkern>\zeropoint
+%       \nointerlineskip
+%     \fi\fi
+%   \fi}
+
+\def\horitems#1#2% #1=breedte #2=commandos
+  {\scratchdimen#1%
+   \divide\scratchdimen \nofitems
+   \!!counta\zerocount
+   \def\docommand##1%
+     {\advance\!!counta \plusone
+      \processaction
+        [\@@isalign]
+        [   \v!left=>\hbox to \scratchdimen{\strut##1\hss},
+           \v!right=>\hbox to \scratchdimen{\hss\strut##1},
+          \v!middle=>\hbox to \scratchdimen{\hss\strut##1\hss},
+          \v!margin=>\ifnum\!!counta=\plusone\hss\else\hfill\fi
+                     \strut##1%
+                     \ifnum\!!counta=\nofitems\hss\else\hfill\fi,
+         \s!default=>\hbox to \scratchdimen{\hss\strut##1\hss}, % midden
+         \s!unknown=>\hbox to \scratchdimen{\strut##1\hss}]}%   % links
+   \hbox to #1{\hss#2\hss}}
+
+\def\veritems#1#2% #1=breedte #2=commandos
+  {\scratchdimen#1%
+   \def\docommand##1%
+     {\ifdim\scratchdimen<\zeropoint % the - was a signal
+        \hbox to -\scratchdimen{\hss\strut##1}%
+      \else\ifdim\scratchdimen>\zeropoint
+        \hbox to \scratchdimen{\strut##1\hss}%
+      \else
+        \hbox{\strut##1}%
+      \fi\fi}%
+   \vbox{#2}}
+
+\def\dosetupitems[#1]%
+  {\getparameters[\??is][#1]%
+   \doif\@@iswidth\v!unknown
+     {\def\@@iswidth{\hsize}}%
+   \doifconversiondefinedelse\@@issymbol
+     {\def\doitembullet##1{\convertnumber{\@@issymbol}{##1}}}
+     {\doifsymboldefinedelse\@@issymbol
+        {\def\doitembullet##1{\symbol[\@@issymbol]}}{}}}
+
+\def\makeitemsandbullets#1%
+  {\doifelse\@@isn\v!unknown
+     {\getcommalistsize[#1]%
+      \edef\nofitems{\commalistsize}}
+     {\edef\nofitems{\@@isn}}%
+   \setbox0\hbox
+     {\doitems \@@iswidth
+        {\processcommalist[#1]\docommand}}%
+   \setbox2\hbox
+     {\doitems \@@isbulletbreedte
+        {\dorecurse\nofitems
+           {\docommand{\strut\doitembullet\recurselevel}}}}}
+
+\def\dostartitems#1#2#3%
+  {\let\doitems#2%
+   \def\@@isbulletbreedte{#3}%
+   \makeitemsandbullets{#1}%
+   \@@isbefore}
+
+\def\dostopitems
+  {\@@isafter
+   \egroup}
+
+\setvalue{doitems\v!top}#1%
+  {\dostartitems{#1}\horitems\@@iswidth
+   \noindent\vbox
+     {\forgetall
+      \doifsomething\@@issymbol
+        {\doifnot\@@issymbol\v!none
+           {\box2
+            \@@isinbetween
+            \nointerlineskip}}%
+      \box0}%
+   \dostopitems}
+
+\setvalue{doitems\v!bottom}#1%
+  {\dostartitems{#1}\horitems\@@iswidth
+   \noindent\vbox
+     {\forgetall
+      \box0
+      \doifsomething\@@issymbol
+        {\@@isinbetween
+         \nointerlineskip
+         \box2}}%
+   \dostopitems}
+
+\setvalue{doitems\v!inmargin}#1%
+  {\dostartitems{#1}\veritems{-1.5em}%  - is a signal
+   \noindent\hbox{\llap{\box2\hskip\leftmargindistance}\box0}%
+   \dostopitems}
+
+\setvalue{doitems\v!left}#1%
+  {\advance\hsize -1.5em%
+   \dostartitems{#1}\veritems{1.5em}%
+   \noindent\hbox{\box2\box0}%
+   \dostopitems}
+
+\setvalue{doitems\v!right}#1%
+  {\dostartitems{#1}\veritems{0em}%
+   \noindent\hbox{\box0\hskip-\wd2\box2}%
+   \dostopitems}
+
+\def\setupitems
+  {\dosingleargument\dosetupitems}
+
+\def\complexitems[#1]%
+  {\bgroup
+   \setupitems[#1]%
+   \parindent\zeropoint
+   \setlocalhsize
+   \hsize\localhsize
+   \dontcomplain
+  %\doifundefined{doitems\@@islocation}%
+  %  {\let\@@islocation\v!left}%
+  %\getvalue{doitems\@@islocation}}
+   \executeifdefined{doitems\@@islocation}{\let\@@islocation\v!left}}
+
+\definecomplexorsimpleempty\items
+
+\setupitems
+  [\c!location=\v!left,
+   \c!symbol=5,
+   \c!width=\hsize,
+   \c!align=\v!middle,
+   \c!n=\v!unknown,
+   \c!before=\blank,
+   \c!inbetween={\blank[\v!medium]},
+   \c!after=\blank]
+

+% \definieerplaats[naam][instellingen]
+% \stelplaatsin[naam][instellingen]
+% \plaats<naam>[[instellingen]]
+%
+% - still undocumented and also not in setupb yet
+% - kan ook intern/direct (scheelt duplicatie), zie \framedtext
+
+\def\dodefineplacement[#1][#2]%
+  {\getparameters
+     [\??pl#1]
+     [\c!left=\hss,
+      \c!right=\hss,
+      \c!linecorrection=\v!off,
+      \c!depthcorrection=\v!off,
+      \c!margin=\v!standard,
+      \c!grid=\v!middle,
+      %\c!before=,
+      %\c!after=,
+      #2]%
+   \setvalue{\e!place#1}{\doplacement[\??pl#1]}}
+
+\def\defineplacement
+  {\dodoubleempty\dodefineplacement}
+
+\def\setupplacement
+  {\dodoubleempty\dosetupplacement}
+
+\def\dosetupplacement[#1]%
+  {\dodoubleempty\getparameters[\??pl#1]}
+
+\def\doplacement
+  {\dodoubleempty\dodoplacement}
+
+\def\dodoplacement[#1][#2]% correctie moet mooier
+  {\bgroup
+   \dowithnextboxcontent
+     {\forgetall}
+     {\setlocalhsize
+      \getparameters[#1][#2]%
+      \getvalue{#1\c!before}%
+      \begingroup
+      \disableparpositions
+      \setbox\nextbox\hbox to \localhsize
+        {\getvalue{#1\c!left}%
+         \flushnextbox
+         \getvalue{#1\c!right}}%
+      \ifinsidefloat \else
+        \addlocalbackgroundtobox\nextbox
+      \fi
+      \ifgridsnapping
+        \doifundefined{#1\c!grid}{\letvalue{#1\c!grid}\v!middle}%
+        % unchecked
+        \doifinset{\getvalue{#1\c!margin}}{\v!standard,\v!yes}\noindent
+        \snaptogrid[\getvalue{#1\c!grid}]\hbox{\flushnextbox}%
+      \else
+        \doifvalue{#1\c!linecorrection}\v!on \startbaselinecorrection
+        \doifinset{\getvalue{#1\c!margin}}{\v!standard,\v!yes}\noindent
+        \flushnextbox
+        \doifvalue{#1\c!depthcorrection}\v!on\baselinecorrection
+        \doifvalue{#1\c!linecorrection }\v!on\stopbaselinecorrection
+      \fi
+      \endgroup
+      \getvalue{#1\c!after}%
+      \egroup}
+   \vbox}
+

+% Te zijner tijd [plaats=boven,onder,midden] implementeren,
+% in dat geval moet eerst de maximale hoogte worden bepaald.
+%
+% Overigens kan een en ander mooier met \halign.
+
+% there is quite some historic balast in this mechanism, the next variant
+% is a first cleanup
+
+\let\currentparagraph\empty
+
+\newcount\alcounter \newcount\alnsize \newdimen\alhsize
+
+\def\paragraphparameter#1% \checkedparameter\??al\currentparagraph#1
+  {\executeifdefined{\??al\currentparagraph#1}{\executeifdefined{\??al#1}\empty}}
+
+\def\paragraphcellmeter#1#2% \checkedparameter\??al\currentparagraph#1
+  {\executeifdefined{\??al\currentparagraph\number#1#2}{\paragraphparameter{#2}}}
+
+\def\dodefineparagraphs[#1][#2]%
+  {\edef\currentparagraph{#1}%
+   \setvalue{\s!do\s!next\currentparagraph}%
+     {\def\\{\getvalue\currentparagraph}}%
+   \setvalue\currentparagraph
+     {\getvalue{\s!do\s!next#1}%
+      \dostartparagraphs{#1}}%
+   \setvalue{\e!next\currentparagraph}%
+     {\getvalue{#1}}%
+   \setvalue{\e!start\currentparagraph}%
+     {\bgroup
+      \edef\currentparagraph{#1}%
+      \letvalue{\s!do\s!next\currentparagraph}\empty
+      \setvalue{\e!stop\currentparagraph}{\getvalue\currentparagraph\egroup}%
+      \getvalue\currentparagraph}%
+   \getparameters[\??al\currentparagraph]%
+     [%\c!n=3,
+      %\c!before=\blank,
+      %\c!after=\blank,
+      %\c!distance=1em,
+      %\c!height=\v!fit,
+      %\c!rule=\v!off,
+      %\c!command=,
+      %\c!align=,
+      %\c!tolerance=\v!tolerant,
+      %\c!rulethickness=\linewidth,
+      %\c!rulecolor=,
+      %\c!style=,
+      %\c!color=,
+      %\c!top=,
+      %\c!top=\vss,
+      %\c!bottom=\vfill,
+      #2]%
+   \setvalue{\e!setup#1\e!endsetup}%
+     {\setupparagraphs[#1]}%
+   \dorecurse
+      {\paragraphparameter\c!n}
+      {\setupparagraphs
+         [\currentparagraph]
+         [\recurselevel]
+         [\c!width=,
+         %\c!bottom=\paragraphparameter\c!bottom,
+         %\c!top=\paragraphparameter\c!top,
+         %\c!height=\paragraphparameter\c!height,
+         %\c!rule=\paragraphparameter\c!rule,
+         %\c!rulethickness=\paragraphparameter\c!rulethickness,
+         %\c!rulecolor=\paragraphparameter\c!rulecolor,
+         %\c!align=\paragraphparameter\c!align,
+         %\c!tolerance=\paragraphparameter\c!tolerance, % obsolete
+         %\c!distance=\paragraphparameter\c!distance,
+          \c!style=\paragraphparameter\c!style,
+          \c!color=\paragraphparameter\c!color]}%
+   \setupparagraphs[\currentparagraph][1][\c!distance=\zeropoint]}
+
+\def\defineparagraphs
+  {\dodoubleargument\dodefineparagraphs}
+
+\def\dosetupparagraphs[#1][#2][#3]%
+  {\edef\currentparagraph{#1}%
+   \ifsecondargument
+     \doifelse{#2}\v!each
+       {\dorecurse
+          {\paragraphparameter\c!n}
+          {\getparameters[\??al\currentparagraph\recurselevel][#3]}}
+       {\doifelsenothing{#3}
+          {\getparameters[\??al\currentparagraph][#2]}
+          {\def\docommand##1{\getparameters[\??al\currentparagraph##1][#3]}%
+           \processcommalist[#2]\docommand}}%
+   \else
+     \getparameters[\??al][#1]%
+   \fi}
+
+\def\setupparagraphs
+  {\dotripleempty\dosetupparagraphs}
+
+\setupparagraphs
+  [\c!n=3,
+   \c!before=\blank,
+   \c!after=\blank,
+   \c!distance=1em,
+   \c!height=\v!fit,
+   \c!rule=\v!off,
+   \c!command=,
+   \c!align=,
+   \c!tolerance=\v!tolerant, % obsolete
+   \c!rulethickness=\linewidth,
+   \c!rulecolor=,
+   \c!style=,
+   \c!color=,
+   \c!top=,
+   \c!top=\vss,
+   \c!bottom=\vfill]
+
+\def\doparagraphrule
+  {\doifelse{\paragraphcellmeter\alcounter\c!rule}\v!on
+     {\linewidth\paragraphcellmeter\alcounter\c!rulethickness
+      \scratchdimen\paragraphcellmeter\alcounter\c!distance
+      \advance\scratchdimen-\linewidth
+      \divide\scratchdimen \plustwo
+      \hskip\scratchdimen
+      \color[\paragraphcellmeter\alcounter\c!rulecolor]{\vrule\!!width\linewidth}%
+      \hskip\scratchdimen}
+     {\hskip\paragraphcellmeter\alcounter\c!distance}}
+
+\def\dostartparagraph
+  {\doifelsenothing{\paragraphcellmeter\alcounter\c!width}
+     {\!!widtha\alhsize
+      \divide\!!widtha \alnsize}
+     {\!!widtha\paragraphcellmeter\alcounter\c!width}%
+   \dostartattributes{\??al\currentparagraph\number\alcounter}\c!style\c!color\empty
+   \doifelse{\paragraphcellmeter\alcounter\c!height}\v!fit
+     {\setbox\scratchbox\vtop}
+     {\setbox\scratchbox\vtop to \paragraphcellmeter\alcounter\c!height}%
+   \bgroup
+   \blank[\v!disable]%
+   \forgetall
+   \paragraphcellmeter\alcounter\c!top
+   \paragraphparameter\c!inner
+   \hsize\!!widtha % setting \wd afterwards removed
+   \paragraphcellmeter\alcounter\c!inner % twice
+   \expanded{\setupalign    [\paragraphcellmeter\alcounter\c!align    ]}% {normal,verytolerant,stretch}
+   \expanded{\setuptolerance[\paragraphcellmeter\alcounter\c!tolerance]}% obsolete
+   \ignorespaces
+   \endgraf
+   \ignorespaces
+   %
+   % Nadeel van de onderstaande constructie is dat \everypar
+   % binnen een groep kan staan en zo steeds \begstruts
+   % worden geplaatst. Mooi is anders dus moet het anders!
+   %
+   % Hier is \Everypar niet nodig.
+   %
+   \everypar{\begstrut\everypar\emptytoks}%
+   %
+   \nospace % remove + ignore
+   \paragraphcellmeter\alcounter\c!command}
+
+\def\dostopparagraph
+  {\ifvmode
+     \removelastskip
+   \else
+     \unskip\endstrut\endgraf
+   \fi
+   \paragraphcellmeter\alcounter\c!bottom
+   \egroup
+   \ifdim\wd\scratchbox=\zeropoint % no data
+     \wd\scratchbox\!!widtha
+   \fi
+   \box\scratchbox
+   \dostopattributes
+   \ifnum\alcounter<\paragraphparameter\c!n\relax
+     \@EA\doparagraphcell
+   \else
+     \@EA\dostopparagraphs
+   \fi}
+
+\def\doparagraphcell
+  {\global\advance\alcounter \plusone
+   \doifelsenothing{\paragraphcellmeter\alcounter\c!distance}
+     {\ifnum\alcounter=\plusone\else
+        \hskip\paragraphparameter\c!distance
+      \fi}
+     {\ifnum\alcounter=\plusone
+        \hskip\paragraphcellmeter\alcounter\c!distance
+      \else
+        \doparagraphrule
+      \fi}%
+   \letvalue\currentparagraph\dostopparagraph
+   \dostartparagraph}
+
+\def\dostartparagraphs#1%
+  {\bgroup
+   \edef\currentparagraph{#1}%
+   \global\alcounter\zerocount
+   \parindent\zeropoint
+   \setlocalhsize
+   \alhsize\localhsize
+   \alnsize\paragraphparameter\c!n\relax
+   \dorecurse \alnsize
+     {\doifelsenothing{\paragraphcellmeter\recurselevel\c!distance}
+        {\ifnum\recurselevel=\plusone\else
+           \global\advance\alhsize -\paragraphparameter\c!distance
+         \fi}
+        {\global\advance\alhsize -\paragraphcellmeter\recurselevel\c!distance}%
+      \doifsomething{\paragraphcellmeter\recurselevel\c!width}
+        {\global\advance\alnsize \minusone
+         \global\advance\alhsize -\paragraphcellmeter\recurselevel\c!width}}%
+   %whitespace % gaat fout bij \framed
+   \paragraphparameter\c!before
+   \leavevmode % gaat wel goed bij \framed, brrr
+   \setbox\scratchbox\vbox\bgroup\hbox\bgroup\doparagraphcell}
+
+\def\dostopparagraphs
+  {\egroup
+   \egroup
+   \iftrue
+     \hbox{\raise\strutheight\box\scratchbox}% new
+   \else
+     \box\scratchbox % old
+   \fi
+   \par
+   \paragraphparameter\c!after
+   \egroup}
+

+\def\dosetuptab[#1]%
+  {\getparameters[\??ta]
+     [\c!headstyle=\v!normal,
+      \c!headcolor=,
+      \c!style=\v!normal,
+      \c!color=,
+      \c!width=\v!broad,
+      \c!sample={\hskip4em},
+      \c!before=,
+      \c!after=,
+      #1]%
+   \definedescription
+     [tab]
+     [\c!headstyle=\@@taheadstyle,
+      \c!headcolor=\@@tacolor,
+      \c!sample=\@@tasample,
+      \c!width=\@@tawidth,
+      \c!before=\@@tabefore,
+      \c!after=\@@taafter]}
+
+\def\setuptab
+  {\dosingleargument\dosetuptab}
+
+\setuptab
+  [\c!location=\v!left]
+

+% The following macro's are derived from PPCHTEX and
+% therefore take some LaTeX font-switching into account.
+
+\newif\ifloweredsubscripts
+
+% Due to some upward incompatibality of LaTeX to LaTeX2.09
+% and/or LaTeX2e we had to force \@@chemieletter. Otherwise
+% some weird \nullfont error comes up.
+
+\doifundefined{@@chemieletter}{\def\@@chemieletter{\rm}}
+
+\def\beginlatexmathmodehack
+  {\ifmmode
+     \let\endlatexmathmodehack\relax
+   \else
+     \def\endlatexmathmodehack{$}$\@@chemieletter
+   \fi}
+
+\def\setsubscripts
+  {\beginlatexmathmodehack
+   \def\dosetsubscript##1##2##3%
+     {\dimen0=##3\fontexheight##2%
+      \setxvalue{@@\string##1\string##2}{\the##1##2\relax}%
+      ##1##2=\dimen0\relax}%
+   \def\dodosetsubscript##1##2%
+     {\dosetsubscript{##1}{\textfont2}{##2}%
+      \dosetsubscript{##1}{\scriptfont2}{##2}%
+      \dosetsubscript{##1}{\scriptscriptfont2}{##2}}%
+   %dodosetsubscript\mathsupnormal  {?}%
+   \dodosetsubscript\mathsubnormal  {.7}%
+   \dodosetsubscript\mathsubcombined{.7}%
+   \global\loweredsubscriptstrue
+   \endlatexmathmodehack}
+
+\def\resetsubscripts
+  {\ifloweredsubscripts
+     \beginlatexmathmodehack
+     \def\doresetsubscript##1##2%
+       {\dimen0=\getvalue{@@\string##1\string##2}\relax
+        ##1##2=\dimen0}%
+     \def\dodoresetsubscript##1%
+       {\doresetsubscript{##1}{\textfont2}%
+        \doresetsubscript{##1}{\scriptfont2}%
+        \doresetsubscript{##1}{\scriptscriptfont2}}%
+     %dodoresetsubscript\mathsupnormal
+     \dodoresetsubscript\mathsubnormal
+     \dodoresetsubscript\mathsubcombined
+     \global\loweredsubscriptsfalse
+     \endlatexmathmodehack
+   \fi}
+
+\let\beginlatexmathmodehack = \relax
+\let\endlatexmathmodehack   = \relax
+
+\def\chem#1#2#3%
+  {\bgroup
+   \setsubscripts
+   \mathematics{\hbox{#1}_{#2}^{#3}}%
+   \resetsubscripts
+   \egroup}
+
+\unexpanded\def\celsius   #1{#1\mathematics{^\circ}C}
+\unexpanded\def\inch        {\mathematics{\prime\prime}} % was: \hbox{\rm\char125\relax}
+\unexpanded\def\fraction#1#2{\mathematics{#1\over#2}}
+
+% very dutch
+
+\unexpanded\def\graden      {\mathematics{^\circ}}
+
+\def\bedragprefix {\euro\normalfixedspace}
+\def\bedragsuffix {}
+\def\bedragempty  {\euro}
+
+\unexpanded\def\bedrag#1%
+  {\strut\hbox\bgroup
+   \let\normalfixedspace\nonbreakablespace
+   \doifelsenothing{#1}
+     {\bedragempty}
+     {\bedragprefix\digits{#1}\bedragsuffix}%
+   \egroup}
+
+% \definieeralineas[test][n=3]
+%
+% \stelalineasin[test][3][breedte=4cm,uitlijnen=links]
+%
+% \startopelkaar
+% \test hans \\ ton \\ \bedrag{1.000,--} \\
+% \test hans \\ ton \\ \bedrag{~.~~1,--} \\
+% \test hans \\ ton \\ \bedrag{~.~~1,~~} \\
+% \test hans \\ ton \\ \bedrag{~.100,--} \\
+% \test hans \\ ton \\ \subtot{1.000,--} \\
+% \test hans \\ ton \\ \bedrag{1.000,--} \\
+% \test hans \\ ton \\ \bedrag{1.000,--} \\
+% \test hans \\ ton \\ \totaal{1.000,--} \\
+% \test hans \\ ton \\ \bedrag{nihil,--} \\
+% \test hans \\ ton \\ \totaal{nihil,--} \\
+% \test hans \\ ton \\ \subtot{nihil,--} \\
+% \stopopelkaar
+
+\def\periodswidth  {.5em}
+\def\periodsdefault{3}    % was 5, but now it's like \unknown
+
+\unexpanded\def\periods
+  {\dosingleempty\doperiods}
+
+\def\doperiods[#1]%
+  {\dontleavehmode
+   \begingroup
+   \scratchdimen\periodswidth
+   \hbox to \iffirstargument#1\else\periodsdefault\fi \scratchdimen
+     {\leaders\hbox to \scratchdimen{\hss.\hss}\hss}%
+   \endgroup}
+
+\unexpanded\def\unknown
+  {\periods\relax} % relax prevents lookahead for []
+
+% compatibility macros
+
+\def\doorsnede
+  {\hbox{\rlap/$\circ$} }
+
+\unexpanded\def\ongeveer
+  {\mathematics\pm}
+

+\chardef\boundarycharactermode\plusone
+
+\def\midboundarycharacter#1#2%
+  {\ifcase\boundarycharactermode
+   \or
+     %\nobreak
+     \hskip\hspaceamount\currentlanguage{#2}%
+     \languageparameter#1%
+     %\nobreak
+      \hskip\hspaceamount\currentlanguage{#2}%
+   \or
+     \languageparameter#1%
+   \fi
+   \chardef\boundarycharactermode\plusone}
+
+\def\leftboundarycharacter#1#2%
+  {\ifcase\boundarycharactermode
+   \or
+     \languageparameter#1%
+     \nobreak
+     \hskip\hspaceamount\currentlanguage{#2}%
+   \or
+     \languageparameter#1%
+   \fi
+   \chardef\boundarycharactermode\plusone}
+
+\def\rightboundarycharacter#1#2%
+  {\ifcase\boundarycharactermode
+   \or
+     \prewordbreak %\nobreak
+     \hskip\hspaceamount\currentlanguage{#2}%
+     \languageparameter#1%
+   \or
+     \languageparameter#1%
+   \fi
+   \chardef\boundarycharactermode\plusone}
+

+% actually this is pretty old, but temporary moved here
+%
+% obsolete:
+
+\def\setuphyphenmark
+  {\dodoubleargument\getparameters[\??kp]}
+
+\def\setuphyphenmark[#1]% sign=normal|wide
+  {\dodoubleargument\getparameters[\??kp][#1]%
+   \doifinsetelse\@@kpsign {\v!normal}
+     {\let\textmodehyphen\normalhyphen  \let\textmodehyphendiscretionary\normalhyphendiscretionary}
+     {\let\textmodehyphen\composedhyphen\let\textmodehyphendiscretionary\composedhyphendiscretionary}}
+
+\setuphyphenmark[\c!sign=\v!wide]
+% % \setuphyphenmark[\c!sign=\v!normal]
+
+\definesymbol[\c!lefthyphen]  [\languageparameter\c!lefthyphen]
+\definesymbol[\c!righthyphen] [\languageparameter\c!righthyphen]
+\definesymbol[\c!hyphen]      [\languageparameter\c!hyphen]
+
+\def\normalhyphen
+  {\hbox{\directsymbol\empty\c!hyphen}}
+
+\def\composedhyphen
+  {\hbox{\directsymbol\empty\c!compoundhyphen}}
+
+\def\normalhyphendiscretionary
+  {\discretionary
+     {\hbox{\directsymbol\empty\c!lefthyphen}}
+     {\hbox{\directsymbol\empty\c!righthyphen}}
+     {\hbox{\directsymbol\empty\c!hyphen}}}
+
+\def\composedhyphendiscretionary
+  {\discretionary
+     {\hbox{\directsymbol\empty\c!leftcompoundhyphen}}
+     {\hbox{\directsymbol\empty\c!rightcompoundhyphen}}
+     {\hbox{\directsymbol\empty\c!compoundhyphen}}}
+
+\let\textmodehyphen             \composedhyphen
+\let\textmodehyphendiscretionary\composedhyphendiscretionary
+
+\definesymbol[\c!leftcompoundhyphen]  [\languageparameter\c!leftcompoundhyphen]
+\definesymbol[\c!rightcompoundhyphen] [\languageparameter\c!rightcompoundhyphen]
+\definesymbol[\c!compoundhyphen]      [\languageparameter\c!compoundhyphen]
+
+\definehspace [sentence]      [\zeropoint]
+\definehspace [intersentence] [.250em]
+
+\definesymbol
+  [\c!midsentence]
+  [\midboundarycharacter\c!midsentence{sentence}]
+
+\definesymbol
+  [\c!leftsentence]
+  [\leftboundarycharacter\c!leftsentence{sentence}]
+
+\definesymbol
+  [\c!rightsentence]
+  [\rightboundarycharacter\c!rightsentence{sentence}]
+
+\definesymbol
+  [\c!leftsubsentence]
+  [\leftboundarycharacter\c!leftsubsentence{sentence}]
+
+\definesymbol
+  [\c!rightsubsentence]
+  [\rightboundarycharacter\c!rightsubsentence{sentence}]
+
+\newsignal \subsentencesignal
+\newcounter\subsentencelevel
+
+\let\beforesubsentence\donothing
+\let\aftersubsentence \donothing
+
+% todo: make this language option
+%
+% \def\beforesubsentence{\removeunwantedspaces}
+% \def\aftersubsentence {\ignorespaces}
+
+\def\midsentence
+  {\symbol[\c!midsentence]}
+
+\def\beginofsubsentence
+  {\beforesubsentence
+   \ifdim\lastkern=\subsentencesignal
+     \unskip
+     \kern\hspaceamount\currentlanguage{intersentence}%
+   \fi
+   \doglobal\increment\subsentencelevel
+   \ifnum\subsentencelevel=\plusone
+     \dontleavehmode % was \leaveoutervmode
+   \fi
+   \symbol[\ifodd\subsentencelevel\c!leftsentence\else\c!leftsubsentence\fi]%
+  }%  \ignorespaces}
+
+\def\endofsubsentence % relax prevents space gobbling
+  {\symbol[\ifodd\subsentencelevel\c!rightsentence\else\c!rightsubsentence\fi]%
+   \doglobal\decrement\subsentencelevel
+   \unskip
+   \kern\subsentencesignal\relax
+   \aftersubsentence}
+
+\def\beginofsubsentencespacing % relax prevents space gobbling
+  {\kern\subsentencesignal\relax}% \ignorespaces}
+
+\def\endofsubsentencespacing
+  {\ifdim\lastkern=\subsentencesignal
+     \unskip
+     \hskip\hspaceamount\currentlanguage{intersentence}%
+     % no good, actually language dependent:
+%     \ignorespaces
+   \else
+     \unskip
+   \fi}
+
+%D \startbuffer
+%D test |<|test |<|test|>| test|>| test \par
+%D test|<|test|<|test|>|test|>|test \par
+%D test |<||<|test|>||>| test \par
+%D test \directdiscretionary{<}test\directdiscretionary{>} test \par
+%D \stopbuffer
+%D
+%D \typebuffer
+%D \getbuffer
+
+\def\startsubsentence{\beginofsubsentence     \prewordbreak\beginofsubsentencespacing}
+\def\stopsubsentence {\endofsubsentencespacing\prewordbreak\endofsubsentence}
+
+%D \defineXMLenvironment [subsentence]
+%D   {|<|}
+%D   {|>|}
+%D \defineXMLenvironment [subsentence]
+%D   {\directdiscretionary{<}}
+%D   {\directdiscretionary{>}}
+%D \defineXMLenvironment [subsentence]
+%D   {\startsubsentence}
+%D   {\stopsubsentence}
+%D
+%D \startbuffer
+%D test <subsentence>test</subsentence> test
+%D \stopbuffer
+%D
+%D \typebuffer
+%D \processXMLbuffer
+
+\enableactivediscretionaries
+

+\definehspace [quotation]      [\zeropoint]
+\definehspace [interquotation] [.125em]
+
+%definehspace [quote]  [\zeropoint]
+%definehspace [speech] [\zeropoint]
+
+\definehspace [quote]  [\hspaceamount\currentlanguage{quotation}]
+\definehspace [speech] [\hspaceamount\currentlanguage{quotation}]
+
+\definesymbol
+  [\c!leftquotation]
+  [\leftboundarycharacter\c!leftquotation{quotation}]
+
+\definesymbol
+  [\c!rightquotation]
+  [\rightboundarycharacter\c!rightquotation{quotation}]
+
+\definesymbol
+  [\c!leftquote]
+  [\leftboundarycharacter\c!leftquote{quote}]
+
+\definesymbol
+  [\c!rightquote]
+  [\rightboundarycharacter\c!rightquote{quote}]
+
+\definesymbol
+  [\c!leftspeech]
+  [\leftboundarycharacter\c!leftspeech{speech}]
+
+\definesymbol
+  [\c!rightspeech]
+  [\rightboundarycharacter\c!rightspeech{speech}]
+
+\definesymbol
+  [\c!middlespeech]
+  [\leftboundarycharacter\c!middlespeech{speech}]
+

+\appendtoks\def\quotation#1{"#1"}\to\simplifiedcommands
+\appendtoks\def\quote    #1{'#1'}\to\simplifiedcommands
+
+%D The next features was so desperately needed by Giuseppe
+%D Bilotta that he made a module for it. Since this is a
+%D typical example of core functionality, I decided to extend
+%D the low level quotation macros in such a way that a speech
+%D feature could be build on top of it. The speech opening and
+%D closing symbols are defined per language. Italian is an
+%D example of a language that has them set.
+

+% this will replace the quotation and speed definitions
+
+\newsignal\delimitedtextsignal
+
+\let\currentdelimitedtext\s!unknown
+
+\def\delimitedtextparameter#1% will be sped up
+  {\executeifdefined{\??ci\currentdelimitedtext:\csname\??ci\currentdelimitedtext\c!level\endcsname#1}%
+  {\executeifdefined{\??ci\currentdelimitedtext#1}%
+  {\executeifdefined{\??ci#1}\empty}}}
+
+\def\definedelimitedtext
+  {\dodoubleempty\dodefinedelimitedtext}
+
+\def\dodefinedelimitedtext[#1][#2]%
+  {\doifassignmentelse{#2}
+     {\getparameters
+        [\??ci#1]
+        [\c!location=\v!margin, % \v!text \v!paragraph
+         \c!spacebefore=,
+         \c!spaceafter=\delimitedtextparameter\c!spacebefore,
+         \c!style=\v!normal,
+         \c!color=,
+         \c!leftmargin=\zeropoint,
+         \c!rightmargin=\delimitedtextparameter\c!leftmargin,
+         \c!indentnext=\v!yes,
+         \c!before=,
+         \c!after=,
+         \c!left=,
+         \c!right=,
+         \c!level=0,
+         \c!repeat=\v!no,
+         \c!method=,
+        #2]}%
+     {\doifdefined{#2}
+        {\copyparameters[\??ci#1][\??ci#2]
+           [\c!location,\c!spacebefore,\c!spaceafter,\c!style,\c!color,
+            \c!leftmargin,\c!rightmargin,\c!indentnext,
+            \c!before,\c!after,\c!left,\c!right]}}%
+   \doifsomething{#1}
+     {\unexpanded\setvalue{#1}{\delimitedtext[#1]}%
+      \setvalue{\e!start#1}{\startdelimitedtext[#1]}%
+      \setvalue{\e!stop #1}{\stopdelimitedtext}}}
+
+\def\setupdelimitedtext
+  {\dotripleargument\dosetupdelimitedtext}
+
+\def\dosetupdelimitedtext[#1][#2][#3]% #2 = optional level
+  {\ifthirdargument
+     \getparameters[\??ci#1:#2][#3]%
+   \else\ifsecondargument
+     \getparameters[\??ci#1][#2]%
+   \else
+     \getparameters[\??ci][#1]%
+   \fi\fi}
+
+\def\dorepeatdelimitedtext
+  {\relax\ifcase\delimitedtextparameter\c!level\else
+     \dohandledelimitedtext\c!middle % maybe better \dohandleleftdelimitedtext
+   \fi}
+
+\let\dohandlerepeatdelimitedtext\relax
+
+\def\startdelimitedtext[#1]%
+  {\bgroup
+   \pushdelimitedtext{#1}%
+   \doifelse{\delimitedtextparameter\c!method}\s!font
+     {\def\dostopdelimitedtext
+        {\removeunwantedspaces\ignoredelimitedtext\c!right}%
+      \ignoredelimitedtext\c!left\ignorespaces}
+     {\doifelse{\delimitedtextparameter\c!repeat}\v!yes
+        {\let\dohandlerepeatdelimitedtext\dorepeatdelimitedtext}%
+        {\let\dohandlerepeatdelimitedtext\relax}%
+      \doifinsetelse{\delimitedtextparameter\c!location}{\v!paragraph,\v!margin}%
+        {\dosingleempty\dostartdelimitedtextpar}\dostartdelimitedtexttxt}}
+
+\def\dostartdelimitedtextpar[#1]%
+   {\let\dostopdelimitedtext\dostopdelimitedtextpar
+    \doifsomething{\delimitedtextparameter\c!spacebefore}
+      {\blank[\delimitedtextparameter\c!spacebefore]}%
+    \delimitedtextparameter\c!before
+    % nicer:
+    % \doadaptleftskip {\delimitedtextparameter\c!leftmargin}%
+    % \doadaptrightskip{\delimitedtextparameter\c!rightmargin}%
+    % backward compatible:
+    \doifelsenothing{#1}
+      {\endgraf
+       \doadaptleftskip {\delimitedtextparameter\c!leftmargin}%
+       \doadaptrightskip{\delimitedtextparameter\c!rightmargin}%
+       \let\dodostopdelimitedtextpar\endgraf}
+      {\startnarrower[#1]\let\dodostopdelimitedtextpar\stopnarrower}%
+    % so far
+    % \dochecknextindentation{\??ci\currentdelimitedtext}% AM: not here
+    \dostartattributes{\??ci\currentdelimitedtext}\c!style\c!color\empty
+    \leftdelimitedtextmark
+    \ignorespaces}
+
+\def\dostopdelimitedtextpar
+   {\removeunwantedspaces
+    \removelastskip
+    \rightdelimitedtextmark
+    \dostopattributes
+    \dodostopdelimitedtextpar
+    \delimitedtextparameter\c!after
+    \doifsomething{\delimitedtextparameter\c!spaceafter}
+      {\blank[\delimitedtextparameter\c!spaceafter]}%
+    \dochecknextindentation{\??ci\currentdelimitedtext}% AM: here
+    \dorechecknextindentation}% AM: This was missing!
+
+\def\dostartdelimitedtexttxt
+  {\let\dostopdelimitedtext\dostopdelimitedtexttxt
+   \dostartattributes{\??ci\currentdelimitedtext}\c!style\c!color\empty
+   \dohandleleftdelimitedtext\c!left
+   \ignorespaces}
+
+\def\dostopdelimitedtexttxt
+  {\removeunwantedspaces
+   \dohandlerightdelimitedtext\c!right
+   \dostopattributes}
+
+\def\stopdelimitedtext
+  {\dostopdelimitedtext
+   \popdelimitedtext
+   \egroup}
+
+\def\pushdelimitedtext#1%
+  {\globalpushmacro\currentdelimitedtext
+   \def\currentdelimitedtext{#1}%
+   \doglobal\incrementvalue{\??ci\currentdelimitedtext\c!level}}
+
+\def\popdelimitedtext
+  {\doglobal\decrementvalue{\??ci\currentdelimitedtext\c!level}%
+   \globalpopmacro\currentdelimitedtext}
+
+\def\delimitedtext[#1]%
+  {\pushdelimitedtext{#1}%
+   \doifelse{\delimitedtextparameter\c!method}\s!font
+     {\dofontdrivendelimited}
+     {\doifinsetelse{\delimitedtextparameter\c!location}{\v!paragraph,\v!margin}%
+      \dodelimitedtextpar\dodelimitedtexttxt}}
+
+% shortcuts
+
+\def\startdelimited{\startdelimitedtext}
+\def\stopdelimited {\stopdelimitedtext}  % no let, dynamically assigned
+\def\delimited     {\delimitedtext}
+
+\def\leftdelimitedtextmark
+  {\doifsomething{\delimitedtextparameter\c!left}
+     {\setbox\scratchbox\hbox{\delimitedtextparameter\c!left}%
+      \dontleavehmode
+      \doif{\delimitedtextparameter\c!location}\v!margin{\hskip-\wd\scratchbox}%
+      \box\scratchbox}}
+
+\def\rightdelimitedtextmark
+  {\doifsomething{\delimitedtextparameter\c!right}
+     {\hsmash{\delimitedtextparameter\c!right}}}
+
+% \starttext
+%    \hyphenatedword{groepsvrijstellingsverordeningen}\par
+%    \hyphenatedword{\quote{groepsvrijstellingsverordeningen}}\par
+%     \dorecurse{100}{\hskip300pt\hskip\recurselevel pt test \quote{xxx xxxx}.\par}
+%     \page \setuppapersize[A5][A4]
+%     \quotation {overly beautiful pusillanimous sesquipedalian
+%     longwinded} test test test test test test test test test test test
+%     test test test test test test test test test test test test test
+%     test test test test test test test test test test test test test
+%     test test test test test test test test test test test test test
+%     test test test
+% \stoptext
+
+\def\dohandledelimitedtext#1#2%
+  {\begingroup
+   \setbox\scratchbox\hbox{\delimitedtextparameter#1}%
+   \ifdim\wd\scratchbox>\zeropoint
+%      \ifdim\lastskip=\delimitedtextsignal
+%        \unskip
+     \ifdim\lastkern=\delimitedtextsignal
+       \unkern
+       \hskip\hspaceamount\currentlanguage{interquotation}%
+     \else
+       #2%
+     \fi
+     \ifhmode % else funny pagebeaks
+       \penalty\!!tenthousand
+       \hskip\zeropoint % == \prewordbreak
+     \fi
+     \strut % new, needed below
+     \delimitedtextparameter#1% unhbox\scratchbox
+%      \penalty\!!tenthousand % else overfull boxes, but that's better than dangling periods
+     \kern\delimitedtextsignal % +- \prewordbreak
+   \fi
+   \endgroup}
+
+\def\dohandleleftdelimitedtext#1#2%
+  {\begingroup
+   \setbox\scratchbox\hbox{\delimitedtextparameter#1}%
+   \ifdim\wd\scratchbox>\zeropoint
+     \ifdim\lastkern=\delimitedtextsignal
+       \unkern
+       \hskip\hspaceamount\currentlanguage{interquotation}%
+     \else\ifdim\lastskip=\delimitedtextsignal
+       \unskip
+       \hskip\hspaceamount\currentlanguage{interquotation}%
+     \else
+       #2%
+     \fi\fi
+     \strut % new, needed below
+     \ifhmode % else funny pagebeaks
+       \penalty\!!tenthousand
+       \hskip\zeropoint % == \prewordbreak
+     \fi
+     \strut % new, needed below
+     \delimitedtextparameter#1% unhbox\scratchbox
+     \hskip\delimitedtextsignal % +- \prewordbreak
+   \fi
+   \endgroup}
+
+\def\dohandlerightdelimitedtext#1#2%
+  {\begingroup
+   \setbox\scratchbox\hbox{\delimitedtextparameter#1}%
+   \ifdim\wd\scratchbox>\zeropoint
+     \ifdim\lastkern=\delimitedtextsignal
+       \unkern
+       \hskip\hspaceamount\currentlanguage{interquotation}%
+     \else\ifdim\lastskip=\delimitedtextsignal
+       \unskip
+       \hskip\hspaceamount\currentlanguage{interquotation}%
+     \else
+       #2%
+     \fi\fi
+     \ifhmode % else funny pagebeaks
+       \penalty\!!tenthousand
+       \hskip\zeropoint % == \prewordbreak
+     \fi
+     \strut % new, needed below
+     \delimitedtextparameter#1% unhbox\scratchbox
+     \kern\delimitedtextsignal % +- \prewordbreak
+   \fi
+   \endgroup}
+
+\def\ignoredelimitedtext#1%
+  {\delimitedtextparameter#1}
+
+\def\handledelimitedtext#1%
+  {\dohandledelimitedtext{#1}\relax}
+
+\def\handleleftdelimitedtext#1%
+  {\dohandleleftdelimitedtext{#1}\relax}
+
+\def\handlerightdelimitedtext#1%
+  {\dohandlerightdelimitedtext{#1}\relax}
+
+\unexpanded\def\dodelimitedtextpar
+  {\dohandleleftdelimitedtext\c!left\relax
+   \groupedcommand
+     \donothing
+     {\dohandlerightdelimitedtext\c!right\removelastskip
+      \popdelimitedtext}}
+
+\unexpanded\def\dodelimitedtexttxt
+  {\doifelse{\delimitedtextparameter\c!style}\v!normal
+     \doquoteddelimited\doattributeddelimited}
+
+\def\doquoteddelimited
+  {\dohandleleftdelimitedtext\c!left\relax
+   \groupedcommand
+     \donothing
+     {\dohandlerightdelimitedtext\c!right
+      \removelastskip
+      \popdelimitedtext}}
+
+\def\doattributeddelimited
+  {\groupedcommand
+     {\dostartattributes{\??ci\currentdelimitedtext}\c!style\c!color}
+     {\dostopattributes
+      \popdelimitedtext}}
+
+\def\dofontdrivendelimited
+  {\simplegroupedcommand
+     {\languageparameter{\c!left\currentdelimitedtext}}
+     {\languageparameter{\c!right\currentdelimitedtext}%
+      \popdelimitedtext}}
+
+% testcase for nesting:
+%
+% \quotation{... \quotation{...} ...}
+% \startquotation ... \startquotation... \quotation{...} \stopquotation\space ...\stopquotation
+% \setupdelimitedtext[quotation][1][left=(,right=)]
+% \setupdelimitedtext[quotation][2][left={[},right={]}]
+% \setupdelimitedtext[quotation][3][left=\{,right=\}]
+% \quotation{... \quotation{...} ...}
+% \startquotation ... \startquotation... \quotation{...} \stopquotation\space ...\stopquotation
+

+\definedelimitedtext
+  [\v!quotation]
+  [\c!left={\symbol[\c!leftquotation]},
+   \c!right={\symbol[\c!rightquotation]},
+   \c!leftmargin=\v!standard]
+
+\definedelimitedtext
+  [\v!quote][\v!quotation]
+
+\setupdelimitedtext
+  [\v!quote]
+  [\c!location=\v!text,
+   \c!left={\symbol[\c!leftquote]},
+   \c!right={\symbol[\c!rightquote]}]
+
+\definedelimitedtext
+   [\v!blockquote][\v!quotation]
+
+\setupdelimitedtext
+  [\v!blockquote]
+  [\c!left=,
+   \c!right=]
+
+\definedelimitedtext
+  [\v!speech][\v!quotation]
+
+\setupdelimitedtext
+  [\v!speech]
+  [\c!repeat=\v!yes,
+   \c!left={\symbol[\c!leftspeech]},
+   \c!middle={\symbol[\c!middlespeech]},
+   \c!right={\symbol[\c!rightspeech]}]
+
+% how do we call an tight quote
+%
+% \definedelimitedtext
+%    [\v!quotation][\v!quotation]
+%
+% \setupdelimitedtext
+%   [\v!quotation]
+%   [\c!indentnext=\v!no,
+%    \c!spacebefore=\v!nowhite]
+
+\def\setupquotation{\setupdelimitedtext[\v!quotation]}
+\def\setupquote    {\setupdelimitedtext[\v!quote]}
+

+% seldom used, move from kernel to run time module
+
+\ifx\tfx\undefined \let\tfx\relax \fi
+
+\def\basegrid
+  {\dosingleempty\dobasegrid}
+
+\def\dobasegrid[#1]%
+  {\begingroup
+   \getparameters[\??rt]
+     [\c!x=0,\c!y=0,
+      \c!nx=10,\c!ny=10,
+      \c!dx=.5,\c!dy=.5,
+      \c!xstep=0,\c!ystep=0,
+      \c!unit=\s!cm,
+      \c!scale=1,
+      \c!factor=1,
+      \c!offset=\v!yes,
+      \c!location=\v!left,
+      #1]%
+   \startpositioning
+     \dimen0=\@@rtdx\@@rtunit\relax
+     \dimen0=\@@rtscale\dimen0\relax
+     \dimen0=\@@rtfactor\dimen0\relax
+     \multiply\dimen0 \@@rtnx\relax
+     \dimen2=\@@rtdy\@@rtunit\relax
+     \dimen2=\@@rtscale\dimen2\relax
+     \dimen2=\@@rtfactor\dimen2\relax
+     \multiply\dimen2 \@@rtny\relax
+     \def\horline
+       {\vbox
+          {\hrule
+             \!!width \dimen0
+             \!!height \linewidth
+             \!!depth \!!zeropoint}}%
+     \def\verline%
+       {\vrule
+          \!!width \linewidth
+          \!!height \dimen2
+          \!!depth \!!zeropoint}%
+     \doglobal\newcounter\@@gridc
+     \doglobal\newcounter\@@gridd
+     \doglobal\newcounter\@@gride
+     \def\setlegend##1##2##3%
+       {\gdef\@@gridc{0}%
+        \dimen0=2em\relax
+        \dimen2=##2\@@rtunit\relax
+        \dimen2=\@@rtscale\dimen2\relax
+        \dimen2=\@@rtfactor\dimen2\relax
+        \divide\dimen0 \dimen2\relax
+        \xdef\@@gride{\number\dimen0}%
+        \ifnum\@@gride>50
+          \gdef\@@gride{100}%
+        \else\ifnum\@@gride>10
+          \gdef\@@gride{50}%
+        \else\ifnum\@@gride>5
+          \gdef\@@gride{10}%
+        \else\ifnum\@@gride>1
+          \gdef\@@gride{5}%
+        \else
+          \gdef\@@gride{1}%
+        \fi\fi\fi\fi
+        \gdef\@@gridd{0}%
+        \def\legend
+          {\ifnum\@@gridd=\zerocount
+             \vbox
+               {\increment(\@@gridc,##1)%
+                \hbox to 2em{\hss\@@gridc\hss}}%
+             \global\let\@@gridd=\@@gride
+           \fi
+             \doglobal\decrement\@@gridd
+             \doglobal\increment(\@@gridc,##1)}}%
+     \def\draw##1##2##3##4##5##6##7##8##9%
+       {\setuppositioning
+          [\c!state=##8,
+           \c!xstep=\v!absolute,
+           \c!ystep=\v!absolute,
+           \c!unit=\@@rtunit,
+           \c!scale=\@@rtscale,
+           \c!factor=\@@rtfactor,
+           \c!offset=\@@rtoffset,
+           \c!xoffset=##6,
+           \c!yoffset=##7]%
+        \doifelse{##9}\v!middle
+          {\scratchdimen##3pt\scratchdimen.5\scratchdimen
+           \edef\@@psxx{\withoutpt\the\scratchdimen}%
+           \scratchdimen##4pt\scratchdimen.5\scratchdimen
+           \edef\@@psyy{\withoutpt\the\scratchdimen}%
+           \scratchcounter##2\advance\scratchcounter -1
+           \edef\@@pszz{\the\scratchcounter}}
+          {\edef\@@psxx{0}\edef\@@psyy{0}\edef\@@pszz{##2}}%
+        \position(\@@psxx,\@@psyy){##1}%
+        \setuppositioning
+          [\c!state=##8,
+           \c!xstep=\v!relative,
+           \c!ystep=\v!relative,
+           \c!scale=\@@rtscale,
+           \c!factor=\@@rtfactor,
+           \c!offset=\@@rtoffset,
+           \c!unit=\@@rtunit]%
+        \dorecurse\@@pszz{\position(##3,##4){##5}}}%
+     \draw
+       \verline\@@rtnx\@@rtdx0\verline\!!zeropoint\!!zeropoint\v!start\empty
+     \draw
+       \horline\@@rtny0\@@rtdy\horline\!!zeropoint\!!zeropoint\v!start\empty
+     \tfx
+     \doifnot\@@rtxstep{0}
+       {\setlegend\@@rtxstep\@@rtdx\@@rtx
+        \draw\legend\@@rtnx\@@rtdx0\legend{-1em}{-1.5em}\v!overlay\@@rtlocation}%
+     \doifnot\@@rtystep{0}
+       {\setlegend\@@rtystep\@@rtdy\@@rty
+        \draw\legend\@@rtny0\@@rtdy\legend{-2em}{-.75ex}\v!overlay\@@rtlocation}%
+  \stoppositioning
+  \endgroup}
+
+\let\grid\basegrid
+

+% Dit wordt:
+%
+%   \doorverwijzen[naam][instellingen] enz.
+%
+% waarbij <naam> bijvoorbeeld publicatie is. Dit levert:
+%
+%   \start<naam>
+%   \stop<naam>
+%
+%   \beginvan<naam>
+%   \eindvan<naam>
+%
+%   \publicatie
+%
+%   \volledigelijstmetpublicaties
+%
+% eigenlijk kan ook door... zo worden uitgebreid!
+
+% old, will become obsolete or module, replace by bib module
+
+% \defineenumeration
+%   [@publicatie]
+%   [\c!location=\v!left,
+%    \c!width=\@@pbwidth,\c!hang=,\c!sample=,
+%    \c!before=\@@pbbefore,\c!after=\@@pbafter,\c!inbetween=,
+%    \c!headstyle=\@@pbheadstyle,\c!style=,
+%    \c!headcolor=\@@pbheadcolor,\c!color=,
+%    \c!way=\@@pbway,\c!blockway=\@@pbblockway,
+%    \c!text=,\c!left=\@@pbleft,\c!right=\@@pbright]
+
+% \def\dosetuppublications[#1]%
+%   {\getparameters[\??pb][#1]}
+%
+% \def\setuppublications%
+%   {\dosingleargument\dosetuppublications}
+%
+% \def\apa at publicatie
+%   {\doifsomething\@@pb at naam    {\@@pb at naam,\space}%
+%    \doifsomething\@@pb at titel   {{\sl\@@pb at titel}.\space}%
+%    \doifsomething\@@pb at jaar    {(\@@pb at jaar).\space}%
+%    \doifsomething\@@pb at plaats  {\@@pb at plaats\doifelsenothing\@@pb at uitgever{.}{:\space}}%
+%    \doifsomething\@@pb at uitgever{\@@pb at uitgever.}}
+%
+% \def\normaal at publicatie
+%   {\@@pb at naam, \@@pb at titel, \@@pb at jaar, \@@pb at pagina, \@@pb at plaats, \@@pb at uitgever.}
+%
+% \def\complexstartpublicatie[#1]#2\stoppublicatie
+%   {\bgroup
+%    \def\dosetpublicatie
+%      {\processcommalist
+%         [naam,titel,jaar,plaats,pagina,uitgever]
+%         \setpublicatie
+%       \ignorespaces}%
+%    \def\setpublicatie##1%
+%       {\letvalue{\??pb @##1}\empty
+%        \setvalue{##1}####1{\setvalue{\??pb @##1}{####1}\ignorespaces}}%
+%    \def\getpublicatie%
+%      {\doifsomething\@@pbalternative{\getvalue{\@@pbalternative @publicatie}}}%
+%    \doifelse\@@pbnumbering\v!yes
+%       {\@publicatie[#1]\dosetpublicatie#2\getpublicatie\par}%
+%       {\@@pbbefore
+%        \dosetpublicatie\ignorespaces#2\getpublicatie
+%        \@@pbafter}%
+%    \egroup}
+%
+% \definecomplexorsimpleempty\startpublicatie
+%
+% \def\publication#1[#2]%
+%   {\@@pbleft\in{#1}[#2]\@@pbright}
+%
+% \setuppublications
+%   [\c!numbering=\v!yes,
+%    \c!alternative=\c!apa,
+%    \c!width=2em,
+%    \c!hang=,
+%    \c!sample=,
+%    \c!before=,
+%    \c!after=,
+%    \c!inbetween=,
+%    \c!headstyle=,
+%    \c!headcolor=,
+%    \c!style=,
+%    \c!color=,
+%    \c!blockway=\v!by\v!text,
+%    \c!way=\v!by\v!text,
+%    \c!text=,
+%    \c!left={[},
+%    \c!right={]}]
+

+% only used at pragma, move from kernel to run time module
+
+\def\referraldate
+  {\currentdate[\v!referral]}
+
+\def\doreferral[#1]%
+   {\noheaderandfooterlines
+    \bgroup
+    \getparameters
+      [\??km]
+      [\c!bet=\unknown,\c!dat=\unknown,\c!ken=\unknown,
+       \c!from=,\c!to=,\c!ref=,#1]%
+    % moet anders, hoort niet in 01b
+    \assigntranslation[\s!nl=referentie,\s!en=reference,\s!de=Referenz,\s!hr=referenca,\s!sp=referencia]\to\@@@kmref
+    \assigntranslation[\s!nl=van,\s!en=from,\s!de=Von,\s!hr=od,\s!sp=de]\to\@@@kmvan
+    \assigntranslation[\s!nl=aan,\s!en=to,\s!de=An,\s!hr=za,\s!sp=a]\to\@@@kmaan
+    \assigntranslation[\s!nl=betreft,\s!en=concerns,\s!de=Betreff,\s!hr=predmet,\s!sp=]\to\@@@kmbet
+    \assigntranslation[\s!nl=datum,\s!en=date,\s!de=Datum,\s!hr=datum,\s!sp=fecha]\to\@@@kmdat
+    \assigntranslation[\s!nl=kenmerk,\s!en=mark,\s!de=Kennzeichen,\s!hr=oznaka,\s!sp=]\to\@@@kmken
+    %
+    \definetabulate[\s!dummy][|l|p|]
+    \startdummy
+      \NC\@@@kmbet\EQ\@@kmbet\NC\NR
+      \NC\@@@kmdat\EQ\@@kmdat\NC\NR
+      \NC\@@@kmken\EQ\expanded{\smallcapped{\@@kmken}}\NC\NR
+      \doifsomething{\@@kmfrom\@@kmto}{\NC\NC\NC\NR}%
+      \doifsomething \@@kmfrom         {\NC\@@@kmvan\EQ\@@kmfrom\NC\NR}%
+      \doifsomething \@@kmto         {\NC\@@@kmaan\EQ\@@kmto\NC\NR}%
+      \doifsomething \@@kmref         {\NC\NC\NC\NR\NC\@@@kmref\EQ\@@kmref\NC\NR}%
+    \stopdummy
+    \egroup}
+
+\def\referral
+  {\dosingleargument\doreferral}
+

+% FUZZY OLD STUFF: will be removed when not used in some manual;
+% rows instead of columns, i'd forgotten that this code exist
+%
+% \definesystemvariable{ri}
+%
+% \def\setuprows
+%   {\dodoubleargument\getparameters[\??ri]}
+%
+% \definecomplexorsimpleempty\startrows
+%
+% \def\complexstartrows[#1]%
+%   {\bgroup
+%    \setuprows[#1]%
+%    \let\do@@ribottom\relax
+%    \def\row
+%      {\do@@ribottom
+%       \egroup
+%       \dimen0\vsize
+%       \divide\dimen0 \@@rin
+%       \advance\dimen0 -\lineskip
+%       \vbox to \dimen0
+%         \bgroup
+%         \@@ritop
+%         \let\do@@ribottom\@@ribottom
+%         \ignorespaces}%
+%    \bgroup
+%    \row}
+%
+% \def\stoprows
+%   {\do@@ribottom
+%    \egroup
+%    \egroup}
+%
+% \setuprows
+%   [\c!n=2,
+%    \c!top=,
+%    \c!bottom=\vfill]
+

+% THIS WAS MAIN-003.TEX
+
+% messages moved
+
+% messages moved
+
+% messages moved
+
+% messages moved
+
+% messages moved
+
+% messages moved
+
+% messages moved
+
+% messages moved
+

+\definetabulate
+  [\v!legend]
+  [|emj1|i1|mR|]
+
+\setuptabulate
+  [\v!legend]
+  [\c!unit=.75em,\c!inner=\setquicktabulate\leg,EQ={=}]
+
+\definetabulate
+  [\v!legend][\v!two]
+  [|emj1|emk1|i1|mR|]
+
+\definetabulate
+  [\v!fact]
+  [|R|ecmj1|i1mR|]
+
+\setuptabulate
+  [\v!fact]
+  [\c!unit=.75em,\c!inner=\setquicktabulate\fact,EQ={=}]
+
+\unexpanded\def\xbox
+  {\bgroup\aftergroup\egroup\hbox\bgroup\tx\let\next=}
+
+\unexpanded\def\xxbox
+  {\bgroup\aftergroup\egroup\hbox\bgroup\txx\let\next=}
+
+% \def\mrm#1%
+%   {$\rm#1$}
+

+%D \macros
+%D   {definepairedbox, setuppairedbox, placepairedbox}
+%D
+%D Paired boxes, formally called legends, but from now on a
+%D legend is just an instance, are primarily meant for
+%D typesetting some text alongside an illustration. Although
+%D there is quite some variation possible, the functionality is
+%D kept simple, if only because in most cases such pairs are
+%D typeset sober.
+%D
+%D The location specification accepts a pair, where the first
+%D keyword specifies the arrangement, and the second one the
+%D alignment. The first key of the location pair is one of
+%D \type {left}, \type {right}, \type {top} or \type {bottom},
+%D while the second key can also be \type {middle}.
+%D
+%D The first box is just collected in an horizontal box, but
+%D the second one is a vertical box that gets passed the
+%D bodyfont and alignment settings.
+
+%D Today we would implement this using layers .... but for the
+%D moment we keep it this way.
+
+%  \startbuffer[test]
+%  \test left   \test left,top    \test left,bottom  \test left,middle
+%  \test right  \test right,top   \test right,bottom \test right,middle
+%  \test top    \test top,left    \test top,right    \test top,middle
+%  \test bottom \test bottom,left \test bottom,right \test bottom,middle
+%  \stopbuffer
+%
+%  \def\showtest#1%
+%    {\pagina
+%     \typebuffer[demo]
+%     \def\test##1
+%       {\startlinecorrection[blank]
+%        \getbuffer[demo]%
+%        \ruledhbox\placelegend
+%          [bodyfont=6pt,location={##1}]
+%          {\framed[width=.25\textwidth]{\tttf##1}}
+%          {#1}
+%        \stoplinecorrection}
+%     \getbuffer[test]}
+%
+%  \startbuffer[demo]
+%  \setuplegend
+%    [width=\hsize,maxwidth=\makeupwidth,
+%     height=\vsize,maxheight=\makeupheight]
+%  \stopbuffer
+%
+%  \showtest{These examples demonstrate the default settings.}
+%
+%  \startbuffer[demo]
+%  \setuplegend
+%    [width=\textwidth,
+%     maxwidth=\textwidth]
+%  \stopbuffer
+%
+%  \showtest{\input tufte }
+%
+%  \startbuffer[demo]
+%  \setuplegend
+%    [width=.65\textwidth]
+%  \stopbuffer
+%
+%  \showtest{\input knuth }
+%
+%  \startbuffer[demo]
+%  \setuplegend
+%    [height=2cm]
+%  \stopbuffer
+%
+%  \showtest{These examples demonstrate some other settings.}
+%
+%  \startbuffer[demo]
+%  \setuplegend
+%    [width=.65\textwidth,
+%     height=2cm]
+%  \stopbuffer
+%
+%  \showtest{These examples demonstrate some other settings.}
+%
+%  \startbuffer[demo]
+%  \setuplegend
+%    [n=2,align=right,width=.5\textwidth]
+%  \stopbuffer
+%
+%  \showtest{\input zapf }
+
+%D \macros
+%D   {setuplegend, placelegend}
+%D
+%D It makes sense to typeset a legend to a figure in \TEX\
+%D and not in a drawing package. The macro \type {\placelegend}
+%D combines a figure (or something else) and its legend. This
+%D command is just a paired box.
+%D
+%D The legend is placed according to \type {location}, being
+%D \type {bottom} or \type {right}. The macro macro is used as
+%D follows.
+%D
+%D \starttyping
+%D \placefigure
+%D   {whow}
+%D   {\placelegend
+%D      {\externalfigure[cow]}
+%D      {\starttabulation
+%D       \NC 1 \NC head \NC \NR
+%D       \NC 2 \NC legs \NC \NR
+%D       \NC 3 \NC tail \NC \NR
+%D       \stoptabulation}}
+%D
+%D \placefigure
+%D   {whow}
+%D   {\placelegend
+%D      {\externalfigure[cow]}
+%D      {\starttabulation[|l|l|l|l|]
+%D       \NC 1 \NC head \NC 3 \NC tail \NC \NR
+%D       \NC 2 \NC legs \NC   \NC      \NC \NR
+%D       \stoptabulation}}
+%D
+%D \placefigure
+%D   {whow}
+%D   {\placelegend[n=2]
+%D      {\externalfigure[cow]}
+%D      {\starttabulation
+%D       \NC 1 \NC head \NC \NR
+%D       \NC 2 \NC legs \NC \NR
+%D       \NC 3 \NC tail \NC \NR
+%D       \stoptabulation}}
+%D
+%D \placefigure
+%D   {whow}
+%D   {\placelegend[n=2]
+%D      {\externalfigure[cow]}
+%D      {head \par legs \par tail}}
+%D
+%D \placefigure
+%D   {whow}
+%D   {\placelegend[n=2]
+%D      {\externalfigure[cow]}
+%D      {\startitemize[packed]
+%D       \item head \item legs \item  tail \item belly \item horns
+%D       \stopitemize}}
+%D
+%D \placefigure
+%D   {whow}
+%D   {\placelegend[n=2,width=.8\hsize]
+%D      {\externalfigure[cow]}
+%D      {\startitemize[packed]
+%D       \item head \item legs \item  tail \item belly \item horns
+%D       \stopitemize}}
+%D \stoptyping
+
+\newbox\firstpairedbox
+\newbox\secondpairedbox
+
+\def\definepairedbox
+  {\dodoubleempty\dodefinepairedbox}
+
+\def\dodefinepairedbox[#1][#2]%
+  {\getparameters
+     [\??ld#1]
+     [\c!n=1,
+      \c!distance=\bodyfontsize,
+      \c!before=,
+      \c!after=,
+      \c!color=,
+      \c!style=,
+      \c!inbetween={\blank[\v!medium]},
+      \c!width=\hsize,
+      \c!height=\vsize,
+      \c!maxwidth=\textwidth,   % \makeupwidth,
+      \c!maxheight=\textheight, % \makeupheight,
+      \c!bodyfont=,
+      \c!align=,
+      \c!location=\v!bottom,
+      #2]%
+   \setvalue{\e!setup#1\e!endsetup}{\setuppairedbox[#1]}%
+   \setvalue{\e!place#1}{\placepairedbox[#1]}}
+
+\def\setuppairedbox
+  {\dodoubleempty\dosetuppairedbox}
+
+\def\dosetuppairedbox[#1]%
+  {\getparameters[\??ld#1]}
+
+\def\placepairedbox
+  {\bgroup\dodoubleempty\doplacepairedbox}
+
+\def\doplacepairedbox[#1][#2]% watch the hsize/vsize tricks
+  {\setuppairedbox[#1][#2]%     % and don't change them
+   \copyparameters % brrr
+     [\??ld][\??ld#1]
+     [\c!n,\c!distance,\c!inbetween,\c!before,\c!after,
+      \c!width,\c!height,\c!maxwidth,\c!maxheight,
+      \c!color,\c!style,\c!bodyfont,\c!align,\c!location]%
+   \@@ldbefore\bgroup
+   \global\setsystemmode{pairedbox}%
+   \beforefirstpairedbox
+   \dowithnextbox
+     {\betweenbothpairedboxes
+      \dowithnextbox
+        {\afterbothpairedboxes
+         \egroup\@@ldafter
+         \egroup}
+      \vbox\bgroup
+        \insidesecondpairedbox
+        \let\next=}
+   \hbox}
+
+\def\beforefirstpairedbox
+  {\chardef\pairedlocationa1 % left
+   \chardef\pairedlocationb4 % middle
+   \getfromcommacommand[\@@ldlocation][1]%
+   \processaction
+     [\commalistelement]
+     [  \v!left=>\chardef\pairedlocationa0,
+       \v!right=>\chardef\pairedlocationa1,
+         \v!top=>\chardef\pairedlocationa2,
+      \v!bottom=>\chardef\pairedlocationa3]%
+   \getfromcommacommand[\@@ldlocation][2]%
+   \processaction
+     [\commalistelement]
+     [  \v!left=>\chardef\pairedlocationb0,
+       \v!right=>\chardef\pairedlocationb1,
+        \v!high=>\chardef\pairedlocationb2,
+         \v!top=>\chardef\pairedlocationb2,
+         \v!low=>\chardef\pairedlocationb3,
+      \v!bottom=>\chardef\pairedlocationb3,
+      \v!middle=>\chardef\pairedlocationb4]}
+
+\def\betweenbothpairedboxes
+  {\switchtobodyfont[\@@ldbodyfont]% split under same regime
+   \setbox\firstpairedbox\flushnextbox
+   \ifnum\pairedlocationa<2
+     \hsize\wd\firstpairedbox % trick
+     \hsize\@@ldwidth
+     \scratchdimen\wd\firstpairedbox
+     \advance\scratchdimen \@@lddistance
+     \bgroup\advance\scratchdimen \hsize
+     \ifdim\scratchdimen>\@@ldmaxwidth\relax
+       \egroup
+       \hsize\@@ldmaxwidth
+       \advance\hsize -\scratchdimen
+     \else
+       \egroup
+     \fi
+   \else
+     \hsize\wd\firstpairedbox
+     \hsize\@@ldwidth % can be \hsize
+     \ifdim\hsize>\@@ldmaxwidth\relax \hsize\@@ldmaxwidth \fi % can be \hsize
+   \fi
+   \ifnum\@@ldn>\plusone
+     \setrigidcolumnhsize\hsize\@@lddistance\@@ldn
+   \fi}
+
+\def\afterbothpairedboxes
+  {\setbox\secondpairedbox\vbox
+     {% \localstartcolor[\@@ldcolor]% does not work yet
+        \ifnum\@@ldn>1
+          \rigidcolumnbalance\nextbox
+        \else
+          \flushnextbox
+        \fi
+      }% \localstopcolor}%
+   \ifnum\pairedlocationa<2\hbox\else\vbox\fi\bgroup % hide vsize
+   \forgetall
+   \ifnum\pairedlocationa<2
+     \scratchdimen\maxoftwoboxdimens\ht\firstpairedbox\secondpairedbox
+     \vsize\scratchdimen
+     \ifdim\scratchdimen<\@@ldheight\relax % can be \vsize
+       \scratchdimen\@@ldheight
+     \fi
+     \ifdim\scratchdimen>\@@ldmaxheight\relax
+       \scratchdimen\@@ldmaxheight
+     \fi
+     \valignpairedbox\firstpairedbox \scratchdimen
+     \valignpairedbox\secondpairedbox\scratchdimen
+   \else
+     \scratchdimen\maxoftwoboxdimens\wd\firstpairedbox\secondpairedbox
+     \halignpairedbox\firstpairedbox \scratchdimen
+     \halignpairedbox\secondpairedbox\scratchdimen
+     \scratchdimen\ht\secondpairedbox
+     \vsize\scratchdimen
+     \ifdim\ht\secondpairedbox<\@@ldheight\relax % can be \vsize
+       \scratchdimen\@@ldheight\relax % \relax needed
+     \fi
+     \ifdim\scratchdimen>\@@ldmaxheight\relax % todo: totale hoogte
+       \scratchdimen\@@ldmaxheight\relax % \relax needed
+     \fi
+     \ifdim\scratchdimen>\ht\secondpairedbox
+       \setbox\secondpairedbox\vbox to \scratchdimen
+         {\ifnum\pairedlocationa=3 \vss\fi %
+          \box\secondpairedbox
+          \ifnum\pairedlocationa=2 \vss\fi}% \kern\zeropoint
+     \fi
+   \fi
+   \ifcase\pairedlocationa
+     \box\secondpairedbox\hskip\@@lddistance\box\firstpairedbox \or
+     \box\firstpairedbox \hskip\@@lddistance\box\secondpairedbox\or
+     \box\secondpairedbox\endgraf \nointerlineskip \@@ldinbetween \box\firstpairedbox \or
+     \box\firstpairedbox \endgraf \nointerlineskip \@@ldinbetween \box\secondpairedbox\else
+   \fi
+   \egroup}
+
+\def\insidesecondpairedbox
+  {\forgetall
+   \setupalign[\@@ldalign]%
+   \tolerantTABLEbreaktrue % hm.
+   \blank[\v!disable]%
+   \everypar{\begstrut}}
+
+\def\maxoftwoboxdimens#1#2#3%
+  {#1\ifdim#1#2>#1#3 #2\else#3\fi}
+
+\def\valignpairedbox#1#2%
+  {\setbox#1\vbox to #2
+     {\ifcase\pairedlocationb\or\or\or\vss\or\vss\fi
+      \box#1\relax
+      \ifcase\pairedlocationb\or\or\vss\or\or\vss\fi}}
+
+\def\halignpairedbox#1#2%
+  {\setbox#1\hbox to #2
+     {\ifcase\pairedlocationb\or\hss\or\or\or\hss\fi
+      \box#1\relax
+      \ifcase\pairedlocationb\hss\or\or\or\or\hss\fi}}
+
+\definepairedbox[\v!legend]
+
+%D Goody:
+
+\appendtoks
+  \global\resetsystemmode{combination}%
+  \global\resetsystemmode{pairedbox}%
+\to \everyinsidefloat
+

+% todo: \startcombination \startcomb \stopcomb ...
+
+\newcount\horcombination  % counter
+\newcount\totcombination
+
+\def\definecombination
+  {\dodoubleempty\dodefinecombination}
+
+\def\dodefinecombination[#1][#2]%
+  {\copyparameters
+     [\??co#1][\??co]
+     [\c!width,\c!height,\c!distance,\c!location,%
+      \c!before,\c!inbetween,\c!after,\c!align,%
+      \c!style,\c!color]%
+   \getparameters
+     [\??co#1][#2]}
+
+\def\setupcombinations
+  {\dodoubleempty\dosetupcombinations}
+
+\def\dosetupcombinations[#1][#2]%
+  {\ifsecondargument
+     \getparameters[\??co#1][#2]%
+   \else
+     \getparameters[\??co][#1]%
+   \fi}
+
+\def\combinationparameter#1%
+  {\csname\??co\currentcombination#1\endcsname}%
+
+\def\startcombination
+  {\bgroup % so we can grab a group
+   \dodoubleempty\dostartcombination}
+
+% \startcombination      {alpha} {a} {beta} {b} \stopcombination
+% \startcombination[2*1] {alpha} {a} {beta} {b} \stopcombination
+% \startcombination[1*2] {alpha} {a} {beta} {b} \stopcombination
+% \startcombination[2]   {alpha} {a} {beta} {b} \stopcombination
+
+\def\dostartcombination[#1][#2]%
+  {\global\setsystemmode{combination}%
+   \doifnothing{#1}\firstargumentfalse      % to be sure (when called in macros)
+   \doifnothing{#2}\secondargumentfalse     % to be sure (when called in macros)
+   \ifsecondargument
+     \def\currentcombination{#1}%
+     \edef\currentcombinationspec{#2*1*}%
+   \else % better : \doifcombinationelse ... \??co#1\c!location
+      \doifinstringelse{*}{#1}
+       {\let\currentcombination\empty
+        \edef\currentcombinationspec{#1*1*}}
+       {\doifnumberelse{#1}
+          {\let\currentcombination\empty
+           \edef\currentcombinationspec{#1*1*}}
+          {\def\currentcombination{#1}%
+           \edef\currentcombinationspec{2*1*}}}%
+   \fi
+   \forgetall
+   \doifelse{\combinationparameter\c!height}\v!fit
+     \vbox {\vbox to \combinationparameter\c!height}%
+   \bgroup
+   \expanded{\dodostartcombination[\currentcombinationspec]}}
+
+\long\def\dodostartcombination[#1*#2*#3]%
+  {\setuphorizontaldivision
+     [\c!n=\v!fit,\c!distance=\combinationparameter\c!distance]%
+   \global\horcombination#1%
+   \global\totcombination#2%
+   \global\setbox\combinationstack\emptybox
+   \xdef\maxhorcombination{\the\horcombination}%
+   \multiply\totcombination\horcombination
+   \tabskip\zeropoint
+   \doifelse{\combinationparameter\c!width}\v!fit
+     {\halign}{\halign to \combinationparameter\c!width}%
+   \bgroup&%
+   %\hfil##\hfil% now : location={left,top}
+   \expanded{\doifnotinset{\v!left}{\combinationparameter\c!location}}\hfil
+   ##%
+   \expanded{\doifnotinset{\v!right}{\combinationparameter\c!location}}\hfil
+   &\tabskip\zeropoint \!!plus 1fill##\cr
+   \docombination}
+
+\def\docombination % we want to add struts but still ignore an empty box
+  {\dowithnextbox
+     {\setbox0\flushnextbox
+      \dowithnextbox
+        {\setbox2\flushnextbox
+         \dodocombination}%
+      \vtop\bgroup
+        \def\next
+          {\futurelet\nexttoken\nextnext}%
+        \def\nextnext
+          {\ifx\nexttoken\egroup \else % the next box is empty
+             \hsize\wd0
+             \setupalign[\combinationparameter\c!align]%
+             \dostartattributes{\??co\currentcombination}\c!style\c!color\empty
+             \bgroup
+             \aftergroup\endstrut
+             \aftergroup\dostopattributes
+             \aftergroup\egroup
+             \begstrut
+           \fi}%
+        \afterassignment\next\let\nexttoken=}
+  \hbox}
+
+% stupid version, does not align top stuff when captions,
+% keep as example
+%
+% \def\dodocombination
+%   {\vbox
+%      {\forgetall % \setupwhitespace[\v!none]%
+%       \let\next\vbox
+%       \ExpandFirstAfter\processallactionsinset
+%         [\combinationparameter\c!location]
+%         [   \v!top=>\let\next\tbox,
+%          \v!middle=>\let\next\halfwaybox]%
+%       \next{\copy0}%
+%       \ifdim\ht2>\zeropoint % beter dan \wd2, nu \strut mogelijk
+%         \combinationparameter\c!inbetween
+%         %\vtop % wrong code
+%         %  {\nointerlineskip  % recently added
+%         %   \hsize\wd0
+%         %   \setupalign[\combinationparameter\c!align]%  % \raggedcenter
+%         %   \begstrut\unhbox2\endstrut}%
+%         \box2
+%       \fi}%
+%    \ifnum\totcombination>\plusone
+%      \global\advance\totcombination\minusone
+%      \global\advance\horcombination\minusone
+%      \ifnum\horcombination=\zerocount
+%        \def\next
+%          {\cr\noalign
+%             {\forgetall % \setupwhitespace[\v!geen]% no
+%              \nointerlineskip
+%              \combinationparameter\c!before
+%              \combinationparameter\c!after
+%              \vss
+%              \nointerlineskip}%
+%           \global\horcombination\maxhorcombination\relax
+%           \docombination}%
+%      \else
+%        \def\next
+%          {&&&\hskip\combinationparameter\c!distance&\docombination}%
+%      \fi
+%    \else
+%      \def\next
+%        {\cr\egroup}%
+%    \fi
+%    \next}
+
+% \def\dodocombination
+%   {\vbox
+%      {\forgetall % \setupwhitespace[\v!none]%
+%       \let\next\vbox
+%       \ExpandFirstAfter\processallactionsinset
+%         [\combinationparameter\c!plaats]
+%         [   \v!top=>\let\next\tbox,
+%          \v!middle=>\let\next\halfwaybox]%
+%       \next{\copy0}%
+%       % we need to save the caption for a next alignment line
+%       \saveoncombinationstack2}%
+%    \ifnum\totcombination>\plusone
+%      \global\advance\totcombination\minusone
+%      \global\advance\horcombination\minusone
+%      \ifnum\horcombination=\zerocount
+%        \def\next
+%          {\cr
+%           \flushcombinationstack
+%           \noalign
+%             {\forgetall % \setupwhitespace[\v!none]% no
+%              \global\setbox\combinationstack\emptybox
+%              \nointerlineskip
+%              \combinationparameter\c!after
+%              \combinationparameter\c!before
+%              \vss
+%              \nointerlineskip}%
+%           \global\horcombination\maxhorcombination\relax
+%           \docombination}%
+%      \else
+%        \def\next
+%          {&&&\hskip\combinationparameter\c!distance&\docombination}%
+%      \fi
+%    \else
+%      \def\next
+%        {\cr
+%         \flushcombinationstack
+%         \egroup}%
+%    \fi
+%    \next}
+
+\def\depthonlybox
+  {\dowithnextbox{\vtop{\hsize\wd\nextbox\kern\zeropoint\box\nextbox}}\vbox}
+
+% \def\boxwithstrutheight
+%   {\dowithnextbox
+%      {\scratchdimen\strutheight
+%       \advance\scratchdimen-\nextboxht
+%       \hbox{\raise\scratchdimen\box\nextbox}}%
+%      \vbox}
+
+\def\dodocombination
+  {\vbox
+     {\forgetall % \setupwhitespace[\v!none]%
+      \let\next\vbox
+      \expanded{\processallactionsinset[\combinationparameter\c!location]}
+        [    \v!top=>\let\next\depthonlybox, % \tbox,
+          \v!middle=>\let\next\halfwaybox]%
+      \next{\copy0}%
+      % we need to save the caption for a next alignment line
+      \saveoncombinationstack2}%
+   \ifnum\totcombination>\plusone
+     \global\advance\totcombination\minusone
+     \global\advance\horcombination\minusone
+     \ifnum\horcombination=\zerocount
+       \def\next
+         {\cr
+          \flushcombinationstack
+          \noalign
+            {\forgetall % \setupwhitespace[\v!none]% no
+             \global\setbox\combinationstack\emptybox
+             \nointerlineskip
+             \combinationparameter\c!after
+             \combinationparameter\c!before
+             \vss
+             \nointerlineskip}%
+          \global\horcombination\maxhorcombination\relax
+          \docombination}%
+     \else
+       \def\next
+         {&&&\hskip\combinationparameter\c!distance&\docombination}%
+     \fi
+   \else
+     \def\next
+       {\cr
+        \flushcombinationstack
+        \egroup}%
+   \fi
+   \next}
+
+% formally ok:
+%
+% \def\stopcombination
+%   {\egroup
+%    \egroup}
+%
+% more robust:
+%
+% \def\stopcombination
+%   {{}{}{}{}{}{}{}{}% catches (at most 4) missing entries
+%    \egroup
+%    \egroup}
+%
+% even better:
+
+\def\stopcombination
+  {{\scratchtoks{{}{}{}}\dorecurse\totcombination{\appendtoks{}{}{}{}\to\scratchtoks}\expandafter}\the\scratchtoks
+   \egroup
+   \egroup}
+
+\newbox\combinationstack
+
+\def\saveoncombinationstack#1%
+  {\global\setbox\combinationstack\hbox
+     {\hbox{\box#1}\unhbox\combinationstack}}
+
+\def\flushcombinationstack
+  {\noalign
+     {\ifdim\ht\combinationstack>\zeropoint
+\nointerlineskip % nieuw
+        \combinationparameter\c!inbetween
+        \global\horcombination\maxhorcombination
+        \globallet\doflushcombinationstack\dodoflushcombinationstack
+      \else
+        \global\setbox\combinationstack\emptybox
+        \globallet\doflushcombinationstack\donothing
+      \fi}%
+   \doflushcombinationstack\crcr}
+
+\gdef\dodoflushcombinationstack
+  {\global\setbox\combinationstack\hbox
+     {\unhbox\combinationstack
+      \global\setbox1\lastbox}%
+   \box1% \ruledhbox{\box1}%
+   \global\advance\horcombination\minusone\relax
+   \ifnum\horcombination>\zerocount
+     \def\next{&&&&\doflushcombinationstack}%
+   \else
+     \global\setbox\combinationstack\emptybox
+    %\let\next\relax
+     \@EA\gobbleoneargument
+   \fi
+   \next}
+
+\setupcombinations
+  [\c!width=\v!fit,
+   \c!height=\v!fit,
+   \c!distance=1em,
+   \c!location=\v!bottom, % can be something {top,left}
+   \c!before=\blank,
+   \c!inbetween={\blank[\v!medium]},
+   \c!style=,
+   \c!color=,
+   \c!after=,
+   \c!align=\v!middle]
+

+%D \macros
+%D   {startfloatcombination}
+%D
+%D \setupexternalfigures[directory={../sample}]
+%D \startbuffer
+%D \placefigure
+%D   [left,none]
+%D   {}
+%D   {\startfloatcombination[2*2]
+%D      \placefigure{alpha}{\externalfigure[cow.pdf][width=1cm]}
+%D      \placefigure{beta} {\externalfigure[cow.pdf][width=2cm]}
+%D      \placefigure{gamma}{\externalfigure[cow.pdf][width=3cm]}
+%D      \placefigure{delta}{\externalfigure[cow.pdf][width=4cm]}
+%D    \stopfloatcombination}
+%D
+%D \input tufte
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+
+\def\startfloatcombination
+  {\dodoubleempty\dostartfloatcombination}
+
+\def\dostartfloatcombination[#1][#2]%
+  {\vbox\bgroup
+  %\insidecolumnstrue % trick, forces no centering, todo: proper switch/feature
+   \chardef\postcenterfloatmethod\zerocount
+   \forcelocalfloats
+   \def\stopfloatcombination
+     {\scratchtoks\emptytoks
+      \dorecurse\noflocalfloats
+        {\appendetoks{\noexpand\getlocalfloat{\recurselevel}}{}\to\scratchtoks}%
+      \expanded{\startcombination[#1]\the\scratchtoks}\stopcombination
+      \resetlocalfloats
+     \egroup}}
+

+\def\placerelativetoeachother#1#2%
+  {\bgroup
+   \dowithnextbox
+     {\bgroup
+      \setbox0\box\nextbox
+      \dowithnextbox
+        {\setbox2\box\nextbox
+         #1{#2#########2\cr\box0\cr\box2\cr}
+         \egroup
+         \egroup}
+        \hbox}
+     \hbox}
+
+\def\placeontopofeachother{\placerelativetoeachother\halign\hss}
+\def\placesidebyside      {\placerelativetoeachother\valign\vss}
+

+% this will be replaced or go away, never used
+
+\def\douseexternalfiles[#1][#2]%
+  {\getparameters
+     [\??fi#1]
+     [\c!file=,
+      \c!bodyfont=,
+      \c!option=,
+      #2]}
+
+\def\useexternalfiles
+  {\dodoubleargument\douseexternalfiles}
+
+\def\dostelexternefilesin[#1][#2]%
+  {\doifundefinedelse{\??fi#1\c!file}
+     {\useexternalfiles[#1][#2]}
+     {\getparameters[\??fi#1][#2]}}
+
+\def\stelexternefilesin
+  {\dodoubleargument\dostelexternefilesin}
+
+\def\verwerkexternefile#1#2#3%
+  {\bgroup
+   \getparameters[\??fi#1][\c!file=,#3]%
+   \doinputonce{\getvalue{\??fi#1\c!file}}%
+   \ExpandFirstAfter\switchtobodyfont[\getvalue{\??fi#1\c!bodyfont}]%
+   \readsysfile{#2}  % beter: loc of fix gebied
+     \donothing
+     {\showmessage\m!systems{41}{#2,#1}}%
+   \egroup}
+
+\def\douseexternalfile[#1][#2][#3][#4]%
+  {\stelexternefilesin[#1][]%
+   \doinputonce{\getvalue{\??fi#1\c!file}}%
+   \doifelsenothing{#2}
+     {\setvalue{#3}{\verwerkexternefile{#1}{#3}{#4}}}
+     {\setvalue{#2}{\verwerkexternefile{#1}{#3}{#4}}}}
+
+\def\useexternalfile
+  {\doquadrupleargument\douseexternalfile}
+
+\useexternalfiles
+  [pictex]
+  [\c!bodyfont=\v!small,
+   \c!file=pictex]
+
+\useexternalfiles
+  [table]
+  [\c!file=table]
+

+%D A couple of examples, demonstrating how the depth is
+%D taken care of:
+%D
+%D \startbuffer
+%D test\rotate[frame=on, rotation=0]  {gans}%
+%D test\rotate[frame=on, rotation=90] {gans}%
+%D test\rotate[frame=on, rotation=180]{gans}%
+%D test\rotate[frame=on, rotation=270]{gans}%
+%D test
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+
+% When we rotate over arbitrary angles, we need to relocate the
+% resulting box because rotation brings that box onto the negative
+% axis. The calculations (mostly sin and cosine) need to be tuned for
+% the way a box is packages (i.e. the refence point). A typical example
+% of drawing, scribbling, and going back to the days of school math.
+%
+% We do a bit more calculations than needed, simply because that way
+% it's easier to debug the code.
+
+\def\dododorotatenextbox
+  {\setbox\nextbox\vbox to \@@layerysiz
+     {\vfill
+      \hbox to \@@layerxsiz
+        {\dostartrotation\@@rorotation
+           \nextboxwd\zeropoint
+           \nextboxht\zeropoint
+           \flushnextbox
+         \dostoprotation
+         \hfill}%
+      \kern\@@layerypos}%
+  \setbox\nextbox\hbox
+    {\kern\@@layerxpos
+     \kern\@@layerxoff
+     \lower\@@layeryoff\flushnextbox}}
+
+\def\dodorotatenextbox#1#2% quite some trial and error -)
+  {\dontshowcomposition
+   \dontcomplain
+   \ifnum#2=\plusfour
+     % new, location=middle
+     \!!widthb \nextboxwd
+     \!!heightb\nextboxht
+     \!!depthb \nextboxdp
+     \setbox\nextbox\vbox{\vskip.5\nextboxht\hskip-.5\nextboxwd\flushnextbox}%
+     \smashbox\nextbox
+   \fi
+   \!!widtha \nextboxwd
+   \!!heighta\nextboxht
+   \!!deptha \nextboxdp
+   \!!doneafalse
+   \!!donebfalse
+   \ifcase#2\or
+     % 1: fit
+   \or
+     % 2: depth, not fit
+     \!!doneatrue
+     \!!donebtrue
+   \or
+     % 3: depth, fit
+     \!!donebtrue
+   \fi
+   \setbox\nextbox\vbox{\hbox{\raise\nextboxdp\flushnextbox}}%
+   \!!dimena \nextboxht
+   \setcalculatedcos\cos\@@rorotation
+   \setcalculatedsin\sin\@@rorotation
+   \@@layerxpos\zeropoint
+   \@@layerypos\zeropoint
+   \@@layerxoff\zeropoint
+   \@@layeryoff\zeropoint
+   \ifdim\sin\points>\zeropoint
+     \ifdim\cos\points>\zeropoint
+       \@@layerxsiz                    \cos\!!widtha
+       \@@layerysiz                    \sin\!!widtha
+       \advance\@@layerxsiz            \sin\!!dimena
+       \advance\@@layerysiz            \cos\!!dimena
+       \@@layerypos                    \cos\!!dimena
+       \if!!donea
+         \@@layerxoff          \negated\sin\!!dimena
+         \advance\@@layerxoff          \sin\!!deptha
+       \fi
+       \if!!doneb
+         \@@layeryoff                  \cos\!!deptha
+       \fi
+       \dododorotatenextbox
+     \else
+       \@@layerxsiz            \negated\cos\!!widtha
+       \@@layerysiz                    \sin\!!widtha
+       \advance\@@layerxsiz            \sin\!!dimena
+       \advance\@@layerysiz    \negated\cos\!!dimena
+       \@@layerxpos            \negated\cos\!!widtha
+       \if!!donea
+         \@@layerxoff                     -\@@layerxsiz
+         \advance\@@layerxoff          \sin\!!deptha
+       \fi
+       \if!!doneb
+         \@@layeryoff          \negated\cos\!!heighta
+       \fi
+       \dododorotatenextbox
+       \wd\nextbox\if!!donea\sin\!!deptha\else\@@layerxsiz\fi
+     \fi
+   \else
+     \ifdim\cos\points<\zeropoint
+       \@@layerxsiz           \negated\cos\!!widtha
+       \@@layerysiz           \negated\sin\!!widtha
+       \advance\@@layerxsiz   \negated\sin\!!dimena
+       \advance\@@layerysiz   \negated\cos\!!dimena
+       \@@layerxpos                        \@@layerxsiz
+       \@@layerypos            \negated\sin\!!widtha
+       \if!!donea
+         \@@layerxoff                     -\@@layerxsiz
+         \advance\@@layerxoff  \negated\sin\!!heighta
+       \fi
+       \if!!doneb
+         \@@layeryoff                      \@@layerysiz
+         \advance\@@layeryoff          \cos\!!deptha
+       \fi
+       \dododorotatenextbox
+       \wd\nextbox\if!!donea\negated\sin\!!heighta\else\@@layerxsiz\fi
+     \else
+       \@@layerxsiz                    \cos\!!widtha
+       \@@layerysiz            \negated\sin\!!widtha
+       \advance\@@layerxsiz    \negated\sin\!!dimena
+       \advance\@@layerysiz            \cos\!!dimena
+       \ifdim\sin\points=\zeropoint
+         \@@layerxpos                       \zeropoint
+         \@@layerxoff                       \zeropoint
+         \@@layerypos                      \@@layerysiz
+         \if!!doneb
+           \@@layeryoff                     \!!deptha
+         \fi
+       \else
+         \@@layerypos                       \@@layerysiz
+         \@@layerxpos           \negated\sin\!!dimena
+         \if!!donea
+           \@@layerxoff                    -\@@layerxsiz
+           \advance\@@layerxoff \negated\sin\!!heighta
+         \fi
+         \if!!doneb
+           \@@layeryoff          \negated\sin\!!deptha
+         \fi
+       \fi
+       \dododorotatenextbox
+       \ifdim\sin\points=\zeropoint
+       \else
+         \wd\nextbox\if!!donea\negated\sin\!!heighta\else\@@layerxsiz\fi
+       \fi
+     \fi
+   \fi
+   % new, location=middle
+   \ifnum#2=\plusfour
+     \setbox\nextbox\vbox{\vskip-.5\!!heightb\hskip.5\!!heightb\flushnextbox}%
+     \nextboxwd\!!widthb
+     \nextboxht\!!heightb
+     \nextboxdp\!!depthb
+   \fi}
+
+\def\dorotatenextbox#1#2%
+  {\doifsomething{#1}
+     {\edef\@@rorotation{\realnumber{#1}}% get rid of leading zeros and spaces
+      \setbox\nextbox\vbox{\flushnextbox}% not really needed
+      \dodorotatenextbox\@@rorotation#2}%
+   \hbox{\boxcursor\flushnextbox}}
+
+\def\dodorotatebox#1% {angle} \hbox/\vbox/\vtop
+  {\bgroup\hbox\bgroup % compatibility hack
+     \dowithnextbox
+       {\dorotatenextbox{#1}\plusone
+        \egroup\egroup}}
+
+\def\dorotatebox#1% {angle} \hbox/\vbox/\vtop
+  {\ifcase#1\relax
+     \expandafter\gobbleoneargument
+   \else
+     \expandafter\dodorotatebox
+   \fi{#1}}
+
+\unexpanded\def\rotate % \bgroup: \rotate kan argument zijn
+  {\bgroup\complexorsimpleempty\rotate}
+
+% \def\complexrotate[#1]% framed met diepte !
+%   {\getparameters[\??ro][#1]%
+%    \processaction
+%      [\@@rolocation]
+%      [  \v!depth=>\!!counta\plusthree\donefalse,% depth   fit   - raw box
+%           \v!fit=>\!!counta\plustwo  \donefalse,% depth   tight - raw box
+%         \v!broad=>\!!counta\plusone  \donefalse,% nodepth fit   - raw box
+%          \v!high=>\!!counta\plusone  \donetrue ,% nodepth fit   - framed
+%        \v!middle=>\!!counta\plusfour \donefalse,% centered, keep dimensions
+%       \s!default=>\!!counta\plusthree\donetrue ,% depth   fit   - framed
+%       \s!unknown=>\!!counta\plusthree\donetrue ]% depth   fit   - framed
+%    \ifdone
+%      \def\docommand{\localframed[\??ro][#1,\c!location=]}%
+%    \else
+%      \let\docommand\relax
+%    \fi
+%    \dowithnextbox{\dorotatenextbox\@@rorotation\!!counta\egroup}\vbox\docommand}
+
+\setvalue{\??ro::\c!location::\v!depth  }{\!!counta\plusthree\donefalse} % depth   fit   - raw box
+\setvalue{\??ro::\c!location::\v!fit    }{\!!counta\plustwo  \donefalse} % depth   tight - raw box
+\setvalue{\??ro::\c!location::\v!broad  }{\!!counta\plusone  \donefalse} % nodepth fit   - raw box
+\setvalue{\??ro::\c!location::\v!high   }{\!!counta\plusone  \donetrue } % nodepth fit   - framed
+\setvalue{\??ro::\c!location::\v!middle }{\!!counta\plusfour \donefalse} % centered, keep dimensions
+\setvalue{\??ro::\c!location::\v!default}{\!!counta\plusthree\donetrue } % depth   fit   - framed
+
+\def\complexrotate[#1]% framed met diepte !
+  {\getparameters[\??ro][#1]%
+   \executeifdefined{\??ro::\c!location::\@@rolocation}{\!!counta\plusthree\donetrue}%
+   \ifdone
+     \def\docommand{\localframed[\??ro][#1,\c!location=]}%
+   \else
+     \let\docommand\relax
+   \fi
+   \dowithnextbox{\dorotatenextbox\@@rorotation\!!counta\egroup}\vbox\docommand}
+
+\presetlocalframed[\??ro]
+
+\def\setuprotate
+  {\dodoubleargument\getparameters[\??ro]}
+
+\setuprotate
+  [\c!rotation=90,
+   \c!location=\v!normal,
+   \c!width=\v!fit,
+   \c!height=\v!fit,
+   \c!offset=\v!overlay,
+   \c!frame=\v!off]
+
+% \dostepwiserecurse{0}{360}{10}
+%   {\startlinecorrection[blank]
+%    \hbox
+%      {\expanded{\setuprotate[rotation=\recurselevel]}%
+%       \traceboxplacementtrue
+%       \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=depth] {\ruledhbox{\bfb  (depth)}}}}%
+%       \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=fit]   {\ruledhbox{\bfb    (fit)}}}}%
+%       \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=broad] {\ruledhbox{\bfb  (broad)}}}}%
+%       \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=normal]{\ruledhbox{\bfb (normal)}}}}%
+%       \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=high]  {\ruledhbox{\bfb   (high)}}}}}
+%    \stoplinecorrection}
+

+% to be used in some other places! todo!
+%
+% divides \hsize in fractions, will be made a bit more
+% clever and advanced when needed
+%
+% \horizontaldivision[n/m,elements,distance]
+%
+% \horizontaldivision[2/5,3,1em]
+% \horizontaldivision[2/5,3,1em]
+% \horizontaldivision[1/5,3,1em]
+%
+% \setuphorizontaldivision[afstand=,aantal=]  (passend,passend)
+
+\def\??fr{@@fr}
+
+\def\setuphorizontaldivision
+  {\dodoubleargument\getparameters[\??fr]}
+
+\def\horizontaldivision
+  {\dosingleargument\dohorizontaldivision}
+
+\def\dohorizontaldivision[#1]%
+  {\dodohorizontaldivision[#1,,,,,,]}
+
+\def\dodohorizontaldivision[#1/#2,#3,#4,#5]%
+  {\doifelsenothing{#3}
+     {\doifelse\@@frn\v!fit
+        {\!!counta#2\relax}
+        {\!!counta\@@frn\relax}}
+     {\!!counta#3\relax}%
+   \doifelsenothing{#4}
+     {\doifelse\@@frdistance\v!fit
+        {\!!widtha\zeropoint}
+        {\!!widtha\@@frdistance}}
+     {\!!widtha#4}%
+   \advance\!!counta \minusone
+   \multiply\!!widtha \!!counta
+   \advance\hsize -\!!widtha
+   \divide\hsize #2\relax
+   \hsize#1\hsize}
+
+\setuphorizontaldivision
+  [\c!distance=\tfskipsize,
+   \c!n=\v!fit]
+

+%D This one is for Daniel Pittman, who wanted tight
+%D fractions. We show three versions. First the simple
+%D one using \type {\low} and \type {high}:
+%D
+%D \startbuffer
+%D \def\vfrac#1#2%
+%D   {\hbox{\high{\tx#1\kern-.25em}/\low{\kern-.25em\tx#2}}}
+%D
+%D test \vfrac{1}{2} test \vfrac{123}{456} test
+%D \stopbuffer
+%D
+%D \typebuffer {\showmakeup\getbuffer}
+%D
+%D A better way to handle the kerning is the following, here
+%D we kind of assume that tye slash is symmetrical and has
+%D nearly zero width.
+%D
+%D \startbuffer
+%D \def\vfract#1#2%
+%D   {\hbox{\high{\tx#1}\hbox to \zeropoint{\hss/\hss}\low{\tx#2}}}
+%D \stopbuffer
+%D
+%D \typebuffer {\showmakeup\getbuffer}
+%D
+%D The third and best alternative is the following:
+%D
+%D {\showmakeup\getbuffer}\crlf\getbuffer
+%D
+%D This time we measure the height of the \type {/} and
+%D shift over the maximum height and depths of this
+%D character and the fractional digits (we use 57 as
+%D sample). Here we combine all methods in one macros.
+
+\chardef\vulgarfractionmethod=3
+
+\definehspace[vulgarfraction][.25em] % [.15em]
+\definesymbol[vulgarfraction][/]     % [\raise.2ex\hbox{/}]
+
+\unexpanded\def\vulgarfraction#1#2%
+  {\dontleavehmode
+   \hbox
+     {\def\vulgarfraction{vulgarfraction}%
+      \ifcase\vulgarfractionmethod
+        #1\symbol[\vulgarfraction]#2%
+      \or
+        \high{\tx#1\kern-\hspaceamount\empty\vulgarfraction}%
+        \symbol[\vulgarfraction]%
+        \low {\kern-\hspaceamount\empty\vulgarfraction\tx#2}%
+      \or
+        \high{\tx#1}%
+        \hbox to \zeropoint{\hss\symbol[\vulgarfraction]\hss}%
+        \low{\tx#2}%
+      \or
+        \setbox0\hbox{\symbol[\vulgarfraction]}%
+        \setbox2\hbox{\txx57}%
+        \raise\ht0\hbox{\lower\ht2\hbox{\txx#1}}%
+        \hbox to \zeropoint{\hss\symbol[\vulgarfraction]\hss}%
+        \lower\dp0\hbox{\raise\dp2\hbox{\txx#2}}%
+      \fi}}
+
+\ifx\vfrac\undefined \let\vfrac\vulgarfraction \fi
+
+%D \starttabulate
+%D \HL
+%D \NC \bf method \NC \bf visualization \NC\NR
+%D \HL
+%D \NC 0 \NC \chardef\vulgarfractionmethod0\vulgarfraction{1}{2} \NC\NR
+%D \NC 1 \NC \chardef\vulgarfractionmethod1\vulgarfraction{1}{2} \NC\NR
+%D \NC 2 \NC \chardef\vulgarfractionmethod2\vulgarfraction{1}{2} \NC\NR
+%D \NC 3 \NC \chardef\vulgarfractionmethod3\vulgarfraction{1}{2} \NC\NR
+%D \HL
+%D \stoptabulate
+

+%D Under construction:
+%D
+%D \starttyping
+%D \commalistsentence[aap,noot,mies]
+%D \commalistsentence[aap,noot]
+%D \commalistsentence[aap]
+%D \commalistsentence[a,b,c]
+%D \commalistsentence[a,b,c][{ \& },{ and }]
+%D \commalistsentence[a,b,c][+,-]
+%D \stoptyping
+
+\let\handlecommalistsentence\firstofoneargument
+
+\def\commalistsentenceone{and-1}
+\def\commalistsentencetwo{and-2}
+
+\def\commalistsentence
+  {\dodoubleempty\docommalistsentence}
+
+\def\docommalistsentence[#1][#2]%
+  {\bgroup
+   \getfromcommalist[#2][1]%
+   \ifx\commalistelement\empty
+     \def\@@commalistsentenceone{\labeltext\commalistsentenceone}%
+   \else
+     \let\@@commalistsentenceone\commalistelement
+   \fi
+   \getfromcommalist[#2][2]%
+   \ifx\commalistelement\empty
+     \def\@@commalistsentencetwo{\labeltext\commalistsentencetwo}%
+   \else
+     \let\@@commalistsentencetwo\commalistelement
+   \fi
+   \getcommalistsize[#1]%
+   \ifcase\commalistsize\relax
+     \def\serializedcommalist{#1}%
+   \else
+     \let\serializedcommalist\empty
+     \scratchcounter\zerocount
+     \def\docommand##1%
+       {\advance\scratchcounter \plusone
+        \ifnum\scratchcounter=\plusone
+          \scratchtoks{\handlecommalistsentence{##1}}%
+        \else
+          \ifnum\scratchcounter=\commalistsize
+            \appendtoks\@@commalistsentencetwo\handlecommalistsentence{##1}\to\scratchtoks
+          \else
+            \appendtoks\@@commalistsentenceone\handlecommalistsentence{##1}\to\scratchtoks
+          \fi
+        \fi}%
+     \processcommacommand[#1]\docommand
+     \edef\serializedcommalist{\the\scratchtoks}%
+   \fi
+   \serializedcommalist
+   \egroup}
+
+\def\commacommandsentence[#1]{\@EA\commalistsentence\@EA[#1]}
+
+\ifx\textcomma\undefined \def\textcomma{,} \fi
+
+\setuplabeltext [\s!nl] [and-1=\textcomma\ , and-2= en ]
+\setuplabeltext [\s!en] [and-1=\textcomma\ , and-2=\textcomma\ and ]
+\setuplabeltext [\s!de] [and-1=\textcomma\ , and-2= und ]
+\setuplabeltext [\s!hr] [and-1=\textcomma\ , and-2= i ]
+

+%D \macros
+%D   {somekindoftab}
+%D
+%D This macro can be used to create tabs:
+%D
+%D \starttyping
+%D \setupheadertexts[{\somekindoftab[alternative=horizontal]{\framed{\realfolio}}}]
+%D \setuptexttexts  [{\somekindoftab[alternative=vertical]  {\framed{\realfolio}}}]
+%D
+%D \starttext
+%D     \showframe \dorecurse{10}{test\page}
+%D \stoptext
+%D \stoptyping
+
+\def\somekindoftab
+  {\dosingleempty\dosomekindoftab}
+
+\def\dosomekindoftab[#1]%
+  {\bgroup
+   \getparameters[xx]
+     [\c!alternative=\v!vertical,
+      \c!width=\textwidth,\c!height=\textheight,
+      \c!n=\lastpage,\c!m=\realpageno,
+      #1]%
+   \doifelse\xxalternative\v!vertical
+     {\dodosomekindoftab\vbox\vskip\xxheight}
+     {\dodosomekindoftab\hbox\hskip\xxwidth }}
+
+\def\dodosomekindoftab#1#2#3#4%
+  {#1 to #3 \bgroup
+     \forgetall
+     \ifnum\xxm>\plusone
+       #2\zeropoint \!!plus \the\numexpr\xxm   -1\relax fill\relax
+     \fi
+     #4%
+     \ifnum\xxm<\xxn\relax
+       #2\zeropoint \!!plus \the\numexpr\xxn-\xxm\relax fill\relax
+     \fi
+   \egroup
+   \egroup}
+

+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-par.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-par.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-par.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,300 @@
+%D \module
+%D   [       file=core-par,
+%D        version=1997.03.31,
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=Paragraph Tricks,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / Pararaph Tricks}
+
+\unprotect
+

+% \ifprocesspreviousparagraphs
+%
+% \nofskippedparagraphs
+% \paragraphnumber
+% \nofparagraphs
+%
+% \dosetparagraph
+% \doresetparagraph
+% \dobeforeparagraph
+% \doafterparagraph
+% \dobeforeskipparagraph
+% \doafterskipparagraph
+%
+% \pushparagraphs\endcommand       alle alineas tot \endcommand laden
+% \pushmoreparagraphs\endcommand   alle alineas tot \endcommand toevoegen
+% \popparagraphs                   alle alineas oproepen
+% \popparagraphs[a,b,c]            enkele alineas oproepen [geen]
+%
+% tzt een optionele prefix:
+%
+% \pushparagraphs[xxx]\endcommand  alle alineas tot \endcommand laden
+% \popparagraphs[xxx]              alle alineas oproepen
+% \popparagraphs[xxx][a,b,c]       enkele alineas oproepen
+%
+% \numberparagraphs
+% \numberparagraphlines
+% \resetparagraphlines
+

+\newif\ifprocesspreviousparagraphs  % public
+\newif\ifprocessallparagraphs       % private
+
+\newcounter\totalnofparagraphs       % private
+\newcounter\globalparagraphnumber    % private
+\newcounter\discardedparagraphs      % private
+\newcounter\mostrecentparagraphtotal % public
+
+\let\dosetparagraph        = \relax % public
+\let\doresetparagraph      = \relax % public
+\let\dobeforeparagraph     = \relax % public
+\let\doafterparagraph      = \relax % public
+\let\dobeforeskipparagraph = \relax % public
+\let\doafterskipparagraph  = \relax % public
+
+\def\paragraphnumber      {} % public
+\def\nofparagraphs        {} % public
+\def\nofskippedparagraphs {} % public
+
+\def\paragraphprefix {paragraph} % private
+
+% voorlopig, wordt nog class
+
+\def\resetparagraphlines
+  {\global\linenumber\plusone}
+
+\def\numberparagraphs % instelbaar maken en slimmer ivm breedte regelnummer !!!!!
+  {\processpreviousparagraphstrue
+   \def\dosetparagraph
+     {\bgroup
+      \resetparagraphlines
+      \EveryPar
+        {\strut\inleftmargin{\tf{\tx\paragraphnumber}\kern2em}%
+         \ignorespaces}}%
+   \def\doresetparagraph
+     {\resetparagraphlines
+      \egroup}}
+
+\def\numberparagraphlines
+  {\processpreviousparagraphstrue
+   \def\dosetparagraph
+     {\resetparagraphlines}%
+   \def\doresetparagraph
+     {\resetparagraphlines}%
+   \def\dobeforeparagraph
+     {\startlinenumbering[\v!continue]}%
+   \def\doafterparagraph
+     {\stoplinenumbering}%
+   \def\dobeforeskipparagraph
+     {\stoplinenumbering
+      \let\paragraphnumber\relax}%
+   \def\doafterskipparagraph
+     {\startlinenumbering[\v!continue]}}
+
+\long\def\directpushparagraph#1%
+  {\doglobal\increment\totalnofparagraphs
+   \ifnum\totalnofparagraphs>0\nofskippedparagraphs\relax
+     \setgvalue{\paragraphprefix\totalnofparagraphs}{#1}%
+   \else
+     \setgvalue{\paragraphprefix\totalnofparagraphs}{\skipparagraph#1\par}%
+    \fi}
+
+\long\def\directskipparagraph#1%
+  {\doglobal\increment\totalnofparagraphs
+   \setgvalue{\paragraphprefix\totalnofparagraphs}{\skipparagraph#1\par}}
+
+\def\dopushparagraphs#1%
+  {\global\let\mostrecentparagraphtotal\totalnofparagraphs
+   \ifx#1\undefined
+     \let#1\relax
+   \fi
+   \defconvertedargument\asciia{#1}%
+   \defconvertedargument\asciib{ }% % lege regel
+   \def\dopushparagraph##1\par
+     {\defconvertedargument\asciic{##1}%
+      \doifelse\asciic\asciia
+        {#1}
+        {\doifsomething\asciic % lege paragraaf
+           {\doifnot\asciic\asciib
+              {\directpushparagraph{#1}}}%
+         \dopushparagraph}}%
+   \dopushparagraph}
+
+\def\pushparagraphs
+  {\doglobal\newcounter\totalnofparagraphs
+   \dopushparagraphs}
+
+\def\pushmoreparagraphs
+  {\dopushparagraphs}
+
+\def\dododopopparagraph#1% no grouping, i.v.m. sidefloats
+  {\ifnum#1>\totalnofparagraphs\relax
+   \else
+     \let\paragraphnumber\globalparagraphnumber
+     \decrement(\paragraphnumber,\discardedparagraphs)%
+     \dobeforeparagraph
+     \ifhmode\indentation\fi\getvalue{\paragraphprefix#1}\par
+     \doafterparagraph
+   \fi}
+
+\long\def\skipparagraph#1\par
+  {\doglobal\increment\discardedparagraphs
+   \ifprocessallparagraphs
+     \dobeforeskipparagraph
+     \ifhmode\indentation\fi#1\par
+     \doafterskipparagraph
+   \fi}
+
+\def\dodopopparagraph
+  {\dododopopparagraph}
+
+\def\dodoprocessparagraph#1%
+  {\ifprocesspreviousparagraphs
+     \bgroup
+     \setbox0\vbox{\dododopopparagraph{#1}}%
+     \egroup
+   \fi}
+
+\def\processpreviousparagraphs[#1]% process previous ones
+  {\ifprocesspreviousparagraphs
+     \bgroup
+     \getfromcommacommand[#1][1]% tzt snelle \..command.. testen
+     \let\totalnofparagraphs\commalistelement
+     \decrement\totalnofparagraphs
+     \let\dodopopparagraph\dodoprocessparagraph
+     \popparagraphs
+     \egroup
+   \fi}
+
+\def\dopopparagraphs[#1]%
+  {\doifnotinset{#1}{\v!none,0}
+     {\dosetparagraph
+      \doglobal\newcounter\globalparagraphnumber
+      \doglobal\newcounter\discardedparagraphs
+      \doifelse{#1}{}
+        {\processallparagraphstrue}
+        {\processallparagraphsfalse}%
+      \def\dopopparagraph
+        {\doglobal\increment\globalparagraphnumber
+         \ifnum\globalparagraphnumber>\totalnofparagraphs\relax
+           \let\dopopparagraph\relax
+         \else\ifprocessallparagraphs
+           \ifnum\globalparagraphnumber>\mostrecentparagraphtotal\relax
+             \dodopopparagraph\globalparagraphnumber
+           \else
+             \dodoprocessparagraph\globalparagraphnumber
+           \fi
+         \else
+           \let\paragraphnumber\globalparagraphnumber
+           \decrement(\paragraphnumber,\discardedparagraphs)%
+           \ExpandBothAfter\doifinsetelse{\paragraphnumber}{#1}
+             {\dodopopparagraph\globalparagraphnumber}
+             {\dodoprocessparagraph\globalparagraphnumber}%
+         \fi\fi
+         \dopopparagraph}%
+      \dopopparagraph
+      \doresetparagraph}}
+
+\def\popparagraphs
+  {\dosingleempty\dopopparagraphs}
+
+\def\countparagraphs
+  {\popparagraphs[\!!maxcard]%
+   \global\let\nofparagraphs\totalnofparagraphs
+   \doglobal\decrement(\nofparagraphs,\discardedparagraphs)}
+

+% \showframe
+%
+% \numberparagraphlines
+% \numberparagraphs
+%
+% \def\nofskippedparagraphs{1}
+%
+% \pushparagraphs\ThatsIt
+%
+% \ruledbaseline eerste eerste eerste eerste eerste eerste
+% eerste eerste eerste eerste eerste eerste eerste eerste
+% eerste eerste eerste eerste eerste eerste eerste eerste
+% eerste eerste eerste eerste eerste eerste eerste eerste
+% eerste eerste eerste eerste eerste eerste eerste eerste
+% eerste eerste eerste eerste eerste
+%
+% \ruledbaseline eerste eerste eerste eerste eerste eerste
+% eerste eerste eerste eerste eerste eerste eerste eerste
+% eerste eerste eerste eerste eerste eerste eerste eerste
+% eerste eerste eerste eerste eerste eerste eerste eerste
+% eerste eerste eerste eerste eerste eerste eerste eerste
+% eerste eerste eerste eerste eerste
+%
+% \ruledbaseline tweede tweede tweede tweede tweede tweede
+% tweede tweede tweede tweede tweede tweede tweede tweede
+% tweede tweede tweede tweede tweede tweede tweede tweede
+% tweede tweede tweede tweede tweede tweede tweede tweede
+% tweede tweede tweede tweede tweede tweede tweede tweede
+% tweede tweede tweede tweede tweede tweede tweede tweede
+% tweede tweede tweede tweede tweede
+%
+% \skipparagraph \ruledbaseline skipped skipped skipped
+% skipped skipped skipped skipped skipped skipped skipped
+% skipped skipped skipped skipped skipped skipped skipped
+% skipped skipped
+%
+% \ruledbaseline derde derde derde derde derde derde derde
+% derde derde derde derde derde derde derde derde derde derde
+% derde derde derde derde derde derde derde derde derde derde
+% derde derde derde derde derde derde derde derde derde derde
+% derde derde derde derde derde derde derde derde derde derde
+% derde derde derde derde derde derde derde derde derde derde
+%
+% \skipparagraph \ruledbaseline skipped skipped skipped
+% skipped skipped skipped skipped skipped skipped skipped
+% skipped skipped skipped skipped skipped skipped skipped
+% skipped skipped skipped
+%
+% \ruledbaseline vierde vierde vierde vierde vierde vierde
+% vierde vierde vierde vierde vierde vierde vierde vierde
+% vierde vierde vierde vierde vierde vierde vierde vierde
+% vierde vierde vierde vierde
+%
+% \ruledbaseline vijfde vijfde vijfde vijfde vijfde vijfde
+% vijfde vijfde vijfde vijfde vijfde vijfde vijfde vijfde
+% vijfde vijfde vijfde vijfde vijfde vijfde vijfde vijfde
+% vijfde vijfde vijfde vijfde vijfde vijfde vijfde vijfde
+% vijfde vijfde vijfde
+%
+% \skipparagraph \ruledbaseline skipped skipped skipped
+% skipped skipped skipped skipped skipped skipped skipped
+% skipped skipped skipped skipped skipped skipped skipped
+% skipped skipped skipped
+%
+% \ThatsIt
+%
+% \popparagraphs
+%
+% \countparagraphs
+%
+% \blanko[2*groot]
+%
+% nofparagraphs:~\nofparagraphs
+%
+% \pagina
+%
+% \popparagraphs[1]
+% \popparagraphs[2]
+% \popparagraphs[3]
+% \popparagraphs[4]
+% \popparagraphs[5]
+%
+% \pagina
+%
+% \ruledvbox{\popparagraphs[1,2,3,4,5]}
+%
+% \pagina
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-stg.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-stg.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-stg.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,72 @@
+%D \module
+%D   [       file=core-stg,
+%D        version=2006.08.16,
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=Strategies,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This is a prelude to strategies. It is rather old code
+%D used in a project many years ago. Use with care since I
+%D will pick up this thread. (moved from cont-new)
+
+\unprotect
+
+\def\s!strategy{strategy}
+
+\def\currentstrategypass    {1}
+\def\currentstrategyvariable{0}
+\def\maximumstrategypass    {8}
+
+\newconditional\strategypassneeded
+\newconditional\strategypassforced
+
+\definetwopasslist{\s!strategy}
+
+\def\registerstrategypass
+  {\ifnum\currentstrategypass>\maximumstrategypass \else
+     \ifconditional\strategypassforced
+       \doglobal\increment\currentstrategypass
+     \else%\ifconditional\strategypassneeded
+       %\doglobal\increment\currentstrategypass
+     \fi%\fi
+   \fi
+   \savecurrentvalue\currentstrategypass{\currentstrategypass}}
+
+\appendtoks \registerstrategypass \to \everybye % \everylastshipout
+
+\def\setstrategyvariable#1#2% key value
+  {%\doifnotstrategyvariable{#1}{\global\settrue\strategypassneeded}%
+   \doglobal\increment\currentstrategyvariable
+   \savetaggedtwopassdata{\s!strategy}{\currentstrategyvariable}{#1}{#2}}
+
+\def\doifstrategyvariableelse#1#2#3%
+  {\getstrategyvariable{#1}\iftwopassdatafound#2\else#3\fi}
+
+\def\getstrategyvariable#1% key
+  {\findtwopassdata{\s!strategy}{#1}%
+   \setxvalue{\s!strategy:#1}{\twopassdata}}
+
+\def\retainstrategyvariable#1% key
+  {\expanded{\setstrategyvariable{#1}{\strategyvariable{#1}}}}
+
+\def\strategyvariable#1% key
+  {\csname\s!strategy:#1\endcsname}
+
+\let\stratvar\strategyvariable
+
+\def\forcestrategy{\global\settrue \strategypassforced}
+\def\abortstrategy{\global\setfalse\strategypassforced}
+
+\def\doifstrategyvariableelse#1#2#3%
+  {\getstrategyvariable{#1}\iftwopassdatafound#2\else#3\fi}
+
+\def\doifstrategyvariable   #1#2{\doifstrategyvariableelse{#1}{#2}{}}
+\def\doifnotstrategyvariable#1#2{\doifstrategyvariableelse{#1}{}{#2}}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-sys.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-sys.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-sys.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,396 @@
+%D \module
+%D   [       file=core-sys, % moved from main-001
+%D        version=1997.03.31,
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=System,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / System}
+
+\unprotect
+
+%D Version checking:
+
+\def\newcontextversion#1%
+  {\doifelse{#1}\contextversion
+      {\let\newcontextversion\gobbleoneargument}
+      {\writeline
+       \writestatus{Fatal    Error}{Your format does not match the base files!}%
+       \writeline
+       \writestatus{Format Version}{\contextversion\space\contextmark}%
+       \writestatus{Files  Version}{#1}%
+       \batchmode
+       \normalend}}
+
+%D End of lines to the output. \TEX\ will map this onto the platform specific
+%D line ending. I hate this mess.
+
+%newlinechar=10   \def\outputnewlinechar{\rawcharacter{10}}
+\newlinechar=10  \edef\outputnewlinechar{^^J}
+
+% in case formats are shared:
+
+\def\initializenewlinechar
+  {\bgroup\newlinechar=10\xdef\outputnewlinechar{^^J}\egroup}
+
+%D Job names.
+
+\def\outputfilename {\@@svfile}
+\def\inputfilename  {\@@svinputfile}
+\def\operatingsystem{\@@svtype}
+
+\let\jobfilename  \jobname
+\let\jobfilesuffix\c!tex
+
+\def\splitjobfilename % todo: mkiv
+  {\resetsystemmode{suffix-\jobfilesuffix}%
+   \edef\ascii{\inputfilename}\defconvertedcommand\ascii\ascii
+   \splitstring\ascii\at.\to\jobfilename\and\jobfilesuffix
+   \lowercasestring\jobfilesuffix\to\jobfilesuffix
+   \doifnothing\jobfilename  {\let\jobfilename  \jobname}%
+   % todo and totest: \defconvertedcommand\jobfilename\jobfilename
+   \doifnothing\jobfilesuffix{\let\jobfilesuffix\c!tex}%
+   \setsystemmode{suffix-\jobfilesuffix}}
+
+% Some mechanisms (see x-res-01) use either \jobfilename or
+% \jobfilename.somesuffix, in which case we need to use the
+% full name if given or a default (like \jobfilename.xml);
+% this comes down to replacing the default tex suffix.
+
+\def\jobfullname{\jobfilename.\jobfilesuffix}
+
+\def\setjobfullname#1% #1 = default if not given
+  {\doifelsenothing\jobfilename
+     {\let\jobfullname\empty}
+     {\doif\jobfilesuffix\c!tex{\edef\jobfullname{\jobfilename.#1}}}}
+
+% ...
+
+\def\dosetupsystem[#1]%
+  {\getparameters[\??sv][#1]%
+   \setuprandomize[\@@svrandom]%
+   \beforesplitstring\@@svresolution\at dpi\to\@@svresolution
+   \let\outputresolution\@@svresolution
+   \ifcase\@@svn
+     %                        % 0 : unknown
+   \or
+     \setsystemmode\v!first   % 1 : first run
+   \or
+     %                        % 2 : successive run
+   \or
+     \setsystemmode\v!first   % 3 : first and only run
+   \or
+     \setsystemmode\v!last    % 4 : (extra) last run
+   \fi
+%    \processaction
+%      [\@@svtype]
+%     %[     mswin=>\edef\@@svline{\rawcharacter{13}\rawcharacter{10}}, % crlf
+%      [     mswin=>\edef\@@svline{\rawcharacter{13}},                  % cr % crlf
+%           darwin=>\edef\@@svline{\rawcharacter{13}},                  % cr
+%       \s!unknown=>\edef\@@svline{\rawcharacter{10}}]%                 % lf
+   \splitjobfilename}
+
+% \edef\@@svline{\rawcharacter{10}} % unix is the most critical/sensitive system
+
+\let\systemendofline\outputnewlinechar % will become obsolete
+
+\def\setupsystem
+  {\dosingleargument\dosetupsystem}
+
+\def\systemparameter#1{\executeifdefined{\??sv#1}\empty}
+
+%D The system modes set by the setup command can be used in
+%D situations like:
+%D
+%D \starttyping
+%D \startmode[*first]
+%D   \executesystemcommand{cleanupxml text.xml clean-text.xml}
+%D \stopmode
+%D
+%D \starttext
+%D   \typefile{clean-text.xml}
+%D \stoptext
+%D \stoptyping
+
+\def\setuprandomize[#1]%
+  {\doifsomething{#1}
+     {\bgroup
+      % tex's time is in minutes
+      \scratchcounter\normaltime
+      \processaction
+        [#1]
+        [  \v!small=>\divide\scratchcounter 15, %  900,
+          \v!medium=>\divide\scratchcounter 30, % 1800,
+             \v!big=>\divide\scratchcounter 60, % 3600,
+          \v!normal=>\getnewrandomseed\scratchcounter,
+         \s!default=>\getnewrandomseed\scratchcounter,
+         \s!unknown=>\scratchcounter#1]%
+      \expanded{\setrandomseed{\the\scratchcounter}}%
+% \writestatus\m!systems{randomseed: \the\scratchcounter}%
+      \egroup}}
+
+
+\setupsystem
+  [\c!directory=,
+   \c!n=0, % 0:unknown 1: one run 2: first 3: successive 4: final run
+   \c!resolution=600dpi,
+   \c!random=,
+   \c!file=\jobname,
+   \c!inputfile=\outputfilename,
+   \c!type=unix, % windows is normally less sensitive to handle
+   \c!bodyfont=\normalizedlocalbodyfontsize] % of iets anders
+
+%D Remark: windows programs normally handle \type {cr|lf|crlf} but unix
+%D is more picky, so we default to the \type {cr}. I never understood why
+%D \type {crlf} was not used in all systems, since it makes most sense.
+
+\def\dostartglobaldefs#1#2%
+  {\edef\!!stringa{\the\globaldefs}%
+   \ifnum\globaldefs#10
+     \globaldefs-\globaldefs
+   \fi
+   \advance\globaldefs #21
+   \setevalue{@gd@\the\globaldefs}{\!!stringa}}
+
+\def\dostopglobaldefs
+  {\doifdefinedelse{@gd@\the\globaldefs}
+     {\globaldefs\getvalue{@gd@\the\globaldefs}\relax}
+     {\globaldefs\zerocount}}
+
+\def\startlocal  {\dostartglobaldefs>-}
+\def\stoplocal   {\dostopglobaldefs}
+\def\startglobal {\dostartglobaldefs<+}
+\def\stopglobal  {\dostopglobaldefs}
+
+\def\complexstart[#1]{\bgroup\getvalue{\e!start#1}}
+\def\complexstop [#1]{\getvalue{\e!stop #1}\egroup}
+
+\let\simplestart\bgroup
+\let\simplestop \egroup
+
+\definecomplexorsimple\start
+\definecomplexorsimple\stop
+
+\def\dododefinestartstop[#1][#2]% todo: use indirect commands
+  {\getparameters
+     [\??be#1]
+     [\c!before=,
+      \c!after=,
+      \c!inbetween=,
+      \c!commands=,
+      \c!style=,
+      #2]%
+   \unexpanded\setvalue{#1}%
+     {\groupedcommand
+        {\getvalue{\??be#1\c!commands}%
+         \dostartattributes{\??be#1}\c!style\c!color}
+        {\dostopattributes
+         \getvalue{\??be#1\c!inbetween}}}%
+   \setvalue{\e!start#1}%
+     {\getvalue{\??be#1\c!before}%
+      \bgroup
+      \getvalue{\??be#1\c!commands}%
+      \dostartattributes{\??be#1}\c!style\c!color\empty}%
+   \setvalue{\e!stop#1}%
+     {\dostopattributes
+      \egroup
+      \getvalue{\??be#1\c!after}}}
+
+\def\dodefinestartstop[#1][#2]%
+  {\def\docommand##1{\dododefinestartstop[##1][#2]}%
+   \processcommalist[#1]\docommand}
+
+\def\definestartstop
+  {\dodoubleargument\dodefinestartstop}
+
+\def\dosetupstartstop[#1][#2]%
+  {\def\docommand##1{\getparameters[\??be##1][#2]}%
+   \processcommalist[#1]\docommand}
+
+\def\setupstartstop
+  {\dodoubleargument\dosetupstartstop}
+
+% \docommand kan niet worden gebruikt omdat deze macro
+%  soms lokaal wordt gebruikt
+
+% te zijner tijd:
+%
+% \definevariable {pc}  % ProtectedCommand
+%
+% \def\executeprotected#1%
+%   {\csname\??pc\string#1\endcsname}
+%
+% \def\defineprotected#1#2%
+%   {\expandafter\def\csname\??pc\string#2\endcsname}
+%
+% \def\defineunprotected#1%
+%   {\def#1}
+%
+% \def\doprotected%
+%   {\ifx\next\define
+%      \let\next=\defineprotected
+%    \else
+%      \let\next=\executeprotected
+%    \fi
+%    \next}
+%
+% \def\unexpanded%
+%   {\futurelet\next\doprotected}
+%
+% \unexpanded\define\ziezo{ziezo}
+%
+% \unexpanded\ziezo
+
+\def\complexdefine[#1]#2#3%
+  {\ifx#2\undefined
+   \else
+     \showmessage\m!systems4{\string#2}%
+   \fi
+   \ifcase0#1\def#2{#3}%
+   \or\def#2##1{#3}%
+   \or\def#2##1##2{#3}%
+   \or\def#2##1##2##3{#3}%
+   \or\def#2##1##2##3##4{#3}%
+   \or\def#2##1##2##3##4##5{#3}%
+   \or\def#2##1##2##3##4##5##6{#3}%
+   \or\def#2##1##2##3##4##5##6##7{#3}%
+   \or\def#2##1##2##3##4##5##6##7##8{#3}%
+   \or\def#2##1##2##3##4##5##6##7##8##9{#3}%
+   \else\def#2{#3}%
+   \fi}
+
+\definecomplexorsimpleempty\define
+
+\unexpanded\def\macroname#1% brrr
+  {\executeifdefined{#1}\empty}
+
+\def\usecommands#1%
+  {\bgroup
+   \def\docommand##1{\setbox0\hbox{\getvalue{\string##1}##1}}%
+   \processcommalist[#1]\docommand
+   \egroup}
+
+\newif\ifforcefileexpansion % handy for document level overload
+
+%D The next implementation is about 4 times as faster than a
+%D processaction alternative on an string of average length.
+%D Since this feature is used in XML processing, it made sense
+%D to support this faster alternative. It's installable as well.
+
+\def\installexpander#1#2#3% changed, no longer \convert..\to...
+  {\setvalue{\s!do\c!expansion#1l}{#2}%
+   \setvalue{\s!do\c!expansion#1g}{#3}}%
+
+% \convertexpanded is obsolete
+
+\long\def\doconvertexpanded#1#2#3% #4 % [l|g] \cs {kind} {data}
+  {\csname   % that we assign all exp a value
+     \s!do\c!expansion
+     \ifforcefileexpansion
+       \v!yes
+     \else\ifcsname\s!do\c!expansion#3#1\endcsname
+       #3%
+     \else
+       \s!default
+     \fi\fi
+     #1%
+   \endcsname#2}% #3
+
+\long\def\defconvertexpanded {\doconvertexpanded l}
+\long\def\gdefconvertexpanded{\doconvertexpanded g}
+
+\installexpander\v!command \defconvertedcommand  \gdefconvertedcommand
+\installexpander\s!default \defconvertedargument \gdefconvertedargument
+\installexpander\empty     \defconvertedargument \gdefconvertedargument
+\installexpander\v!no      \defconvertedargument \gdefconvertedargument
+\installexpander\v!yes     \defconvertedmeaning  \gdefconvertedmeaning
+\installexpander\v!yes     \defconvertedmeaning  \gdefconvertedmeaning
+\installexpander\v!strict  \defreducedargument   \gdefreducedargument
+\installexpander {utf}     \defreducedtoutf      \gdefreducedtoutf
+
+%installexpander {xml}    {see xtag-ext}
+
+\def\dodefconvertedmeaning#1#2#3% watch the double expansion !
+  {\bgroup
+     \honorunexpanded
+     \convertencodedtokens % can be overloaded
+     \xdef\@@globalexpanded{#3}%
+     \xdef\@@globalexpanded{\@@globalexpanded}%
+   \egroup
+   #1#2\@@globalexpanded}
+
+\def\defconvertedmeaning {\dodefconvertedmeaning\defconvertedcommand}
+\def\gdefconvertedmeaning{\dodefconvertedmeaning\gdefconvertedcommand}
+
+\def\dodefreducedargument#1#2#3%
+  {\begingroup
+   \reducetocoding[raw]%
+   \edef\ascii{#3}%
+   \expandafter\endgroup\expandafter#1\expandafter#2\expandafter{\ascii}}
+
+\def\defreducedargument {\dodefreducedargument\edef}
+\def\gdefreducedargument{\dodefreducedargument\xdef}
+
+% \setupindex[expansion=utf]\index{\eacute}
+
+\def\dodefreducedtoutf#1#2#3%
+  {\begingroup
+   \reducetocoding[uc]%
+   \let\uchar\uchartoutf
+   \let\unicodechar\numbertoutf
+   \edef\ascii{#3}%
+   \expandafter\endgroup\expandafter#1\expandafter#2\expandafter{\ascii}}
+
+\def\defreducedtoutf {\dodefreducedtoutf\edef}
+\def\gdefreducedtoutf{\dodefreducedtoutf\xdef}
+
+% old syntax:
+
+\def\convertmeaning#1\to#2% watch the double expansion !
+  {\bgroup
+     \honorunexpanded
+     \convertencodedtokens % can be overloaded
+     \xdef\@@globalexpanded{#1}%
+     \xdef\@@globalexpanded{\@@globalexpanded}%
+   \egroup
+   \defconvertedcommand#2\@@globalexpanded}
+
+\def\reduceargument#1\to#2%
+  {\begingroup
+   \reducetocoding[raw]%
+   \edef\ascii{#1}%
+   \expandafter\endgroup\expandafter\edef\expandafter#2\expandafter{\ascii}}
+
+\def\reducetoutf#1\to#2%
+  {\begingroup
+   \reducetocoding[uc]%
+   \let\uchar\uchartoutf
+   \let\unicodechar\numbertoutf
+   \edef\ascii{#1}%
+   \expandafter\endgroup\expandafter\edef\expandafter#2\expandafter{\ascii}}
+
+% \setvalue{statevalue\v!stop   }{0}
+% \setvalue{statevalue\v!start  }{1}
+% \setvalue{statevalue\v!normaal}{2}
+% \setvalue{statevalue\v!leeg   }{3}
+% \setvalue{statevalue\v!geen   }{4}
+%
+% \def\setcurrentstate#1%
+%   {\chardef\currentstate=0\getvalue{statevalue\getvalue{#1\c!state}\relax}
+%
+% \ifcase\currentstate ...
+
+\def\redo{\dorepeat} % [n*10], kind of obsolete
+
+% obsolete, use \dorecurse instead
+%
+% \def\herhaler           {\repeater}
+% \def\herhaalmetcommando {\dorepeatwithcommand}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-two.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-two.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-two.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,206 @@
+%D \module
+%D   [       file=core-two, % moved from core-uti
+%D        version=1997.03.31,
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=Two Pass Data,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / Two Pass Data}
+
+%D This is a rather old mechanism which has not changed much over
+%D time, apart from adding a few more selectors. This code used
+%D to be part of \type {core-uti}. The following examples demonstrate
+%D the interface.
+%D
+%D \startbuffer
+%D \definetwopasslist{test-1}
+%D
+%D \gettwopassdatalist{test-1} [\twopassdatalist=]
+%D \checktwopassdata  {test-1} [\twopassdata=]
+%D \checktwopassdata  {test-1} [\twopassdata=]
+%D \gettwopassdata    {test-1} [\twopassdata=]
+%D \gettwopassdata    {test-1} [\twopassdata=]
+%D
+%D \definetwopasslist{test-2}
+%D
+%D \lazysavetwopassdata{test-2}{1}{x}
+%D \lazysavetwopassdata{test-2}{2}{y}
+%D \lazysavetwopassdata{test-2}{3}{z}
+%D
+%D \gettwopassdatalist{test-2} [\twopassdatalist=x,y,z]
+%D \checktwopassdata  {test-2} [\twopassdata=x]
+%D \checktwopassdata  {test-2} [\twopassdata=x]
+%D \gettwopassdata    {test-2} [\twopassdata=x]
+%D \gettwopassdata    {test-2} [\twopassdata=y]
+%D \gettwopassdata    {test-2} [\twopassdata=z]
+%D \gettwopassdata    {test-2} [\twopassdata=]
+%D
+%D \definetwopasslist{test-3}
+%D
+%D \lazysavetaggedtwopassdata{test-3}{1}{x}{a}
+%D \lazysavetaggedtwopassdata{test-3}{2}{y}{b}
+%D \lazysavetaggedtwopassdata{test-3}{3}{z}{c}
+%D
+%D \findtwopassdata{test-3}{x} [\twopassdata=a]
+%D \findtwopassdata{test-3}{y} [\twopassdata=b]
+%D \findtwopassdata{test-3}{z} [\twopassdata=c]
+%D \findtwopassdata{test-3}{w} [\twopassdata=]
+%D
+%D \definetwopasslist{test-4}
+%D
+%D \lazysavetwopassdata{test-4}{1}{A}
+%D \lazysavetwopassdata{test-4}{2}{B}
+%D \lazysavetwopassdata{test-4}{3}{C}
+%D
+%D \getfirsttwopassdata{test-4}    [\twopassdata=A]
+%D \getlasttwopassdata {test-4}    [\twopassdata=C]
+%D \getfirsttwopassdata{test-4}    [\twopassdata=A]
+%D \getlasttwopassdata {test-4}    [\twopassdata=C]
+%D \getfromtwopassdata {test-4}{1} [\twopassdata=A]
+%D \getfromtwopassdata {test-4}{3} [\twopassdata=C]
+%D \getfromtwopassdata {test-4}{2} [\twopassdata=B]
+%D \stopbuffer
+%D
+%D \getbuffer \typebuffer
+
+\unprotect
+
+\let\alltwopasslists\empty
+\let\twopassentry   \gobblethreearguments % permits loading a MK II file
+\let\twopassdata    \empty
+\let\twopassdatalist\empty
+
+\newif\iftwopassdatafound
+
+\addutilityreset{twopassentries}
+
+\def\immediatesavetwopassdata   #1#2#3{\immediatewriteutilitycommand{\twopassentry{#1}{#2}{#3}}}
+\def\savetwopassdata            #1#2#3{\writeutilitycommand{\twopassentry{#1}{#2}{#3}}}
+\def\lazysavetwopassdata        #1#2#3{\expanded{\writeutilitycommand{\noexpand\twopassentry{#1}{#2}{#3}}}} % expanded !
+\def\savetaggedtwopassdata    #1#2#3#4{\immediatewriteutilitycommand{\twopassentry{#1}{#2}{#3::#4}}}
+\def\lazysavetaggedtwopassdata#1#2#3#4{\expanded{\writeutilitycommand{\noexpand\twopassentry{#1}{#2}{#3::#4}}}} % expanded !
+
+\def\resettwopassentries
+  {\let\twopassentry\gobblethreearguments}
+
+\def\settwopassentries
+  {\def\twopassentry##1{\executeifdefined{@@##1\s!pass}\gobbletwoarguments}}
+
+\resettwopassentries
+
+\def\appendtwopasselement#1#2#3% can sometimes become a large list
+  {%\debuggerinfo{\m!systems}{twopass data #1 - #2 = #3}%
+   \expandafter\xdef\csname#1:\s!list\endcsname
+     {\@EA\ifx\csname#1:\s!list\endcsname\empty \else
+        \csname#1:\s!list\endcsname,\fi#3}}
+
+\def\dodefinetwopasslist#1%
+  {\doifundefined{#1:\s!list}
+     {%\debuggerinfo\m!systems{defining twopass class #1}%
+      \doglobal\addutilityreset{#1\s!pass}%
+      \setgvalue{\s!set  #1\s!pass}{\dosettwopasslist  {#1}}%
+      \setgvalue{\s!reset#1\s!pass}{\doresettwopasslist{#1}}%
+      \getvalue {\s!reset#1\s!pass}}}
+
+\def\definetwopasslist#1%
+  {\expanded{\dodefinetwopasslist{#1}}%
+   \doglobal\addtocommalist{#1}\alltwopasslists}
+
+\def\dosettwopasslist#1%
+  {\letgvalue{\s!set#1\s!pass}\gobbletwoarguments
+   \setgvalue{@@#1\s!pass}{\appendtwopasselement{#1}}}
+
+\def\doresettwopasslist#1%
+  {\letgvalue{@@#1\s!pass}\gobbletwoarguments}
+
+\def\doloadtwopassdata#1%
+  {\doifundefined{#1:\s!list}
+     {\startnointerference
+      \letgvalueempty{#1:\s!list}%
+      \protectlabels
+      \doutilities{twopassentries,#1\s!pass}\jobname\empty\relax\relax
+      \stopnointerference}}
+
+\def\loadtwopassdata
+  {\ifx\alltwopasslists\empty\else
+     \processcommacommand[\alltwopasslists]\doloadtwopassdata
+     \globallet\alltwopasslists\empty
+   \fi}
+
+\def\dogettwopassdata[#1,#2]#3#4%
+  {\edef\twopassdata{#1}%
+   \ifx\twopassdata\empty
+     \twopassdatafoundfalse
+     \let\twopassdata\empty
+   \else
+     \twopassdatafoundtrue
+     \ifcase#4\or\setxvalue{#3:\s!list}{#2}\fi
+   \fi}
+
+\def\gettwopassdata#1%
+  {\loadtwopassdata \@EAEAEA\dogettwopassdata\@EA\@EA\@EA[\csname#1:\s!list\endcsname,]{#1}\plusone}
+
+\def\checktwopassdata#1%
+  {\loadtwopassdata \@EAEAEA\dogettwopassdata\@EA\@EA\@EA[\csname#1:\s!list\endcsname,]{#1}\zerocount}
+
+\def\findtwopassdata#1#2%
+  {\loadtwopassdata \expanded{\dofindtwopassdata{#1}{#2}}}
+
+\def\dofindtwopassdata#1#2%
+  {\def\dodofindtwopassdata[##1,##2#2::##3,##4]{\edef\twopassdata{##3}}%
+   \@EAEAEA\dodofindtwopassdata\@EA\@EA\@EA[\@EA\@EA\@EA,\csname#1:\s!list\endcsname,#2,#2::,]%
+   \ifx\twopassdata\empty
+     \twopassdatafoundfalse
+   \else
+     \twopassdatafoundtrue
+   \fi}
+
+\let\getfirsttwopassdata\checktwopassdata
+
+\def\getlasttwopassdata#1%
+  {\loadtwopassdata
+   \scratchcounter\zerocount
+   \@EAEAEA\rawprocesscommalist\@EA\@EA\@EA[\csname#1:\s!list\endcsname]\dogetlasttwopassdata
+   \edef\noftwopassitems{\the\scratchcounter}%
+   \iftwopassdatafound\else
+     \let\twopassdata\empty
+   \fi}
+
+\def\dogetlasttwopassdata#1%
+  {\edef\nexttwopassdata{#1}%
+   \ifx\nexttwopassdata\empty \else
+     \let\twopassdata\nexttwopassdata
+     \advance\scratchcounter \plusone
+     \twopassdatafoundtrue
+   \fi}
+
+\def\getfromtwopassdata#1#2%
+  {\loadtwopassdata
+   \@EAEAEA\getfromcommalist\@EA\@EA\@EA[\csname#1:\s!list\endcsname][#2]%
+   \ifx\commalistelement\empty
+     \twopassdatafoundfalse
+     \let\twopassdata\empty
+   \else
+     \twopassdatafoundtrue
+     \let\twopassdata\commalistelement
+   \fi}
+
+\def\gettwopassdatalist#1%
+  {\loadtwopassdata
+   \letcscsname\twopassdatalist\csname#1:\s!list\endcsname
+   \ifx\twopassdatalist\relax\let\twopassdatalist\empty\fi}
+
+\def\gettwopassdatalist
+  {\getnamedtwopassdatalist\twopassdatalist}
+
+\def\doifelseintwopassdata#1#2% tag dat
+  {\gettwopassdatalist{#1}%
+   \expanded{\doifinsetelse{#2}{\twopassdatalist}}}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-uti.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-uti.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-uti.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,349 @@
+%D \module
+%D   [       file=core-uti,
+%D        version=1997.03.31,
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=Utility File Handling,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / Utility File Handling}
+
+\unprotect
+
+% todo : safe lan etc too
+% todo : load all commands at once (tok)
+% todo : merge status info patch into tui file (language, encoding, etc),
+
+% Utility-file
+%
+% De onderstaande macro's ondersteunen het gebruik van de
+% zogeheten utility-file. Alle extern onder te brengen
+% informatie wordt opgeslagen in de file \jobname.tui, tenzij
+% er selectief pagina's worden gezet. In dat geval wordt de
+% file \jobname.tmp gebruikt. Informatie wordt ingelezen uit
+% de file \jobname.tuo, welke door TeXUtil wordt aangemaakt.
+
+\edef\utilityversion{1998.07.07} % was: 1996.03.15  % status variables
+\edef\utilityversion{1998.12.20} % was: 1998.07.07  % index attributes
+\edef\utilityversion{2003.07.19} % was: 1998.12.20  % object pages
+\edef\utilityversion{2006.06.23} % was: 2003.07.19  % -- instead of :
+\edef\utilityversion{2006.09.21} % pt in pos
+\edef\utilityversion{2008.10.14} % moved more to lua in mkiv
+
+% Bepaalde commando's worden als string weggeschreven. Deze
+% zijn aan het eind van deze file gedefinieerd.
+
+% Om een opbouw van spaties te voorkomen (???) moet ^^M een
+% andere betekenis krijgen:
+%
+% \catcode`\^^M=14 (comment)
+%
+% read file
+%
+% \catcode`\^^M=5  (end of line)
+
+\newwrite\utility at tui
+\newif\ifutilitydone
+
+\ifx\sectionseparator\undefined \def\sectionseparator{-} \fi
+
+\def\@@utilityerrormessage
+  {\showmessage\m!systems8\empty
+   \globallet\@@utilityerrormessage\relax}
+
+\def\thisisutilityversion#1%
+  {\doifelse\utilityversion{#1}%
+     {\checksectionseparator}
+     {\@@utilityerrormessage\resetutilities\endinput}}
+
+\def\checksectionseparator                  % catches backward compatibility conflict
+  {}% \doifnot\sectionseparator:\endinput}  % this dependency may go in a few years
+
+\def\dosplitofffoliopart[#1--#2--#3]{#3}
+
+\def\thisissectionseparator#1%
+  {\bgroup
+   \globallet\checksectionseparator\relax
+   \defconvertedcommand \asciia\sectionseparator
+   \defconvertedargument\asciib{#1}%
+   \expanded{\gdef\noexpand\dosplitofffoliopart[####1\sectionseparator
+     \sectionseparator####2\sectionseparator\sectionseparator####3]{####3}}%
+   \ifx\asciia\asciib
+     \egroup
+   \else
+     \egroup
+     % todo \@@utilityerrormessage
+     \resetutilities
+     \endinput
+   \fi}
+
+\def\writeutility         {\write\utility at tui}
+\def\writeutilitycommand#1{\write\utility at tui{c \string#1}}
+
+% less tokens
+%
+% \def\immediatewriteutility       {\immediate\writeutility}
+% \def\immediatewriteutilitycommand{\immediate\writeutilitycommand}
+%
+% more flexible (for overloading)
+
+\def\immediatewriteutility         {\immediate\write\utility at tui}
+\def\immediatewriteutilitycommand#1{\immediate\write\utility at tui{c \string#1}}
+
+% as in:
+
+\def\cwriteutility#1%
+  {\write\utility at tui{\noexpand\checkedutility{\number\nofshipouts}{#1}}}
+
+\def\cwriteutilitycommand#1%
+  {\write\utility at tui{\noexpand\checkedutility{\number\nofshipouts}{c \string#1}}}
+
+\let\checkedutility\secondoftwoarguments
+
+\def\docheckedutility#1#2{\ifnum#1=\nofshipouts#2\else\letterpercent\fi}
+
+\prependtoks
+  \let\checkedutility\docheckedutility
+\to \everybeforeshipout
+
+% Better use marks.
+
+\newtoks \everyopenutilities
+\newtoks \everycloseutilities
+\newtoks \everycheckutilities
+
+\def\openutilities {\the\everyopenutilities } % \global\everyopenutilities\emptytoks
+\def\closeutilities{\the\everycloseutilities}
+\def\checkutilities{\the\everycheckutilities}
+
+\appendtoks
+  \let\writeutility                \cwriteutility
+  \let\writeutilitycommand         \cwriteutilitycommand
+ %\let\immediatewriteutility       \cimmediatewriteutility
+ %\let\immediatewriteutilitycommand\cimmediatewriteutilitycommand
+  \let\checkutilities              \relax
+\to \everycheckutilities
+
+\appendtoks
+  \immediate\openout\utility at tui\jobname.\f!inputextension
+  \immediatewriteutilitycommand{\thisissectionseparator{\sectionseparator}}% for the moment
+  \immediatewriteutilitycommand{\thisisutilityversion  {\utilityversion  }}% in this order
+\to \everyopenutilities
+
+\appendtoks
+%   \immediate\closeout\utility at tui % niet echt nodig
+  \reportutilityproblems
+  % should be a message :
+  \let\writeutilitycommand         \gobbleoneargument
+  \let\writeutility                \gobbleoneargument
+  \let\immediatewriteutilitycommand\gobbleoneargument
+  \let\immediatewriteutility       \gobbleoneargument
+\to \everycloseutilities
+
+% \def\reopenutilities
+%   {\immediate\closeout\utility at tui
+%    \openutilities}
+
+\def\abortutilitygeneration
+  {\immediatewriteutilitycommand\utilitygenerationaborted
+   \immediatewriteutility{q {quit}}}
+
+\def\utilitygenerationaborted
+  {\showmessage\m!systems{21}\empty
+   \globallet\utilitygenerationaborted\endinput
+   \gdef\reportutilityproblems{\showmessage\m!systems{22}\empty}%
+   \endinput}
+
+\def\savecurrentvalue#1#2%
+  {\immediatewriteutilitycommand{\initializevariable\string#1{#2}}}
+
+\let\initializevariable\gdef
+
+\appendtoks
+    \globallet\initializevariable\gobbletwoarguments
+\to \everyafterutilityread
+
+\let\reportutilityproblems\relax
+
+\newtoks\utilityresetlist
+
+\def\addutilityreset#1%
+  {\@EA\appendtoks\csname\s!reset#1\endcsname\to\utilityresetlist}
+
+\def\resetutilities
+  {\the\utilityresetlist}
+

+% #1=type #2=file #3=melding #4=voor #5=na
+%
+% Er wordt gegroepeerd. Als binnen een lijst (bijvoorbeeld) de
+% \leftskip is aangepast, maar nog geen \par is gegeven, dan
+% geldt buiten de groep de oude \leftskip. Aan #5 kan dan
+% ook \par worden meegegeven om de paragraaf af te sluiten.
+
+\newif\ifdoinpututilities
+\newif\ifunprotectutilities   % voor't geval er \v!xxxxxx's zijn
+
+\def\currentutilityfilename{\jobname}
+
+% we need to pop and push, else problems with reading
+% utility files (toc) in xml mode and (e.g.) in a toc
+% entry doing a doifmode
+%
+% the following is not ok because we have no way to signal
+% xml content (yet), so for the moment we use this:
+
+\appendtoks
+    \ifprocessingXML
+        \processingXMLfalse
+        \enableXML
+        \catcode`\\=\@@escape
+        \catcode`\{=\@@begingroup
+        \catcode`\}=\@@endgroup
+        \catcode`\%=\@@comment\relax
+    \fi
+\to \everybeforeutilityread
+
+% \edef\testbytesequence
+%   {\rawcharacter{7}%
+%    \rawcharacter{27}%
+%    %rawcharacter{227}% invalid in xetex, which expects utf
+%    \rawcharacter{195}\rawcharacter{128}} % valid utf code
+%
+% \def\thisisbytesequence#1%
+%   {\ifx\testbytesequence\empty\else
+%      \defconvertedcommand\testbytesequence\testbytesequence
+%      \defconvertedargument\ascii{#1}%
+%      \ifx\testbytesequence\ascii \else
+%        \writestatus\m!systems{possible problem with 8 bit output}%
+%      \fi
+%    \fi
+%    \global\let\thisisbytesequence\gobbleoneargument}
+%
+% \ifnum\texengine=\xetexengine
+%     \let\testbytesequence\empty
+% \fi
+%
+% \appendtoks
+%   \immediatewriteutilitycommand{\thisisbytesequence{\testbytesequence}}%
+% \to \everyopenutilities
+
+\let\testbytesequence  \empty             % keep this
+\let\thisisbytesequence\gobbleoneargument % keep this
+
+\long\def\doutilities#1#2#3#4#5% % introduceren in utility file
+  {\resetutilities
+   % more than one utility thing can be handled in one pass,
+   % for instance lists, so we process ##1 as list
+   \def\douticommand##1{\csname\s!set##1\endcsname}%
+   \processcommacommand[#1]\douticommand
+   \begingroup
+   \def\currentutilityfilename{#2}%
+   \notesenabledfalse
+   \doinpututilitiestrue
+   \global\utilitydonefalse
+   \pushendofline % geeft problemen zodra andere file wordt ingelezen
+   \pushcatcodetable
+   \setcatcodetable\ctxcatcodes
+   \ifunprotectutilities % nog nodig ?
+     \unprotect
+   \fi
+   #4%
+   \the\everybeforeutilityread
+   \readjobfile{#2.\f!outputextension}\donothing\donothing
+   \the\everyafterutilityread
+   \popcatcodetable
+   #5%
+   \relax
+   \ifunprotectutilities
+     \protect
+   \fi
+   \popendofline
+   \ifutilitydone\else
+     \doifsomething{#3}
+       {\showmessage\m!systems9{{#3}}%
+        \doifconcepttracing
+          {\blank
+           \setmessagetext\m!systems9{{#3}}%
+           \type{[\currentmessagetext]}%
+           \blank}}%
+   \fi
+   \endgroup}
+

+% Default-instellingen (verborgen)
+
+\prependtoks \resetutilities \to \everyjob
+
+% Experiment
+%
+% \installprogram{Hello World}
+% \installprogram[hw]{Hello World}
+% \installedprogram[hw]
+
+\def\installprogram
+  {\dosingleempty\doinstallprogram}
+
+\def\doinstallprogram[#1]#2%
+  {\doifelsenothing{#1}
+     {\dodoinstallprogram{#2}}
+     {\setvalue{\??up#1}{\dodoinstallprogram{#2}}}}
+
+\def\dodoinstallprogram#1%
+  {\immediatewriteutility{e p {#1}}}
+
+\def\installedprogram[#1]%
+  {\getvalue{\??up#1}}
+
+% \writeplugindata{texutil}{{alpha}}
+% \writeplugindata{texutil}{{beta}}
+% \writeplugindata{texutil}{{gamma}}
+% \writeplugindata{texutil}{{delta}}
+%
+% \loadplugindata {plugintest}
+
+\def\immediatewriteplugindata#1#2%
+  {\immediatewriteutility{p u {#1} #2}}
+
+\def\writeplugindata#1#2%
+  {\writeutility{p u {#1} #2}}
+
+\def\loadplugindata#1%
+  {\doutilities{#1}\jobname\empty\relax\relax}
+
+% \plugincommand{\command{}{}{}}
+%
+% this way we can catch undefined commands
+
+\long\def\plugincommand#1%
+  {\doplugincommand#1\relax}
+
+\long\def\doplugincommand#1%
+  {\ifx#1\undefined
+     \expandafter\noplugincommand
+   \else
+     \expandafter#1%
+   \fi}
+
+\long\def\noplugincommand#1\relax
+  {}
+
+% \addutilityreset{plugintest}
+%
+% \def\resetplugintest{\let\plugintest\gobbletwoarguments}
+% \def\setplugintest  {\let\plugintest\writestatus}
+%
+% \installplugin
+%   {plugintest}
+%   {\let\plugintest\gobbletwoarguments}
+%   {\let\plugintest\writestatus}
+
+\long\def\installplugin#1#2#3%
+  {\addutilityreset          {#1}%
+   \long\setvalue{\s!reset#1}{#2}%
+   \long\setvalue{\s!set  #1}{#3}}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/core-var.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/core-var.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/core-var.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,286 @@
+%D \module
+%D   [       file=core-var,
+%D        version=1998.02.21,
+%D          title=\CONTEXT\ Core Macros,
+%D       subtitle=Variables,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / Variables}
+
+\unprotect
+
+%D We introduce a couple of variables that are used all over
+%D \CONTEXT. Alternatively we could define them in each module
+%D but as they are part of the bigger picture we prefer to do
+%D it here.
+
+%D \macros
+%D   {every...}
+%D
+%D A few every's. Some are only used in \MKII\ or \MKIV.
+
+%D Output routine:
+
+\newtoks \everybeforeoutput
+\newtoks \everyafteroutput
+
+%D Shipout:
+
+\newtoks \everyshipout
+\newtoks \everybeforeshipout
+\newtoks \everyaftershipout
+\newtoks \everyfirstshipout
+\newtoks \everylastshipout
+
+%D End of run:
+
+\newtoks \everybye
+\newtoks \everygoodbye
+\newtoks \everynotabene
+
+%D Document
+
+\newtoks \everysetupdocument
+\newtoks \everyendoftextbody
+
+\newtoks \everystarttext
+\newtoks \everystoptext
+
+%D Purity:
+
+\newtoks \everyforgetall
+\newtoks \everycleanupfeatures
+
+\def\cleanupfeatures{\the\everycleanupfeatures}
+\def\forgetall      {\the\everyforgetall}
+
+%D Page building:
+
+\newtoks \everybeforepagebody
+\newtoks \everyafterpagebody
+
+\let \everypagebody \everybeforepagebody % backward compatible
+
+%D Multipass:
+
+\newtoks \everybeforeutilityread
+\newtoks \everyafterutilityread
+
+%D Floats:
+
+\newtoks \everyinsidefloat
+
+%D Sectioning:
+
+\newtoks \everyheadstart
+
+%D Par building (experimental, used in xml <p> .. </p>)
+
+\newtoks \everybeginofpar
+\newtoks \everyendofpar
+%newtoks \everyparflush
+
+\def\bpar{\the\everybeginofpar\ignorespaces} % may interfere with \everypar
+\def\epar{\ifhmode\removeunwantedspaces\the\everyendofpar\fi} % test prevents problems with \bpar\epar
+
+%D Lists:
+
+\newtoks \everylistentry
+\newtoks \everysavesortkeys
+
+%D Marks:
+
+\newtoks \everymarking
+
+%D Fonts:
+
+\newtoks \everyfont
+\newtoks \everyglobalbodyfont
+\newtoks \everydefinedfont
+
+\newevery \everybodyfont   \EveryBodyFont
+\newevery \everyfontswitch \EveryFontSwitch
+
+%D Math:
+
+\newtoks \everybeforedisplayformula
+\newtoks \everymathematics
+
+\prependtoks \the\everymathematics \to \everymath
+\prependtoks \the\everymathematics \to \everydisplay
+
+%D Tables
+
+\newtoks \everytable
+
+%D State mess:
+
+\newtoks \everypushsomestate
+\newtoks \everypopsomestate
+
+\def\pushsomestates{\the\everypushsomestate}
+\def\popsomestates {\the\everypopsomestate }
+
+%D More generic (used to be pushcolor etc)
+
+\newtoks\everypushproperties
+\newtoks\everypopproperties
+\newtoks\everypopsplitproperties
+
+\newtoks\everystarttextproperties
+\newtoks\everystoptextproperties
+
+\def\pushproperties     {\the\everypushproperties}
+\def\popproperties      {\the\everypopproperties}
+\def\popsplitproperties {\the\everypopsplitproperties}
+
+\def\starttextproperties{\the\everystarttextproperties}
+\def\stoptextproperties {\the\everystoptextproperties}
+
+%D This is pretty important (esp since we now ignore shipouts).
+%D Actually we should nil all writes, marks, specials.
+
+\appendtoks \globallet\popproperties     \relax \to \everylastshipout
+\appendtoks \globallet\popsplitproperties\relax \to \everylastshipout
+
+%D \macros
+%D   {defineinputmode,setinputmode}
+%D
+%D New. Some work needs to be done.
+
+% not in mkiv
+
+\def\defineinputmode[#1]{\@EA\newtoks\csname every#1inputmode\endcsname}
+\def\setinputmode   [#1]{\the\executeifdefined{every#1inputmode}\emptytoks}
+
+\defineinputmode [TEX]
+\defineinputmode [XML]
+
+\setinputmode    [TEX]
+
+%D \macros
+%D   {trialtypesetting}
+%D
+%D We disable trial typesetting in the output routine,
+%D just to be sure.
+
+\newif\iftrialtypesetting
+
+\prependtoks \trialtypesettingfalse \to \everybeforepagebody
+
+%D \macros
+%D   {ifinpagebody,ifinsidecolumns,ifdoublesided,ifsinglesided}
+
+\newif \ifinpagebody
+\newif \ifinsidecolumns
+\newif \ifdoublesided   \doublesidedfalse
+\newif \ifsinglesided   \singlesidedtrue
+\newif \ifinsidefloat
+\newif \ifdoingblocks
+\newif \ifgridsnapping
+
+%D \macros
+%D   {ifprocessingXML}
+%D
+%D We need this one even if no \XML\ is supported.
+
+\newif\ifprocessingXML % old way
+
+%D \macros
+%D   {ifproductionrun}
+%D
+%D This boolean can be used to bypass certain
+%D initializations.
+
+\ifx\protectionlevel\undefined \newcount\protectionlevel \fi
+
+\newif\ifproductionrun
+
+\appendtoks \productionruntrue \to \everydump
+
+\appendtoks \ifcase\protectionlevel\else\reportunprotection\fi \to \everydump
+
+%D \macros
+%D   {everyboxedcontent, ifboxedcontent,
+%D    startboxedcontent, stopboxedcontent}
+%D
+%D This one is relatively new and will be used as a more
+%D robust test for inner situations.
+
+\newif  \ifboxedcontent
+\newtoks\everyboxedcontent
+
+\appendtoks \boxedcontenttrue \to \everyboxedcontent
+
+\def\startboxedcontent{\bgroup\the\everyboxedcontent}
+\let\stopboxedcontent  \egroup
+
+%D \macros
+%D   {fastmode,silentmode}
+%D
+%D These commands are obsolete.
+
+\let\fastmode  \relax
+\let\silentmode\relax
+
+%D \macros
+%D   {defineselector,setupselector}
+%D
+%D \starttyping
+%D \defineselector[caption][max=2,n=2]
+%D
+%D \start
+%D     \setupselector[caption][n=1]
+%D     \placelist[figure][criterium=all]
+%D \stop
+%D
+%D \starttext
+%D     \placefigure
+%D       {\select{caption}{zapf}{\input zapf \relax}}
+%D       {}
+%D \stoptext
+%D \stoptyping
+
+\def\defineselector{\dodoubleargument\dodefineselector}
+\def\setupselector {\dodoubleargument\dosetupselector}
+
+\def\dodefineselector[#1][#2]{\getparameters[\??sx#1][\c!max=2,\c!n=1,#2]}
+\def\dosetupselector [#1][#2]{\getparameters[\??sx#1][#2]}
+
+\unexpanded\def\select#1%
+  {\filterfromnext
+     {\executeifdefined{\??sx#1\c!max}1}
+     {\executeifdefined{\??sx#1\c!n  }1}}
+
+%D We store some original meanings, maybe in \type
+%D {math-ini}.
+
+\let\normalat   \at
+\let\normalin   \in
+\let\normalfrom \from
+%let\normalover \over
+\let\normalabout\about
+
+%D Add-ons:
+
+\let\startlayoutcomponent\gobbletwoarguments
+\let\stoplayoutcomponent \relax
+

+%D Concepts:
+
+\chardef\conceptmode\zerocount
+
+\def\doifconcepttracing
+  {\ifnum\conceptmode>\plustwo
+     \expandafter\firstofoneargument
+   \else
+     \expandafter\gobbleoneargument
+   \fi}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-032.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-032.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-032.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,82 @@
+%D \module
+%D   [     file=enco-032,
+%D      version=2006.03.30,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Unicode Goodies,
+%D       author={Taco Hoekwater},
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+% unicode table 32 (= hex 20)
+
+\startencoding [default]
+
+  \definecommand unic at threeperemspace          {\hskip .33333em }
+  \definecommand unic at fourperemspace           {\hskip .25em    }
+  \definecommand unic at sixperemspace            {\hskip .16667em }
+  \definecommand unic at figurespace              {\hphantom{0}}
+  \definecommand unic at punctuationspace         {\hphantom{,}}
+  \definecommand unic at hairspace                {\hskip .08333em }
+  \definecommand unic at zerowidthspace           {\hskip 0em plus 1sp }
+  \definecommand unic at zerowidthjoiner          {\kern  0em }
+  \definecommand unic at zerowidthnonjoiner       {\hskip 0em }
+
+  \definecommand unic at quotedblleftreversed     {\mirror{\quotedblright}}
+  \definecommand unic at quoteleftreversed        {\mirror{\quoteright}}
+
+  \definecommand unic at onedotleader             {{\periods[1]}}
+  \definecommand unic at twodotleader             {{\periods[2]}}
+  \definecommand unic at hyphenationpoint         {.\allowbreak }
+
+  \definecommand unic at doubleexclamationmark    {!!}
+  \definecommand unic at exclamationquestionmark  {!?}
+  \definecommand unic at questionexclamationmark  {?!}
+  \definecommand unic at doublequestionmark       {??}
+
+  \definecommand unic at reversedpilcrowsign      {\mirror{\P}}
+  \definecommand unic at reversedsemicolon        {\mirror{;}}
+
+  \definecommand unic at superscriptzero          {\high{0}}
+  \definecommand unic at superscripti             {\high{i}}
+  \definecommand unic at superscriptfour          {\high{4}}
+  \definecommand unic at superscriptfive          {\high{5}}
+  \definecommand unic at superscriptsix           {\high{6}}
+  \definecommand unic at superscriptseven         {\high{7}}
+  \definecommand unic at superscripteight         {\high{8}}
+  \definecommand unic at superscriptnine          {\high{9}}
+  \definecommand unic at superscriptplus          {\high{+}}
+  \definecommand unic at superscriptminus         {\high{\textminus}}
+  \definecommand unic at superscriptequals        {\high{=}}
+  \definecommand unic at superscriptleft          {\high{(}}
+  \definecommand unic at superscriptright         {\high{)}}
+  \definecommand unic at superscriptn             {\high{n}}
+  \definecommand unic at subscriptzero            {\low{0}}
+  \definecommand unic at subscriptone             {\low{1}}
+  \definecommand unic at subscripttwo             {\low{2}}
+  \definecommand unic at subscriptthree           {\low{3}}
+  \definecommand unic at subscriptfour            {\low{4}}
+  \definecommand unic at subscriptfive            {\low{5}}
+  \definecommand unic at subscriptsix             {\low{6}}
+  \definecommand unic at subscriptseven           {\low{7}}
+  \definecommand unic at subscripteight           {\low{8}}
+  \definecommand unic at subscriptnine            {\low{9}}
+  \definecommand unic at subscriptplus            {\low{+}}
+  \definecommand unic at subscriptminus           {\low{\textminus}}
+  \definecommand unic at subscriptequals          {\low{=}}
+  \definecommand unic at subscriptleft            {\low{(}}
+  \definecommand unic at subscriptright           {\low{)}}
+  \definecommand unic at subscripta               {\low{a}}
+  \definecommand unic at subscripte               {\low{e}}
+  \definecommand unic at subscripto               {\low{o}}
+  \definecommand unic at subscriptx               {\low{x}}
+  \definecommand unic at subscriptschwa           {\low{\schwa}}
+
+\stopencoding
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-037.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-037.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-037.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,276 @@
+%D \module
+%D   [       file=enco-037,
+%D        version=2006.02.13,
+%D          title=\CONTEXT\ \UNICODE\ Macros,
+%D       subtitle=Encoding for vector 37,
+%D         author=Luigi Scarso,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startencoding[default]
+
+\definecharacter UnicodeLightHorizontal                             {\uchar{37}{000}} %%BOX DRAWINGS LIGHT HORIZONTAL
+\definecharacter UnicodeHeavyHorizontal                             {\uchar{37}{001}} %%BOX DRAWINGS HEAVY HORIZONTAL
+\definecharacter UnicodeLightVertical                               {\uchar{37}{002}} %%BOX DRAWINGS LIGHT VERTICAL
+\definecharacter UnicodeHeavyVertical                               {\uchar{37}{003}} %%BOX DRAWINGS HEAVY VERTICAL
+\definecharacter UnicodeLightTripleDashHorizontal                   {\uchar{37}{004}} %%BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+\definecharacter UnicodeHeavyTripleDashHorizontal                   {\uchar{37}{005}} %%BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+\definecharacter UnicodeLightTripleDashVertical                     {\uchar{37}{006}} %%BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+\definecharacter UnicodeHeavyTripleDashVertical                     {\uchar{37}{007}} %%BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+\definecharacter UnicodeLightQuadrupleDashHorizontal                {\uchar{37}{008}} %%BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+\definecharacter UnicodeHeavyQuadrupleDashHorizontal                {\uchar{37}{009}} %%BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+\definecharacter UnicodeLightQuadrupleDashVertical                  {\uchar{37}{010}} %%BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+\definecharacter UnicodeHeavyQuadrupleDashVertical                  {\uchar{37}{011}} %%BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+\definecharacter UnicodeLightDownAndRight                           {\uchar{37}{012}} %%BOX DRAWINGS LIGHT DOWN AND RIGHT
+\definecharacter UnicodeDownLightAndRightHeavy                      {\uchar{37}{013}} %%BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+\definecharacter UnicodeDownHeavyAndRightLight                      {\uchar{37}{014}} %%BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+\definecharacter UnicodeHeavyDownAndRight                           {\uchar{37}{015}} %%BOX DRAWINGS HEAVY DOWN AND RIGHT
+\definecharacter UnicodeLightDownAndLeft                            {\uchar{37}{016}} %%BOX DRAWINGS LIGHT DOWN AND LEFT
+\definecharacter UnicodeDownLightAndLeftHeavy                       {\uchar{37}{017}} %%BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+\definecharacter UnicodeDownHeavyAndLeftLight                       {\uchar{37}{018}} %%BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+\definecharacter UnicodeHeavyDownAndLeft                            {\uchar{37}{019}} %%BOX DRAWINGS HEAVY DOWN AND LEFT
+\definecharacter UnicodeLightUpAndRight                             {\uchar{37}{020}} %%BOX DRAWINGS LIGHT UP AND RIGHT
+\definecharacter UnicodeUpLightAndRightHeavy                        {\uchar{37}{021}} %%BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+\definecharacter UnicodeUpHeavyAndRightLight                        {\uchar{37}{022}} %%BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+\definecharacter UnicodeHeavyUpAndRight                             {\uchar{37}{023}} %%BOX DRAWINGS HEAVY UP AND RIGHT
+\definecharacter UnicodeLightUpAndLeft                              {\uchar{37}{024}} %%BOX DRAWINGS LIGHT UP AND LEFT
+\definecharacter UnicodeUpLightAndLeftHeavy                         {\uchar{37}{025}} %%BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+\definecharacter UnicodeUpHeavyAndLeftLight                         {\uchar{37}{026}} %%BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+\definecharacter UnicodeHeavyUpAndLeft                              {\uchar{37}{027}} %%BOX DRAWINGS HEAVY UP AND LEFT
+\definecharacter UnicodeLightVerticalAndRight                       {\uchar{37}{028}} %%BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+\definecharacter UnicodeVerticalLightAndRightHeavy                  {\uchar{37}{029}} %%BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+\definecharacter UnicodeUpHeavyAndRightDownLight                    {\uchar{37}{030}} %%BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+\definecharacter UnicodeDownHeavyAndRightUpLight                    {\uchar{37}{031}} %%BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+\definecharacter UnicodeVerticalHeavyAndRightLight                  {\uchar{37}{032}} %%BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+\definecharacter UnicodeDownLightAndRightUpHeavy                    {\uchar{37}{033}} %%BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+\definecharacter UnicodeUpLightAndRightDownHeavy                    {\uchar{37}{034}} %%BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+\definecharacter UnicodeHeavyVerticalAndRight                       {\uchar{37}{035}} %%BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+\definecharacter UnicodeLightVerticalAndLeft                        {\uchar{37}{036}} %%BOX DRAWINGS LIGHT VERTICAL AND LEFT
+\definecharacter UnicodeVerticalLightAndLeftHeavy                   {\uchar{37}{037}} %%BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+\definecharacter UnicodeUpHeavyAndLeftDownLight                     {\uchar{37}{038}} %%BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+\definecharacter UnicodeDownHeavyAndLeftUpLight                     {\uchar{37}{039}} %%BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+\definecharacter UnicodeVerticalHeavyAndLeftLight                   {\uchar{37}{040}} %%BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+\definecharacter UnicodeDownLightAndLeftUpHeavy                     {\uchar{37}{041}} %%BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+\definecharacter UnicodeUpLightAndLeftDownHeavy                     {\uchar{37}{042}} %%BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+\definecharacter UnicodeHeavyVerticalAndLeft                        {\uchar{37}{043}} %%BOX DRAWINGS HEAVY VERTICAL AND LEFT
+\definecharacter UnicodeLightDownAndHorizontal                      {\uchar{37}{044}} %%BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+\definecharacter UnicodeLeftHeavyAndRightDownLight                  {\uchar{37}{045}} %%BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+\definecharacter UnicodeRightHeavyAndLeftDownLight                  {\uchar{37}{046}} %%BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+\definecharacter UnicodeDownLightAndHorizontalHeavy                 {\uchar{37}{047}} %%BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+\definecharacter UnicodeDownHeavyAndHorizontalLight                 {\uchar{37}{048}} %%BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+\definecharacter UnicodeRightLightAndLeftDownHeavy                  {\uchar{37}{049}} %%BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+\definecharacter UnicodeLeftLightAndRightDownHeavy                  {\uchar{37}{050}} %%BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+\definecharacter UnicodeHeavyDownAndHorizontal                      {\uchar{37}{051}} %%BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+\definecharacter UnicodeLightUpAndHorizontal                        {\uchar{37}{052}} %%BOX DRAWINGS LIGHT UP AND HORIZONTAL
+\definecharacter UnicodeLeftHeavyAndRightUpLight                    {\uchar{37}{053}} %%BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+\definecharacter UnicodeRightHeavyAndLeftUpLight                    {\uchar{37}{054}} %%BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+\definecharacter UnicodeUpLightAndHorizontalHeavy                   {\uchar{37}{055}} %%BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+\definecharacter UnicodeUpHeavyAndHorizontalLight                   {\uchar{37}{056}} %%BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+\definecharacter UnicodeRightLightAndLeftUpHeavy                    {\uchar{37}{057}} %%BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+\definecharacter UnicodeLeftLightAndRightUpHeavy                    {\uchar{37}{058}} %%BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+\definecharacter UnicodeHeavyUpAndHorizontal                        {\uchar{37}{059}} %%BOX DRAWINGS HEAVY UP AND HORIZONTAL
+\definecharacter UnicodeLightVerticalAndHorizontal                  {\uchar{37}{060}} %%BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+\definecharacter UnicodeLeftHeavyAndRightVerticalLight              {\uchar{37}{061}} %%BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+\definecharacter UnicodeRightHeavyAndLeftVerticalLight              {\uchar{37}{062}} %%BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+\definecharacter UnicodeVerticalLightAndHorizontalHeavy             {\uchar{37}{063}} %%BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+\definecharacter UnicodeUpHeavyAndDownHorizontalLight               {\uchar{37}{064}} %%BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+\definecharacter UnicodeDownHeavyAndUpHorizontalLight               {\uchar{37}{065}} %%BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+\definecharacter UnicodeVerticalHeavyAndHorizontalLight             {\uchar{37}{066}} %%BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+\definecharacter UnicodeLeftUpHeavyAndRightDownLight                {\uchar{37}{067}} %%BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+\definecharacter UnicodeRightUpHeavyAndLeftDownLight                {\uchar{37}{068}} %%BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+\definecharacter UnicodeLeftDownHeavyAndRightUpLight                {\uchar{37}{069}} %%BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+\definecharacter UnicodeRightDownHeavyAndLeftUpLight                {\uchar{37}{070}} %%BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+\definecharacter UnicodeDownLightAndUpHorizontalHeavy               {\uchar{37}{071}} %%BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+\definecharacter UnicodeUpLightAndDownHorizontalHeavy               {\uchar{37}{072}} %%BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+\definecharacter UnicodeRightLightAndLeftVerticalHeavy              {\uchar{37}{073}} %%BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+\definecharacter UnicodeLeftLightAndRightVerticalHeavy              {\uchar{37}{074}} %%BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+\definecharacter UnicodeHeavyVerticalAndHorizontal                  {\uchar{37}{075}} %%BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+\definecharacter UnicodeLightDoubleDashHorizontal                   {\uchar{37}{076}} %%BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
+\definecharacter UnicodeHeavyDoubleDashHorizontal                   {\uchar{37}{077}} %%BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
+\definecharacter UnicodeLightDoubleDashVertical                     {\uchar{37}{078}} %%BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
+\definecharacter UnicodeHeavyDoubleDashVertical                     {\uchar{37}{079}} %%BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
+\definecharacter UnicodeDoubleHorizontal                            {\uchar{37}{080}} %%BOX DRAWINGS DOUBLE HORIZONTAL
+\definecharacter UnicodeDoubleVertical                              {\uchar{37}{081}} %%BOX DRAWINGS DOUBLE VERTICAL
+\definecharacter UnicodeDownSingleAndRightDouble                    {\uchar{37}{082}} %%BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+\definecharacter UnicodeDownDoubleAndRightSingle                    {\uchar{37}{083}} %%BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+\definecharacter UnicodeDoubleDownAndRight                          {\uchar{37}{084}} %%BOX DRAWINGS DOUBLE DOWN AND RIGHT
+\definecharacter UnicodeDownSingleAndLeftDouble                     {\uchar{37}{085}} %%BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+\definecharacter UnicodeDownDoubleAndLeftSingle                     {\uchar{37}{086}} %%BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+\definecharacter UnicodeDoubleDownAndLeft                           {\uchar{37}{087}} %%BOX DRAWINGS DOUBLE DOWN AND LEFT
+\definecharacter UnicodeUpSingleAndRightDouble                      {\uchar{37}{088}} %%BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+\definecharacter UnicodeUpDoubleAndRightSingle                      {\uchar{37}{089}} %%BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+\definecharacter UnicodeDoubleUpAndRight                            {\uchar{37}{090}} %%BOX DRAWINGS DOUBLE UP AND RIGHT
+\definecharacter UnicodeUpSingleAndLeftDouble                       {\uchar{37}{091}} %%BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+\definecharacter UnicodeUpDoubleAndLeftSingle                       {\uchar{37}{092}} %%BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+\definecharacter UnicodeDoubleUpAndLeft                             {\uchar{37}{093}} %%BOX DRAWINGS DOUBLE UP AND LEFT
+\definecharacter UnicodeVerticalSingleAndRightDouble                {\uchar{37}{094}} %%BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+\definecharacter UnicodeVerticalDoubleAndRightSingle                {\uchar{37}{095}} %%BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+\definecharacter UnicodeDoubleVerticalAndRight                      {\uchar{37}{096}} %%BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+\definecharacter UnicodeVerticalSingleAndLeftDouble                 {\uchar{37}{097}} %%BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+\definecharacter UnicodeVerticalDoubleAndLeftSingle                 {\uchar{37}{098}} %%BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+\definecharacter UnicodeDoubleVerticalAndLeft                       {\uchar{37}{099}} %%BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+\definecharacter UnicodeDownSingleAndHorizontalDouble               {\uchar{37}{100}} %%BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+\definecharacter UnicodeDownDoubleAndHorizontalSingle               {\uchar{37}{101}} %%BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+\definecharacter UnicodeDoubleDownAndHorizontal                     {\uchar{37}{102}} %%BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+\definecharacter UnicodeUpSingleAndHorizontalDouble                 {\uchar{37}{103}} %%BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+\definecharacter UnicodeUpDoubleAndHorizontalSingle                 {\uchar{37}{104}} %%BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+\definecharacter UnicodeDoubleUpAndHorizontal                       {\uchar{37}{105}} %%BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+\definecharacter UnicodeVerticalSingleAndHorizontalDouble           {\uchar{37}{106}} %%BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+\definecharacter UnicodeVerticalDoubleAndHorizontalSingle           {\uchar{37}{107}} %%BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+\definecharacter UnicodeDoubleVerticalAndHorizontal                 {\uchar{37}{108}} %%BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+\definecharacter UnicodeLightArcDownAndRight                        {\uchar{37}{109}} %%BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+\definecharacter UnicodeLightArcDownAndLeft                         {\uchar{37}{110}} %%BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+\definecharacter UnicodeLightArcUpAndLeft                           {\uchar{37}{111}} %%BOX DRAWINGS LIGHT ARC UP AND LEFT
+\definecharacter UnicodeLightArcUpAndRight                          {\uchar{37}{112}} %%BOX DRAWINGS LIGHT ARC UP AND RIGHT
+\definecharacter UnicodeLightDiagonalUpperRightToLowerLeft          {\uchar{37}{113}} %%BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+\definecharacter UnicodeLightDiagonalUpperLeftToLowerRight          {\uchar{37}{114}} %%BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+\definecharacter UnicodeLightDiagonalCross                          {\uchar{37}{115}} %%BOX DRAWINGS LIGHT DIAGONAL CROSS
+\definecharacter UnicodeLightLeft                                   {\uchar{37}{116}} %%BOX DRAWINGS LIGHT LEFT
+\definecharacter UnicodeLightUp                                     {\uchar{37}{117}} %%BOX DRAWINGS LIGHT UP
+\definecharacter UnicodeLightRight                                  {\uchar{37}{118}} %%BOX DRAWINGS LIGHT RIGHT
+\definecharacter UnicodeLightDown                                   {\uchar{37}{119}} %%BOX DRAWINGS LIGHT DOWN
+\definecharacter UnicodeHeavyLeft                                   {\uchar{37}{120}} %%BOX DRAWINGS HEAVY LEFT
+\definecharacter UnicodeHeavyUp                                     {\uchar{37}{121}} %%BOX DRAWINGS HEAVY UP
+\definecharacter UnicodeHeavyRight                                  {\uchar{37}{122}} %%BOX DRAWINGS HEAVY RIGHT
+\definecharacter UnicodeHeavyDown                                   {\uchar{37}{123}} %%BOX DRAWINGS HEAVY DOWN
+\definecharacter UnicodeLightLeftAndHeavyRight                      {\uchar{37}{124}} %%BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
+\definecharacter UnicodeLightUpAndHeavyDown                         {\uchar{37}{125}} %%BOX DRAWINGS LIGHT UP AND HEAVY DOWN
+\definecharacter UnicodeHeavyLeftAndLightRight                      {\uchar{37}{126}} %%BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
+\definecharacter UnicodeHeavyUpAndLightDown                         {\uchar{37}{127}} %%BOX DRAWINGS HEAVY UP AND LIGHT DOWN
+\definecharacter UnicodeUpperHalfBlock                              {\uchar{37}{128}} %%UPPER HALF BLOCK
+\definecharacter UnicodeLowerOneEighthBlock                         {\uchar{37}{129}} %%LOWER ONE EIGHTH BLOCK
+\definecharacter UnicodeLowerOneQuarterBlock                        {\uchar{37}{130}} %%LOWER ONE QUARTER BLOCK
+\definecharacter UnicodeLowerThreeEighthsBlock                      {\uchar{37}{131}} %%LOWER THREE EIGHTHS BLOCK
+\definecharacter UnicodeLowerHalfBlock                              {\uchar{37}{132}} %%LOWER HALF BLOCK
+\definecharacter UnicodeLowerFiveEighthsBlock                       {\uchar{37}{133}} %%LOWER FIVE EIGHTHS BLOCK
+\definecharacter UnicodeLowerThreeQuartersBlock                     {\uchar{37}{134}} %%LOWER THREE QUARTERS BLOCK
+\definecharacter UnicodeLowerSevenEighthsBlock                      {\uchar{37}{135}} %%LOWER SEVEN EIGHTHS BLOCK
+\definecharacter UnicodeFullBlock                                   {\uchar{37}{136}} %%FULL BLOCK
+\definecharacter UnicodeLeftSevenEighthsBlock                       {\uchar{37}{137}} %%LEFT SEVEN EIGHTHS BLOCK
+\definecharacter UnicodeLeftThreeQuartersBlock                      {\uchar{37}{138}} %%LEFT THREE QUARTERS BLOCK
+\definecharacter UnicodeLeftFiveEighthsBlock                        {\uchar{37}{139}} %%LEFT FIVE EIGHTHS BLOCK
+\definecharacter UnicodeLeftHalfBlock                               {\uchar{37}{140}} %%LEFT HALF BLOCK
+\definecharacter UnicodeLeftThreeEighthsBlock                       {\uchar{37}{141}} %%LEFT THREE EIGHTHS BLOCK
+\definecharacter UnicodeLeftOneQuarterBlock                         {\uchar{37}{142}} %%LEFT ONE QUARTER BLOCK
+\definecharacter UnicodeLeftOneEighthBlock                          {\uchar{37}{143}} %%LEFT ONE EIGHTH BLOCK
+\definecharacter UnicodeRightHalfBlock                              {\uchar{37}{144}} %%RIGHT HALF BLOCK
+\definecharacter UnicodeLightShade                                  {\uchar{37}{145}} %%LIGHT SHADE
+\definecharacter UnicodeMediumShade                                 {\uchar{37}{146}} %%MEDIUM SHADE
+\definecharacter UnicodeDarkShade                                   {\uchar{37}{147}} %%DARK SHADE
+\definecharacter UnicodeUpperOneEighthBlock                         {\uchar{37}{148}} %%UPPER ONE EIGHTH BLOCK
+\definecharacter UnicodeRightOneEighthBlock                         {\uchar{37}{149}} %%RIGHT ONE EIGHTH BLOCK
+\definecharacter UnicodeQuadrantLowerLeft                           {\uchar{37}{150}} %%[Unassigned U+2596]
+\definecharacter UnicodeQuadrantLowerRight                          {\uchar{37}{151}} %%[Unassigned U+2597]
+\definecharacter UnicodeQuadrantUpperLeft                           {\uchar{37}{152}} %%[Unassigned U+2598]
+\definecharacter UnicodeQuadrantUpperLeftAndLowerLeftAndLowerRight  {\uchar{37}{153}} %%[Unassigned U+2599]
+\definecharacter UnicodeQuadrantUpperLeftAndLowerRight              {\uchar{37}{154}} %%[Unassigned U+259A]
+\definecharacter UnicodeQuadrantUpperLeftAndUpperRightandLowerLeft  {\uchar{37}{155}} %%[Unassigned U+259B]
+\definecharacter UnicodeQuadrantUpperLeftAndUpperRightAndLowerRight {\uchar{37}{156}} %%[Unassigned U+259C]
+\definecharacter UnicodeQuadrantUpperRight                          {\uchar{37}{157}} %%[Unassigned U+259D]
+\definecharacter UnicodeQuadrantUpperRightAndLowerLeft              {\uchar{37}{158}} %%[Unassigned U+259E]
+\definecharacter UnicodeQuadrantUpperRightAndLowerLeftAndLowerRight {\uchar{37}{159}} %%[Unassigned U+259F]
+\definecharacter UnicodeBlackSquare                                 {\uchar{37}{160}} %%BLACK SQUARE
+\definecharacter UnicodeWhiteSquare                                 {\uchar{37}{161}} %%WHITE SQUARE
+\definecharacter UnicodeWhiteSquareWithRoundedCorners               {\uchar{37}{162}} %%WHITE SQUARE WITH ROUNDED CORNERS
+\definecharacter UnicodeWhiteSquareContainingBlackSmallSquare       {\uchar{37}{163}} %%WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+\definecharacter UnicodeSquareWithHorizontalFill                    {\uchar{37}{164}} %%SQUARE WITH HORIZONTAL FILL
+\definecharacter UnicodeSquareWithVerticalFill                      {\uchar{37}{165}} %%SQUARE WITH VERTICAL FILL
+\definecharacter UnicodeSquareWithOrthogonalCrosshatchFill          {\uchar{37}{166}} %%SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+\definecharacter UnicodeSquareWithUpperLeftToLowerRightFill         {\uchar{37}{167}} %%SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+\definecharacter UnicodeSquareWithUpperRightToLowerLeftFill         {\uchar{37}{168}} %%SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+\definecharacter UnicodeSquareWithDiagonalCrosshatchFill            {\uchar{37}{169}} %%SQUARE WITH DIAGONAL CROSSHATCH FILL
+\definecharacter UnicodeBlackSmallSquare                            {\uchar{37}{170}} %%BLACK SMALL SQUARE
+\definecharacter UnicodeWhiteSmallSquare                            {\uchar{37}{171}} %%WHITE SMALL SQUARE
+\definecharacter UnicodeBlackRectangle                              {\uchar{37}{172}} %%BLACK RECTANGLE
+\definecharacter UnicodeWhiteRectangle                              {\uchar{37}{173}} %%WHITE RECTANGLE
+\definecharacter UnicodeBlackVerticalRectangle                      {\uchar{37}{174}} %%BLACK VERTICAL RECTANGLE
+\definecharacter UnicodeWhiteVerticalRectangle                      {\uchar{37}{175}} %%WHITE VERTICAL RECTANGLE
+\definecharacter UnicodeBlackParallelogram                          {\uchar{37}{176}} %%BLACK PARALLELOGRAM
+\definecharacter UnicodeWhiteParallelogram                          {\uchar{37}{177}} %%WHITE PARALLELOGRAM
+\definecharacter UnicodeBlackUpPointingTriangle                     {\uchar{37}{178}} %%BLACK UP-POINTING TRIANGLE
+\definecharacter UnicodeWhiteUpPointingTriangle                     {\uchar{37}{179}} %%WHITE UP-POINTING TRIANGLE
+\definecharacter UnicodeBlackUpPointingSmallTriangle                {\uchar{37}{180}} %%BLACK UP-POINTING SMALL TRIANGLE
+\definecharacter UnicodeWhiteUpPointingSmallTriangle                {\uchar{37}{181}} %%WHITE UP-POINTING SMALL TRIANGLE
+\definecharacter UnicodeBlackRightPointingTriangle                  {\uchar{37}{182}} %%BLACK RIGHT-POINTING TRIANGLE
+\definecharacter UnicodeWhiteRightPointingTriangle                  {\uchar{37}{183}} %%WHITE RIGHT-POINTING TRIANGLE
+\definecharacter UnicodeBlackRightPointingSmallTriangle             {\uchar{37}{184}} %%BLACK RIGHT-POINTING SMALL TRIANGLE
+\definecharacter UnicodeWhiteRightPointingSmallTriangle             {\uchar{37}{185}} %%WHITE RIGHT-POINTING SMALL TRIANGLE
+\definecharacter UnicodeBlackRightPointingPointer                   {\uchar{37}{186}} %%BLACK RIGHT-POINTING POINTER
+\definecharacter UnicodeWhiteRightPointingPointer                   {\uchar{37}{187}} %%WHITE RIGHT-POINTING POINTER
+\definecharacter UnicodeBlackDownPointingTriangle                   {\uchar{37}{188}} %%BLACK DOWN-POINTING TRIANGLE
+\definecharacter UnicodeWhiteDownPointingTriangle                   {\uchar{37}{189}} %%WHITE DOWN-POINTING TRIANGLE
+\definecharacter UnicodeBlackDownPointingSmallTriangle              {\uchar{37}{190}} %%BLACK DOWN-POINTING SMALL TRIANGLE
+\definecharacter UnicodeWhiteDownPointingSmallTriangle              {\uchar{37}{191}} %%WHITE DOWN-POINTING SMALL TRIANGLE
+\definecharacter UnicodeBlackLeftPointingTriangle                   {\uchar{37}{192}} %%BLACK LEFT-POINTING TRIANGLE
+\definecharacter UnicodeWhiteLeftPointingTriangle                   {\uchar{37}{193}} %%WHITE LEFT-POINTING TRIANGLE
+\definecharacter UnicodeBlackLeftPointingSmallTriangle              {\uchar{37}{194}} %%BLACK LEFT-POINTING SMALL TRIANGLE
+\definecharacter UnicodeWhiteLeftPointingSmallTriangle              {\uchar{37}{195}} %%WHITE LEFT-POINTING SMALL TRIANGLE
+\definecharacter UnicodeBlackLeftPointingPointer                    {\uchar{37}{196}} %%BLACK LEFT-POINTING POINTER
+\definecharacter UnicodeWhiteLeftPointingPointer                    {\uchar{37}{197}} %%WHITE LEFT-POINTING POINTER
+\definecharacter UnicodeBlackDiamond                                {\uchar{37}{198}} %%BLACK DIAMOND
+\definecharacter UnicodeWhiteDiamond                                {\uchar{37}{199}} %%WHITE DIAMOND
+\definecharacter UnicodeWhiteDiamondContainingBlackSmallDiamond     {\uchar{37}{200}} %%WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+\definecharacter UnicodeFisheye                                     {\uchar{37}{201}} %%FISHEYE
+\definecharacter UnicodeLozenge                                     {\uchar{37}{202}} %%LOZENGE
+\definecharacter UnicodeWhiteCircle                                 {\uchar{37}{203}} %%WHITE CIRCLE
+\definecharacter UnicodeDottedCircle                                {\uchar{37}{204}} %%DOTTED CIRCLE
+\definecharacter UnicodeCircleWithVerticalFill                      {\uchar{37}{205}} %%CIRCLE WITH VERTICAL FILL
+\definecharacter UnicodeBullseye                                    {\uchar{37}{206}} %%BULLSEYE
+\definecharacter UnicodeBlackCircle                                 {\uchar{37}{207}} %%BLACK CIRCLE
+\definecharacter UnicodeCircleWithLeftHalfBlack                     {\uchar{37}{208}} %%CIRCLE WITH LEFT HALF BLACK
+\definecharacter UnicodeCircleWithRightHalfBlack                    {\uchar{37}{209}} %%CIRCLE WITH RIGHT HALF BLACK
+\definecharacter UnicodeCircleWithLowerHalfBlack                    {\uchar{37}{210}} %%CIRCLE WITH LOWER HALF BLACK
+\definecharacter UnicodeCircleWithUpperHalfBlack                    {\uchar{37}{211}} %%CIRCLE WITH UPPER HALF BLACK
+\definecharacter UnicodeCircleWithUpperRightQuadrantBlack           {\uchar{37}{212}} %%CIRCLE WITH UPPER RIGHT QUADRANT BLACK
+\definecharacter UnicodeCircleWithAllButUpperLeftQuadrantBlack      {\uchar{37}{213}} %%CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
+\definecharacter UnicodeLeftHalfBlackCircle                         {\uchar{37}{214}} %%LEFT HALF BLACK CIRCLE
+\definecharacter UnicodeRightHalfBlackCircle                        {\uchar{37}{215}} %%RIGHT HALF BLACK CIRCLE
+\definecharacter UnicodeInverseBullet                               {\uchar{37}{216}} %%INVERSE BULLET
+\definecharacter UnicodeInverseWhiteCircle                          {\uchar{37}{217}} %%INVERSE WHITE CIRCLE
+\definecharacter UnicodeUpperHalfInverseWhiteCircle                 {\uchar{37}{218}} %%UPPER HALF INVERSE WHITE CIRCLE
+\definecharacter UnicodeLowerHalfInverseWhiteCircle                 {\uchar{37}{219}} %%LOWER HALF INVERSE WHITE CIRCLE
+\definecharacter UnicodeUpperLeftQuadrantCircularArc                {\uchar{37}{220}} %%UPPER LEFT QUADRANT CIRCULAR ARC
+\definecharacter UnicodeUpperRightQuadrantCircularArc               {\uchar{37}{221}} %%UPPER RIGHT QUADRANT CIRCULAR ARC
+\definecharacter UnicodeLowerRightQuadrantCircularArc               {\uchar{37}{222}} %%LOWER RIGHT QUADRANT CIRCULAR ARC
+\definecharacter UnicodeLowerLeftQuadrantCircularArc                {\uchar{37}{223}} %%LOWER LEFT QUADRANT CIRCULAR ARC
+\definecharacter UnicodeUpperHalfCircle                             {\uchar{37}{224}} %%UPPER HALF CIRCLE
+\definecharacter UnicodeLowerHalfCircle                             {\uchar{37}{225}} %%LOWER HALF CIRCLE
+\definecharacter UnicodeBlackLowerRightTriangle                     {\uchar{37}{226}} %%BLACK LOWER RIGHT TRIANGLE
+\definecharacter UnicodeBlackLowerLeftTriangle                      {\uchar{37}{227}} %%BLACK LOWER LEFT TRIANGLE
+\definecharacter UnicodeBlackUpperLeftTriangle                      {\uchar{37}{228}} %%BLACK UPPER LEFT TRIANGLE
+\definecharacter UnicodeBlackUpperRightTriangle                     {\uchar{37}{229}} %%BLACK UPPER RIGHT TRIANGLE
+\definecharacter UnicodeWhiteBullet                                 {\uchar{37}{230}} %%WHITE BULLET
+\definecharacter UnicodeSquareWithLeftHalfBlack                     {\uchar{37}{231}} %%SQUARE WITH LEFT HALF BLACK
+\definecharacter UnicodeSquareWithRightHalfBlack                    {\uchar{37}{232}} %%SQUARE WITH RIGHT HALF BLACK
+\definecharacter UnicodeSquareWithUpperLeftDiagonalHalfBlack        {\uchar{37}{233}} %%SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
+\definecharacter UnicodeSquareWithLowerRightDiagonalHalfBlack       {\uchar{37}{234}} %%SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
+\definecharacter UnicodeWhiteSquareWithVerticalBisectingLine        {\uchar{37}{235}} %%WHITE SQUARE WITH VERTICAL BISECTING LINE
+\definecharacter UnicodeWhiteUpPointingTriangleWithDot              {\uchar{37}{236}} %%WHITE UP-POINTING TRIANGLE WITH DOT
+\definecharacter UnicodeUpPointingTriangleWithLeftHalfBlack         {\uchar{37}{237}} %%UP-POINTING TRIANGLE WITH LEFT HALF BLACK
+\definecharacter UnicodeUpPointingTriangleWithRightHalfBlack        {\uchar{37}{238}} %%UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
+\definecharacter UnicodeLargeCircle                                 {\uchar{37}{239}} %%LARGE CIRCLE
+\definecharacter UnicodeWhiteSquareWithUpperLeftQuadrant            {\uchar{37}{240}} %%WHITE SQUARE WITH UPPER LEFT QUADRANT
+\definecharacter UnicodeWhiteSquareWithLowerLeftQuadrant            {\uchar{37}{241}} %%WHITE SQUARE WITH LOWER LEFT QUADRANT
+\definecharacter UnicodeWhiteSquareWithLowerRightQuadrant           {\uchar{37}{242}} %%WHITE SQUARE WITH LOWER RIGHT QUADRANT
+\definecharacter UnicodeWhiteSquareWithUpperRightQuadrant           {\uchar{37}{243}} %%WHITE SQUARE WITH UPPER RIGHT QUADRANT
+\definecharacter UnicodeWhiteCircleWithUpperLeftQuadrant            {\uchar{37}{244}} %%WHITE CIRCLE WITH UPPER LEFT QUADRANT
+\definecharacter UnicodeWhiteCircleWithLowerLeftQuadrant            {\uchar{37}{245}} %%WHITE CIRCLE WITH LOWER LEFT QUADRANT
+\definecharacter UnicodeWhiteCircleWithLowerRightQuadrant           {\uchar{37}{246}} %%WHITE CIRCLE WITH LOWER RIGHT QUADRANT
+\definecharacter UnicodeWhiteCircleWithUpperRightQuadrant           {\uchar{37}{247}} %%WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+\definecharacter UnicodeUpperLeftTriangle                           {\uchar{37}{248}} %%[Unassigned U+25F8]
+\definecharacter UnicodeUpperRightTriangle                          {\uchar{37}{249}} %%[Unassigned U+25F9]
+\definecharacter UnicodeLowerLeftTriangle                           {\uchar{37}{250}} %%[Unassigned U+25FA]
+\definecharacter UnicodeWhiteMediumSquare                           {\uchar{37}{251}} %%[Unassigned U+25FB]
+\definecharacter UnicodeBlackMediumSquare                           {\uchar{37}{252}} %%[Unassigned U+25FC]
+\definecharacter UnicodeWhiteMediumSmallSquare                      {\uchar{37}{253}} %%[Unassigned U+25FD]
+\definecharacter UnicodeBlackMediumSmallSquare                      {\uchar{37}{254}} %%[Unassigned U+25FE]
+\definecharacter UnicodeLowerRightTriangle                          {\uchar{37}{255}} %%[Unassigned U+25FF]
+
+\stopencoding
+
+\endinput
+

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-acc.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-acc.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-acc.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,139 @@
+%D \module
+%D   [     file=enco-acc,
+%D      version=2000.20.12, % split from base file
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Composed Characters Commands,
+%D       author=Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Although it is technically possible to redefine the commands
+%D that are responsible for building composed characters, this
+%D is seldom needed, since they map onto named glyphs. The
+%D meaning of these names glyphs may change, although their
+%D visual appearance seldom will.
+
+\startencoding[default]
+
+\defineaccent ^ A {\Acircumflex}   \defineaccent ^ a {\acircumflex}
+\defineaccent ^ C {\Ccircumflex}   \defineaccent ^ c {\ccircumflex}
+\defineaccent ^ E {\Ecircumflex}   \defineaccent ^ e {\ecircumflex}
+\defineaccent ^ G {\Gcircumflex}   \defineaccent ^ g {\gcircumflex}
+\defineaccent ^ H {\Hcircumflex}   \defineaccent ^ h {\hcircumflex}
+\defineaccent ^ I {\Icircumflex}   \defineaccent ^ i {\icircumflex}  \defineaccent ^ {\i} {\icircumflex}
+\defineaccent ^ J {\Jcircumflex}   \defineaccent ^ j {\jcircumflex}  \defineaccent ^ {\j} {\jcircumflex}
+\defineaccent ^ O {\Ocircumflex}   \defineaccent ^ o {\ocircumflex}
+\defineaccent ^ S {\Scircumflex}   \defineaccent ^ s {\scircumflex}
+\defineaccent ^ U {\Ucircumflex}   \defineaccent ^ u {\ucircumflex}
+\defineaccent ^ W {\Wcircumflex}   \defineaccent ^ w {\wcircumflex}
+\defineaccent ^ Y {\Ycircumflex}   \defineaccent ^ y {\ycircumflex}
+
+\defineaccent ` A {\Agrave}        \defineaccent ` a {\agrave}
+\defineaccent ` E {\Egrave}        \defineaccent ` e {\egrave}
+\defineaccent ` I {\Igrave}        \defineaccent ` i {\igrave}       \defineaccent ` {\i} {\igrave}
+\defineaccent ` O {\Ograve}        \defineaccent ` o {\ograve}
+\defineaccent ` U {\Ugrave}        \defineaccent ` u {\ugrave}
+\defineaccent ` Y {\Ygrave}        \defineaccent ` y {\ygrave}
+
+\defineaccent ~ A {\Atilde}        \defineaccent ~ a {\atilde}
+\defineaccent ~ I {\Itilde}        \defineaccent ~ i {\itilde}       \defineaccent ~ {\i} {\itilde}
+\defineaccent ~ O {\Otilde}        \defineaccent ~ o {\otilde}
+\defineaccent ~ U {\Utilde}        \defineaccent ~ u {\utilde}
+
+\defineaccent " A {\Adiaeresis}    \defineaccent " a {\adiaeresis}
+\defineaccent " E {\Ediaeresis}    \defineaccent " e {\ediaeresis}
+\defineaccent " I {\Idiaeresis}    \defineaccent " i {\idiaeresis}   \defineaccent " {\i} {\idiaeresis}
+\defineaccent " O {\Odiaeresis}    \defineaccent " o {\odiaeresis}
+\defineaccent " U {\Udiaeresis}    \defineaccent " u {\udiaeresis}
+\defineaccent " Y {\Ydiaeresis}    \defineaccent " y {\ydiaeresis}
+
+\defineaccent ' A {\Aacute}        \defineaccent ' a {\aacute}
+\defineaccent ' C {\Cacute}        \defineaccent ' c {\cacute}
+\defineaccent ' E {\Eacute}        \defineaccent ' e {\eacute}
+\defineaccent ' I {\Iacute}        \defineaccent ' i {\iacute}       \defineaccent ' {\i} {\iacute}
+\defineaccent ' L {\Lacute}        \defineaccent ' l {\lacute}
+\defineaccent ' N {\Nacute}        \defineaccent ' n {\nacute}
+\defineaccent ' O {\Oacute}        \defineaccent ' o {\oacute}
+\defineaccent ' R {\Racute}        \defineaccent ' r {\racute}
+\defineaccent ' S {\Sacute}        \defineaccent ' s {\sacute}
+\defineaccent ' U {\Uacute}        \defineaccent ' u {\uacute}
+\defineaccent ' Y {\Yacute}        \defineaccent ' y {\yacute}
+\defineaccent ' Z {\Zacute}        \defineaccent ' z {\zacute}
+
+\defineaccent . C {\Cdotaccent}    \defineaccent . c {\cdotaccent}
+\defineaccent . E {\Edotaccent}    \defineaccent . e {\edotaccent}
+\defineaccent . G {\Gdotaccent}    \defineaccent . g {\gdotaccent}
+\defineaccent . I {\Idotaccent}    \defineaccent . i {\idotaccent}   \defineaccent . {\i} {\idotaccent}
+\defineaccent . Z {\Zdotaccent}    \defineaccent . z {\zdotaccent}
+
+\defineaccent = A {\Amacron}       \defineaccent = a {\amacron}
+\defineaccent = E {\Emacron}       \defineaccent = e {\emacron}
+\defineaccent = I {\Imacron}       \defineaccent = i {\imacron}      \defineaccent = {\i} {\imacron}
+\defineaccent = O {\Omacron}       \defineaccent = o {\omacron}
+\defineaccent = U {\Umacron}       \defineaccent = u {\umacron}
+
+\defineaccent c C {\Ccedilla}      \defineaccent c c {\ccedilla}
+\defineaccent c K {\Kcedilla}      \defineaccent c k {\kcedilla}
+\defineaccent c L {\Lcedilla}      \defineaccent c l {\lcedilla}
+\defineaccent c N {\Ncedilla}      \defineaccent c n {\ncedilla}
+\defineaccent c R {\Rcedilla}      \defineaccent c r {\rcedilla}
+\defineaccent c S {\Scedilla}      \defineaccent c s {\scedilla}
+\defineaccent c T {\Tcedilla}      \defineaccent c t {\tcedilla}
+
+\defineaccent H O {\Ohungarumlaut} \defineaccent H o {\ohungarumlaut}
+\defineaccent H u {\uhungarumlaut} \defineaccent H U {\Uhungarumlaut}
+
+\defineaccent k A {\Aogonek}       \defineaccent k a {\aogonek}
+\defineaccent k E {\Eogonek}       \defineaccent k e {\eogonek}
+\defineaccent k I {\Iogonek}       \defineaccent k i {\iogonek}
+\defineaccent k U {\Uogonek}       \defineaccent k u {\uogonek}
+
+\defineaccent r A {\Aring}         \defineaccent r a {\aring}
+\defineaccent r U {\Uring}         \defineaccent r u {\uring}
+
+\defineaccent u A {\Abreve}        \defineaccent u a {\abreve}
+\defineaccent u E {\Ebreve}        \defineaccent u e {\ebreve}
+\defineaccent u G {\Gbreve}        \defineaccent u g {\gbreve}
+\defineaccent u I {\Ibreve}        \defineaccent u i {\ibreve}       \defineaccent u {\i} {\ibreve}
+\defineaccent u O {\Obreve}        \defineaccent u o {\obreve}
+\defineaccent u U {\Ubreve}        \defineaccent u u {\ubreve}
+
+\defineaccent v C {\Ccaron}        \defineaccent v c {\ccaron}
+\defineaccent v D {\Dcaron}        \defineaccent v d {\dcaron}
+\defineaccent v E {\Ecaron}        \defineaccent v e {\ecaron}
+\defineaccent v L {\Lcaron}        \defineaccent v l {\lcaron}
+\defineaccent v N {\Ncaron}        \defineaccent v n {\ncaron}
+\defineaccent v R {\Rcaron}        \defineaccent v r {\rcaron}
+\defineaccent v S {\Scaron}        \defineaccent v s {\scaron}
+\defineaccent v T {\Tcaron}        \defineaccent v t {\tcaron}
+\defineaccent v Z {\Zcaron}        \defineaccent v z {\zcaron}
+
+\stopencoding
+
+\startencoding[default]
+
+% vietnamese: if needed, \useencoding[enco-vna]
+
+\stopencoding
+
+% For Tobias Burnus, who wants:
+%
+% \starttypen
+% \setupinteraction[state=start]
+% \setupinteractionscreen[option=bookmark]
+% \placebookmarks[chapter]
+%
+% \starttext \chapter{F\"ur Na\"ive und Na\"\i ve} \stoptext
+% \stoptypen
+
+\startencoding[default]
+
+  \defineaccent " {\i} {\idiaeresis}
+
+\stopencoding
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-agr.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-agr.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-agr.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,367 @@
+%D \module
+%D   [       file=enco-agr,
+%D        version=2005.02.20,
+%D          title=\CONTEXT\ \UNICODE\ Macros,
+%D       subtitle=Ancient Greek,
+%D         author=Thomas A. Schmitz,
+%D           date=\currentdate]
+
+\startmapping[agr]
+
+    \definecasemaps 13 to  64 lc   0 uc 0
+    \definecasemaps 65 to  66 lc +32 uc 0
+    \definecasemaps 67 to  67 lc   0 uc 0
+    \definecasemaps 68 to  85 lc +32 uc 0
+    \definecasemaps 86 to  86 lc   0 uc 0
+    \definecasemaps 87 to  90 lc +32 uc 0
+    \definecasemaps 91 to 255 lc   0 uc 0
+
+    \definecaseself 4 % apostrofe
+    \definecaseself 5 % greekbetaalt
+
+\stopmapping
+
+\startencoding[agr]
+
+\definecharacter greeksigmalunate                    1
+\definecharacter endash                              2
+\definecharacter emdash                              3
+\definecharacter apostrophe                          4
+\definecharacter greekbetaalt                        5
+\definecharacter epih                                6
+
+\definecharacter textbraceleft                       8
+\definecharacter textbraceright                      9
+\definecharacter textbreve                          10
+
+\definecharacter greekSigmalunate                   13
+\definecharacter greekIotadialytika                 14
+\definecharacter greekUpsilondialytika              15
+
+\definecharacter greekepsilonperispomeni            18
+\definecharacter greekomicronperispomeni            19
+\definecharacter greekepsilondasiaperispomeni       20
+\definecharacter greekomicrondasiaperispomeni       21
+\definecharacter greekepsilonpsiliperispomeni       22
+\definecharacter greekomicronpsiliperispomeni       23
+\definecharacter greekiotadialytikaperispomeni      24
+\definecharacter greekupsilondialytikaperispomeni   25
+\definecharacter greekdialytikaperispomeni          26
+
+\definecharacter textbottomdot                      33
+\definecharacter greeksampi                         34
+\definecharacter greekdigamma                       35
+\definecharacter greekstigma                        36
+\definecharacter greeknumkoppa                      37
+\definecharacter greekkoppa                         38
+\definecharacter guilsingleright                    39
+
+\definecharacter textdag                            43
+
+\definecharacter greekoxia                          47
+
+\definecharacter greekanoteleia  	                59
+\definecharacter greekdasia                         60
+
+\definecharacter greekpsili                         62
+\definecharacter greekquestionmark                  63
+\definecharacter dialytika                          64
+\definecharacter greekAlpha                         65
+\definecharacter greekBeta                          66
+\definecharacter greekomegaiotasub                  67
+\definecharacter greekDelta                         68
+\definecharacter greekEpsilon                       69
+\definecharacter greekPhi                           70
+\definecharacter greekGamma                         71
+\definecharacter greekEta                           72
+\definecharacter greekIota                          73
+\definecharacter greekTheta                         74
+\definecharacter greekKappa                         75
+\definecharacter greekLambda                        76
+\definecharacter greekMu                            77
+\definecharacter greekNu                            78
+\definecharacter greekOmicron                       79
+\definecharacter greekPi                            80
+\definecharacter greekChi                           81
+\definecharacter greekRho                           82
+\definecharacter greekSigma                         83
+\definecharacter greekTau                           84
+\definecharacter greekUpsilon                       85
+\definecharacter greeketaiotasub                    86
+\definecharacter greekOmega                         87
+\definecharacter greekXi                            88
+\definecharacter greekPsi                           89
+\definecharacter greekZeta                          90
+\definecharacter bracketleft                        91
+\definecharacter greekvaria                         92
+\definecharacter bracketright                       93
+\definecharacter greekperispomeni                   94
+
+\definecharacter guilsingleleft                     96
+
+% the above is a quote character
+\definecharacter greekalpha                         97
+\definecharacter greekbeta                          98
+\definecharacter greekfinalsigma                    99
+\definecharacter greekdelta                        100
+\definecharacter greekepsilon                      101
+\definecharacter greekphi                          102
+\definecharacter greekgamma                        103
+\definecharacter greeketa                          104
+\definecharacter greekiota                         105
+\definecharacter greektheta                        106
+\definecharacter greekkappa                        107
+\definecharacter greeklambda                       108
+\definecharacter greekmu                           109
+\definecharacter greeknu                           110
+\definecharacter greekomicron                      111
+\definecharacter greekpi                           112
+\definecharacter greekchi                          113
+\definecharacter greekrho                          114
+\definecharacter greeksigma                        115
+\definecharacter greektau                          116
+\definecharacter greekupsilon                      117
+\definecharacter greekalphaiotasub                 118
+\definecharacter greekomega                        119
+\definecharacter greekxi                           120
+\definecharacter greekpsi                          121
+\definecharacter greekzeta                         122
+\definecharacter floorleft                         123
+\definecharacter textbar                           124
+\definecharacter floorright                        125
+\definecharacter greekperispomeni                  126
+
+\definecharacter quotedblleft                      128
+\definecharacter quotedblright                     129
+\definecharacter exclam                            130
+\definecharacter greekiotadasia                    131
+\definecharacter greekiotapsili                    132
+\definecharacter greekiotaoxia                     133
+\definecharacter greekiotadasiatonos               134
+\definecharacter greekiotapsilitonos               135
+\definecharacter greekiotavaria                    136
+\definecharacter greekiotadasiavaria               137
+\definecharacter greekiotapsilivaria               138
+\definecharacter greekiotaperispomeni              139
+\definecharacter greekiotadasiaperispomeni         140
+\definecharacter greekiotapsiliperispomeni         141
+\definecharacter greekiotadialytika                142
+\definecharacter greekiotadialytikatonos           143
+\definecharacter greekiotadialytikavaria           144
+\definecharacter greekdasiaperispomeni             145
+\definecharacter greekpsiliperispomeni             146
+\definecharacter greekdasiatonos                   147
+\definecharacter greekpsilitonos                   148
+\definecharacter greekdasiavaria                   149
+\definecharacter greekpsilivaria                   150
+\definecharacter greekdialytikatonos               151
+\definecharacter greekepsilondasia                 152
+\definecharacter greekepsilonpsili                 153
+\definecharacter greekepsilonoxia                  154
+\definecharacter greekepsilondasiatonos            155
+\definecharacter greekepsilonpsilitonos            156
+\definecharacter greekepsilonvaria                 157
+\definecharacter greekepsilondasiavaria            158
+\definecharacter greekepsilonpsilivaria            159
+\definecharacter greekdialytikavaria	           160
+\definecharacter greekalphadasia                   161
+\definecharacter greekalphapsili                   162
+\definecharacter greekalphaoxia                    163
+\definecharacter greekalphadasiatonos              164
+\definecharacter greekalphapsilitonos              165
+\definecharacter greekalphavaria                   166
+\definecharacter greekalphadasiavaria              167
+\definecharacter greekalphapsilivaria              168
+\definecharacter greekalphaperispomeni             169
+\definecharacter greekalphadasiaperispomeni        170
+\definecharacter greekalphapsiliperispomeni        171
+\definecharacter greekalphaiotasubdasia            172
+\definecharacter greekalphaiotasubpsili            173
+\definecharacter greekalphaiotasubtonos            174
+\definecharacter greekalphaiotasubdasiatonos       175
+\definecharacter greekalphaiotasubpsilitonos       176
+\definecharacter greekalphaiotasubvaria            177
+\definecharacter greekalphaiotasubdasiavaria       178
+\definecharacter greekalphaiotasubpsilivaria       179
+\definecharacter greekalphaiotasubperispomeni      180
+\definecharacter greekalphaiotasubdasiaperispomeni 181
+\definecharacter greekalphaiotasubpsiliperispomeni 182
+\definecharacter greekrhodasia                     183
+\definecharacter greekrhopsili                     184
+\definecharacter greeketadasia                     185
+\definecharacter greeketapsili                     186
+\definecharacter greeketaoxia                      187
+\definecharacter greeketadasiatonos                188
+\definecharacter greeketapsilitonos                189
+\definecharacter greeketavaria                     190
+\definecharacter greeketadasiavaria                191
+\definecharacter greeketapsilivaria                192
+\definecharacter greeketaperispomeni               193
+\definecharacter greeketadasiaperispomeni          194
+\definecharacter greeketapsiliperispomeni          195
+\definecharacter textslash                         196
+\definecharacter greeketaiotasubdasia              197
+\definecharacter greeketaiotasubpsili              198
+\definecharacter greeketaiotasubtonos              199
+\definecharacter greeketaiotasubdasiatonos         200
+\definecharacter greeketaiotasubpsilitonos         201
+\definecharacter greeketaiotasubvaria              202
+\definecharacter greeketaiotasubdasiavaria         203
+\definecharacter greeketaiotasubpsilivaria         204
+\definecharacter greeketaiotasubperispomeni        205
+\definecharacter greeketaiotasubdasiaperispomeni   206
+\definecharacter greeketaiotasubpsiliperispomeni   207
+\definecharacter greekomicrondasia                 208
+\definecharacter greekomicronpsili                 209
+\definecharacter greekomicronoxia                  210
+\definecharacter greekomicrondasiatonos            211
+\definecharacter greekomicronpsilitonos            212
+\definecharacter greekomicronvaria                 213
+\definecharacter greekomicrondasiavaria            214
+\definecharacter greekomicronpsilivaria            215
+\definecharacter greekupsilondasia                 216
+\definecharacter greekupsilonpsili                 217
+\definecharacter greekupsilonoxia                  218
+\definecharacter greekupsilondasiatonos            219
+\definecharacter greekupsilonpsilitonos            220
+\definecharacter greekupsilonvaria                 221
+\definecharacter greekupsilondasiavaria            222
+\definecharacter greekupsilonpsilivaria            223
+\definecharacter greekupsilonperispomeni           224
+\definecharacter greekupsilondasiaperispomeni      225
+\definecharacter greekupsilonpsiliperispomeni      226
+\definecharacter greekupsilondiaeresis             227
+\definecharacter greekupsilondialytikatonos        228
+\definecharacter greekupsilondialytikavaria        229
+\definecharacter greekomegadasia                   230
+\definecharacter greekomegapsili                   231
+\definecharacter greekomegaoxia                    232
+\definecharacter greekomegadasiatonos              233
+\definecharacter greekomegapsilitonos              234
+\definecharacter greekomegavaria                   235
+\definecharacter greekomegadasiavaria              236
+\definecharacter greekomegapsilivaria              237
+\definecharacter greekomegaperispomeni             238
+\definecharacter greekomegadasiaperispomeni        239
+\definecharacter greekomegapsiliperispomeni        240
+\definecharacter greekomegaiotasubdasia            241
+\definecharacter greekomegaiotasubpsili            242
+\definecharacter greekomegaiotasubtonos            243
+\definecharacter greekomegaiotasubdasiatonos       244
+\definecharacter greekomegaiotasubpsilitonos       245
+\definecharacter greekomegaiotasubvaria            246
+\definecharacter greekomegaiotasubdasiavaria       247
+\definecharacter greekomegaiotasubpsilivaria       248
+\definecharacter greekomegaiotasubperispomeni      249
+\definecharacter greekomegaiotasubdasiaperispomeni 250
+\definecharacter greekomegaiotasubpsiliperispomeni 251
+\definecharacter greeknumeralsign                  254
+\definecharacter greeknumeralsignlower             255
+
+\stopencoding
+
+\startencoding[default]
+
+\definecharacter greekAlphapsili                   {\greekpsili \greekAlpha}
+\definecharacter greekAlphadasia                   {\greekdasia \greekAlpha}
+\definecharacter greekAlphapsilivaria              {\greekpsilivaria \greekAlpha}
+\definecharacter greekAlphadasiavaria              {\greekdasiavaria \greekAlpha}
+\definecharacter greekAlphapsilitonos              {\greekpsilitonos \greekAlpha}
+\definecharacter greekAlphadasiatonos              {\greekdasiatonos \greekAlpha}
+\definecharacter greekAlphapsiliperispomeni        {\greekpsiliperispomeni \greekAlpha}
+\definecharacter greekAlphadasiaperispomeni        {\greekdasiaperispomeni \greekAlpha}
+\definecharacter greekEpsilonpsili                 {\greekpsili \greekEpsilon}
+\definecharacter greekEpsilondasia                 {\greekdasia \greekEpsilon}
+\definecharacter greekEpsilonpsilivaria            {\greekpsilivaria \greekEpsilon}
+\definecharacter greekEpsilondasiavaria            {\greekdasiavaria \greekEpsilon}
+\definecharacter greekEpsilonpsilitonos            {\greekpsilitonos \greekEpsilon}
+\definecharacter greekEpsilondasiatonos            {\greekdasiatonos \greekEpsilon}
+\definecharacter greekEtapsili                     {\greekpsili \greekEta}
+\definecharacter greekEtadasia                     {\greekdasia \greekEta}
+\definecharacter greekEtapsilivaria                {\greekpsilivaria \greekEta}
+\definecharacter greekEtadasiavaria                {\greekdasiavaria \greekEta}
+\definecharacter greekEtapsilitonos                {\greekpsilitonos \greekEta}
+\definecharacter greekEtadasiatonos                {\greekdasiatonos \greekEta}
+\definecharacter greekEtapsiliperispomeni          {\greekpsiliperispomeni \greekEta}
+\definecharacter greekEtadasiaperispomeni          {\greekdasiaperispomeni \greekEta}
+\definecharacter greekIotapsili                    {\greekpsili \greekIota}
+\definecharacter greekIotadasia                    {\greekdasia \greekIota}
+\definecharacter greekIotapsilivaria               {\greekpsilivaria \greekIota}
+\definecharacter greekIotadasiavaria               {\greekdasiavaria \greekIota}
+\definecharacter greekIotapsilitonos               {\greekpsilitonos \greekIota}
+\definecharacter greekIotadasiatonos               {\greekdasiatonos \greekIota}
+\definecharacter greekIotapsiliperispomeni         {\greekpsiliperispomeni \greekIota}
+\definecharacter greekIotadasiaperispomeni         {\greekdasiaperispomeni \greekIota}
+\definecharacter greekOmicronpsili                 {\greekpsili \greekOmicron}
+\definecharacter greekOmicrondasia                 {\greekdasia \greekOmicron}
+\definecharacter greekOmicronpsilivaria            {\greekpsilivaria \greekOmicron}
+\definecharacter greekOmicrondasiavaria            {\greekdasiavaria \greekOmicron}
+\definecharacter greekOmicronpsilitonos            {\greekpsilitonos \greekOmicron}
+\definecharacter greekOmicrondasiatonos            {\greekdasiatonos \greekOmicron}
+\definecharacter greekUpsilondasia                 {\greekdasia \greekUpsilon}
+\definecharacter greekUpsilondasiavaria            {\greekdasiavaria \greekUpsilon}
+\definecharacter greekUpsilondasiatonos            {\greekdasiatonos \greekUpsilon}
+\definecharacter greekUpsilondasiaperispomeni      {\greekdasiaperispomeni \greekUpsilon}
+\definecharacter greekOmegapsili                   {\greekpsili \greekOmega}
+\definecharacter greekOmegadasia                   {\greekdasia \greekOmega}
+\definecharacter greekOmegapsilivaria              {\greekpsilivaria \greekOmega}
+\definecharacter greekOmegadasiavaria              {\greekdasiavaria \greekOmega}
+\definecharacter greekOmegapsilitonos              {\greekpsilitonos \greekOmega}
+\definecharacter greekOmegadasiatonos              {\greekdasiatonos \greekOmega}
+\definecharacter greekOmegapsiliperispomeni        {\greekpsiliperispomeni \greekOmega}
+\definecharacter greekOmegadasiaperispomeni        {\greekdasiaperispomeni \greekOmega}
+\definecharacter greekAlphaiotasubpsili            {\greekpsili \greekAlpha \greekiota}
+\definecharacter greekAlphaiotasubdasia            {\greekdasia \greekAlpha \greekiota}
+\definecharacter greekAlphaiotasubpsilivaria       {\greekpsilivaria \greekAlpha \greekiota}
+\definecharacter greekAlphaiotasubdasiavaria       {\greekdasiavaria \greekAlpha \greekiota}
+\definecharacter greekAlphaiotasubpsilitonos       {\greekpsilitonos \greekAlpha \greekiota}
+\definecharacter greekAlphaiotasubdasiatonos       {\greekdasiatonos \greekAlpha \greekiota}
+\definecharacter greekAlphaiotasubpsiliperispomeni {\greekpsiliperispomeni \greekAlpha \greekiota}
+\definecharacter greekAlphaiotasubdasiaperispomeni {\greekdasiaperispomeni \greekAlpha \greekiota}
+\definecharacter greekEtaiotasubpsili              {\greekpsili \greekEta \greekiota}
+\definecharacter greekEtaiotasubdasia              {\greekdasia \greekEta \greekiota}
+\definecharacter greekEtaiotasubpsilivaria         {\greekpsilivaria \greekEta \greekiota}
+\definecharacter greekEtaiotasubdasiavaria         {\greekdasiavaria \greekEta \greekiota}
+\definecharacter greekEtaiotasubpsilitonos         {\greekpsilitonos \greekEta \greekiota}
+\definecharacter greekEtaiotasubdasiatonos         {\greekdasiatonos \greekEta \greekiota}
+\definecharacter greekEtaiotasubpsiliperispomeni   {\greekpsiliperispomeni \greekEta \greekiota}
+\definecharacter greekEtaiotasubdasiaperispomeni   {\greekdasiaperispomeni \greekEta \greekiota}
+\definecharacter greekOmegaiotasubpsili            {\greekpsili \greekOmega \greekiota}
+\definecharacter greekOmegaiotasubdasia            {\greekdasia \greekOmega \greekiota}
+\definecharacter greekOmegaiotasubpsilivaria       {\greekpsilivaria \greekOmega \greekiota}
+\definecharacter greekOmegaiotasubdasiavaria       {\greekdasiavaria \greekOmega \greekiota}
+\definecharacter greekOmegaiotasubpsilitonos       {\greekpsilitonos \greekOmega \greekiota}
+\definecharacter greekOmegaiotasubdasiatonos       {\greekdasiatonos \greekOmega \greekiota}
+\definecharacter greekOmegaiotasubpsiliperispomeni {\greekpsiliperispomeni \greekOmega \greekiota}
+\definecharacter greekOmegaiotasubdasiaperispomeni {\greekdasiaperispomeni \greekOmega \greekiota}
+\definecharacter greekAlphavaria                   {\greekvaria \greekAlpha}
+\definecharacter greekAlphaoxia                    {\greekoxia \greekAlpha}
+\definecharacter greekAlphaiotasub                 {\greekAlpha \greekiota}
+\definecharacter greekEpsilonvaria                 {\greekvaria \greekEpsilon}
+\definecharacter greekEpsilonoxia                  {\greekoxia \greekEpsilon}
+\definecharacter greekEtavaria                     {\greekvaria \greekEta}
+\definecharacter greekEtaoxia                      {\greekoxia \greekEta}
+\definecharacter greekEtaiotasub                   {\greekEta \greekiota}
+\definecharacter greekIotavaria                    {\greekvaria \greekIota}
+\definecharacter greekIotaoxia                     {\greekoxia \greekIota}
+\definecharacter greekUpsilonvaria                 {\greekvaria \greekUpsilon}
+\definecharacter greekUpsilonoxia                  {\greekoxia \greekUpsilon}
+\definecharacter greekOmicronvaria                 {\greekvaria \greekOmicron}
+\definecharacter greekOmicronoxia                  {\greekoxia \greekOmicron}
+\definecharacter greekOmegavaria                   {\greekvaria \greekOmega}
+\definecharacter greekOmegaoxia                    {\greekoxia \greekOmega}
+\definecharacter greekOmegaiotasub                 {\greekOmega \greekiota}
+\definecharacter greekRhodasia                     {\greekdasia \greekRho}
+\definecharacter digamma                           {\greekdigamma}
+\definecharacter sampi                             {\greeksampi}
+\definecharacter stigma                            {\greekstigma}
+\definecharacter koppa                             {\greeknumkoppa}
+\definecharacter lunars                            {\greeksigmalunate}
+\definecharacter lunarS                            {\greekSigmalunate}
+\definecharacter halfbraceleft                     {\floorleft}
+\definecharacter halfbraceright                    {\floorright}
+\definecharacter crux                              {\textdag}
+
+\stopencoding
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-ans.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-ans.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-ans.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,237 @@
+%D \module
+%D   [     file=enco-ans,
+%D      version=2000.05.07, % 1995.01.01,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=\YandY\ texnansi Encoding,
+%D       author={Patrick Gundlach, Hans Hagen},
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This is \YandY's texnansi encoding vector, which combines
+%D the best of the ansi encoding vector (prebuilt accented
+%D characters etc.) and some of \TEX's vectors.
+
+\startmapping[texnansi]
+
+\resetcaserange 128 to 158
+\resetcaserange 160 to 191
+\resetcaserange 215 to 215
+\resetcaserange 247 to 247
+
+\definecasemaps 192 to 214 lc +32 uc   0
+\definecasemaps 224 to 246 lc   0 uc -32
+\definecasemaps 216 to 222 lc +32 uc   0
+\definecasemaps 248 to 254 lc   0 uc -32
+
+\definecaseself 223
+\definecaseswap 156 140
+\definecaseswap 255 159
+
+% needed by some patterns:
+
+% \definecaseself  34 % quotedbl
+% \definecaseself 132 % quotedblbase
+% \definecaseself 147 % quotedblleft
+% \definecaseself 148 % quotedblright
+% \definecaseself 129 % quotesingle
+% \definecaseself 130 % quotesinglebase
+% \definecaseself 145 % quoteleft
+\definecaseself 146 % quoteright
+
+\stopmapping
+
+\startencoding[texnansi]
+
+\definecharacter textacute         19
+\definecharacter textbreve         21
+\definecharacter textcaron         20
+\definecharacter textcedilla      184
+\definecharacter textcircumflex    94 % 136
+\definecharacter textdiaeresis    168
+\definecharacter textdotaccent      5
+\definecharacter textgrave         18
+\definecharacter texthungarumlaut   6
+\definecharacter textmacron       175
+\definecharacter textogonek         7
+\definecharacter textring          23
+\definecharacter texttilde        152
+
+\definecharacter dotlessi          16 % 105
+\definecharacter dotlessj          17
+
+\definecharacter endash           150 % lig
+\definecharacter emdash           151 % lig
+
+\definecharacter aeligature       230
+\definecharacter AEligature       198
+\definecharacter oeligature       156
+\definecharacter OEligature       140
+
+\definecharacter ssharp           223
+
+\definecharacter thorn            254
+\definecharacter Thorn            222
+
+\definecharacter Dstroke          208 % also Eth, mapped in enco-def
+\definecharacter eth              240
+
+\definecharacter exclamdown       161
+\definecharacter questiondown     191
+
+\definecharacter copyright        169
+\definecharacter registered       174
+\definecharacter trademark        153
+
+\definecharacter sectionmark      167
+\definecharacter paragraphmark    182
+
+\definecharacter onequarter       188
+\definecharacter onehalf          189
+\definecharacter threequarter     190
+
+\definecharacter onesuperior      185
+\definecharacter twosuperior      178
+\definecharacter threesuperior    179
+
+\definecharacter textcent         162 % ?
+\definecharacter textcurrency     164
+\definecharacter texteuro           1
+\definecharacter textflorin       131
+\definecharacter textsterling     163
+\definecharacter textyen          165
+
+\definecharacter percent           37
+\definecharacter perthousand      137
+
+\definecharacter softhyphen        45
+\definecharacter periodcentered   183
+
+\definecharacter textasciicircum  142
+\definecharacter textasciitilde   158
+\definecharacter textbackslash     92
+\definecharacter textbraceleft    123
+\definecharacter textbar          124
+\definecharacter textbraceright   125
+\definecharacter textunderscore    95
+
+\definecharacter textbrokenbar    166
+\definecharacter textbullet       149
+\definecharacter textdag          134
+\definecharacter textddag         135
+\definecharacter textdegree       176
+\definecharacter textdiv          247
+\definecharacter textellipsis     133
+\definecharacter textfraction       4
+\definecharacter textlognot       172
+\definecharacter textminus        143
+\definecharacter textmu           181
+\definecharacter textmultiply     215
+\definecharacter textpm           177
+
+\definecharacter quotedbl          34
+\definecharacter quotedblbase     132
+\definecharacter quotedblleft     147
+\definecharacter quotedblright    148
+
+\definecharacter quotesingle      129
+\definecharacter quotesinglebase  130
+
+\definecharacter quoteleft        145
+\definecharacter quoteright       146
+
+\definecharacter guilsingleleft   139
+\definecharacter guilsingleright  155
+\definecharacter leftguillemot    171
+\definecharacter rightguillemot   187
+
+\definecharacter aacute           225
+\definecharacter Aacute           193
+\definecharacter eacute           233
+\definecharacter Eacute           201
+\definecharacter iacute           237
+\definecharacter Iacute           205
+\definecharacter oacute           243
+\definecharacter Oacute           211
+\definecharacter uacute           250
+\definecharacter Uacute           218
+\definecharacter yacute           253
+\definecharacter Yacute           221
+
+\definecharacter scaron           154
+\definecharacter Scaron           138
+\definecharacter zcaron           157
+\definecharacter Zcaron           141
+
+\definecharacter ccedilla         231
+\definecharacter Ccedilla         199
+
+\definecharacter acircumflex      226
+\definecharacter Acircumflex      194
+\definecharacter ecircumflex      234
+\definecharacter Ecircumflex      202
+\definecharacter icircumflex      238
+\definecharacter Icircumflex      206
+\definecharacter ocircumflex      244
+\definecharacter Ocircumflex      212
+\definecharacter ucircumflex      251
+\definecharacter Ucircumflex      219
+
+\definecharacter adiaeresis       228
+\definecharacter Adiaeresis       196
+\definecharacter ediaeresis       235
+\definecharacter Ediaeresis       203
+\definecharacter idiaeresis       239
+\definecharacter Idiaeresis       207
+\definecharacter odiaeresis       246
+\definecharacter Odiaeresis       214
+\definecharacter udiaeresis       252
+\definecharacter Udiaeresis       220
+\definecharacter ydiaeresis       255
+\definecharacter Ydiaeresis       159
+
+\definecharacter agrave           224
+\definecharacter Agrave           192
+\definecharacter egrave           232
+\definecharacter Egrave           200
+\definecharacter igrave           236
+\definecharacter Igrave           204
+\definecharacter ograve           242
+\definecharacter Ograve           210
+\definecharacter ugrave           249
+\definecharacter Ugrave           217
+
+\definecharacter aring            229
+\definecharacter Aring            197
+
+\definecharacter Lstroke          128
+\definecharacter lstroke          144
+\definecharacter ostroke          248
+\definecharacter Ostoke           216
+
+\definecharacter atilde           227
+\definecharacter Atilde           195
+\definecharacter ntilde           241
+\definecharacter Ntilde           209
+\definecharacter otilde           245
+\definecharacter Otilde           213
+
+\stopencoding
+
+% will be replaced by math collection, fails anyway
+
+\startencoding[texnansi]
+
+\definecharacter mathgrave       "7060
+\definecharacter mathacute       "70B4
+\definecharacter mathhat         "7088
+\definecharacter mathtilde       "7098
+\definecharacter mathddot        "70A8
+\definecharacter mathbar         "70AF
+
+\stopencoding
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-cas.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-cas.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-cas.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,143 @@
+%D \module
+%D   [     file=enco-cas,
+%D      version=2005.08.23,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Named Glyph Case Mapping,
+%D       author=Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D For quite some years \CONTEXT\ used a rather compact way of
+%D defining encoded characters as well as case maps. When late
+%D 2000 more advanced remapping features were needed (like pdf
+%D unicode remapping), named glyphs were introduced to keep the
+%D coding tables more readable. At the same time, we introduced
+%D named glyph case mapping.
+
+\defineULcharacter Acircumflex acircumflex
+\defineULcharacter Ccircumflex ccircumflex
+\defineULcharacter Ecircumflex ecircumflex
+\defineULcharacter Gcircumflex gcircumflex
+\defineULcharacter Hcircumflex hcircumflex
+\defineULcharacter Icircumflex icircumflex
+\defineULcharacter Jcircumflex jcircumflex
+\defineULcharacter Ocircumflex ocircumflex
+\defineULcharacter Scircumflex scircumflex
+\defineULcharacter Ucircumflex ucircumflex
+\defineULcharacter Wcircumflex wcircumflex
+\defineULcharacter Ycircumflex ycircumflex
+
+\defineULcharacter Agrave agrave
+\defineULcharacter Egrave egrave
+\defineULcharacter Igrave igrave
+\defineULcharacter Ograve ograve
+\defineULcharacter Ugrave ugrave
+\defineULcharacter Ygrave ygrave
+
+\defineULcharacter Atilde atilde
+\defineULcharacter Itilde itilde
+\defineULcharacter Otilde otilde
+\defineULcharacter Ntilde ntilde
+\defineULcharacter Utilde utilde
+
+\defineULcharacter Adiaeresis adiaeresis
+\defineULcharacter Ediaeresis ediaeresis
+\defineULcharacter Idiaeresis idiaeresis
+\defineULcharacter Odiaeresis odiaeresis
+\defineULcharacter Udiaeresis udiaeresis
+\defineULcharacter Ydiaeresis ydiaeresis
+
+\defineULcharacter Aacute aacute
+\defineULcharacter Cacute cacute
+\defineULcharacter Eacute eacute
+\defineULcharacter Iacute iacute
+\defineULcharacter Lacute lacute
+\defineULcharacter Nacute nacute
+\defineULcharacter Oacute oacute
+\defineULcharacter Racute racute
+\defineULcharacter Sacute sacute
+\defineULcharacter Uacute uacute
+\defineULcharacter Yacute yacute
+\defineULcharacter Zacute zacute
+
+\defineULcharacter Dstroke dstroke
+\defineULcharacter Hstroke hstroke
+\defineULcharacter Lstroke lstroke
+\defineULcharacter Lslash  lslash
+\defineULcharacter Ostroke ostroke
+\defineULcharacter Tstroke tstroke
+
+\defineULcharacter Cdotaccent cdotaccent
+\defineULcharacter Edotaccent edotaccent
+\defineULcharacter Gdotaccent gdotaccent
+\defineULcharacter Idotaccent idotaccent
+\defineULcharacter Zdotaccent zdotaccent
+
+\defineULcharacter Amacron amacron
+\defineULcharacter Emacron emacron
+\defineULcharacter Imacron imacron
+\defineULcharacter Omacron omacron
+\defineULcharacter Umacron umacron
+
+\defineULcharacter Ccedilla ccedilla
+\defineULcharacter Gcedilla gcedilla
+\defineULcharacter Kcedilla kcedilla
+\defineULcharacter Lcedilla lcedilla
+\defineULcharacter Ncedilla ncedilla
+\defineULcharacter Rcedilla rcedilla
+\defineULcharacter Scedilla scedilla
+\defineULcharacter Tcedilla tcedilla
+
+\defineULcharacter Ccommaaccent ccommaaccent
+\defineULcharacter Gcommaaccent gcommaaccent
+\defineULcharacter Kcommaaccent kcommaaccent
+\defineULcharacter Lcommaaccent lcommaaccent
+\defineULcharacter Ncommaaccent ncommaaccent
+\defineULcharacter Rcommaaccent rcommaaccent
+\defineULcharacter Scommaaccent scommaaccent
+\defineULcharacter Tcommaaccent tcommaaccent
+
+\defineULcharacter Ohungarumlaut ohungarumlaut
+\defineULcharacter Uhungarumlaut uhungarumlaut
+
+\defineULcharacter Aogonek aogonek
+\defineULcharacter Eogonek eogonek
+\defineULcharacter Iogonek iogonek
+\defineULcharacter Uogonek uogonek
+
+\defineULcharacter Aring aring
+\defineULcharacter Uring uring
+
+\defineULcharacter Abreve abreve
+\defineULcharacter Ebreve ebreve
+\defineULcharacter Gbreve gbreve
+\defineULcharacter Ibreve ibreve
+\defineULcharacter Obreve obreve
+\defineULcharacter Ubreve ubreve
+
+\defineULcharacter Ccaron ccaron
+\defineULcharacter Dcaron dcaron
+\defineULcharacter Ecaron ecaron
+\defineULcharacter Lcaron lcaron
+\defineULcharacter Ncaron ncaron
+\defineULcharacter Rcaron rcaron
+\defineULcharacter Scaron scaron
+\defineULcharacter Tcaron tcaron
+\defineULcharacter Zcaron zcaron
+
+\defineULcharacter dotlessI dotlessi
+\defineULcharacter dotlessJ dotlessj
+
+\defineULcharacter AEligature aeligature
+\defineULcharacter OEligature oeligature
+\defineULcharacter Ssharp     ssharp
+\defineULcharacter IJligature ijligature
+
+\defineULcharacter Eth   eth
+\defineULcharacter Thorn thorn
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-chi.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-chi.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-chi.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,371 @@
+%D \module
+%D   [     file=enco-chi,
+%D      version=1999.12.02,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Traditional and Simplified Chinese,
+%D       author={Wang Lei \& Hans Hagen},
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% actually this is also a filter -> enco-fcn.tex
+
+%D This is an experimental definition. Since we are dealing
+%D with unicode's, the registered values are not saved, so
+%D actually we're dealing with an pseudo encoding. The digits
+%D on the other hand are encoding specific.
+
+% chinese classes: left=1|right=2|center=3
+
+% untested, probably wrong
+
+\startencoding[cjk-uni]
+
+\defineuclass 1  32 24
+\defineuclass 1  32 28
+\defineuclass 1  48 20
+\defineuclass 1  48  8
+\defineuclass 1  48 10
+\defineuclass 1  48 12
+\defineuclass 1  48 14
+\defineuclass 1  48 22
+\defineuclass 1  48 16
+\defineuclass 1 255  8
+\defineuclass 1 255 59
+\defineuclass 1 255 64
+\defineuclass 1 255 91
+
+\defineuclass 3   0 183
+\defineuclass 3   0 168
+\defineuclass 3  32  38
+\defineuclass 3 255  30
+
+\defineuclass 2  48   1
+\defineuclass 2  48   2
+\defineuclass 2  32  20
+\defineuclass 2 255  94
+\defineuclass 2  32  25
+\defineuclass 2  32  29
+\defineuclass 2  48  21
+\defineuclass 2  48   9
+\defineuclass 2  48  11
+\defineuclass 2  48  13
+\defineuclass 2  48  15
+\defineuclass 2  48  23
+\defineuclass 2  48  17
+\defineuclass 2  34  55
+\defineuclass 2   0 176
+\defineuclass 2  32  50
+\defineuclass 2  32  51
+\defineuclass 2 255   1
+\defineuclass 2 255   2
+\defineuclass 2 255   7
+\defineuclass 2 255   9
+\defineuclass 2 255  12
+\defineuclass 2 255  14
+\defineuclass 2 255  26
+\defineuclass 2 255  27
+\defineuclass 2 255  31
+\defineuclass 2 255  61
+\defineuclass 2 255  93
+
+\defineudigit         0   37 203
+\defineudigit         1   78   0
+\defineudigit         2   78 140
+\defineudigit         3   78   9
+\defineudigit         4   86 219
+\defineudigit         5   78 148
+\defineudigit         6   81 109
+\defineudigit         7   78   3
+\defineudigit         8   81 107
+\defineudigit         9   78  93
+\defineudigit        10   83  65
+\defineudigit       100  118 126
+\defineudigit      1000   83  67
+\defineudigit     10000   78   7
+\defineudigit 100000000   78 191
+
+\defineudigit         0* 150 246
+\defineudigit         1*  88 249
+\defineudigit         2* 141  48
+\defineudigit         3*  83 193
+\defineudigit         4* 128 134
+\defineudigit         5*  79  13
+\defineudigit         6* 150  70
+\defineudigit         7* 103 210
+\defineudigit         8*  99  76
+\defineudigit         9* 115 150
+\defineudigit        10*  98 254
+\defineudigit       100*  79 112
+\defineudigit      1000*  78 223
+\defineudigit     10000* 132  44
+\defineudigit 100000000*  78 191
+
+\defineudigit 20 94 255
+\defineudigit 21 78   0
+\defineudigit 22 78 140
+\defineudigit 23 78   9
+\defineudigit 24 86 219
+\defineudigit 25 78 148
+\defineudigit 26 81 109
+\defineudigit 27 78   3
+\defineudigit 28 81 107
+\defineudigit 29 78  93
+
+\defineudigit 30 83  69
+\defineudigit 31 78   0
+\defineudigit 32 78 140
+\defineudigit 33 78   9
+\defineudigit 34 86 219
+\defineudigit 35 78 148
+\defineudigit 36 81 109
+\defineudigit 37 78   3
+\defineudigit 38 81 107
+\defineudigit 39 78  93
+
+\stopencoding
+
+% \doif \currentregime {utf} \endinput
+
+\startencoding[big5]
+
+\defineuclass 1 161  93
+\defineuclass 1 161  95
+\defineuclass 1 161  97
+\defineuclass 1 161  99
+\defineuclass 1 161 101
+\defineuclass 1 161 103
+\defineuclass 1 161 105
+\defineuclass 1 161 107
+\defineuclass 1 161 111
+\defineuclass 1 161 111
+\defineuclass 1 161 113
+\defineuclass 1 161 115
+\defineuclass 1 161 117
+\defineuclass 1 161 119
+\defineuclass 1 161 121
+\defineuclass 1 161 123
+\defineuclass 1 161 125
+\defineuclass 1 161 161
+\defineuclass 1 161 163
+\defineuclass 1 161 165
+\defineuclass 1 161 167
+\defineuclass 1 161 169
+\defineuclass 1 161 171
+
+\defineuclass 3 161  69
+\defineuclass 3 161  75
+\defineuclass 3 161  76
+
+\defineuclass 2 161  65
+\defineuclass 2 161  66
+\defineuclass 2 161  67
+\defineuclass 2 161  68
+\defineuclass 2 161  70
+\defineuclass 2 161  71
+\defineuclass 2 161  72
+\defineuclass 2 161  73
+\defineuclass 2 161  74
+\defineuclass 2 161  77
+\defineuclass 2 161  78
+\defineuclass 2 161  79
+\defineuclass 2 161  80
+\defineuclass 2 161  81
+\defineuclass 2 161  82
+\defineuclass 2 161  83
+\defineuclass 2 161  84
+\defineuclass 2 161  88
+\defineuclass 2 161  94
+\defineuclass 2 161  96
+\defineuclass 2 161  98
+\defineuclass 2 161 100
+\defineuclass 2 161 102
+\defineuclass 2 161 104
+\defineuclass 2 161 106
+\defineuclass 2 161 108
+\defineuclass 2 161 110
+\defineuclass 2 161 112
+\defineuclass 2 161 114
+\defineuclass 2 161 116
+\defineuclass 2 161 118
+\defineuclass 2 161 120
+\defineuclass 2 161 122
+\defineuclass 2 161 124
+\defineuclass 2 161 126
+\defineuclass 2 161 162
+\defineuclass 2 161 164
+\defineuclass 2 161 166
+\defineuclass 2 161 168
+\defineuclass 2 161 170
+\defineuclass 2 161 172
+\defineuclass 2 161 196
+\defineuclass 2 161 227
+\defineuclass 2 162  88
+\defineuclass 2 163 223
+
+\defineudigit         0  162 179
+\defineudigit         1  164  64
+\defineudigit         2  164  71
+\defineudigit         3  164  84
+\defineudigit         4  165 124
+\defineudigit         5  164 173
+\defineudigit         6  164 187
+\defineudigit         7  164  67
+\defineudigit         8  164  75
+\defineudigit         9  164  69
+\defineudigit        10  164  81
+\defineudigit       100  166 202
+\defineudigit      1000  164 100
+\defineudigit     10000  201  69
+\defineudigit 100000000  187 245
+
+\defineudigit         0* 185 115
+\defineudigit         1* 179 252
+\defineudigit         2* 182  76
+\defineudigit         3* 176 209
+\defineudigit         4* 184 118
+\defineudigit         5* 165 238
+\defineudigit         6* 179 176
+\defineudigit         7* 172 110
+\defineudigit         8* 174 195
+\defineudigit         9* 168 104
+\defineudigit        10* 172  66
+\defineudigit       100* 168 213
+\defineudigit      1000* 165  97
+\defineudigit     10000* 184  85
+\defineudigit 100000000* 187 245
+
+\defineudigit        20  164 220
+\defineudigit        21  164  64
+\defineudigit        22  164  71
+\defineudigit        23  164  84
+\defineudigit        24  165 124
+\defineudigit        25  164 173
+\defineudigit        26  164 187
+\defineudigit        27  164  67
+\defineudigit        28  164  75
+\defineudigit        29  164  69
+
+\defineudigit        30  164 202
+\defineudigit        31  164  64
+\defineudigit        32  164  71
+\defineudigit        33  164  84
+\defineudigit        34  165 124
+\defineudigit        35  164 173
+\defineudigit        36  164 187
+\defineudigit        37  164  67
+\defineudigit        38  164  75
+\defineudigit        39  164  69
+
+\stopencoding
+
+\startencoding[gbk]
+
+\defineuclass 1 161 174
+\defineuclass 1 161 176
+\defineuclass 1 161 178
+\defineuclass 1 161 180
+\defineuclass 1 161 182
+\defineuclass 1 161 184
+\defineuclass 1 161 186
+\defineuclass 1 161 188
+\defineuclass 1 161 190
+\defineuclass 1 163 168
+\defineuclass 1 163 219
+\defineuclass 1 163 224
+\defineuclass 1 163 251
+
+\defineuclass 3 161 164
+\defineuclass 3 161 167
+\defineuclass 3 161 173
+\defineuclass 3 163 190
+
+\defineuclass 2 161 162
+\defineuclass 2 161 163
+\defineuclass 2 161 170
+\defineuclass 2 161 171
+\defineuclass 2 161 175
+\defineuclass 2 161 177
+\defineuclass 2 161 179
+\defineuclass 2 161 181
+\defineuclass 2 161 183
+\defineuclass 2 161 185
+\defineuclass 2 161 187
+\defineuclass 2 161 189
+\defineuclass 2 161 191
+\defineuclass 2 161 203
+\defineuclass 2 161 227
+\defineuclass 2 161 228
+\defineuclass 2 161 229
+\defineuclass 2 163 161
+\defineuclass 2 163 162
+\defineuclass 2 163 167
+\defineuclass 2 163 169
+\defineuclass 2 163 172
+\defineuclass 2 163 174
+\defineuclass 2 163 186
+\defineuclass 2 163 187
+\defineuclass 2 163 191
+\defineuclass 2 163 221
+\defineuclass 2 163 253
+
+\defineudigit         0  161 240
+\defineudigit         1  210 187
+\defineudigit         2  182 254
+\defineudigit         3  200 253
+\defineudigit         4  203 196
+\defineudigit         5  206 229
+\defineudigit         6  193 249
+\defineudigit         7  198 223
+\defineudigit         8  176 203
+\defineudigit         9  190 197
+\defineudigit        10  202 174
+\defineudigit       100  176 217
+\defineudigit      1000  199 167
+\defineudigit     10000  205 242
+\defineudigit 100000000  210 218
+
+\defineudigit         0* 193 227
+\defineudigit         1* 210 188
+\defineudigit         2* 183 161
+\defineudigit         3* 200 254
+\defineudigit         4* 203 193
+\defineudigit         5* 206 233
+\defineudigit         6* 194 189
+\defineudigit         7* 198 226
+\defineudigit         8* 176 198
+\defineudigit         9* 190 193
+\defineudigit        10* 202 176
+\defineudigit       100* 176 219
+\defineudigit      1000* 199 170
+\defineudigit     10000* 200 102
+\defineudigit 100000000* 210 218
+
+\defineudigit        20  216 165
+\defineudigit        21  210 187
+\defineudigit        22  182 254
+\defineudigit        23  200 253
+\defineudigit        24  203 196
+\defineudigit        25  206 229
+\defineudigit        26  193 249
+\defineudigit        27  198 223
+\defineudigit        28  176 203
+\defineudigit        29  190 197
+
+\defineudigit        30  216 166
+\defineudigit        31  210 187
+\defineudigit        32  182 254
+\defineudigit        33  200 253
+\defineudigit        34  203 196
+\defineudigit        35  206 229
+\defineudigit        36  193 249
+\defineudigit        37  198 223
+\defineudigit        38  176 203
+\defineudigit        39  190 197
+
+\stopencoding
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-com.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-com.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-com.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,37 @@
+%D \module
+%D   [     file=enco-com,
+%D      version=2000.20.12, % split from base file 
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Composed Characters Commands,
+%D       author=Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for 
+%C details. 
+
+%D Here we map some \quote {short} names onto the more 
+%D verbose glyph names. 
+
+\def\AA{\Aring}
+\def\aa{\aring}
+\def\AE{\AEligature}
+\def\ae{\aeligature}
+\def\CC{\Ccedilla}
+\def\cc{\ccedilla}
+\def \L{\Lstroke}
+\def \l{\lstroke}
+\def \O{\Ostroke}
+\def \o{\ostroke}
+\def\OE{\OEligature}
+\def\oe{\oeligature}
+\def\SZ{\Ssharp}
+\def\sz{\ssharp}
+\def\SS{\ssharp}
+\def\IJ{\IJligature}
+\def\ij{\ijligature}
+\def \i{\dotlessi}
+\def \j{\dotlessj}
+
+\endinput 

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-cyr.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-cyr.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-cyr.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,1037 @@
+%D \module
+%D   [       file=enco-cyr,
+%D        version=2003.01.24,
+%D          title=\CONTEXT\ Encoding Macros,
+%D       subtitle=Cyrillic,
+%D         author=...,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D The following kerning test is inspired by a test file
+%D provided by Victor Figurnov. I hope he still recognizes
+%D some bit and pieces.
+%D
+%D \starttyping
+%D \setupoutput[pdftex]
+%D
+%D \startMPenvironment[global]
+%D   \useregime[cyr]
+%D   \useencoding[cyr]
+%D   \mainlanguage[ru]
+%D   \enableregime[cp1251]
+%D   \setupbodyfont[cyr]
+%D \stopMPenvironment
+%D
+%D \startbuffer
+%D \starttabulate[|l|l|l|]
+%D \NC \ruledhbox{\xC3\xE4\xE5}          \NC \ruledhbox{AV}        \NC with kerning    \NC \NR
+%D \NC \ruledhbox{\xC3{}\xE4{}\xE5}      \NC \ruledhbox{A{}V}      \NC without kerning \NC \NR
+%D \NC \ruledhbox{\tfd \xC3\xE4\xE5}     \NC \ruledhbox{\tfd AV}   \NC with kerning    \NC \NR
+%D \NC \ruledhbox{\tfd \xC3{}\xE4{}\xE5} \NC \ruledhbox{\tfd A{}V} \NC without kerning \NC \NR
+%D \stoptabulate
+%D
+%D \showkerning{\xCA\xE0\xEA \xF1\xE4\xE5\xEB\xE0\xF2\xFC \xE4\xEE\xEA\xF3\xEC\xE5\xED\xF2}
+%D \stopbuffer
+%D
+%D \starttext
+%D
+%D \title{Kerning test}
+%D
+%D \typebuffer
+%D
+%D \rm \subject{Serif      font} \getbuffer
+%D \ss \subject{SansSerif  font} \getbuffer
+%D \tt \subject{MonoSpacec font} \getbuffer
+%D
+%D \stoptext
+%D \stoptyping
+
+%D We start with a fallback, define by HH, who assumes that
+%D this is phonetic.
+
+\startmapping[t2a]
+
+\resetcaserange 128 to 255
+
+\definecasemaps 192 to 223 lc +32 uc   0  % base letters (russian)
+\definecasemaps 224 to 255 lc   0 uc -32
+
+\definecasemaps 128 to 156 lc +32 uc   0  % extra letters (cyrillic and old-slav)
+\definecasemaps 160 to 188 lc   0 uc -32
+
+\definecasemap 73 105 73  \definecasemap 105 105 73  % cyrillicII
+\definecasemap 74 106 74  \definecasemap 106 106 74  % cyrillicJE
+\definecasemap 81 113 81  \definecasemap 113 113 81  % cyrillicQ
+\definecasemap 87 119 87  \definecasemap 119 119 87  % cyrillicW
+
+\stopmapping
+
+\startencoding[t2a]
+
+\definecharacter textgrave                   0
+\definecharacter textacute                   1
+\definecharacter textcircumflex              2
+\definecharacter texttilde                   3
+\definecharacter textdiaeresis               4
+\definecharacter texthungarumlaut            5
+\definecharacter textring                    6
+\definecharacter textcaron                   7
+\definecharacter textbreve                   8
+\definecharacter textmacron                  9
+\definecharacter textdotaccent              10
+\definecharacter textcedilla                11
+\definecharacter textogonek                 12
+
+\definecharacter textcyrillicflex           18
+\definecharacter textdblgrave               19
+\definecharacter textcyrillicbreve          20
+
+\definecharacter endash                     21
+\definecharacter emdash                     22
+
+\definecharacter textcompwordmark           23
+\definecharacter textbackslash              92
+\definecharacter textasciicircum            94
+\definecharacter textunderscore             95
+\definecharacter textbraceleft             123
+\definecharacter textbraceright            125
+\definecharacter textasciitilde            126
+\definecharacter textnumero                157
+\definecharacter textcurrency              158
+\definecharacter sectionmark               159
+
+\definecharacter quotedbl                   34
+\definecharacter quoteleft                  96
+\definecharacter upperleftsingleninequote   39
+\definecharacter quotedblleft               16
+\definecharacter quotedblright              17
+\definecharacter lowerleftdoubleninequote  189
+\definecharacter upperrightdoublesixquote   16
+\definecharacter upperrightdoubleninequote  17
+\definecharacter quotedblbase              189
+
+\definecharacter cyrillicpalochka           13
+\definecharacter cyrilliclangle             14
+\definecharacter cyrillicrangle             15
+
+\definecharacter leftguillemot             190
+\definecharacter rightguillemot            191
+\definecharacter dotlessi                   25
+
+\definecharacter cyrillicA                 192
+\definecharacter cyrillica                 224
+\definecharacter cyrillicB                 193
+\definecharacter cyrillicb                 225
+\definecharacter cyrillicV                 194
+\definecharacter cyrillicv                 226
+\definecharacter cyrillicG                 195
+\definecharacter cyrillicg                 227
+\definecharacter cyrillicD                 196
+\definecharacter cyrillicd                 228
+\definecharacter cyrillicE                 197
+\definecharacter cyrillice                 229
+\definecharacter cyrillicZH                198
+\definecharacter cyrilliczh                230
+\definecharacter cyrillicZ                 199
+\definecharacter cyrillicz                 231
+\definecharacter cyrillicI                 200
+\definecharacter cyrillici                 232
+\definecharacter cyrillicISHRT             201
+\definecharacter cyrillicishrt             233
+\definecharacter cyrillicK                 202
+\definecharacter cyrillick                 234
+\definecharacter cyrillicL                 203
+\definecharacter cyrillicl                 235
+\definecharacter cyrillicM                 204
+\definecharacter cyrillicm                 236
+\definecharacter cyrillicN                 205
+\definecharacter cyrillicn                 237
+\definecharacter cyrillicO                 206
+\definecharacter cyrillico                 238
+\definecharacter cyrillicP                 207
+\definecharacter cyrillicp                 239
+\definecharacter cyrillicR                 208
+\definecharacter cyrillicr                 240
+\definecharacter cyrillicS                 209
+\definecharacter cyrillics                 241
+\definecharacter cyrillicT                 210
+\definecharacter cyrillict                 242
+\definecharacter cyrillicU                 211
+\definecharacter cyrillicu                 243
+\definecharacter cyrillicF                 212
+\definecharacter cyrillicf                 244
+\definecharacter cyrillicH                 213
+\definecharacter cyrillich                 245
+\definecharacter cyrillicC                 214
+\definecharacter cyrillicc                 246
+\definecharacter cyrillicCH                215
+\definecharacter cyrillicch                247
+\definecharacter cyrillicSH                216
+\definecharacter cyrillicsh                248
+\definecharacter cyrillicSHCH              217
+\definecharacter cyrillicshch              249
+\definecharacter cyrillicHRDSN             218
+\definecharacter cyrillichrdsn             250
+\definecharacter cyrillicERY               219
+\definecharacter cyrillicery               251
+\definecharacter cyrillicSFTSN             220
+\definecharacter cyrillicsftsn             252
+\definecharacter cyrillicEREV              221
+\definecharacter cyrillicerev              253
+\definecharacter cyrillicYU                222
+\definecharacter cyrillicyu                254
+\definecharacter cyrillicYA                223
+\definecharacter cyrillicya                255
+\definecharacter cyrillicGUP               128
+\definecharacter cyrillicgup               160
+\definecharacter cyrillicGHCRS             129
+\definecharacter cyrillicghcrs             161
+\definecharacter cyrillicDJE               130
+\definecharacter cyrillicdje               162
+\definecharacter cyrillicTSHE              131
+\definecharacter cyrillictshe              163
+\definecharacter cyrillicSHHA              132
+\definecharacter cyrillicshha              164
+\definecharacter cyrillicZHDSC             133
+\definecharacter cyrilliczhdsc             165
+\definecharacter cyrillicZDSC              134
+\definecharacter cyrilliczdsc              166
+\definecharacter cyrillicLJE               135
+\definecharacter cyrilliclje               167
+\definecharacter cyrillicYI                136
+\definecharacter cyrillicyi                168
+\definecharacter cyrillicKDSC              137
+\definecharacter cyrillickdsc              169
+\definecharacter cyrillicKBEAK             138
+\definecharacter cyrillickbeak             170
+\definecharacter cyrillicKVCRS             139
+\definecharacter cyrillickvcrs             171
+\definecharacter cyrillicAE                140
+\definecharacter cyrillicae                172
+\definecharacter cyrillicNDSC              141
+\definecharacter cyrillicndsc              173
+\definecharacter cyrillicNG                142
+\definecharacter cyrillicng                174
+\definecharacter cyrillicDZE               143
+\definecharacter cyrillicdze               175
+\definecharacter cyrillicOTLD              144
+\definecharacter cyrillicotld              176
+\definecharacter cyrillicSDSC              145
+\definecharacter cyrillicsdsc              177
+\definecharacter cyrillicUSHRT             146
+\definecharacter cyrillicushrt             178
+\definecharacter cyrillicY                 147
+\definecharacter cyrillicy                 179
+\definecharacter cyrillicYHCRS             148
+\definecharacter cyrillicyhcrs             180
+\definecharacter cyrillicHDSC              149
+\definecharacter cyrillichdsc              181
+\definecharacter cyrillicDZHE              150
+\definecharacter cyrillicdzhe              182
+\definecharacter cyrillicCHVCRS            151
+\definecharacter cyrillicchvcrs            183
+\definecharacter cyrillicCHRDSC            152
+\definecharacter cyrillicchrdsc            184
+\definecharacter cyrillicIE                153
+\definecharacter cyrillicie                185
+\definecharacter cyrillicSCHWA             154
+\definecharacter cyrillicschwa             186
+\definecharacter cyrillicNJE               155
+\definecharacter cyrillicnje               187
+\definecharacter cyrillicYO                156
+\definecharacter cyrillicyo                188
+\definecharacter cyrillicII                 73
+\definecharacter cyrillicii                105
+\definecharacter cyrillicJE                 74
+\definecharacter cyrillicje                106
+\definecharacter cyrillicQ                  81
+\definecharacter cyrillicq                 113
+\definecharacter cyrillicW                  87
+\definecharacter cyrillicw                 119
+
+% \definecharacter textperthousand    {\%\char 24 }
+% \definecharacter textpertenthousand {\%\char 24\char 24 }
+
+\definecharacter cyrillicgheupturn         160 % to satisfy the patterns
+
+\stopencoding
+
+\startmapping[t2b]
+
+\resetcaserange 128 to 255
+
+\definecasemaps 192 to 223 lc +32 uc   0  % base letters (russian)
+\definecasemaps 224 to 255 lc   0 uc -32
+
+\definecasemaps 128 to 156 lc +32 uc   0  % extra letters (cyrillic and old-slav)
+\definecasemaps 160 to 188 lc   0 uc -32
+
+\definecasemap 73  105 73   \definecasemap 105 105 73   % cyrillicII
+\definecasemap 74  106 74   \definecasemap 106 106 74   % cyrillicJE
+\definecasemap 81  113 81   \definecasemap 113 113 81   % cyrillicQ
+\definecasemap 83  115 83   \definecasemap 115 115 83   % cyrillicDZE
+\definecasemap 87  119 87   \definecasemap 119 119 87   % cyrillicW
+
+\stopmapping
+
+\startencoding[t2b]
+
+\definecharacter textgrave                   0
+\definecharacter textacute                   1
+\definecharacter textcircumflex              2
+\definecharacter texttilde                   3
+\definecharacter textdiaeresis               4
+\definecharacter texthungarumlaut            5
+\definecharacter textring                    6
+\definecharacter textcaron                   7
+\definecharacter textbreve                   8
+\definecharacter textmacron                  9
+\definecharacter textdotaccent              10
+\definecharacter textcedilla                11
+\definecharacter textogonek                 12
+
+\definecharacter textcyrillicflex           18
+\definecharacter textdblgrave               19
+\definecharacter textcyrillicbreve          20
+
+\definecharacter endash                     21
+\definecharacter emdash                     22
+
+\definecharacter textcompwordmark           23
+\definecharacter textbackslash              92
+\definecharacter textasciicircum            94
+\definecharacter textunderscore             95
+\definecharacter textbraceleft             123
+\definecharacter textbraceright            125
+\definecharacter textasciitilde            126
+\definecharacter textnumero                157
+\definecharacter textcurrency              158
+\definecharacter sectionmark               159
+\definecharacter quotedbl                   34
+\definecharacter quoteleft                  96
+\definecharacter upperleftsingleninequote   39
+\definecharacter quotedblleft               16
+\definecharacter quotedblright              17
+\definecharacter lowerleftdoubleninequote  189
+
+\definecharacter upperrightdoublesixquote   16
+\definecharacter upperrightdoubleninequote  17
+\definecharacter quotedblbase              189
+
+\definecharacter cyrillicpalochka           13
+\definecharacter cyrilliclangle             14
+\definecharacter cyrillicrangle             15
+
+\definecharacter leftguillemot             190
+\definecharacter rightguillemot            191
+\definecharacter dotlessi                   25
+
+\definecharacter cyrillicA                 192
+\definecharacter cyrillica                 224
+\definecharacter cyrillicB                 193
+\definecharacter cyrillicb                 225
+\definecharacter cyrillicV                 194
+\definecharacter cyrillicv                 226
+\definecharacter cyrillicG                 195
+\definecharacter cyrillicg                 227
+\definecharacter cyrillicD                 196
+\definecharacter cyrillicd                 228
+\definecharacter cyrillicE                 197
+\definecharacter cyrillice                 229
+\definecharacter cyrillicZH                198
+\definecharacter cyrilliczh                230
+\definecharacter cyrillicZ                 199
+\definecharacter cyrillicz                 231
+\definecharacter cyrillicI                 200
+\definecharacter cyrillici                 232
+\definecharacter cyrillicISHRT             201
+\definecharacter cyrillicishrt             233
+\definecharacter cyrillicK                 202
+\definecharacter cyrillick                 234
+\definecharacter cyrillicL                 203
+\definecharacter cyrillicl                 235
+\definecharacter cyrillicM                 204
+\definecharacter cyrillicm                 236
+\definecharacter cyrillicN                 205
+\definecharacter cyrillicn                 237
+\definecharacter cyrillicO                 206
+\definecharacter cyrillico                 238
+\definecharacter cyrillicP                 207
+\definecharacter cyrillicp                 239
+\definecharacter cyrillicR                 208
+\definecharacter cyrillicr                 240
+\definecharacter cyrillicS                 209
+\definecharacter cyrillics                 241
+\definecharacter cyrillicT                 210
+\definecharacter cyrillict                 242
+\definecharacter cyrillicU                 211
+\definecharacter cyrillicu                 243
+\definecharacter cyrillicF                 212
+\definecharacter cyrillicf                 244
+\definecharacter cyrillicH                 213
+\definecharacter cyrillich                 245
+\definecharacter cyrillicC                 214
+\definecharacter cyrillicc                 246
+\definecharacter cyrillicCH                215
+\definecharacter cyrillicch                247
+\definecharacter cyrillicSH                216
+\definecharacter cyrillicsh                248
+\definecharacter cyrillicSHCH              217
+\definecharacter cyrillicshch              249
+\definecharacter cyrillicHRDSN             218
+\definecharacter cyrillichrdsn             250
+\definecharacter cyrillicERY               219
+\definecharacter cyrillicery               251
+\definecharacter cyrillicSFTSN             220
+\definecharacter cyrillicsftsn             252
+\definecharacter cyrillicEREV              221
+\definecharacter cyrillicerev              253
+\definecharacter cyrillicYU                222
+\definecharacter cyrillicyu                254
+\definecharacter cyrillicYA                223
+\definecharacter cyrillicya                255
+\definecharacter cyrillicGDSCHCRS          128
+\definecharacter cyrillicgdschcrs          160
+\definecharacter cyrillicGHCRS             129
+\definecharacter cyrillicghcrs             161
+\definecharacter cyrillicGDSC              130
+\definecharacter cyrillicgdsc              162
+\definecharacter cyrillicGHK               131
+\definecharacter cyrillicghk               163
+\definecharacter cyrillicSHHA              132
+\definecharacter cyrillicshha              164
+\definecharacter cyrillicZHDSC             133
+\definecharacter cyrilliczhdsc             165
+\definecharacter cyrillicDELTA             134
+\definecharacter cyrillicdelta             166
+\definecharacter cyrillicABHDZE            135
+\definecharacter cyrillicabhdze            167
+\definecharacter cyrillicLJE               136
+\definecharacter cyrilliclje               168
+\definecharacter cyrillicKDSC              137
+\definecharacter cyrillickdsc              169
+\definecharacter cyrillicLDSC              138
+\definecharacter cyrillicldsc              170
+\definecharacter cyrillicKHK               139
+\definecharacter cyrillickhk               171
+\definecharacter cyrillicLHK               140
+\definecharacter cyrilliclhk               172
+\definecharacter cyrillicNDSC              141
+\definecharacter cyrillicndsc              173
+\definecharacter cyrillicNG                142
+\definecharacter cyrillicng                174
+\definecharacter cyrillicNHK               143
+\definecharacter cyrillicnhk               175
+\definecharacter cyrillicOTLD              144
+\definecharacter cyrillicotld              176
+\definecharacter cyrillicSACRS             145
+\definecharacter cyrillicsacrs             177
+\definecharacter cyrillicUSHRT             146
+\definecharacter cyrillicushrt             178
+\definecharacter cyrillicY                 147
+\definecharacter cyrillicy                 179
+\definecharacter cyrillicHHCRS             148
+\definecharacter cyrillichhcrs             180
+\definecharacter cyrillicHDSC              149
+\definecharacter cyrillichdsc              181
+\definecharacter cyrillicHHK               150
+\definecharacter cyrillichhk               182
+\definecharacter cyrillicCHLDSC            151
+\definecharacter cyrillicchldsc            183
+\definecharacter cyrillicCHRDSC            152
+\definecharacter cyrillicchrdsc            184
+\definecharacter cyrillicNJE               153
+\definecharacter cyrillicnje               185
+\definecharacter cyrillicSCHWA             154
+\definecharacter cyrillicschwa             186
+\definecharacter cyrillicEPS               155
+\definecharacter cyrilliceps               187
+\definecharacter cyrillicYO                156
+\definecharacter cyrillicyo                188
+\definecharacter cyrillicII                 73
+\definecharacter cyrillicii                105
+\definecharacter cyrillicJE                 74
+\definecharacter cyrillicje                106
+\definecharacter cyrillicQ                  81
+\definecharacter cyrillicq                 113
+\definecharacter cyrillicDZE                83
+\definecharacter cyrillicdze               115
+\definecharacter cyrillicW                  87
+\definecharacter cyrillicw                 119
+
+\stopencoding
+
+\startmapping[t2c]
+
+\resetcaserange 128 to 255
+
+\definecasemaps 192 to 223 lc +32 uc   0  % base letters (russian)
+\definecasemaps 224 to 255 lc   0 uc -32
+
+\definecasemaps 128 to 156 lc +32 uc   0  % extra letters (cyrillic and old-slav)
+\definecasemaps 160 to 188 lc   0 uc -32
+
+\definecasemap 73 105 73  \definecasemap 105 105 73  % cyrillicII
+\definecasemap 74 106 74  \definecasemap 106 106 74  % cyrillicJE
+\definecasemap 81 113 81  \definecasemap 113 113 81  % cyrillicQ
+\definecasemap 83 115 83  \definecasemap 115 115 83  % cyrillicDZE
+\definecasemap 87 119 87  \definecasemap 119 119 87  % cyrillicW
+
+\stopmapping
+
+\startencoding[t2c]
+
+\definecharacter textgrave                   0
+\definecharacter textacute                   1
+\definecharacter textcircumflex              2
+\definecharacter texttilde                   3
+\definecharacter textdiaeresis               4
+\definecharacter texthungarumlaut            5
+\definecharacter textring                    6
+\definecharacter textcaron                   7
+\definecharacter textbreve                   8
+\definecharacter textmacron                  9
+\definecharacter textdotaccent              10
+\definecharacter textcedilla                11
+\definecharacter textogonek                 12
+
+\definecharacter textcyrillicflex           18
+\definecharacter textdblgrave               19
+\definecharacter textcyrillicbreve          20
+
+\definecharacter endash                     21
+\definecharacter emdash                     22
+
+\definecharacter textcompwordmark           23
+\definecharacter textbackslash              92
+\definecharacter textasciicircum            94
+\definecharacter textunderscore             95
+\definecharacter textbraceleft             123
+\definecharacter textbraceright            125
+\definecharacter textasciitilde            126
+\definecharacter textnumero                157
+\definecharacter textcurrency              158
+\definecharacter sectionmark               159
+\definecharacter quotedbl                   34
+\definecharacter quoteleft                  96
+\definecharacter upperleftsingleninequote   39
+\definecharacter quotedblleft               16
+\definecharacter quotedblright              17
+\definecharacter lowerleftdoubleninequote  189
+\definecharacter upperrightdoublesixquote   16
+\definecharacter upperrightdoubleninequote  17
+\definecharacter quotedblbase              189
+
+\definecharacter cyrillicpalochka           13
+\definecharacter cyrilliclangle             14
+\definecharacter cyrillicrangle             15
+
+\definecharacter leftguillemot             190
+\definecharacter rightguillemot            191
+
+\definecharacter dotlessi                   25
+
+\definecharacter cyrillicA                  192
+\definecharacter cyrillica                  224
+\definecharacter cyrillicB                  193
+\definecharacter cyrillicb                  225
+\definecharacter cyrillicV                  194
+\definecharacter cyrillicv                  226
+\definecharacter cyrillicG                  195
+\definecharacter cyrillicg                  227
+\definecharacter cyrillicD                  196
+\definecharacter cyrillicd                  228
+\definecharacter cyrillicE                  197
+\definecharacter cyrillice                  229
+\definecharacter cyrillicZH                 198
+\definecharacter cyrilliczh                 230
+\definecharacter cyrillicZ                  199
+\definecharacter cyrillicz                  231
+\definecharacter cyrillicI                  200
+\definecharacter cyrillici                  232
+\definecharacter cyrillicISHRT              201
+\definecharacter cyrillicishrt              233
+\definecharacter cyrillicK                  202
+\definecharacter cyrillick                  234
+\definecharacter cyrillicL                  203
+\definecharacter cyrillicl                  235
+\definecharacter cyrillicM                  204
+\definecharacter cyrillicm                  236
+\definecharacter cyrillicN                  205
+\definecharacter cyrillicn                  237
+\definecharacter cyrillicO                  206
+\definecharacter cyrillico                  238
+\definecharacter cyrillicP                  207
+\definecharacter cyrillicp                  239
+\definecharacter cyrillicR                  208
+\definecharacter cyrillicr                  240
+\definecharacter cyrillicS                  209
+\definecharacter cyrillics                  241
+\definecharacter cyrillicT                  210
+\definecharacter cyrillict                  242
+\definecharacter cyrillicU                  211
+\definecharacter cyrillicu                  243
+\definecharacter cyrillicF                  212
+\definecharacter cyrillicf                  244
+\definecharacter cyrillicH                  213
+\definecharacter cyrillich                  245
+\definecharacter cyrillicC                  214
+\definecharacter cyrillicc                  246
+\definecharacter cyrillicCH                 215
+\definecharacter cyrillicch                 247
+\definecharacter cyrillicSH                 216
+\definecharacter cyrillicsh                 248
+\definecharacter cyrillicSHCH               217
+\definecharacter cyrillicshch               249
+\definecharacter cyrillicHRDSN              218
+\definecharacter cyrillichrdsn              250
+\definecharacter cyrillicERY                219
+\definecharacter cyrillicery                251
+\definecharacter cyrillicSFTSN              220
+\definecharacter cyrillicsftsn              252
+\definecharacter cyrillicEREV               221
+\definecharacter cyrillicerev               253
+\definecharacter cyrillicYU                 222
+\definecharacter cyrillicyu                 254
+\definecharacter cyrillicYA                 223
+\definecharacter cyrillicya                 255
+\definecharacter cyrillicPHK                128
+\definecharacter cyrillicphk                160
+\definecharacter cyrillicTETSE              129
+\definecharacter cyrillictetse              161
+\definecharacter cyrillicTDSC               130
+\definecharacter cyrillictdsc               162
+\definecharacter cyrillicGHK                131
+\definecharacter cyrillicghk                163
+\definecharacter cyrillicSHHA               132
+\definecharacter cyrillicshha               164
+\definecharacter cyrillicRDSC               133
+\definecharacter cyrillicrdsc               165
+\definecharacter cyrillicRTICK              134
+\definecharacter cyrillicrtick              166
+\definecharacter cyrillicABHDZE             135
+\definecharacter cyrillicabhdze             167
+\definecharacter cyrillicMDSC               136
+\definecharacter cyrillicmdsc               168
+\definecharacter cyrillicKDSC               137
+\definecharacter cyrillickdsc               169
+\definecharacter cyrillicLDSC               138
+\definecharacter cyrillicldsc               170
+\definecharacter cyrillicKHCRS              139
+\definecharacter cyrillickhcrs              171
+\definecharacter cyrillicLHK                140
+\definecharacter cyrilliclhk                172
+\definecharacter cyrillicNDSC               141
+\definecharacter cyrillicndsc               173
+\definecharacter cyrillicMHK                142
+\definecharacter cyrillicmhk                174
+\definecharacter cyrillicNHK                143
+\definecharacter cyrillicnhk                175
+\definecharacter cyrillicOTLD               144
+\definecharacter cyrillicotld               176
+\definecharacter cyrillicABHCH              145
+\definecharacter cyrillicabhch              177
+\definecharacter cyrillicABHCHDSC           146
+\definecharacter cyrillicabhchdsc           178
+\definecharacter cyrillicSEMISFTSN          147
+\definecharacter cyrillicsemisftsn          179
+\definecharacter cyrillicISHRTDSC           148
+\definecharacter cyrillicishrtdsc           180
+\definecharacter cyrillicHDSC               149
+\definecharacter cyrillichdsc               181
+\definecharacter cyrillicDZHE               150
+\definecharacter cyrillicdzhe               182
+\definecharacter cyrillicABHHA              151
+\definecharacter cyrillicabhha              183
+\definecharacter cyrillicCHRDSC             152
+\definecharacter cyrillicchrdsc             184
+\definecharacter cyrillicNLHK               153
+\definecharacter cyrillicnlhk               185
+\definecharacter cyrillicSCHWA              154
+\definecharacter cyrillicschwa              186
+\definecharacter cyrillicRHK                155
+\definecharacter cyrillicrhk                187
+\definecharacter cyrillicYO                 156
+\definecharacter cyrillicyo                 188
+\definecharacter cyrillicII                  73
+\definecharacter cyrillicii                 105
+\definecharacter cyrillicJE                  74
+\definecharacter cyrillicje                 106
+\definecharacter cyrillicQ                   81
+\definecharacter cyrillicq                  113
+\definecharacter cyrillicDZE                 83
+\definecharacter cyrillicdze                115
+\definecharacter cyrillicW                   87
+\definecharacter cyrillicw                  119
+
+\stopencoding
+
+\startmapping[x2]
+
+\resetcaserange 128 to 255
+
+\definecasemaps 192 to 223 lc +32 uc   0  % base letters (russian)
+\definecasemaps 224 to 255 lc   0 uc -32
+
+\definecasemaps 128 to 156 lc +32 uc   0  % extra letters (cyrillic and old-slav)
+\definecasemaps 160 to 188 lc   0 uc -32
+
+\definecasemaps  65 to  90 lc +32 uc   0  % more extra letters (cyrillic and old-slav)
+\definecasemaps  97 to 122 lc   0 uc -32
+
+\definecasemap 28 29 28  \definecasemap 29 29 28 % cyrillicNLHK
+\definecasemap 30 31 30  \definecasemap 31 31 30 % cyrillicDELTA
+
+\stopmapping
+
+\startencoding[x2]
+
+\definecharacter textgrave                    0
+\definecharacter textacute                    1
+\definecharacter textcircumflex               2
+\definecharacter texttilde                    3
+\definecharacter textdiaeresis                4
+\definecharacter texthungarumlaut             5
+\definecharacter textring                     6
+\definecharacter textcaron                    7
+\definecharacter textbreve                    8
+\definecharacter textmacron                   9
+\definecharacter textdotaccent               10
+\definecharacter textcedilla                 11
+\definecharacter textogonek                  12
+
+\definecharacter endash                      21
+\definecharacter emdash                      22
+
+\definecharacter textcompwordmark            23
+\definecharacter textvisiblespace            32
+\definecharacter textdollar                  36
+\definecharacter textless                    60
+\definecharacter textgreater                 62
+\definecharacter textbackslash               92
+\definecharacter textasciicircum             94
+\definecharacter textunderscore              95
+\definecharacter textbraceleft              123
+\definecharacter textbar                    124
+\definecharacter textbraceright             125
+\definecharacter textasciitilde             126
+\definecharacter textnumero                 157
+\definecharacter textcurrency               158
+\definecharacter textsection                159
+\definecharacter sectionmark                159
+\definecharacter textquotedbl                34
+
+\definecharacter cyrillicpalochka            13
+\definecharacter cyrilliclangle              14
+\definecharacter cyrillicrangle              15
+
+\definecharacter leftguillemot              190
+\definecharacter rightguillemot             191
+
+\definecharacter upperleftsinglesixquote     96
+\definecharacter upperleftsingleninequote    39
+\definecharacter upperleftdoublesixquote     16
+\definecharacter upperleftdoubleninequote    17
+\definecharacter lowerleftdoubleninequote   189
+
+\definecharacter upperrightsinglesixquote    96
+\definecharacter upperrightsingleninequote   39
+\definecharacter upperrightdoublesixquote    16
+\definecharacter upperrightdoubleninequote   17
+\definecharacter lowerrightdoubleninequote  189
+
+\definecharacter cyrillicA                  192
+\definecharacter cyrillica                  224
+\definecharacter cyrillicB                  193
+\definecharacter cyrillicb                  225
+\definecharacter cyrillicV                  194
+\definecharacter cyrillicv                  226
+\definecharacter cyrillicG                  195
+\definecharacter cyrillicg                  227
+\definecharacter cyrillicD                  196
+\definecharacter cyrillicd                  228
+\definecharacter cyrillicE                  197
+\definecharacter cyrillice                  229
+\definecharacter cyrillicZH                 198
+\definecharacter cyrilliczh                 230
+\definecharacter cyrillicZ                  199
+\definecharacter cyrillicz                  231
+\definecharacter cyrillicI                  200
+\definecharacter cyrillici                  232
+\definecharacter cyrillicISHRT              201
+\definecharacter cyrillicishrt              233
+\definecharacter cyrillicK                  202
+\definecharacter cyrillick                  234
+\definecharacter cyrillicL                  203
+\definecharacter cyrillicl                  235
+\definecharacter cyrillicM                  204
+\definecharacter cyrillicm                  236
+\definecharacter cyrillicN                  205
+\definecharacter cyrillicn                  237
+\definecharacter cyrillicO                  206
+\definecharacter cyrillico                  238
+\definecharacter cyrillicP                  207
+\definecharacter cyrillicp                  239
+\definecharacter cyrillicR                  208
+\definecharacter cyrillicr                  240
+\definecharacter cyrillicS                  209
+\definecharacter cyrillics                  241
+\definecharacter cyrillicT                  210
+\definecharacter cyrillict                  242
+\definecharacter cyrillicU                  211
+\definecharacter cyrillicu                  243
+\definecharacter cyrillicF                  212
+\definecharacter cyrillicf                  244
+\definecharacter cyrillicH                  213
+\definecharacter cyrillich                  245
+\definecharacter cyrillicC                  214
+\definecharacter cyrillicc                  246
+\definecharacter cyrillicCH                 215
+\definecharacter cyrillicch                 247
+\definecharacter cyrillicSH                 216
+\definecharacter cyrillicsh                 248
+\definecharacter cyrillicSHCH               217
+\definecharacter cyrillicshch               249
+\definecharacter cyrillicHRDSN              218
+\definecharacter cyrillichrdsn              250
+\definecharacter cyrillicERY                219
+\definecharacter cyrillicery                251
+\definecharacter cyrillicSFTSN              220
+\definecharacter cyrillicsftsn              252
+\definecharacter cyrillicEREV               221
+\definecharacter cyrillicerev               253
+\definecharacter cyrillicYU                 222
+\definecharacter cyrillicyu                 254
+\definecharacter cyrillicYA                 223
+\definecharacter cyrillicya                 255
+\definecharacter cyrillicGUP                128
+\definecharacter cyrillicgup                160
+\definecharacter cyrillicGHCRS              129
+\definecharacter cyrillicghcrs              161
+\definecharacter cyrillicGDSC               130
+\definecharacter cyrillicgdsc               162
+\definecharacter cyrillicGHK                131
+\definecharacter cyrillicghk                163
+\definecharacter cyrillicSHHA               132
+\definecharacter cyrillicshha               164
+\definecharacter cyrillicZHDSC              133
+\definecharacter cyrilliczhdsc              165
+\definecharacter cyrillicZDSC               134
+\definecharacter cyrilliczdsc               166
+\definecharacter cyrillicABHDZE             135
+\definecharacter cyrillicabhdze             167
+\definecharacter cyrillicYI                 136
+\definecharacter cyrillicyi                 168
+\definecharacter cyrillicKDSC               137
+\definecharacter cyrillickdsc               169
+\definecharacter cyrillicKBEAK              138
+\definecharacter cyrillickbeak              170
+\definecharacter cyrillicKHK                139
+\definecharacter cyrillickhk                171
+\definecharacter cyrillicLHK                140
+\definecharacter cyrilliclhk                172
+\definecharacter cyrillicNDSC               141
+\definecharacter cyrillicndsc               173
+\definecharacter cyrillicNG                 142
+\definecharacter cyrillicng                 174
+\definecharacter cyrillicNHK                143
+\definecharacter cyrillicnhk                175
+\definecharacter cyrillicOTLD               144
+\definecharacter cyrillicotld               176
+\definecharacter cyrillicSDSC               145
+\definecharacter cyrillicsdsc               177
+\definecharacter cyrillicUSHRT              146
+\definecharacter cyrillicushrt              178
+\definecharacter cyrillicY                  147
+\definecharacter cyrillicy                  179
+\definecharacter cyrillicYHCRS              148
+\definecharacter cyrillicyhcrs              180
+\definecharacter cyrillicHDSC               149
+\definecharacter cyrillichdsc               181
+\definecharacter cyrillicHHK                150
+\definecharacter cyrillichhk                182
+\definecharacter cyrillicCHLDSC             151
+\definecharacter cyrillicchldsc             183
+\definecharacter cyrillicCHRDSC             152
+\definecharacter cyrillicchrdsc             184
+\definecharacter cyrillicIE                 153
+\definecharacter cyrillicie                 185
+\definecharacter cyrillicSCHWA              154
+\definecharacter cyrillicschwa              186
+\definecharacter cyrillicEPS                155
+\definecharacter cyrilliceps                187
+\definecharacter cyrillicYO                 156
+\definecharacter cyrillicyo                 188
+\definecharacter cyrillicAE                  65
+\definecharacter cyrillicae                  97
+\definecharacter cyrillicDJE                 66
+\definecharacter cyrillicdje                 98
+\definecharacter cyrillicTSHE                67
+\definecharacter cyrillictshe                99
+\definecharacter cyrillicABHCH               68
+\definecharacter cyrillicabhch              100
+\definecharacter cyrillicABHCHDSC            69
+\definecharacter cyrillicabhchdsc           101
+\definecharacter cyrillicKVCRS               70
+\definecharacter cyrillickvcrs              102
+\definecharacter cyrillicKHCRS               71
+\definecharacter cyrillickhcrs              103
+\definecharacter cyrillicLDSC                72
+\definecharacter cyrillicldsc               104
+\definecharacter cyrillicII                  73
+\definecharacter cyrillicii                 105
+\definecharacter cyrillicJE                  74
+\definecharacter cyrillicje                 106
+\definecharacter cyrillicLJE                 75
+\definecharacter cyrilliclje                107
+\definecharacter cyrillicMDSC                76
+\definecharacter cyrillicmdsc               108
+\definecharacter cyrillicNJE                 77
+\definecharacter cyrillicnje                109
+\definecharacter cyrillicABHHA               78
+\definecharacter cyrillicabhha              110
+\definecharacter cyrillicPHK                 79
+\definecharacter cyrillicphk                111
+\definecharacter cyrillicRDSC                80
+\definecharacter cyrillicrdsc               112
+\definecharacter cyrillicQ                   81
+\definecharacter cyrillicq                  113
+\definecharacter cyrillicTDSC                82
+\definecharacter cyrillictdsc               114
+\definecharacter cyrillicDZE                 83
+\definecharacter cyrillicdze                115
+\definecharacter cyrillicTETSE               84
+\definecharacter cyrillictetse              116
+\definecharacter cyrillicDZHE                85
+\definecharacter cyrillicdzhe               117
+\definecharacter cyrillicCHVCRS              86
+\definecharacter cyrillicchvcrs             118
+\definecharacter cyrillicW                   87
+\definecharacter cyrillicw                  119
+\definecharacter cyrillicYAT                 88
+\definecharacter cyrillicyat                120
+\definecharacter cyrillicBYUS                89
+\definecharacter cyrillicbyus               121
+\definecharacter cyrillicIZH                 90
+\definecharacter cyrillicizh                122
+\definecharacter cyrillicNLHK                28
+\definecharacter cyrillicnlhk                29
+\definecharacter cyrillicDELTA               30
+\definecharacter cyrillicdelta               31
+
+\stopencoding
+
+\startmapping[lcy]
+
+\resetcaserange 128 to 255
+
+\definecasemaps 128 to 143 lc +32 uc   0
+\definecasemaps 160 to 175 lc   0 uc -32
+
+\definecasemaps 144 to 159 lc +80 uc   0
+\definecasemaps 224 to 239 lc   0 uc -80
+
+\definecasemap 240 241 240  \definecasemap 241 241 240  % cyrillicYO
+\definecasemap 242 243 242  \definecasemap 243 243 242  % cyrillicGUP
+\definecasemap 244 245 244  \definecasemap 245 245 244  % cyrillicIE
+\definecasemap 244 247 244  \definecasemap 247 247 244  % cyrillicII
+\definecasemap 248 249 248  \definecasemap 249 249 248  % cyrillicYI
+\definecasemap 250 251 240  \definecasemap 241 241 240  % cyrillicUSHRT
+
+\stopmapping
+
+\startencoding[lcy]
+
+%D Characters 0 to 127 are as in normal cmr slots
+
+\definecharacter cyrillicA                128
+\definecharacter cyrillicB                129
+\definecharacter cyrillicV                130
+\definecharacter cyrillicG                131
+\definecharacter cyrillicD                132
+\definecharacter cyrillicE                133
+\definecharacter cyrillicZH               134
+\definecharacter cyrillicZ                135
+\definecharacter cyrillicI                136
+\definecharacter cyrillicISHRT            137
+\definecharacter cyrillicK                138
+\definecharacter cyrillicL                139
+\definecharacter cyrillicM                140
+\definecharacter cyrillicN                141
+\definecharacter cyrillicO                142
+\definecharacter cyrillicP                143
+\definecharacter cyrillicR                144
+\definecharacter cyrillicS                145
+\definecharacter cyrillicT                146
+\definecharacter cyrillicU                147
+\definecharacter cyrillicF                148
+\definecharacter cyrillicH                149
+\definecharacter cyrillicC                150
+\definecharacter cyrillicCH               151
+\definecharacter cyrillicSH               152
+\definecharacter cyrillicSHCH             153
+\definecharacter cyrillicHRDSN            154
+\definecharacter cyrillicERY              155
+\definecharacter cyrillicSFTSN            156
+\definecharacter cyrillicEREV             157
+\definecharacter cyrillicYU               158
+\definecharacter cyrillicYA               159
+\definecharacter cyrillica                160
+\definecharacter cyrillicb                161
+\definecharacter cyrillicv                162
+\definecharacter cyrillicg                163
+\definecharacter cyrillicd                164
+\definecharacter cyrillice                165
+\definecharacter cyrilliczh               166
+\definecharacter cyrillicz                167
+\definecharacter cyrillici                168
+\definecharacter cyrillicishrt            169
+\definecharacter cyrillick                170
+\definecharacter cyrillicl                171
+\definecharacter cyrillicm                172
+\definecharacter cyrillicn                173
+\definecharacter cyrillico                174
+\definecharacter cyrillicp                175
+\definecharacter cyrillicr                224
+\definecharacter cyrillics                225
+\definecharacter cyrillict                226
+\definecharacter cyrillicu                227
+\definecharacter cyrillicf                228
+\definecharacter cyrillich                229
+\definecharacter cyrillicc                230
+\definecharacter cyrillicch               231
+\definecharacter cyrillicsh               232
+\definecharacter cyrillicshch             233
+\definecharacter cyrillichrdsn            234
+\definecharacter cyrillicery              235
+\definecharacter cyrillicsftsn            236
+\definecharacter cyrillicerev             237
+\definecharacter cyrillicyu               238
+\definecharacter cyrillicya               239
+\definecharacter cyrillicYO               240
+\definecharacter cyrillicyo               241
+\definecharacter cyrillicGUP              242
+\definecharacter cyrillicgup              243
+\definecharacter cyrillicIE               244
+\definecharacter cyrillicie               245
+\definecharacter cyrillicII               246
+\definecharacter cyrillicii               247
+\definecharacter cyrillicYI               248
+\definecharacter cyrillicyi               249
+\definecharacter cyrillicUSHRT            250
+\definecharacter cyrillicushrt            251
+
+\definecharacter emdash                   196
+\definecharacter textcurrency             197
+\definecharacter textnumero               252
+\definecharacter leftguillemot            253
+\definecharacter rightguillemot           254
+\definecharacter quotedblbase             255
+
+\stopencoding
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-def.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-def.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-def.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,923 @@
+%D \module
+%D   [     file=enco-def,
+%D      version=2000.05.07, % 2000.20.12, % split from less verbose base file
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Default Character Definitions,
+%D       author=Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Instead of overloading plain \TEX\ macros (and keeping them
+%D available as an escape), we now use the more verbose
+%D definitions in this file. Since memory is less a problem
+%D these days, this verbosity has only a small price, but we
+%D gain readability. The following definitions are based on
+%D usage of the the original \TEX\ fonts, where composed
+%D characters were not part of the design. So, occasionally
+%D we have to revert to hacks. Thanks to all those users who
+%D helped me to fill in the details.
+
+\startencoding[default]
+
+\definecharacter textcomma         ,
+\definecharacter textperiod        .
+
+\definecharacter textacute         19
+\definecharacter textbottomdot     46
+\definecharacter textbreve         21
+\definecharacter textcaron         20
+\definecharacter textcedilla       24
+\definecharacter textcircumflex    94
+\definecharacter textdiaeresis    127
+\definecharacter textdotaccent     95
+\definecharacter textgrave         18
+\definecharacter texthungarumlaut 125
+\definecharacter textmacron        22
+\definecharacter textogonek        24 % fake
+\definecharacter textring          23
+\definecharacter texttilde        126
+
+\definecharacter textat            64 % for mojca
+
+\definecharacter textbottomcomma  {\hbox{\lower.35ex\hbox{\tx,}}} % for mojca
+
+\definecharacter dotlessi         {\char"10 }
+\definecharacter dotlessj         {\char"11 }
+\definecharacter dotlessI         {I}
+\definecharacter dotlessJ         {J}
+
+\definecharacter endash           123
+\definecharacter emdash           124
+
+\definecharacter aeligature       {\char26 } % "1A
+\definecharacter AEligature       {\char29 } % "1D
+\definecharacter ijligature       {ij}
+\definecharacter IJligature       {IJ}
+\definecharacter oeligature       {\char27 } % "1B
+\definecharacter OEligature       {\char30 } % "1E
+
+\definecharacter ssharp           {\char25 } % "19
+\definecharacter Ssharp           {SS}
+
+\definecharacter thorn            {\unknownchar}
+\definecharacter Thorn            {\unknownchar}
+
+\definecharacter eth              {\unknownchar} % mojca prefers this (was \dstroke)
+%definecharacter Eth              {\unknownchar}
+\definecharacter Eth              {\Dstroke}     % mojca prefers this too
+
+\definecharacter exclamdown        60
+\definecharacter questiondown      62
+
+\definecharacter copyright        {\encircled{\txx C}}
+\definecharacter registered       {\encircled{\txx R}}
+\definecharacter trademark        {\high{\txx TM}}
+
+\definecharacter sectionmark      {\mathematics{\mathhexbox278}}
+\definecharacter paragraphmark    {\mathematics{\mathhexbox27B}}
+
+\definecharacter onequarter       {\vulgarfraction{1}{4}}
+\definecharacter onehalf          {\vulgarfraction{1}{2}}
+\definecharacter threequarter     {\vulgarfraction{3}{4}}
+
+\definecharacter onesuperior      {\high{1}}
+\definecharacter twosuperior      {\high{2}}
+\definecharacter threesuperior    {\high{3}}
+
+\definecharacter textcent         {c}
+\definecharacter textcurrency     {\unknownchar}
+\definecharacter textdollar       {\fakedollar}
+\definecharacter texteuro         {E}
+\definecharacter textflorin       {\fakeflorin}
+\definecharacter textsterling     {\fakesterling}
+\definecharacter textyen          {Y}
+
+\definecharacter ordfeminine      {\high{\txx a}}
+\definecharacter ordmasculine     {\high{\txx o}}
+
+\definecharacter percent          {\fakepercent}
+\definecharacter perthousand      {\fakeperthousand}
+
+\definecharacter softhyphen        45
+\definecharacter periodcentered   {\hbox{\mathematics\cdot}}
+\definecharacter compoundwordmark  23
+
+\definecharacter textasciicircum   94
+\definecharacter textasciitilde   126
+\definecharacter textslash         47
+\definecharacter textbackslash    {\tex{}} % todo
+\definecharacter textbraceleft    {\mathematics\{}
+\definecharacter textbraceright   {\mathematics\}}
+\definecharacter textunderscore   {\fakeunderscore}
+\definecharacter textvisiblespace {\fakevisiblespace}
+
+\definecharacter textbrokenbar    {\mathematics\vert}
+\definecharacter textbullet       {\mathematics\bullet}
+\definecharacter textdag          {\mathematics\dag}
+\definecharacter textddag         {\mathematics\ddag}
+\definecharacter textdegree       {\mathematics{{}^{\circ}}}
+\definecharacter textdiv          {\mathematics\div}
+\definecharacter textellipsis     {\mathematics\cdots}
+\definecharacter textfraction     {\mathematics/}
+\definecharacter textlognot       {\mathematics\neg}
+\definecharacter textminus        {\mathematics-}
+\definecharacter textmu           {\mathematics\mu}
+\definecharacter textmultiply     {\mathematics\times}
+\definecharacter textpm           {\mathematics\pm}
+
+\definecharacter quotedbl         {"}
+\definecharacter quotedblbase     {,,}
+\definecharacter quotedblleft     {``}
+\definecharacter quotedblright    {''}
+
+\definecharacter quotesingle      {`}
+\definecharacter quotesinglebase  {,}
+
+\definecharacter quoteleft        {`}
+\definecharacter quoteright       {'}
+
+\definecharacter guilsingleleft   {\fakeleftsubguillemot }
+\definecharacter guilsingleright  {\fakerightsubguillemot}
+
+\definecharacter leftguillemot    {\fakeleftguillemot }
+\definecharacter rightguillemot   {\fakerightguillemot}
+
+\definecharacter Acircumflex      {\buildtextaccent\textcircumflex A}
+\definecharacter acircumflex      {\buildtextaccent\textcircumflex a}
+\definecharacter Ccircumflex      {\buildtextaccent\textcircumflex C}
+\definecharacter ccircumflex      {\buildtextaccent\textcircumflex c}
+\definecharacter Ecircumflex      {\buildtextaccent\textcircumflex E}
+\definecharacter ecircumflex      {\buildtextaccent\textcircumflex e}
+\definecharacter Gcircumflex      {\buildtextaccent\textcircumflex G}
+\definecharacter gcircumflex      {\buildtextaccent\textcircumflex g}
+\definecharacter Hcircumflex      {\buildtextaccent\textcircumflex H}
+\definecharacter hcircumflex      {\buildtextaccent\textcircumflex h}
+\definecharacter Icircumflex      {\buildtextaccent\textcircumflex \dotlessI}
+\definecharacter icircumflex      {\buildtextaccent\textcircumflex \dotlessi}
+\definecharacter Jcircumflex      {\buildtextaccent\textcircumflex \dotlessJ}
+\definecharacter jcircumflex      {\buildtextaccent\textcircumflex \dotlessj}
+\definecharacter Ocircumflex      {\buildtextaccent\textcircumflex O}
+\definecharacter ocircumflex      {\buildtextaccent\textcircumflex o}
+\definecharacter Scircumflex      {\buildtextaccent\textcircumflex S}
+\definecharacter scircumflex      {\buildtextaccent\textcircumflex s}
+\definecharacter Ucircumflex      {\buildtextaccent\textcircumflex U}
+\definecharacter ucircumflex      {\buildtextaccent\textcircumflex u}
+\definecharacter Wcircumflex      {\buildtextaccent\textcircumflex W}
+\definecharacter wcircumflex      {\buildtextaccent\textcircumflex w}
+\definecharacter Ycircumflex      {\buildtextaccent\textcircumflex Y}
+\definecharacter ycircumflex      {\buildtextaccent\textcircumflex y}
+
+\definecharacter Agrave           {\buildtextaccent\textgrave A}
+\definecharacter agrave           {\buildtextaccent\textgrave a}
+\definecharacter Egrave           {\buildtextaccent\textgrave E}
+\definecharacter egrave           {\buildtextaccent\textgrave e}
+\definecharacter Igrave           {\buildtextaccent\textgrave \dotlessI}
+\definecharacter igrave           {\buildtextaccent\textgrave \dotlessi}
+\definecharacter Ograve           {\buildtextaccent\textgrave O}
+\definecharacter ograve           {\buildtextaccent\textgrave o}
+\definecharacter Ugrave           {\buildtextaccent\textgrave U}
+\definecharacter ugrave           {\buildtextaccent\textgrave u}
+\definecharacter Ygrave           {\buildtextaccent\textgrave Y}
+\definecharacter ygrave           {\buildtextaccent\textgrave y}
+
+\definecharacter Atilde           {\buildtextaccent\texttilde A}
+\definecharacter atilde           {\buildtextaccent\texttilde a}
+\definecharacter Itilde           {\buildtextaccent\texttilde \dotlessI}
+\definecharacter itilde           {\buildtextaccent\texttilde \dotlessi}
+\definecharacter Ntilde           {\buildtextaccent\texttilde N}
+\definecharacter ntilde           {\buildtextaccent\texttilde n}
+\definecharacter Otilde           {\buildtextaccent\texttilde O}
+\definecharacter otilde           {\buildtextaccent\texttilde o}
+\definecharacter Utilde           {\buildtextaccent\texttilde U}
+\definecharacter utilde           {\buildtextaccent\texttilde u}
+\definecharacter Ytilde           {\buildtextaccent\texttilde Y}
+\definecharacter ytilde           {\buildtextaccent\texttilde y}
+
+\definecharacter Adiaeresis       {\buildtextaccent\textdiaeresis A}
+\definecharacter adiaeresis       {\buildtextaccent\textdiaeresis a}
+\definecharacter Ediaeresis       {\buildtextaccent\textdiaeresis E}
+\definecharacter ediaeresis       {\buildtextaccent\textdiaeresis e}
+\definecharacter Idiaeresis       {\buildtextaccent\textdiaeresis \dotlessI}
+\definecharacter idiaeresis       {\buildtextaccent\textdiaeresis \dotlessi}
+\definecharacter Odiaeresis       {\buildtextaccent\textdiaeresis O}
+\definecharacter odiaeresis       {\buildtextaccent\textdiaeresis o}
+\definecharacter Udiaeresis       {\buildtextaccent\textdiaeresis U}
+\definecharacter udiaeresis       {\buildtextaccent\textdiaeresis u}
+\definecharacter Ydiaeresis       {\buildtextaccent\textdiaeresis Y}
+\definecharacter ydiaeresis       {\buildtextaccent\textdiaeresis y}
+
+\definecharacter Aacute           {\buildtextaccent\textacute A}
+\definecharacter aacute           {\buildtextaccent\textacute a}
+\definecharacter Cacute           {\buildtextaccent\textacute C}
+\definecharacter cacute           {\buildtextaccent\textacute c}
+\definecharacter Eacute           {\buildtextaccent\textacute E}
+\definecharacter eacute           {\buildtextaccent\textacute e}
+\definecharacter Iacute           {\buildtextaccent\textacute \dotlessI}
+\definecharacter iacute           {\buildtextaccent\textacute \dotlessi}
+\definecharacter Lacute           {\buildtextaccent\textacute L}
+\definecharacter lacute           {\buildtextaccent\textacute l}
+\definecharacter Nacute           {\buildtextaccent\textacute N}
+\definecharacter nacute           {\buildtextaccent\textacute n}
+\definecharacter Oacute           {\buildtextaccent\textacute O}
+\definecharacter oacute           {\buildtextaccent\textacute o}
+\definecharacter Racute           {\buildtextaccent\textacute R}
+\definecharacter racute           {\buildtextaccent\textacute r}
+\definecharacter Sacute           {\buildtextaccent\textacute S}
+\definecharacter sacute           {\buildtextaccent\textacute s}
+\definecharacter Uacute           {\buildtextaccent\textacute U}
+\definecharacter uacute           {\buildtextaccent\textacute u}
+\definecharacter Yacute           {\buildtextaccent\textacute Y}
+\definecharacter yacute           {\buildtextaccent\textacute y}
+\definecharacter Zacute           {\buildtextaccent\textacute Z}
+\definecharacter zacute           {\buildtextaccent\textacute z}
+
+%definecharacter Dstroke          {D}
+%definecharacter dstroke          {d}
+
+\definecharacter dstroke          {\pseudoencodeddj}
+\definecharacter Dstroke          {\pseudoencodedDJ}
+\definecharacter Hstroke          {H}
+\definecharacter hstroke          {h}
+\definecharacter Tstroke          {T}
+\definecharacter tstroke          {t}
+
+\definecharacter Cdotaccent       {\buildtextaccent\textdotaccent C}
+\definecharacter cdotaccent       {\buildtextaccent\textdotaccent c}
+\definecharacter Edotaccent       {\buildtextaccent\textdotaccent E}
+\definecharacter edotaccent       {\buildtextaccent\textdotaccent e}
+\definecharacter Gdotaccent       {\buildtextaccent\textdotaccent G}
+\definecharacter gdotaccent       {\buildtextaccent\textdotaccent g}
+\definecharacter Idotaccent       {\buildtextaccent\textdotaccent \dotlessI}
+\definecharacter idotaccent       {\buildtextaccent\textdotaccent \dotlessi}
+\definecharacter Zdotaccent       {\buildtextaccent\textdotaccent Z}
+\definecharacter zdotaccent       {\buildtextaccent\textdotaccent z}
+
+\definecharacter Amacron          {\buildtextaccent\textmacron A}
+\definecharacter amacron          {\buildtextaccent\textmacron a}
+\definecharacter Emacron          {\buildtextaccent\textmacron E}
+\definecharacter emacron          {\buildtextaccent\textmacron e}
+\definecharacter Imacron          {\buildtextaccent\textmacron \dotlessI}
+\definecharacter imacron          {\buildtextaccent\textmacron \dotlessi}
+\definecharacter Omacron          {\buildtextaccent\textmacron O}
+\definecharacter omacron          {\buildtextaccent\textmacron o}
+\definecharacter Umacron          {\buildtextaccent\textmacron U}
+\definecharacter umacron          {\buildtextaccent\textmacron u}
+
+\definecharacter Ccedilla         {\buildtextcedilla C}
+\definecharacter ccedilla         {\buildtextcedilla c}
+\definecharacter Kcedilla         {\buildtextcedilla K}
+\definecharacter kcedilla         {\buildtextcedilla k}
+\definecharacter Lcedilla         {\buildtextcedilla L}
+\definecharacter lcedilla         {\buildtextcedilla l}
+\definecharacter Ncedilla         {\buildtextcedilla N}
+\definecharacter ncedilla         {\buildtextcedilla n}
+\definecharacter Rcedilla         {\buildtextcedilla R}
+\definecharacter rcedilla         {\buildtextcedilla r}
+\definecharacter Scedilla         {\buildtextcedilla S}
+\definecharacter scedilla         {\buildtextcedilla s}
+\definecharacter Tcedilla         {\buildtextcedilla T}
+\definecharacter tcedilla         {\buildtextcedilla t}
+
+\definecharacter Ohungarumlaut    {\buildtextaccent\texthungarumlaut O}
+\definecharacter ohungarumlaut    {\buildtextaccent\texthungarumlaut o}
+\definecharacter Uhungarumlaut    {\buildtextaccent\texthungarumlaut U}
+\definecharacter uhungarumlaut    {\buildtextaccent\texthungarumlaut u}
+
+\definecharacter Aogonek          {\buildtextogonek A}
+\definecharacter aogonek          {\buildtextogonek a}
+\definecharacter Eogonek          {\buildtextogonek E}
+\definecharacter eogonek          {\buildtextogonek e}
+\definecharacter Iogonek          {\buildtextogonek I}
+\definecharacter iogonek          {\buildtextogonek i}
+\definecharacter Uogonek          {\buildtextogonek U}
+\definecharacter uogonek          {\buildtextogonek u}
+
+\definecharacter Aring            {\buildtextaccent\textring A}
+\definecharacter aring            {\buildtextaccent\textring a}
+\definecharacter Uring            {\buildtextaccent\textring U}
+\definecharacter uring            {\buildtextaccent\textring u}
+
+\definecharacter Abreve           {\buildtextaccent\textbreve A}
+\definecharacter abreve           {\buildtextaccent\textbreve a}
+\definecharacter Ebreve           {\buildtextaccent\textbreve E}
+\definecharacter ebreve           {\buildtextaccent\textbreve e}
+\definecharacter Gbreve           {\buildtextaccent\textbreve G}
+\definecharacter gbreve           {\buildtextaccent\textbreve g}
+\definecharacter Ibreve           {\buildtextaccent\textbreve \dotlessI}
+\definecharacter ibreve           {\buildtextaccent\textbreve \dotlessi}
+\definecharacter Obreve           {\buildtextaccent\textbreve O}
+\definecharacter obreve           {\buildtextaccent\textbreve o}
+\definecharacter Ubreve           {\buildtextaccent\textbreve U}
+\definecharacter ubreve           {\buildtextaccent\textbreve u}
+
+\definecharacter Ccaron           {\buildtextaccent\textcaron C}
+\definecharacter ccaron           {\buildtextaccent\textcaron c}
+\definecharacter Dcaron           {\buildtextaccent\textcaron D}
+\definecharacter dcaron           {\buildtextaccent\textcaron d}
+\definecharacter Ecaron           {\buildtextaccent\textcaron E}
+\definecharacter ecaron           {\buildtextaccent\textcaron e}
+\definecharacter Lcaron           {\buildtextaccent\textcaron L}
+\definecharacter lcaron           {\buildtextaccent\textcaron l}
+\definecharacter Ncaron           {\buildtextaccent\textcaron N}
+\definecharacter ncaron           {\buildtextaccent\textcaron n}
+\definecharacter Rcaron           {\buildtextaccent\textcaron R}
+\definecharacter rcaron           {\buildtextaccent\textcaron r}
+\definecharacter Scaron           {\buildtextaccent\textcaron S}
+\definecharacter scaron           {\buildtextaccent\textcaron s}
+\definecharacter Tcaron           {\buildtextaccent\textcaron T}
+\definecharacter tcaron           {\buildtextaccent\textcaron t}
+\definecharacter Ycaron           {\buildtextaccent\textcaron Y}
+\definecharacter ycaron           {\buildtextaccent\textcaron y}
+\definecharacter Zcaron           {\buildtextaccent\textcaron Z}
+\definecharacter zcaron           {\buildtextaccent\textcaron z}
+
+\definecharacter Lstroke          {\hsmash{\char32}L}
+\definecharacter lstroke          {\hsmash{\char32}l}
+\definecharacter Ostroke          {\char31 } % "1F
+\definecharacter ostroke          {\char28 } % "1C
+
+\definecharacter aumlaut          {\moveaccent{-.1ex}\adiaeresis}
+\definecharacter eumlaut          {\moveaccent{-.1ex}\ediaeresis}
+\definecharacter iumlaut          {\moveaccent{-.1ex}\idiaeresis}
+\definecharacter oumlaut          {\moveaccent{-.1ex}\odiaeresis}
+\definecharacter uumlaut          {\moveaccent{-.1ex}\udiaeresis}
+
+\definecharacter Aumlaut          {\smashaccent\Adiaeresis}
+\definecharacter Eumlaut          {\smashaccent\Ediaeresis}
+\definecharacter Iumlaut          {\smashaccent\Idiaeresis}
+\definecharacter Oumlaut          {\smashaccent\Odiaeresis}
+\definecharacter Uumlaut          {\smashaccent\Udiaeresis}
+
+\definecharacter scommaaccent     {\buildtextbottomcomma s}
+\definecharacter Scommaaccent     {\buildtextbottomcomma S}
+\definecharacter tcommaaccent     {\buildtextbottomcomma t}
+\definecharacter Tcommaaccent     {\buildtextbottomcomma T}
+\definecharacter lcommaaccent     {\buildtextbottomcomma l}
+\definecharacter Lcommaaccent     {\buildtextbottomcomma L}
+
+\definecharacter Etilde           {\buildtextaccent\texttilde E}
+\definecharacter etilde           {\buildtextaccent\texttilde e}
+
+\definecharacter Ahook               {A}
+\definecharacter ahook               {a}
+\definecharacter Ehook               {E}
+\definecharacter ehook               {e}
+\definecharacter Ihook               {I}
+\definecharacter ihook               {i}
+\definecharacter Ohook               {O}
+\definecharacter ohook               {o}
+\definecharacter Uhook               {U}
+\definecharacter uhook               {u}
+\definecharacter Yhook               {Y}
+\definecharacter yhook               {y}
+
+\definecharacter Acircumflexgrave    {\Acircumflex}
+\definecharacter Acircumflexacute    {\Acircumflex}
+\definecharacter Acircumflextilde    {\Acircumflex}
+\definecharacter Acircumflexhook     {\Acircumflex}
+\definecharacter acircumflexgrave    {\acircumflex}
+\definecharacter acircumflexacute    {\acircumflex}
+\definecharacter acircumflextilde    {\acircumflex}
+\definecharacter acircumflexhook     {\acircumflex}
+\definecharacter Ecircumflexgrave    {\Ecircumflex}
+\definecharacter Ecircumflexacute    {\Ecircumflex}
+\definecharacter Ecircumflextilde    {\Ecircumflex}
+\definecharacter Ecircumflexhook     {\Ecircumflex}
+\definecharacter ecircumflexgrave    {\ecircumflex}
+\definecharacter ecircumflexacute    {\ecircumflex}
+\definecharacter ecircumflextilde    {\ecircumflex}
+\definecharacter ecircumflexhook     {\ecircumflex}
+\definecharacter Ocircumflexgrave    {\Ocircumflex}
+\definecharacter Ocircumflexacute    {\Ocircumflex}
+\definecharacter Ocircumflextilde    {\Ocircumflex}
+\definecharacter Ocircumflexhook     {\Ocircumflex}
+\definecharacter ocircumflexgrave    {\ocircumflex}
+\definecharacter ocircumflexacute    {\ocircumflex}
+\definecharacter ocircumflextilde    {\ocircumflex}
+\definecharacter ocircumflexhook     {\ocircumflex}
+
+\definecharacter Abrevegrave         {\Abreve}
+\definecharacter Abreveacute         {\Abreve}
+\definecharacter Abrevetilde         {\Abreve}
+\definecharacter Abrevehook          {\Abreve}
+\definecharacter abrevegrave         {\abreve}
+\definecharacter abreveacute         {\abreve}
+\definecharacter abrevetilde         {\abreve}
+\definecharacter abrevehook          {\abreve}
+
+\definecharacter Adotbelow           {\buildtextbottomdot A}
+\definecharacter adotbelow           {\buildtextbottomdot a}
+\definecharacter Edotbelow           {\buildtextbottomdot E}
+\definecharacter edotbelow           {\buildtextbottomdot e}
+\definecharacter Idotbelow           {\buildtextbottomdot I}
+\definecharacter idotbelow           {\buildtextbottomdot i}
+\definecharacter Odotbelow           {\buildtextbottomdot O}
+\definecharacter odotbelow           {\buildtextbottomdot o}
+\definecharacter Udotbelow           {\buildtextbottomdot U}
+\definecharacter udotbelow           {\buildtextbottomdot u}
+\definecharacter Ydotbelow           {\buildtextbottomdot Y}
+\definecharacter ydotbelow           {\buildtextbottomdot y}
+
+\definecharacter Ohorndotbelow       {\buildtextbottomdot\Ohorn}
+\definecharacter ohorndotbelow       {\buildtextbottomdot\ohorn}
+\definecharacter Uhorndotbelow       {\buildtextbottomdot\Uhorn}
+\definecharacter uhorndotbelow       {\buildtextbottomdot\uhorn}
+
+\definecharacter Acircumflexdotbelow {\buildtextbottomdot\Acircumflex}
+\definecharacter acircumflexdotbelow {\buildtextbottomdot\acircumflex}
+\definecharacter Ecircumflexdotbelow {\buildtextbottomdot\Ecircumflex}
+\definecharacter ecircumflexdotbelow {\buildtextbottomdot\ecircumflex}
+\definecharacter Ocircumflexdotbelow {\buildtextbottomdot\Ocircumflex}
+\definecharacter ocircumflexdotbelow {\buildtextbottomdot\ocircumflex}
+\definecharacter Abrevedotbelow      {\buildtextbottomdot\Abreve}
+\definecharacter abrevedotbelow      {\buildtextbottomdot\abreve}
+
+\definecharacter Ohorn               {O}
+\definecharacter Ohorngrave          {\Ograve}
+\definecharacter Ohornacute          {\Oacute}
+\definecharacter Ohorntilde          {\Otilde}
+\definecharacter Ohornhook           {O}
+\definecharacter ohorn               {o}
+\definecharacter ohorngrave          {\ograve}
+\definecharacter ohornacute          {\oacute}
+\definecharacter ohorntilde          {\otilde}
+\definecharacter ohornhook           {o}
+\definecharacter Uhorn               {U}
+\definecharacter Uhorngrave          {\Ugrave}
+\definecharacter Uhornacute          {\Uacute}
+\definecharacter Uhorntilde          {\Utilde}
+\definecharacter Uhornhook           {U}
+\definecharacter uhorn               {u}
+\definecharacter uhorngrave          {\ugrave}
+\definecharacter uhornacute          {\uacute}
+\definecharacter uhorntilde          {\utilde}
+\definecharacter uhornhook           {u}
+
+\stopencoding
+
+%D Needed for transliterated chinese (provided by Tobias Burnus).
+
+\startencoding[default]
+
+\definecharacter acaron {\buildtextaccent\textcaron a}         % U+01CE
+\definecharacter icaron {\buildtextaccent\textcaron \dotlessi} % U+01D0
+\definecharacter ocaron {\buildtextaccent\textcaron o}         % U+01D2
+\definecharacter ucaron {\buildtextaccent\textcaron u}         % U+01D4
+
+\stopencoding
+
+%D Greek (moved to here):
+
+\startencoding[default]
+
+% Uppercase Greek letters
+
+\definecharacter greekAlpha   {\Alpha}
+\definecharacter greekBeta    {\Beta}
+\definecharacter greekGamma   {\Gamma}
+\definecharacter greekDelta   {\Delta}
+\definecharacter greekEpsilon {\Epsilon}
+\definecharacter greekZeta    {\Zeta}
+\definecharacter greekEta     {\Eta}
+\definecharacter greekTheta   {\Theta}
+\definecharacter greekIota    {\Iota}
+\definecharacter greekKappa   {\Kappa}
+\definecharacter greekLambda  {\Lambda}
+\definecharacter greekMu      {\Mu}
+\definecharacter greekNu      {\Nu}
+\definecharacter greekXi      {\Xi}
+\definecharacter greekOmicron {\Omicron}
+\definecharacter greekPi      {\Pi}
+\definecharacter greekRho     {\Rho}
+\definecharacter greekSigma   {\Sigma}
+\definecharacter greekTau     {\Tau}
+\definecharacter greekUpsilon {\Upsilon}
+\definecharacter greekPhi     {\Phi}
+\definecharacter greekChi     {\Chi}
+\definecharacter greekPsi     {\Psi}
+\definecharacter greekOmega   {\Omega}
+
+% Lowercase Greek letters
+
+\definecharacter greekalpha      {\alpha}
+\definecharacter greekbeta       {\beta}
+\definecharacter greekbetaalt    {\beta}
+\definecharacter greekgamma      {\gamma}
+\definecharacter greekdelta      {\delta}
+\definecharacter greekepsilon    {\varepsilon}
+\definecharacter greekepsilonalt {\epsilon}
+\definecharacter greekzeta       {\zeta}
+\definecharacter greeketa        {\eta}
+\definecharacter greektheta      {\theta}
+\definecharacter greekthetaalt   {\vartheta}
+\definecharacter greekiota       {\iota}
+\definecharacter greekkappa      {\kappa}
+\definecharacter greeklambda     {\lambda}
+\definecharacter greekmu         {\mu}
+\definecharacter greeknu         {\nu}
+\definecharacter greekxi         {\xi}
+\definecharacter greekomicron    {\omicron}
+\definecharacter greekpi         {\pi}
+\definecharacter greekrho        {\rho}
+\definecharacter greeksigma      {\sigma}
+\definecharacter greekfinalsigma {\varsigma}
+\definecharacter greektau        {\tau}
+\definecharacter greekupsilon    {\upsilon}
+\definecharacter greekphi        {\varphi}
+\definecharacter greekphialt     {\phi}
+\definecharacter greekchi        {\chi}
+\definecharacter greekpsi        {\psi}
+\definecharacter greekomega      {\omega}
+
+% Accented Uppercase Greek letters
+
+\definecharacter greekAlphatonos       {'A}
+\definecharacter greekEpsilontonos     {'E}
+\definecharacter greekEtatonos         {'H}
+\definecharacter greekIotatonos        {'I}
+\definecharacter greekOmicrontonos     {'O}
+\definecharacter greekUpsilontonos     {'U}
+\definecharacter greekOmegatonos       {'W}
+\definecharacter greekIotadialytika    {"I}
+\definecharacter greekUpsilondialytika {"U}
+
+% Accented Lowercase Greek letters
+
+\definecharacter greekalphatonos            {'a}
+\definecharacter greekepsilontonos          {'e}
+\definecharacter greeketatonos              {'h}
+\definecharacter greekiotatonos             {'i}
+\definecharacter greekomicrontonos          {'o}
+\definecharacter greekupsilontonos          {'u}
+\definecharacter greekomegatonos            {'w}
+\definecharacter greekiotadialytika         {"i}
+\definecharacter greekupsilondialytika      {"u}
+\definecharacter greekiotadialytikatonos    {'"i}
+\definecharacter greekupsilondialytikatonos {'"u}
+
+% Miscellaneous Greek symbols
+
+\definecharacter greekleftquot       {((}
+\definecharacter greekrightquot      {))}
+\definecharacter greektonos          {'}
+\definecharacter greekdialytikatonos {'"}
+\definecharacter greekapostrophos    {''}
+
+\stopencoding
+
+%D Cyrillic (moved to here):
+
+\startencoding[default]
+
+\definecharacter cyrillicA      {A}
+\definecharacter cyrillicB      {B}
+\definecharacter cyrillicV      {V}
+\definecharacter cyrillicG      {G}
+\definecharacter cyrillicD      {D}
+\definecharacter cyrillicE      {E}
+\definecharacter cyrillicZH     {ZH}
+\definecharacter cyrillicZ      {Z}
+\definecharacter cyrillicI      {I}
+\definecharacter cyrillicISHRT  {ISHRT}
+\definecharacter cyrillicK      {K}
+\definecharacter cyrillicL      {L}
+\definecharacter cyrillicM      {M}
+\definecharacter cyrillicN      {N}
+\definecharacter cyrillicO      {O}
+\definecharacter cyrillicP      {P}
+\definecharacter cyrillicR      {R}
+\definecharacter cyrillicS      {S}
+\definecharacter cyrillicT      {T}
+\definecharacter cyrillicU      {U}
+\definecharacter cyrillicF      {F}
+\definecharacter cyrillicH      {H}
+\definecharacter cyrillicC      {C}
+\definecharacter cyrillicCH     {CH}
+\definecharacter cyrillicSH     {SH}
+\definecharacter cyrillicSHCH   {SHCH}
+\definecharacter cyrillicHRDSN  {HRDSN}
+\definecharacter cyrillicERY    {ERY}
+\definecharacter cyrillicSFTSN  {SFTSN}
+\definecharacter cyrillicEREV   {EREV}
+\definecharacter cyrillicYU     {YU}
+\definecharacter cyrillicYA     {YA}
+\definecharacter cyrillicGUP    {GUP}
+\definecharacter cyrillicGHCRS  {GHCRS}
+\definecharacter cyrillicDJE    {DJE}
+\definecharacter cyrillicTSHE   {TSHE}
+\definecharacter cyrillicSHHA   {SHHA}
+\definecharacter cyrillicZHDSC  {ZHDSC}
+\definecharacter cyrillicZDSC   {ZDSC}
+\definecharacter cyrillicLJE    {LJE}
+\definecharacter cyrillicYI     {YI}
+\definecharacter cyrillicKDSC   {KDSC}
+\definecharacter cyrillicKBEAK  {KBEAK}
+\definecharacter cyrillicKVCRS  {KVCRS}
+\definecharacter cyrillicAE     {AE}
+\definecharacter cyrillicNDSC   {NDSC}
+\definecharacter cyrillicNG     {NG}
+\definecharacter cyrillicDZE    {DZE}
+\definecharacter cyrillicOTLD   {OTLD}
+\definecharacter cyrillicSDSC   {SDSC}
+\definecharacter cyrillicUSHRT  {USHRT}
+\definecharacter cyrillicY      {Y}
+\definecharacter cyrillicYHCRS  {YHCRS}
+\definecharacter cyrillicHDSC   {HDSC}
+\definecharacter cyrillicDZHE   {DZHE}
+\definecharacter cyrillicCHVCRS {CHVCRS}
+\definecharacter cyrillicCHRDSC {CHRDSC}
+\definecharacter cyrillicIE     {IE}
+\definecharacter cyrillicSCHWA  {SCHWA}
+\definecharacter cyrillicNJE    {NJE}
+\definecharacter cyrillicYO     {YO}
+\definecharacter cyrillicII     {II}
+\definecharacter cyrillicJE     {JE}
+\definecharacter cyrillicQ      {Q}
+\definecharacter cyrillicW      {W}
+
+\definecharacter cyrillica      {a}
+\definecharacter cyrillicb      {b}
+\definecharacter cyrillicv      {v}
+\definecharacter cyrillicg      {g}
+\definecharacter cyrillicd      {d}
+\definecharacter cyrillice      {e}
+\definecharacter cyrilliczh     {zh}
+\definecharacter cyrillicz      {z}
+\definecharacter cyrillici      {i}
+\definecharacter cyrillicishrt  {ishrt}
+\definecharacter cyrillick      {k}
+\definecharacter cyrillicl      {l}
+\definecharacter cyrillicm      {m}
+\definecharacter cyrillicn      {n}
+\definecharacter cyrillico      {o}
+\definecharacter cyrillicp      {p}
+\definecharacter cyrillicr      {r}
+\definecharacter cyrillics      {s}
+\definecharacter cyrillict      {t}
+\definecharacter cyrillicu      {u}
+\definecharacter cyrillicf      {f}
+\definecharacter cyrillich      {h}
+\definecharacter cyrillicc      {c}
+\definecharacter cyrillicch     {ch}
+\definecharacter cyrillicsh     {sh}
+\definecharacter cyrillicshch   {shch}
+\definecharacter cyrillichrdsn  {hrdsn}
+\definecharacter cyrillicery    {ery}
+\definecharacter cyrillicsftsn  {sftsn}
+\definecharacter cyrillicerev   {erev}
+\definecharacter cyrillicyu     {yu}
+\definecharacter cyrillicya     {ya}
+\definecharacter cyrillicgup    {gup}
+\definecharacter cyrillicghcrs  {ghcrs}
+\definecharacter cyrillicdje    {dje}
+\definecharacter cyrillictshe   {tshe}
+\definecharacter cyrillicshha   {shha}
+\definecharacter cyrilliczhdsc  {zhdsc}
+\definecharacter cyrilliczdsc   {zdsc}
+\definecharacter cyrilliclje    {lje}
+\definecharacter cyrillicyi     {yi}
+\definecharacter cyrillickdsc   {kdsc}
+\definecharacter cyrillickbeak  {kbeak}
+\definecharacter cyrillickvcrs  {kvcrs}
+\definecharacter cyrillicae     {ae}
+\definecharacter cyrillicndsc   {ndsc}
+\definecharacter cyrillicng     {ng}
+\definecharacter cyrillicdze    {dze}
+\definecharacter cyrillicotld   {otld}
+\definecharacter cyrillicsdsc   {sdsc}
+\definecharacter cyrillicushrt  {ushrt}
+\definecharacter cyrillicy      {y}
+\definecharacter cyrillicyhcrs  {yhcrs}
+\definecharacter cyrillichdsc   {hdsc}
+\definecharacter cyrillicdzhe   {dzhe}
+\definecharacter cyrillicchvcrs {chvcrs}
+\definecharacter cyrillicchrdsc {chrdsc}
+\definecharacter cyrillicie     {ie}
+\definecharacter cyrillicschwa  {schwa}
+\definecharacter cyrillicnje    {nje}
+\definecharacter cyrillicyo     {yo}
+\definecharacter cyrillicii     {ii}
+\definecharacter cyrillicje     {je}
+\definecharacter cyrillicq      {q}
+\definecharacter cyrillicw      {w}
+
+\definecharacter cyrillicGJE      {\'\cyrillicG}
+\definecharacter cyrillicgje      {\'\cyrillicg}
+\definecharacter cyrillicKJE      {\'\cyrillicK}
+\definecharacter cyrillickje      {\'\cyrillick}
+
+\stopencoding
+
+\def\cyrillicio{\cyrillicyo}
+\def\cyrillicIO{\cyrillicYO}
+
+%D Hebrew:
+
+\startencoding[default]
+
+\definecharacter hebrewAlef       {'}
+\definecharacter hebrewBet        {b}
+\definecharacter hebrewGimel      {g}
+\definecharacter hebrewDalet      {d}
+\definecharacter hebrewHe         {h}
+\definecharacter hebrewVav        {w}
+\definecharacter hebrewZayin      {z}
+\definecharacter hebrewHet        {\hstroke}
+\definecharacter hebrewTet        {\tcedilla}
+\definecharacter hebrewYod        {y}
+\definecharacter hebrewKaffinal   {k}
+\definecharacter hebrewKaf        {k}
+\definecharacter hebrewLamed      {l}
+\definecharacter hebrewMemfinal   {m}
+\definecharacter hebrewMem        {m}
+\definecharacter hebrewNunfinal   {n}
+\definecharacter hebrewNun        {n}
+\definecharacter hebrewSamekh     {s}
+\definecharacter hebrewAyin       {\gdotaccent}
+\definecharacter hebrewPefinal    {p}
+\definecharacter hebrewPe         {p}
+\definecharacter hebrewTsadifinal {\scedilla}
+\definecharacter hebrewTsadi      {\scedilla}
+\definecharacter hebrewQof        {q}
+\definecharacter hebrewResh       {r}
+\definecharacter hebrewShin       {\scaron}
+\definecharacter hebrewTav        {th}
+
+\stopencoding
+
+%D A few goodies:
+
+\def\eszett{\ssharp}
+\def\Eszett{\Ssharp}
+
+\def\lslash{\lstroke}
+\def\Lslash{\Lstroke}
+\def\dslash{\dstroke}
+\def\Dslash{\Dstroke}
+\def\oslash{\ostroke}
+\def\Oslash{\Ostroke}
+
+\def\dcroat{\dstroke}
+\def\Dcroat{\Dstroke}
+
+% \startencoding [default]
+%
+% \definecharacter scommaaccent {\scedilla}
+% \definecharacter Scommaaccent {\Scedilla}
+% \definecharacter tcommaaccent {\tcedilla}
+% \definecharacter Tcommaaccent {\Tcedilla}
+%
+% \stopencoding
+
+% for plain tex's sake
+
+\def\S       {\sectionmark  }
+\def\P       {\paragraphmark}
+
+% for latex users sake
+
+\def\textS   {\sectionmark  }
+\def\textP   {\paragraphmark}
+
+% for old times sake
+
+\def\florin  {\textflorin  }  \def\florijn{\textflorin}
+\def\dollar  {\textdollar  }
+\def\pound   {\textsterling}
+\def\sterling{\textsterling}
+
+% idem
+
+\def\promille{\perthousand}
+\def\permille{\perthousand}
+\def\procent {\percent }
+\def\permine {\fakepermine}
+
+% some more
+
+\def\hyphen            {\softhyphen}
+\def\cwm               {\compoundwordmark}
+\def\nonbreakinghyphen {\hyphen}
+\def\breakinghyphen    {\hyphen\prewordbreak}
+
+% quotes
+
+\def\lowerleftsingleninequote  {\quotesinglebase}
+\def\lowerleftdoubleninequote  {\quotedblbase}
+\def\lowerrightsingleninequote {\quotesinglebase}
+\def\lowerrightdoubleninequote {\quotedblbase}
+
+\def\upperleftsingleninequote  {\quoteright}
+\def\upperleftdoubleninequote  {\quotedblright}
+\def\upperrightsingleninequote {\quoteright}
+\def\upperrightdoubleninequote {\quotedblright}
+
+\def\upperleftsinglesixquote   {\quoteleft}
+\def\upperleftdoublesixquote   {\quotedblleft}
+\def\upperrightsinglesixquote  {\quoteleft}
+\def\upperrightdoublesixquote  {\quotedblleft}
+
+\def\leftsubguillemot          {\guilsingleleft}
+\def\rightsubguillemot         {\guilsingleright}
+

+%D A couple of fallbacks suggestion by users, slightly
+%D adapted and obscured by memory saving hacks.
+
+\unprotect
+
+\startencoding[default]
+
+\definecharacter textcent        {c\rlap{\hskip-.2\s!em
+  \vrule\!!width.2\s!pt\!!height1.2\s!ex\!!depth.2\s!ex}}
+
+\definecharacter texteuro        {C\rlap{\hskip-.75\s!em
+  \vrule\!!width.4\s!em\!!height.85\s!ex\!!depth-.8\s!ex}}
+
+\definecharacter textblacksquare {\dontleavehmode\hbox{%
+  \vrule\!!width.3\s!em\!!height.4\s!em\!!depth-.1\s!em}}
+
+\definecharacter textbrokenbar   {\dontleavehmode\hbox{\kern.05\s!em
+  \vrule\!!width.4\s!pt\!!height1.8\s!ex\!!depth-.85\s!ex
+                                  \llap{%
+  \vrule\!!width.4\s!pt\!!height.35\s!ex\!!depth.6\s!ex}%
+                                  \kern.05\s!em}}
+
+\stopencoding
+
+\protect
+

+%D We also use symbolic names for math accents.
+
+\startencoding[default]
+
+\definecharacter mathacute      "7013
+\definecharacter mathgrave      "7012
+\definecharacter mathddot       "707F
+\definecharacter mathtilde      "707E
+\definecharacter mathbar        "7016
+\definecharacter mathbreve      "7015
+\definecharacter mathcheck      "7014
+\definecharacter mathhat        "705E
+\definecharacter mathvec        "017E
+\definecharacter mathdot        "705F
+\definecharacter mathwidetilde  "0365
+\definecharacter mathwidehat    "0362
+
+\stopencoding
+
+% \startencoding [default]
+
+% \definecommand prime       {\mathematics{'}}
+% \definecommand doubleprime {\mathematics{''}}
+% \definecommand tripleprime {\mathematics{'''}}
+
+% \stopencoding
+
+\ifx\zdot\undefined \def\zdot{\zdotaccent} \fi
+\ifx\Zdot\undefined \def\Zdot{\Zdotaccent} \fi
+
+\ifx\greeklamda\undefined \def\greeklamda{\greeklambda} \fi
+\ifx\greekLamda\undefined \def\greekLamda{\greekLambda} \fi
+
+\ifx\leftguillemet \undefined \def\leftguillemet {\leftguillemot } \fi
+\ifx\rightguillemet\undefined \def\rightguillemet{\rightguillemot} \fi
+
+%D New:
+
+\startencoding[\s!default]
+
+\definecharacter schwa      {\hbox{\rotate[\c!rotation=180,\c!location=\v!high]{\hbox{e}}}}
+\definecharacter schwagrave {\buildtextgrave\schwa}
+
+\stopencoding
+
+%D Also new, from Taco, for Mojca, who wanted another 8~regimes.
+
+\startencoding[\s!default]
+
+\definecharacter texthorizontalbar {{\endash\kern\zeropoint\endash}}
+\definecharacter textdong          {\underbar{\dstroke}}
+
+\stopencoding
+
+%D Goodie (makes more sense):
+
+\def\normalcontrolspace
+  {\getglyph{ComputerModernMono}{\char32}}
+
+\def\fakedcontrolspace % can be virtual in luatex
+  {\dontleavehmode\hbox
+     {\scratchdimen.1ex%
+      \kern\scratchdimen
+      \vrule \!!width\scratchdimen \!!height5.5\scratchdimen \!!depth3\scratchdimen
+      \vrule \!!width\dimexpr.5em-4\scratchdimen\relax \!!height-2\scratchdimen \!!depth3\scratchdimen
+      \vrule \!!width\scratchdimen \!!height5.5\scratchdimen \!!depth3\scratchdimen
+      \kern\scratchdimen}}
+
+\def\fakecontrolspace{\let\normalcontrolspace\fakedcontrolspace}
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-ec.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-ec.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-ec.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,295 @@
+%D \module
+%D   [     file=enco-ec,
+%D      version=2000.05.07, % 1999.16.07,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=\LATEX\ EC Encoding,
+%D       author={Patrick Gundlach, Hans Hagen, Taco Hoekwater, Mojca Miklavec},
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This is \LATEX2e's T1 encoding vector. All standard \LATEX\
+%D accents will work, including \type{\k}. The only accent that
+%D does not work is \type{\t} (there is no tie in T1 encoding).
+%D
+%D Annoyingly, most \POSTSCRIPT\ fonts do not have \type
+%D {\dotlessj}, and T1 encoding does not make the various
+%D prebuilts with \type {j} available. When this is the case:
+%D
+%D \starttyping
+%D \startencoding[ec]
+%D \definecharacter dotlessj {j}
+%D \stopencoding
+%D \stoptyping
+%D
+%D is a way out.
+
+%D There is hardly a point in supporting TS1 encoding.
+
+\startmapping[ec]
+
+% a problem is that the uppercase of dstroke (158) and eth (240)
+% is the same glyph (208) so we cannot do lowercase mapping there
+
+\definecasemaps 128 to 156 lc +32 uc   0
+\definecasemap  157 `i  157               % Idotaccent i
+\definecasemap  158 158 208               % dstroke Eth
+\definecasemap  159 159 159               % sectionmark
+\definecasemaps 160 to 187 lc   0 uc -32
+\resetcaserange 189 to 191                % exclamdown, questiondown, textsterling
+\definecasemaps 192 to 223 lc +32 uc   0
+\definecasemaps 224 to 254 lc   0 uc -32
+\definecaseswap 255 223                   % ssharp (else patterns fail)
+\definecaseswap  25 `I                    % dotless i
+
+% 156 vs. 188 IJligature
+
+%D Some languages need this:
+
+% \definecaseself 34 % quotedbl
+% \definecaseself 18 % quotedblbase
+% \definecaseself 16 % quotedblleft
+% \definecaseself 17 % quotedblright
+% \definecaseself 39 % quotesingle
+% \definecaseself 13 % quotesinglebase
+% \definecaseself 96 % quoteleft
+\definecaseself 39 % quoteright
+
+%D So far for the mapping.
+
+%D The following characters are kind of dangerous,
+%D that is, they are normally not part of fonts, unless
+%D explicitly constructed.
+%D
+%D \startitemize[columns,two]
+%D \item \type{\dotlessj} - but then it may not be defined!!!!
+%D \item \type{\IJligature}
+%D \item \type{\ijligature}
+%D \item \type{\Ssharp}
+%D \item \type{\perthousand}
+%D \item \type{\compoundwordmark}
+%  \item \type{\textvisiblespace}
+%D \stopitemize
+
+%D So, for the moment we nil them; we can always create
+%D another vector if needed.
+
+\stopmapping
+
+\startencoding[ec][ec] % second arg defines auto regime, needed here ?
+
+\definecharacter textgrave         0
+\definecharacter textacute         1
+\definecharacter textcircumflex    2
+\definecharacter texttilde         3
+\definecharacter textdiaeresis     4
+\definecharacter texthungarumlaut  5
+\definecharacter textring          6
+\definecharacter textcaron         7
+\definecharacter textbreve         8
+\definecharacter textmacron        9
+\definecharacter textdotaccent    10
+\definecharacter textcedilla      11
+\definecharacter textogonek       12
+\definecharacter quotesinglebase  13
+\definecharacter guilsingleleft   14
+\definecharacter guilsingleright  15
+\definecharacter quotedblleft     16
+\definecharacter quotedblright    17
+\definecharacter quotedblbase     18
+\definecharacter leftguillemot    19
+\definecharacter rightguillemot   20
+\definecharacter endash           21
+\definecharacter emdash           22
+%definecharacter compoundwordmark 23
+%definecharacter perthousand      24
+\definecharacter dotlessi         25 % or when missing: {j}
+\definecharacter dotlessj         26
+% ff                              27
+% fi                              28
+% fl                              29
+% ffi                             30
+% ffl                             31
+%definecharacter textvisiblespace 32
+% exclam         !                33
+\definecharacter quotedbl         34
+% numbersign     #                35
+% dollar         $                36
+\definecharacter percent          37
+% ampersand      &                38
+%definecharacter quotesingle      39 % fake 'm TODO:enco-def!!!!
+\definecharacter quoteright       39
+% parenleft      (                40
+% parenright     )                41
+% asterisk       *                42
+% plus           +                43
+% comma          ,                44
+\definecharacter softhyphen       45
+% period         .                46
+% slash          /                47
+% 0-9                          48-57
+% colon          :                58
+% semicolon      ;                59
+% less           <                60
+% equal          =                61
+% greater        >                62
+% question       ?                63
+% at             @                64
+% A-Z                          65-90
+% bracketleft    [                91
+\definecharacter textbackslash    92
+% bracketright   ]                93
+\definecharacter textasciicircum  94
+\definecharacter textunderscore   95
+\definecharacter quoteleft        96
+% a-z                         97-122
+\definecharacter textbraceleft   123
+\definecharacter textbraceright  125
+\definecharacter textasciitilde  126
+%definecharacter softhyphen      127 % -> 45 (127 often undefined)
+\definecharacter Abreve          128 % abreve          160
+\definecharacter Aogonek         129 % aogonek         161
+\definecharacter Cacute          130 % cacute          162
+\definecharacter Ccaron          131 % ccaron          163
+\definecharacter Dcaron          132 % dcaron          164
+\definecharacter Ecaron          133 % ecaron          165
+\definecharacter Eogonek         134 % eogonek         166
+\definecharacter Gbreve          135 % gbreve          167
+\definecharacter Lacute          136 % lacute          168
+\definecharacter Lcaron          137 % lcaron          169
+\definecharacter Lstroke         138 % lstroke         170
+\definecharacter Nacute          139 % nacute          171
+\definecharacter Ncaron          140 % ncaron          172
+\definecharacter Eng             141 % eng             173
+\definecharacter Neng            141 % Neng            173
+\definecharacter Ohungarumlaut   142 % ohungarumlaut   174
+\definecharacter Racute          143 % racute          175
+\definecharacter Rcaron          144 % rcaron          176
+\definecharacter Sacute          145 % sacute          177
+\definecharacter Scaron          146 % scaron          178
+\definecharacter Scedilla        147 % scedilla        179
+\definecharacter Tcaron          148 % tcaron          180
+\definecharacter Tcedilla        149 % tcedilla        181
+\definecharacter Uhungarumlaut   150 % uhungarumlaut   182
+\definecharacter Uring           151 % uring           183
+\definecharacter Ydiaeresis      152 % ydiaeresis      184
+\definecharacter Zacute          153 % zacute          185
+\definecharacter Zcaron          154 % zcaron          186
+\definecharacter Zdotaccent      155 % zdotaccent      187
+\definecharacter IJligature      156 % ijligature      188
+\definecharacter Idotaccent      157
+\definecharacter dstroke         158 % Dstroke         208
+\definecharacter sectionmark     159
+\definecharacter abreve          160 % Abreve          128
+\definecharacter aogonek         161 % Aogonek         129
+\definecharacter cacute          162 % Cacute          130
+\definecharacter ccaron          163 % Ccaron          131
+\definecharacter dcaron          164 % Dcaron          132
+\definecharacter ecaron          165 % Ecaron          133
+\definecharacter eogonek         166 % Eogonek         134
+\definecharacter gbreve          167 % Gbreve          135
+\definecharacter lacute          168 % Lacute          136
+\definecharacter lcaron          169 % Lcaron          137
+\definecharacter lstroke         170 % Lstroke         138
+\definecharacter nacute          171 % Nacute          139
+\definecharacter ncaron          172 % Ncaron          140
+\definecharacter eng             173 % Eng             141
+\definecharacter ohungarumlaut   174 % Ohungarumlaut   142
+\definecharacter racute          175 % Racute          143
+\definecharacter rcaron          176 % Rcaron          144
+\definecharacter sacute          177 % Sacute          145
+\definecharacter scaron          178 % Scaron          146
+\definecharacter scedilla        179 % Scedilla        147
+\definecharacter tcaron          180 % Tcaron          148
+\definecharacter tcedilla        181 % Tcedilla        149
+\definecharacter uhungarumlaut   182 % Uhungarumlaut   150
+\definecharacter uring           183 % Uring           151
+\definecharacter ydiaeresis      184 % Ydiaeresis      152
+\definecharacter zacute          185 % Zacute          153
+\definecharacter zcaron          186 % Zcaron          154
+\definecharacter zdotaccent      187 % Zdotaccent      155
+\definecharacter ijligature      188 % IJligature      156
+\definecharacter exclamdown      189
+\definecharacter questiondown    190
+\definecharacter textsterling    191
+\definecharacter Agrave          192 % agrave          224
+\definecharacter Aacute          193 % aacute          225
+\definecharacter Acircumflex     194 % acircumflex     226
+\definecharacter Atilde          195 % atilde          227
+\definecharacter Adiaeresis      196 % adiaeresis      228
+\definecharacter Aring           197 % aring           229
+\definecharacter AEligature      198 % aeligature      230
+\definecharacter Ccedilla        199 % ccedilla        231
+\definecharacter Egrave          200 % egrave          232
+\definecharacter Eacute          201 % eacute          233
+\definecharacter Ecircumflex     202 % ecircumflex     234
+\definecharacter Ediaeresis      203 % ediaeresis      235
+\definecharacter Igrave          204 % igrave          236
+\definecharacter Iacute          205 % iacute          237
+\definecharacter Icircumflex     206 % icircumflex     238
+\definecharacter Idiaeresis      207 % idiaeresis      239
+\definecharacter Eth             208 % eth             240
+\definecharacter Dstroke         208 % dstroke         158
+\definecharacter Ntilde          209 % ntilde          241
+\definecharacter Ograve          210 % ograve          242
+\definecharacter Oacute          211 % oacute          243
+\definecharacter Ocircumflex     212 % ocircumflex     244
+\definecharacter Otilde          213 % otilde          245
+\definecharacter Odiaeresis      214 % odiaeresis      246
+\definecharacter OEligature      215 % oeligature      247
+\definecharacter Ostroke         216 % ostroke         248
+\definecharacter Ugrave          217 % ugrave          249
+\definecharacter Uacute          218 % uacute          250
+\definecharacter Ucircumflex     219 % ucircumflex     251
+\definecharacter Udiaeresis      220 % udiaeresis      252
+\definecharacter Yacute          221 % yacute          253
+\definecharacter Thorn           222 % thorn           254
+\definecharacter Ssharp          223 % ssharp          255
+\definecharacter agrave          224 % Agrave          192
+\definecharacter aacute          225 % Aacute          193
+\definecharacter acircumflex     226 % Acircumflex     194
+\definecharacter atilde          227 % Atilde          195
+\definecharacter adiaeresis      228 % Adiaeresis      196
+\definecharacter aring           229 % Aring           197
+\definecharacter aeligature      230 % AEligature      198
+\definecharacter ccedilla        231 % Ccedilla        199
+\definecharacter egrave          232 % Egrave          200
+\definecharacter eacute          233 % Eacute          201
+\definecharacter ecircumflex     234 % Ecircumflex     202
+\definecharacter ediaeresis      235 % Ediaeresis      203
+\definecharacter igrave          236 % Igrave          204
+\definecharacter iacute          237 % Iacute          205
+\definecharacter icircumflex     238 % Icircumflex     206
+\definecharacter idiaeresis      239 % Idiaeresis      207
+\definecharacter eth             240 % Eth             208
+\definecharacter ntilde          241 % Ntilde          209
+\definecharacter ograve          242 % Ograve          210
+\definecharacter oacute          243 % Oacute          211
+\definecharacter ocircumflex     244 % Ocircumflex     212
+\definecharacter otilde          245 % Otilde          213
+\definecharacter odiaeresis      246 % Odiaeresis      214
+\definecharacter oeligature      247 % OEligature      215
+\definecharacter ostroke         248 % Ostroke         216
+\definecharacter ugrave          249 % Ugrave          217
+\definecharacter uacute          250 % Uacute          218
+\definecharacter ucircumflex     251 % Ucircumflex     219
+\definecharacter udiaeresis      252 % Udiaeresis      220
+\definecharacter yacute          253 % Yacute          221
+\definecharacter thorn           254 % Thorn           222
+\definecharacter ssharp          255 % Ssharp          223
+
+\stopencoding
+
+\startencoding[ec]
+
+\definecharacter Scommaaccent {\Scedilla}
+\definecharacter scommaaccent {\scedilla}
+\definecharacter Tcommaaccent {\Tcedilla}
+\definecharacter tcommaaccent {\tcedilla}
+
+\stopencoding
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-ecm.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-ecm.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-ecm.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,33 @@
+%D \module
+%D   [     file=enco-ec,
+%D      version=2000.05.07, 
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Glyphs that may not be present in EC,  
+%D       author=Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D The next typescript removes a few problematic characters 
+%D from the ec encoding vector. So, in case of troubles, say
+%D
+%D \starttyping
+%D \useencoding[ecm] % ec minus 
+%D \stoptyping 
+
+\startencoding[ec][ec]
+
+\definecharacter ijligature {ij}
+\definecharacter IJligature {IJ}
+\definecharacter Ssharp     {SS}
+\definecharacter tcaron     {\buildtextaccent\textcaron t}
+\definecharacter Tcedilla   {\buildtextcedilla T}
+\definecharacter tcedilla   {\buildtextcedilla t}
+\definecharacter ydiaeresis {\buildtextaccent\textdiaeresis y}
+
+\stopencoding
+
+\endinput 

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-el.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-el.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-el.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,272 @@
+%D \module
+%D   [     file=enco-el,
+%D      version=2005.08.24,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=EuroLetter,
+%D       author={Several Users},
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This EuroLetter encoding vector, also known as Dense Encoding is
+%D the result of discussion among users, most noticably Adam Lindsay,
+%D Mojka Miklavec, Patrick Gundlach, Taco Hoekwater and \unknown.
+%D It was a follow up of a thread started long ago where we
+%D discussed an encoding without the weird, never used symbols, but
+%D with as many characters as possible in order to support the utf-8
+%D input regime.
+
+\startencoding[el]
+
+\definecasemaps   1 to  15 lc +16 uc   0
+\definecasemaps  17 to  31 lc   0 uc -16
+
+\definecasemaps 128 to 159 lc +32 uc   0
+\definecasemaps 160 to 191 lc   0 uc -32
+
+\definecasemaps 192 to 223 lc +32 uc   0
+\definecasemaps 224 to 255 lc   0 uc -32
+
+\definecasemap   92  92 124
+\definecasemap   92 124  92
+
+\definecharacter dotlessi         160
+\definecharacter endash            32
+\definecharacter emdash            16
+
+\definecharacter aeligature       230
+\definecharacter AEligature       198
+\definecharacter oeligature       247
+\definecharacter OEligature       215
+
+\definecharacter ssharp            38
+
+\definecharacter thorn            254
+\definecharacter Thorn            222
+
+\definecharacter eth              240
+\definecharacter Eth              208
+
+\definecharacter exclamdown        42
+\definecharacter questiondown      43
+
+\definecharacter quotedbl          35
+\definecharacter quotedblbase      36
+\definecharacter quotedblleft      34
+\definecharacter quotedblright     35
+
+\definecharacter quotesingle       39
+\definecharacter quotesinglebase    0
+
+\definecharacter quoteleft         96
+\definecharacter quoteright        39
+
+\definecharacter guilsingleleft    60
+\definecharacter guilsingleright   62
+
+\definecharacter leftguillemot    123
+\definecharacter rightguillemot   125
+
+\definecharacter Acircumflex      194
+\definecharacter acircumflex      226
+%definecharacter Ccircumflex      {\buildtextaccent\textcircumflex C}
+%definecharacter ccircumflex      {\buildtextaccent\textcircumflex c}
+\definecharacter Ecircumflex      202
+\definecharacter ecircumflex      234
+%definecharacter Gcircumflex      {\buildtextaccent\textcircumflex G}
+%definecharacter gcircumflex      {\buildtextaccent\textcircumflex g}
+%definecharacter Hcircumflex      {\buildtextaccent\textcircumflex H}
+%definecharacter hcircumflex      {\buildtextaccent\textcircumflex h}
+\definecharacter Icircumflex      206
+\definecharacter icircumflex      238
+%definecharacter Jcircumflex      {\buildtextaccent\textcircumflex \dotlessJ}
+%definecharacter jcircumflex      {\buildtextaccent\textcircumflex \dotlessj}
+\definecharacter Ocircumflex      212
+\definecharacter ocircumflex      244
+%definecharacter Scircumflex      {\buildtextaccent\textcircumflex S}
+%definecharacter scircumflex      {\buildtextaccent\textcircumflex s}
+\definecharacter Ucircumflex      219
+\definecharacter ucircumflex      251
+\definecharacter Wcircumflex      154
+\definecharacter wcircumflex      186
+\definecharacter Ycircumflex      156
+\definecharacter ycircumflex      188
+
+\definecharacter Agrave           192
+\definecharacter agrave           224
+\definecharacter Egrave           200
+\definecharacter egrave           232
+\definecharacter Igrave           204
+\definecharacter igrave           236
+\definecharacter Ograve           210
+\definecharacter ograve           242
+\definecharacter Ugrave           217
+\definecharacter ugrave           249
+\definecharacter Ygrave           155
+\definecharacter ygrave           187
+
+\definecharacter Atilde           195
+\definecharacter atilde           227
+%definecharacter Itilde           {\buildtextaccent\texttilde \dotlessI}
+%definecharacter itilde           {\buildtextaccent\texttilde \dotlessi}
+\definecharacter Ntilde           209
+\definecharacter ntilde           241
+\definecharacter Otilde           213
+\definecharacter otilde           245
+%definecharacter Utilde           {\buildtextaccent\texttilde U}
+%definecharacter utilde           {\buildtextaccent\texttilde u}
+%definecharacter Ytilde           {\buildtextaccent\texttilde Y}
+%definecharacter ytilde           {\buildtextaccent\texttilde y}
+
+\definecharacter Adiaeresis       196
+\definecharacter adiaeresis       228
+\definecharacter Ediaeresis       203
+\definecharacter ediaeresis       235
+\definecharacter Idiaeresis       207
+\definecharacter idiaeresis       239
+\definecharacter Odiaeresis       214
+\definecharacter odiaeresis       246
+\definecharacter Udiaeresis       220
+\definecharacter udiaeresis       252
+\definecharacter Ydiaeresis       223
+\definecharacter ydiaeresis       255
+
+\definecharacter Aacute           193
+\definecharacter aacute           225
+\definecharacter Cacute             4
+\definecharacter cacute            20
+\definecharacter Eacute           201
+\definecharacter eacute           233
+\definecharacter Iacute           205
+\definecharacter iacute           237
+\definecharacter Lacute           132
+\definecharacter lacute           164
+\definecharacter Nacute           136
+\definecharacter nacute           168
+\definecharacter Oacute           211
+\definecharacter oacute           243
+\definecharacter Racute           141
+\definecharacter racute           173
+\definecharacter Sacute           144
+\definecharacter sacute           176
+\definecharacter Uacute           218
+\definecharacter uacute           250
+\definecharacter Yacute           221
+\definecharacter yacute           253
+\definecharacter Zacute           157
+\definecharacter zacute           189
+
+\definecharacter Dstroke            8
+\definecharacter dstroke           24
+\definecharacter Hstroke           92
+\definecharacter hstroke          124
+%definecharacter Tstroke          {T}
+%definecharacter tstroke          {t}
+
+\definecharacter Cdotaccent         6
+\definecharacter cdotaccent        22
+\definecharacter Edotaccent        10
+\definecharacter edotaccent        26
+\definecharacter Gdotaccent        15
+\definecharacter gdotaccent        31
+\definecharacter Idotaccent       128
+%definecharacter idotaccent       {\buildtextaccent\textdotaccent \dotlessi}
+\definecharacter Zdotaccent       159
+\definecharacter zdotaccent       191
+
+\definecharacter Amacron            2
+\definecharacter amacron           18
+\definecharacter Emacron           11
+\definecharacter emacron           27
+\definecharacter Imacron          129
+\definecharacter imacron          161
+\definecharacter Omacron          140
+\definecharacter omacron          172
+\definecharacter Umacron          152
+\definecharacter umacron          184
+
+\definecharacter Ccedilla         199
+\definecharacter ccedilla         231
+\definecharacter Scedilla         146
+\definecharacter scedilla         178
+
+\definecharacter Gcommaaccent      14
+\definecharacter gcommaaccent      30
+\definecharacter Kcommaaccent     131
+\definecharacter kcommaaccent     163
+\definecharacter Lcommaaccent     135
+\definecharacter lcommaaccent     167
+\definecharacter Ncommaaccent     138
+\definecharacter ncommaaccent     170
+\definecharacter Rcommaaccent     143
+\definecharacter rcommaaccent     175
+%definecharacter Tcedilla         149 % there is no tcedilla in encoding
+%definecharacter tcedilla         181
+
+\definecharacter Scommaaccent     147
+\definecharacter scommaaccent     179
+\definecharacter Tcommaaccent     149
+\definecharacter tcommaaccent     181
+
+\definecharacter Ohungarumlaut    139
+\definecharacter ohungarumlaut    171
+\definecharacter Uhungarumlaut    150
+\definecharacter uhungarumlaut    182
+
+\definecharacter Aogonek            3
+\definecharacter aogonek           19
+\definecharacter Eogonek           12
+\definecharacter eogonek           28
+\definecharacter Iogonek          130
+\definecharacter iogonek          162
+\definecharacter Uogonek          153
+\definecharacter uogonek          185
+
+\definecharacter Aring            197
+\definecharacter aring            229
+\definecharacter Uring            151
+\definecharacter uring            183
+
+\definecharacter Abreve            1
+\definecharacter abreve            17
+%definecharacter Ebreve           {\buildtextaccent\textbreve E}
+%definecharacter ebreve           {\buildtextaccent\textbreve e}
+\definecharacter Gbreve            13
+\definecharacter gbreve            29
+%definecharacter Ibreve           {\buildtextaccent\textbreve \dotlessI}
+%definecharacter ibreve           {\buildtextaccent\textbreve \dotlessi}
+%definecharacter Obreve           {\buildtextaccent\textbreve O}
+%definecharacter obreve           {\buildtextaccent\textbreve o}
+%definecharacter Ubreve           {\buildtextaccent\textbreve U}
+%definecharacter ubreve           {\buildtextaccent\textbreve u}
+
+\definecharacter Ccaron             5
+\definecharacter ccaron            21
+\definecharacter Dcaron             7
+\definecharacter dcaron            23
+\definecharacter Ecaron             9
+\definecharacter ecaron            25
+\definecharacter Lcaron           133
+\definecharacter lcaron           165
+\definecharacter Ncaron           137
+\definecharacter ncaron           169
+\definecharacter Rcaron           142
+\definecharacter rcaron           174
+\definecharacter Scaron           145
+\definecharacter scaron           177
+\definecharacter Tcaron           148
+\definecharacter tcaron           180
+%definecharacter Ycaron           {\buildtextaccent\textcaron Y}
+%definecharacter ycaron           {\buildtextaccent\textcaron y}
+\definecharacter Zcaron           158
+\definecharacter zcaron           190
+
+\definecharacter Lstroke          134
+\definecharacter lstroke          166
+\definecharacter Ostroke          216
+\definecharacter ostroke          248
+
+\stopencoding

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-fde.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-fde.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-fde.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,126 @@
+%D \module
+%D   [     file=enco-fde,
+%D      version=2000.08.20,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=German Input Filter,
+%D       author=Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\installactivecharacter "
+
+\startlanguagespecifics[\s!de]
+
+  \installcompoundcharacter "a {\aumlaut\midworddiscretionary}
+  \installcompoundcharacter "e {\eumlaut\midworddiscretionary}
+  \installcompoundcharacter "i {\iumlaut\midworddiscretionary}
+  \installcompoundcharacter "o {\oumlaut\midworddiscretionary}
+  \installcompoundcharacter "u {\uumlaut\midworddiscretionary}
+  \installcompoundcharacter "s {\ssharp}
+  \installcompoundcharacter "z {\ssharp}
+
+  \installcompoundcharacter "A {\Aumlaut}
+  \installcompoundcharacter "E {\Eumlaut}
+  \installcompoundcharacter "I {\Iumlaut}
+  \installcompoundcharacter "O {\Oumlaut}
+  \installcompoundcharacter "U {\Uumlaut}
+  \installcompoundcharacter "Z {SZ}
+  \installcompoundcharacter "S {SS}
+
+\stoplanguagespecifics
+
+\startlanguagespecifics[\s!de]
+
+  \installcompoundcharacter "ck {\discretionary {k-}{k}{ck}}
+  \installcompoundcharacter "ff {\discretionary{ff-}{f}{ff}}
+  \installcompoundcharacter "ll {\discretionary{ll-}{l}{ll}}
+  \installcompoundcharacter "mm {\discretionary{mm-}{m}{mm}}
+  \installcompoundcharacter "nn {\discretionary{nn-}{n}{nn}}
+  \installcompoundcharacter "pp {\discretionary{pp-}{p}{pp}}
+  \installcompoundcharacter "rr {\discretionary{rr-}{r}{rr}}
+  \installcompoundcharacter "tt {\discretionary{tt-}{t}{tt}}
+
+  \installcompoundcharacter "CK {\discretionary {K-}{K}{CK}}
+  \installcompoundcharacter "FF {\discretionary{FF-}{F}{FF}}
+  \installcompoundcharacter "LL {\discretionary{LL-}{L}{LL}}
+  \installcompoundcharacter "MM {\discretionary{MM-}{M}{MM}}
+  \installcompoundcharacter "NN {\discretionary{NN-}{N}{NN}}
+  \installcompoundcharacter "PP {\discretionary{PP-}{P}{PP}}
+  \installcompoundcharacter "RR {\discretionary{RR-}{R}{RR}}
+  \installcompoundcharacter "TT {\discretionary{TT-}{T}{TT}}
+
+\stoplanguagespecifics
+
+\startlanguagespecifics[\s!de]
+
+  \installcompoundcharacter "` {\startdelimitedtext[\v!quotation]}
+  \installcompoundcharacter "' {\stopdelimitedtext}
+  \installcompoundcharacter ". {\kern.1em\ignorespaces}
+
+  %installcompoundcharacter "` {\languageparameter\c!leftquotation }
+  %installcompoundcharacter "' {\languageparameter\c!rightquotation}
+
+  \def\setupDElanguage
+    {\setuplanguage
+       [\s!de]
+       [\c!leftsentence=\leftguillemot,
+        \c!rightsentence=\rightguillemot,
+        \c!leftsubsentence=\leftsubguillemot,
+        \c!rightsubsentence=\rightsubguillemot]}
+
+  \installcompoundcharacter "< {{\setupDElanguage|<|}}
+  \installcompoundcharacter "> {{\setupDElanguage|>|}}
+  \installcompoundcharacter "| {|*|}
+
+\stoplanguagespecifics
+
+% \hyphenatedword{hinauff|*|liegen}
+% \hyphenatedword{hinauff"|liegen}
+
+%D An experimental hack:
+
+% no {\simplifiedcompoundcharacter"}
+
+% \startencoding[pdfdoc]
+%   \startlanguagespecifics[\s!de]% hm, a % is needed
+%     \defineactivecharacter " {\"}
+%   \stoplanguagespecifics
+% \stopencoding
+
+\startencoding[ec]
+  \startlanguagespecifics[\s!de]%
+    \installcompoundcharacter "a {\adiaeresis}
+    \installcompoundcharacter "e {\ediaeresis}
+    \installcompoundcharacter "i {\idiaeresis}
+    \installcompoundcharacter "o {\odiaeresis}
+    \installcompoundcharacter "u {\udiaeresis}
+    \installcompoundcharacter "A {\Adiaeresis}
+    \installcompoundcharacter "E {\Ediaeresis}
+    \installcompoundcharacter "I {\Idiaeresis}
+    \installcompoundcharacter "O {\Odiaeresis}
+    \installcompoundcharacter "U {\Udiaeresis}
+  \stoplanguagespecifics
+\stopencoding
+
+\startencoding[texnansi]
+  \startlanguagespecifics[\s!de]%
+    \installcompoundcharacter "a {\adiaeresis}
+    \installcompoundcharacter "e {\ediaeresis}
+    \installcompoundcharacter "i {\idiaeresis}
+    \installcompoundcharacter "o {\odiaeresis}
+    \installcompoundcharacter "u {\udiaeresis}
+    \installcompoundcharacter "A {\Adiaeresis}
+    \installcompoundcharacter "E {\Ediaeresis}
+    \installcompoundcharacter "I {\Idiaeresis}
+    \installcompoundcharacter "O {\Odiaeresis}
+    \installcompoundcharacter "U {\Udiaeresis}
+  \stoplanguagespecifics
+\stopencoding
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-ffr.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-ffr.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-ffr.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,55 @@
+%D \module
+%D   [     file=enco-ffr,
+%D      version=2002.05.07,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=French Input Filter,
+%D       author=Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% \definehspace[fr][:][.25em]
+% \definehspace[fr][;][.25em]
+% \definehspace[fr][!][.25em]
+% \definehspace[fr][?][.25em]
+
+\enablemode[activecolon] \usemodule[tryout] % for the moment
+
+\installactivecharacter :
+\installactivecharacter ;
+\installactivecharacter ?
+\installactivecharacter !
+
+\unprotect
+
+\startlanguagespecifics[\s!fr]
+    \definetextmodediscretionary : {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentmainlanguage{:}:}
+    \definetextmodediscretionary ; {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentmainlanguage{;};}
+    \definetextmodediscretionary ? {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentmainlanguage{?}?}
+    \definetextmodediscretionary ! {\removeunwantedspaces\prewordbreak\kern\hspaceamount\currentmainlanguage{!}!}
+\stoplanguagespecifics
+
+\startlanguagespecifics[\s!fr]
+    \defineactivecharacter : {\mathortext{:}{\directdiscretionary{:}}}
+    \defineactivecharacter ; {\mathortext{;}{\directdiscretionary{;}}}
+    \defineactivecharacter ! {\mathortext{!}{\directdiscretionary{!}}}
+    \defineactivecharacter ? {\mathortext{?}{\directdiscretionary{?}}}
+\stoplanguagespecifics
+
+\appendtoks % maybe everywhere
+    \chardef\activecharactermode\zerocount
+\to\everyMPgraphic
+
+% maybe tricky due to possible name clashes:
+%
+% \def\ieme {\highordinalstr{e}}
+% \def\iemes{\highordinalstr{es}}
+% \def\ier  {\highordinalstr{er}}
+% \def\iers {\highordinalstr{ers}}
+% \def\iere {\highordinalstr{re}}
+% \def\ieres{\highordinalstr{res}}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-fpl.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-fpl.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-fpl.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,98 @@
+%D \module
+%D   [     file=enco-fpl,
+%D      version=2000.08.20,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Polish Input Filter,
+%D       author=Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D These definitions used to be part of lang-sla.tex.
+
+\unprotect
+
+% todo : named glyphs
+
+\installactivecharacter /
+
+\startlanguagespecifics[\s!pl]
+
+% \appendtoks \makecharacteractive / \to \everynormalcatcodes % obsolete
+
+  \installcompoundcharacter /a {\aogonek}
+  \installcompoundcharacter /c {\cacute}
+  \installcompoundcharacter /e {\eogonek}
+  \installcompoundcharacter /l {\lstroke}
+  \installcompoundcharacter /n {\nacute}
+  \installcompoundcharacter /o {\oacute}
+  \installcompoundcharacter /s {\sacute}
+  \installcompoundcharacter /x {\zacute}
+  \installcompoundcharacter /z {\zdotaccent}
+  \installcompoundcharacter /A {\Aogonek}
+  \installcompoundcharacter /C {\Cacute}
+  \installcompoundcharacter /E {\Eogonek}
+  \installcompoundcharacter /L {\Lstroke}
+  \installcompoundcharacter /N {\Nacute}
+  \installcompoundcharacter /O {\Oacute}
+  \installcompoundcharacter /S {\Sacute}
+  \installcompoundcharacter /X {\Zacute}
+  \installcompoundcharacter /Z {\Zdotaccent}
+
+\stoplanguagespecifics
+
+\startlanguagespecifics[\s!pl]
+
+  \installcompoundcharacter /, {\handlequotation\c!leftquotation}
+  \installcompoundcharacter /' {\handlequotation\c!rightquotation}
+
+  \def\setupPLlanguage%
+    {\setuplanguage
+       [\s!pl]
+       [\c!leftsentence=\leftguillemot,
+        \c!rightsentence=\rightguillemot,
+        \c!leftsubsentence=\leftsubguillemot,
+        \c!rightsubsentence=\rightsubguillemot]}
+
+  \installcompoundcharacter /< {{\setupPLlanguage|<|}}
+  \installcompoundcharacter /> {{\setupPLlanguage|>|}}
+
+  \installcompoundcharacter /- {|-|}
+
+\stoplanguagespecifics
+
+% obsolete
+%
+% \startlanguagespecifics[\s!pl]
+%
+%   \definesortkey {/a}{a}{a}{\k a}
+%   \definesortkey {/A}{a}{a}{\k a}
+%   \definesortkey {/c}{c}{a}{\'c}
+%   \definesortkey {/C}{c}{a}{\'c}
+%   \definesortkey {/e}{e}{a}{\k e}
+%   \definesortkey {/E}{e}{a}{\k e}
+%   \definesortkey {/l}{l}{a}{\l }
+%   \definesortkey {/L}{l}{a}{\l }
+%   \definesortkey {/n}{n}{a}{\'n}
+%   \definesortkey {/N}{n}{a}{\'n}
+%   \definesortkey {/o}{o}{a}{\'o}
+%   \definesortkey {/O}{o}{a}{\'o}
+%   \definesortkey {/s}{s}{a}{\'s}
+%   \definesortkey {/S}{s}{a}{\'s}
+%   \definesortkey {/x}{z}{a}{\'x}
+%   \definesortkey {/X}{z}{a}{\'x}
+%   \definesortkey {/z}{z}{b}{\.z}
+%   \definesortkey {/Z}{z}{b}{\.z}
+%
+% \stoplanguagespecifics
+
+\startencoding[pdfdoc]
+  \startlanguagespecifics[pl]% hm
+    \defineactivecharacter / {\simplifiedcompoundcharacter/}
+  \stoplanguagespecifics
+\stopencoding
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-fro.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-fro.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-fro.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,35 @@
+%D \module
+%D   [     file=enco-fro,
+%D      version=2000.08.20,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Romanian Input Filter,
+%D       author=Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D These definitions used to be part of lang-ita.tex.
+
+\unprotect
+
+\installactivecharacter "
+
+\startlanguagespecifics[\s!ro]
+
+  \installcompoundcharacter "a {\acircumflex}
+  \installcompoundcharacter "i {\icircumflex}
+  \installcompoundcharacter "s {\scedilla}
+  \installcompoundcharacter "t {\tcedilla}
+  \installcompoundcharacter "A {\Acircumflex}
+  \installcompoundcharacter "I {\Icircumflex}
+  \installcompoundcharacter "S {\Scedilla}
+  \installcompoundcharacter "T {\Tcedilla}
+  \installcompoundcharacter "` {\startdelimitedtext[\v!quotation]}
+  \installcompoundcharacter "' {\stopdelimitedtext}
+
+\stoplanguagespecifics
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-fsl.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-fsl.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-fsl.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,32 @@
+%D \module
+%D   [     file=enco-fsl,
+%D      version=2005.08.17,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Slovenian Specialities,
+%D       author={Hans Hagen, Mojka Miklavec},
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Usage:
+%D
+%D \starttyping
+%D \useencoding[fsl]
+%D
+%D \starttext
+%D   \dstroke \language[sl] \dstroke
+%D \stoptext
+%D \stoptyping
+
+\unprotect
+
+\startlanguagespecifics[\s!sl]
+  \startencoding[\s!default]
+    \definecharacter dstroke {d\zcaron} % hm, expects a space delimiter
+  \stopencoding
+\stoplanguagespecifics
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-grk.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-grk.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-grk.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,190 @@
+%D \module
+%D   [       file=enco-grk,
+%D        version=2003.03.01,
+%D          title=\CONTEXT\ Encoding Macros,
+%D       subtitle=Greek,
+%D         author=Apostolos Syropoulos,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startmapping[iso-8859-7]
+
+% Uppercase Greek letters
+
+\definecasemap 193 193 225 % greekAlpha
+\definecasemap 194 194 226 % greekBeta
+\definecasemap 195 195 227 % greekGamma
+\definecasemap 196 196 228 % greekDelta
+\definecasemap 197 197 229 % greekEpsilon
+\definecasemap 198 198 230 % greekZeta
+\definecasemap 199 199 213 % greekEta
+\definecasemap 200 200 232 % greekTheta
+\definecasemap 201 201 233 % greekIota
+\definecasemap 202 202 234 % greekKappa
+\definecasemap 203 203 235 % greekLambda
+\definecasemap 204 204 236 % greekMu
+\definecasemap 205 205 237 % greekNu
+\definecasemap 206 206 238 % greekXi
+\definecasemap 207 207 239 % greekOmicron
+\definecasemap 208 208 240 % greekPi
+\definecasemap 209 209 241 % greekRho
+\definecasemap 211 211 243 % greekSigma
+\definecasemap 212 212 244 % greekTau
+\definecasemap 213 213 245 % greekUpsilon
+\definecasemap 214 214 246 % greekPhi
+\definecasemap 215 215 247 % greekChi
+\definecasemap 216 216 248 % greekPsi
+\definecasemap 217 217 249 % greekOmega
+
+% Lowercase Greek letters
+
+\definecasemap 225 193 225 % greekalpha
+\definecasemap 226 194 226 % greekbeta
+\definecasemap 227 195 227 % greekgamma
+\definecasemap 228 196 228 % greekdelta
+\definecasemap 229 197 229 % greekepsilon
+\definecasemap 230 198 230 % greekzeta
+\definecasemap 213 199 213 % greeketa
+\definecasemap 232 200 232 % greektheta
+\definecasemap 233 201 233 % greekiota
+\definecasemap 234 202 234 % greekkappa
+\definecasemap 235 203 235 % greeklambda
+\definecasemap 236 204 236 % greekmu
+\definecasemap 237 205 237 % greeknu
+\definecasemap 238 206 238 % greekxi
+\definecasemap 239 207 239 % greekomicron
+\definecasemap 240 208 240 % greekpi
+\definecasemap 241 209 241 % greekrho
+\definecasemap 242 211 242 % greekfinalsigma
+\definecasemap 243 211 243 % greekSigma
+\definecasemap 244 212 244 % greekTau
+\definecasemap 245 213 245 % greekUpsilon
+\definecasemap 246 214 246 % greekPhi
+\definecasemap 247 215 247 % greekChi
+\definecasemap 248 216 248 % greekPsi
+\definecasemap 249 217 249 % greekOmega
+
+% Accented Uppercase Greek letters
+
+\definecasemap 182 193 220  % greekAlphatonos
+\definecasemap 184 197 221  % greekEpsilontonos
+\definecasemap 185 199 222  % greekEtatonos
+\definecasemap 186 201 223  % greekIotatonos
+\definecasemap 188 207 252  % greekOmicrontonos
+\definecasemap 190 213 253  % greekUpsilontonos
+\definecasemap 191 217 254  % greekOmegatonos
+\definecasemap 218 218 250  % greekIotadialytika
+\definecasemap 219 219 251  % greekUpsilondialytika
+
+% Accented Lowercase Greek letters
+
+\definecasemap 220 193 220  % greekalphatonos
+\definecasemap 221 197 221  % greekepsilontonos
+\definecasemap 222 199 222  % greeketatonos
+\definecasemap 223 201 223  % greekiotatonos
+\definecasemap 252 207 252  % greekomicrontonos
+\definecasemap 253 213 253  % greekupsilontonos
+\definecasemap 254 217 254  % greekomegatonos
+\definecasemap 250 218 250  % greekiotadialytika
+\definecasemap 251 219 251  % greekupsilondialytika
+\definecasemap 192 218 192  % greekiotadialytikatonos
+\definecasemap 224 219 224  % greekupsilondialytikatonos
+
+\stopmapping
+
+\startencoding[iso-8859-7]
+
+% Uppercase Greek letters
+
+\definecharacter greekAlpha        193
+\definecharacter greekBeta         194
+\definecharacter greekGamma        195
+\definecharacter greekDelta        196
+\definecharacter greekEpsilon      197
+\definecharacter greekZeta         198
+\definecharacter greekEta          199
+\definecharacter greekTheta        200
+\definecharacter greekIota         201
+\definecharacter greekKappa        202
+\definecharacter greekLambda       203
+\definecharacter greekMu           204
+\definecharacter greekNu           205
+\definecharacter greekXi           206
+\definecharacter greekOmicron      207
+\definecharacter greekPi           208
+\definecharacter greekRho          209
+\definecharacter greekSigma        211
+\definecharacter greekTau          212
+\definecharacter greekUpsilon      213
+\definecharacter greekPhi          214
+\definecharacter greekChi          215
+\definecharacter greekPsi          216
+\definecharacter greekOmega        217
+
+% Lowercase Greek letters
+
+\definecharacter greekalpha        225
+\definecharacter greekbeta         226
+\definecharacter greekgamma        227
+\definecharacter greekdelta        228
+\definecharacter greekepsilon      229
+\definecharacter greekzeta         230
+\definecharacter greeketa          231
+\definecharacter greektheta        232
+\definecharacter greekiota         233
+\definecharacter greekkappa        234
+\definecharacter greeklambda       235
+\definecharacter greekmu           236
+\definecharacter greeknu           237
+\definecharacter greekxi           238
+\definecharacter greekomicron      239
+\definecharacter greekpi           240
+\definecharacter greekrho          241
+\definecharacter greekfinalsigma   242
+\definecharacter greeksigma        243
+\definecharacter greektau          244
+\definecharacter greekupsilon      245
+\definecharacter greekphi          246
+\definecharacter greekchi          247
+\definecharacter greekpsi          248
+\definecharacter greekomega        249
+
+% Accented Uppercase Greek letters
+
+\definecharacter greekAlphatonos        182
+\definecharacter greekEpsilontonos      184
+\definecharacter greekEtatonos          185
+\definecharacter greekIotatonos         186
+\definecharacter greekOmicrontonos      188
+\definecharacter greekUpsilontonos      190
+\definecharacter greekOmegatonos        191
+\definecharacter greekIotadialytika     218
+\definecharacter greekUpsilondialytika  219
+
+% Accented Lowercase Greek letters
+
+\definecharacter greekalphatonos             220
+\definecharacter greekepsilontonos           221
+\definecharacter greeketatonos               222
+\definecharacter greekiotatonos              223
+\definecharacter greekomicrontonos           252
+\definecharacter greekupsilontonos           253
+\definecharacter greekomegatonos             254
+\definecharacter greekiotadialytika          250
+\definecharacter greekupsilondialytika       251
+\definecharacter greekiotadialytikatonos     192
+\definecharacter greekupsilondialytikatonos  224
+
+% Miscellaneous Greek symbols
+
+\definecharacter greekleftquot               171
+\definecharacter greekrightquot              187
+\definecharacter greektonos                  180
+\definecharacter greekdialytikatonos         181
+\definecharacter greekapostrophos            162
+
+\stopencoding

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-heb.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-heb.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-heb.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,16 @@
+%D \module
+%D   [       file=enco-heb,
+%D        version=2005.01.27,
+%D          title=\CONTEXT\ Encoding Macros,
+%D       subtitle=Hebrew,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D To be done.
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-ibm.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-ibm.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-ibm.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,7 @@
+% temporary module, needed for downward compatibility
+
+%\input regi-ibm.tex 
+
+\enableregime[ibm] 
+
+\endinput 

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-il2.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-il2.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-il2.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,157 @@
+%D \module
+%D   [     file=enco-il2,
+%D      version=2000.05.07, % 1998.12.01,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Czech and Slovak ISO Latin 2 Encoding,
+%D       author=Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% This encoding will go but the regime will remain.
+
+%D This Czech/Slovak encoding is dedicated to Han The Thanh.
+%D The numbers are derived from some files he sent me. This
+%D definition file is (still) sort of beta.
+
+\startmapping[il2]
+
+\resetcaserange 127 to 255    % we map them all to themselves
+
+\definecaseswap 184 152
+\definecaseswap 181 165
+\definecaseswap 185 169
+\definecaseswap 187 171
+\definecaseswap 190 174
+\definecaseswap 224 192
+\definecaseswap 225 193
+\definecaseswap 228 196
+\definecaseswap 229 197
+\definecaseswap 232 200
+\definecaseswap 233 201
+\definecaseswap 236 204
+\definecaseswap 237 205
+\definecaseswap 239 207
+\definecaseswap 242 210
+\definecaseswap 243 211
+\definecaseswap 244 212
+\definecaseswap 246 214
+\definecaseswap 248 216
+\definecaseswap 249 217
+\definecaseswap 250 218
+\definecaseswap 252 220
+\definecaseswap 253 221
+
+\stopmapping
+
+\startencoding[il2][il2]
+
+\definecharacter textgrave          18
+\definecharacter textacute          19
+\definecharacter textcaron          20
+\definecharacter textbreve          21
+\definecharacter textmacron         22
+\definecharacter textring           23
+\definecharacter textcedilla        24
+\definecharacter textcircumflex     94
+\definecharacter textdotaccent      95
+\definecharacter texthungarumlaut  125
+\definecharacter texttilde         126
+\definecharacter textdiaeresis     127
+
+\definecharacter dotlessi       16
+\definecharacter dotlessj       17
+
+\definecharacter aeligature     26
+\definecharacter AEligature     29
+\definecharacter oeligature     27
+\definecharacter OEligature     30
+
+\definecharacter ssharp         25
+
+\definecharacter Racute        192
+\definecharacter Aacute        193
+\definecharacter Lacute        197
+\definecharacter Eacute        201
+\definecharacter Iacute        205
+\definecharacter Oacute        211
+\definecharacter Uacute        218
+\definecharacter Yacute        221
+\definecharacter racute        224
+\definecharacter aacute        225
+\definecharacter lacute        229
+\definecharacter eacute        233
+\definecharacter iacute        237
+\definecharacter oacute        243
+\definecharacter uacute        250
+\definecharacter yacute        253
+
+\definecharacter Lcaron        165
+\definecharacter Scaron        169
+\definecharacter Tcaron        171
+\definecharacter Zcaron        174
+\definecharacter lcaron        181
+\definecharacter scaron        185
+\definecharacter tcaron        187
+\definecharacter zcaron        190
+\definecharacter Ccaron        200
+\definecharacter Ecaron        204
+\definecharacter Dcaron        207
+\definecharacter Ncaron        210
+\definecharacter Rcaron        216
+\definecharacter ccaron        232
+\definecharacter ecaron        236
+\definecharacter dcaron        239
+\definecharacter ncaron        242
+\definecharacter rcaron        248
+
+\definecharacter Ocircumflex   212
+\definecharacter ocircumflex   244
+
+\definecharacter Adiaeresis    196
+\definecharacter Odiaeresis    214
+\definecharacter Udiaeresis    220
+\definecharacter adiaeresis    228
+\definecharacter odiaeresis    246
+\definecharacter udiaeresis    252
+
+\definecharacter Agrave        152
+\definecharacter agrave        184
+
+\definecharacter Ohungarumlaut 213
+\definecharacter Uhungarumlaut 219
+\definecharacter ohungarumlaut 245
+\definecharacter uhungarumlaut 251
+
+\definecharacter Uring         217
+\definecharacter uring         249
+\definecharacter Aring         {\ilencodedrA}
+
+\definecharacter ostroke        28
+\definecharacter Ostroke        31
+\definecharacter Lstroke       {\ilencodedL}
+\definecharacter lstroke       {\ilencodedl}
+
+\def\ilencodedrA
+  {\dontleavehmode\hbox\bgroup
+   \setbox0\hbox{h}%
+   \dimen0=\ht0
+   \advance\dimen0 by -1ex
+   \rlap{\raise.67\dimen0\hbox{\char'27}}A%
+   \egroup}
+
+\def\ilencodedl
+  {\dontleavehmode{\char32l}}
+
+\def\ilencodedL
+  {\dontleavehmode\hbox\bgroup
+   \setbox0\hbox{L}%
+   \hbox to\wd0{\hss\char32L}%
+   \egroup}
+
+\stopencoding
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-ini.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-ini.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-ini.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,1137 @@
+%D \module
+%D   [       file=enco-ini,
+%D        version=2007.02.19, % 2000.12.27, % 1998.12.03,
+%D          title=\CONTEXT\ Encoding Macros,
+%D       subtitle=Initialization,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Quite some code will be moved to the mk files once we're ready
+%D for it.
+
+%D This module is a reimplementation of the module that handled
+%D composed characters and non \ASCII\ characters. The changed
+%D are not that fundamental, and mainly concerns moving
+%D definitions of specific glyphs and accents to other files as
+%D well as moving plain handling of accents to this module
+%D instead of overloading plain \TEX\ commands.
+
+%D Patterns are kind of mixed with font encodings and
+%D mappings. Alas.
+
+\ifx\synchronizepatterns\undefined \let\synchronizepatterns\relax \fi
+
+%D While dealing with input (the text source) and output (the
+%D glyphs), encoding comes into view. To summarize a few:
+%D
+%D \startitemize
+%D \item  Bytes in the input file are mapped to an internal
+%D       representation. An~\type {a} often stays an~\type {a},
+%D       but~\type {\"e} can become either one code or become
+%D       two codes (ending in overlapping glyphs).
+%D \item  Characters can be made active and mapped onto another
+%D       character.
+%D \item  When changing case, characters are mapped onto
+%D       themselves, their case||counterpart or a reasonable
+%D       alternative, like~\"e onto~e.
+%D \item  Single character representations in a \DVI\ file can
+%D       be mapped onto one or more characters, either of not
+%D       in more than one font file (virtual fonts).
+%D \item  In the final format, fonts collections can be
+%D       partially embedded, thereby losing the one||to||one
+%D       relation between several instances of one font.
+%D \item  For special purposes, individual characters should be
+%D       mapped onto a dedicated encoding vector, for instance
+%D       \PDF\ document encoding.
+%D \stopitemize
+%D
+%D These and other kind of mappings are to be dealt with, and
+%D the exact way of dealing often depends on the language to be
+%D typeset.
+
+\writestatus{loading}{ConTeXt Encoding Macros / Initialization}
+
+\unprotect
+
+%D First we define a few local or not yet initialized constants.
+
+\def\@map@{@m at ap@} % mapping prefix
+\def\@fha@{@f at ha@} % font prefix
+\def\@cas@{@c at as@} % casecom prefix
+
+\ifx\currentlanguage\undefined \let\currentlanguage\s!en \fi
+
+%D \macros
+%D   {setupencoding}
+%D
+%D The following setup command is used to tune encoding
+%D handling.
+
+\def\setupencoding
+  {\dosingleargument\dosetupencoding}
+
+\def\dosetupencoding[#1]%
+  {\getparameters[\??ec][#1]%
+   \edef\defaultencoding
+     {\ifx\@@ecdefault\empty\s!default\else\@@ecdefault\fi}}
+
+%D \macros
+%D   {useencoding}
+%D
+%D Encodings things are defined in separate files and are
+%D loaded only once, using:
+%D
+%D \showsetup{useencoding}
+
+\def\douseencoding#1%
+  {\doifundefined{\c!file\f!encodingprefix#1}%
+     {\letvalue{\c!file\f!encodingprefix#1}\empty
+      \makeshortfilename[\truefilename{\f!encodingprefix#1}]%
+      \startreadingfile
+        \readsysfile{\shortfilename.mkii}
+          {\showmessage\m!encodings2{#1}}
+          {\showmessage\m!encodings3{#1}}%
+      \stopreadingfile}}
+
+\def\useencoding[#1]%
+  {\processcommalist[#1]\douseencoding}
+
+%D \macros
+%D   {startmapping,enablemapping}
+%D
+%D In order to process patterns, convert from lower to
+%D uppercase and vise versa and some more, we provide a
+%D mechanism to define mappings. The first real application
+%D of this command was:
+%D
+%D \starttyping
+%D \startmapping [something]
+%D   \definecasemap 165 181 165
+%D   \definecasemap 171 187 171
+%D   ...
+%D   \defineuppercasecom \i  {I}
+%D   \defineuppercasecom \l  \L
+%D   \definelowercasecom \AE \ae
+%D   ...
+%D \stopmapping
+%D \stoptyping
+%D
+%D So, character 165 becomes 181 in uppercase and 165 in
+%D lowercase. A mapping is activated with \type {\enablemapping}.
+
+\def\startsavingmappingtoks#1%
+  {\bgroup
+   \edef\charactermapping{@#1@}%
+   \checkmappingtoks
+   \setmappingtoks
+   \the\mappingtoks}
+
+\def\stopsavingmappingtoks
+  {\global\mappingtoks\emptytoks
+   \dostepwiserecurse{0}{255}\plusone
+     {\edef\@@expanded
+        {\the\mappingtoks
+         \ifnum\recurselevel>127
+           \noexpand\settoletterunlessactive{\recurselevel}%
+         \fi
+         \lccode\recurselevel\ifnum\lccode\recurselevel=\zerocount\zerocount\else\space\the\lccode\recurselevel\space\fi
+         \uccode\recurselevel\ifnum\uccode\recurselevel=\zerocount\zerocount\else\space\the\uccode\recurselevel\space\fi
+         \ifnum\sfcode\recurselevel=\plusthousand\else\sfcode\recurselevel=\the\sfcode\recurselevel\space\fi
+        }%
+      \global\mappingtoks\expandafter{\@@expanded}}%
+   \egroup
+   \let\enabledmapping\empty
+   \enablemapping[\currentmapping]}
+
+\def\startmapping[#1]%
+  {\startsavingmappingtoks{#1}}
+
+\def\stopmapping
+  {\stopsavingmappingtoks}
+
+\def\optimizemapping[#1]%
+  {\startsavingmappingtoks{#1}%
+   % nothing, just an automatic cleanup
+   \stopsavingmappingtoks
+   % we need to resync
+   %\let\enabledmapping\relax
+  }%\enablemapping[\currentmapping]}
+
+\def\setmappingtoks
+  {\@EA\let\@EA\mappingtoks\csname\@map@\charactermapping\endcsname
+   \@EA\let\@EA\casecomtoks\csname\@cas@\charactermapping\endcsname}
+
+\def\checkmappingtoks
+  {\ifundefined{\@map@\charactermapping}%
+     \expandafter\newtoks\csname\@map@\charactermapping\endcsname
+   \fi
+   \ifundefined{\@cas@\charactermapping}%
+     \expandafter\newtoks\csname\@cas@\charactermapping\endcsname
+   \fi}
+
+\def\definecasemap #1 #2 #3 % code lower upper
+  {\doifelse{#2}{to}
+     {\presetcaserange{#1}{#3}}
+     {\lccode#1=#2\relax
+      \uccode#1=#3\relax}%
+   \ignorespaces}
+
+%D Saves a few tokens
+
+\def\definecaseswap #1 #2 % lower upper
+  {\lccode#1=#1\relax
+   \uccode#2=#2\relax
+   \lccode#2=#1\relax
+   \uccode#1=#2\relax
+   \ignorespaces}
+
+\def\definecaseself #1 % lower=upper=self
+  {\lccode#1=#1\relax
+   \uccode#1=#1\relax
+   \ignorespaces}
+
+%D Watch the \type {\definecasemap 127 to 255} option!
+%D Dedicated to Taco there is also:
+
+\def\definecasemaps #1 to #2 lc #3 uc #4 % from to lc+ uc+
+  {\dostepwiserecurse{#1}{#2}\plusone
+     {\scratchcounter\recurselevel\advance\scratchcounter#3\lccode\recurselevel=\scratchcounter
+      \scratchcounter\recurselevel\advance\scratchcounter#4\uccode\recurselevel=\scratchcounter}%
+   \ignorespaces}
+
+%D This can be used like:
+%D
+%D \starttyping
+%D \definecasemaps 128 to 156 lc  32 uc 0
+%D \definecasemaps 160 to 188 lc -32 uc 0
+%D \definecasemaps 160 to 188 lc -32 uc 0
+%D \definecasemaps 192 to 255 lc  32 uc 0
+%D \stoptyping
+%D
+%D and saves a lot of typing (copying).
+
+\def\resetcaserange #1 to #2
+  {\dostepwiserecurse{#1}{#2}\plusone
+     {\lccode\recurselevel\zerocount
+      \uccode\recurselevel\zerocount}%
+   \ignorespaces}
+
+\def\presetcaserange#1#2% could be pre-expanded
+  {\dostepwiserecurse{#1}{#2}\plusone
+     {\lccode\recurselevel=\recurselevel
+      \uccode\recurselevel=\recurselevel}%
+   \ignorespaces}
+
+\def\setcasemap #1 #2 #3 %
+  {\settoletterunlessactive{#1}%
+   \lccode #1=#2
+   \uccode #1=#3 }
+
+\def\setcaseswap #1 #2 %
+  {\settoletterunlessactive{#1}%
+   \settoletterunlessactive{#2}%
+   \lccode #1=#1
+   \uccode #2=#2
+   \lccode #2=#1
+   \uccode #1=#2 }
+
+\def\setcaseself #1 %
+  {\settoletterunlessactive{#1}%
+   \lccode #1=#1
+   \uccode #1=#1 }
+
+\def\definespacemap #1 #2 % code sfcode
+  {\sfcode#1=#2%
+   \ignorespaces}
+
+\def\setspacemap #1 #2 %
+  {\settootherunlessactive{#1}%
+   %\lccode #1=\zerocount
+   %\uccode #1=\zerocount
+   \sfcode #1=#2 }
+
+\def\defineuppercasecom#1#2%
+  {\global\casecomtoks\expandafter{\the\casecomtoks\setuppercasecom#1{#2}}%
+   \ignorespaces}
+
+\def\definelowercasecom#1#2%
+  {\global\casecomtoks\expandafter{\the\casecomtoks\setlowercasecom#1{#2}}%
+   \ignorespaces}
+
+\let\setuppercasecom\gobbletwoarguments
+\let\setlowercasecom\gobbletwoarguments
+
+\def\setcasecom#1#2{\def#1{#2}}
+
+\let\enabledmapping\empty % indirect, needed to handle default too
+
+\def\enablemapping[#1]%
+  {\edef\charactermapping{@#1@}%
+   \ifx\enabledmapping\charactermapping \else
+     \doifdefined{\@map@\charactermapping}
+       {%\expandafter\showthe\csname\@map@\charactermapping\endcsname\endcsname
+        \the\csname\@map@\charactermapping\endcsname}%
+     % == \the\executeifdefined{\@map@\charactermapping}\emptytoks
+     \edef\enabledmapping{\charactermapping}%
+     \enablelanguagespecifics[\currentlanguage]% new
+   % \edef\enabledmapping{\charactermapping\currentlanguage}% can be comma list
+   \fi
+   \synchronizepatterns}
+
+% on behalf of font switching:
+
+\def\fastenablemapping#1%
+  {\edef\charactermapping{@#1@}%
+   \ifx\enabledmapping\charactermapping \else
+     \@EA\ifx\csname\@map@\charactermapping\endcsname\relax\else
+       \the\csname\@map@\charactermapping\endcsname
+     \fi
+     % == \the\executeifdefined{\@map@\charactermapping}\emptytoks
+     \let\enabledmapping\charactermapping
+     \enablelanguagespecifics[\currentlanguage]% to faster
+   \fi}
+
+%D This macro wil be implemented in \type {lang-ini.tex}.
+
+\ifx\enablelanguagespecifics\undefined
+  \def\enablelanguagespecifics[#1]{}
+\fi
+
+%D Further on we have to take some precautions when dealing
+%D with special characters like~\type{~}, \type{_}
+%D and~\type{^}, so let us define ourselve some handy macros
+%D first.
+
+\def\protectfontcharacters
+  {\edef\unprotectfontcharacters
+     {\catcode`\noexpand ~=\the\catcode`~\relax
+      \catcode`\noexpand _=\the\catcode`_\relax
+      \catcode`\noexpand ^=\the\catcode`^\relax}%
+   \catcode`~=\@@letter
+   \catcode`_=\@@letter
+   \catcode`^=\@@letter\relax}
+
+%D The completeness of the Computer Modern Roman typefaces
+%D makes clear how incomplete other faces are. To honour 7~bit
+%D \ASCII, these fonts were designed using only the first 127
+%D values of the 256 ones that can be presented by one byte.
+%D Nowadays 8~bit character codings are more common, mainly
+%D because they permit us to predefine some composed
+%D characters, which are needed in most european languages.
+%D
+%D Supporting more than the standard \TEX\ encoding vector
+%D |<|which in itself is far from standard and differs per
+%D font|>| puts a burden on the fonts mechanism. The \CONTEXT\
+%D mechanism is far from complete, but can handle several
+%D schemes at once. The main problem lays in the accented
+%D characters and ligatures like~ff, although handling
+%D ligatures is not the responsibility of this module.
+%D
+%D By default, we use \PLAIN\ \TEX's approach of placing
+%D accents. All other schemes sooner or later give problems
+%D when we distribute \DVI||files are distributed across
+%D machines and platforms. Nevertheless, we have to take care
+%D of different encoding vectors, which tell us where to find
+%D the characters we need. This means that all kind of
+%D character placement macro's like \type{\"} and \type{\ae}
+%D have to be implemented  and adapted in a way that suits
+%D these vectors.
+%D
+%D The main difference between different vector is the way
+%D accents are ordered and/or the availability of prebuilt
+%D accented characters. Accented characters can for instance be
+%D called for by sequences like \type{\"e}. Here the \type{\"}
+%D is defined as:
+%D
+%D \starttyping
+%D \def\"#1{{\accent"7F #1}}
+%D \stoptyping
+%D
+%D This macro places the accent \accent"7F {} on top of an~e
+%D gives \"e. Some fonts however can have prebuild accents and
+%D use a more direct approach like
+%D
+%D \starttyping
+%D \def\"#1{\if#1e\char 235\else ... \fi}
+%D \stoptyping
+%D
+%D The latter approach is not used in \CONTEXT, because we
+%D store relevant combinations of accents and characters in
+%D individual macros.
+
+%D We define character substitutes and commands with definition
+%D commands like:
+%D
+%D \starttyping
+%D \startcoding[texnansi]
+%D
+%D \defineaccent " a           228
+%D \defineaccent ^ e           234
+%D \defineaccent ' {\dotlessi} 237
+%D
+%D \definecharacter ae 230
+%D \definecharacter oe 156
+%D
+%D \definecommand b \texnansiencodedb
+%D \definecommand c \texnansiencodedc
+%D
+%D \stopcoding
+%D \stoptyping
+%D
+%D The last argument of \type{\defineaccent} and
+%D \type{\definecharacter} tells \TEX\ the position of the
+%D accented character in the encoding vector. In order to
+%D complish this, we tag each implementation with the character
+%D coding identifier. We therefore need two auxiliary variables
+%D \type{\characterencoding} and \type{\nocharacterencoding}. These
+%D contain the current and default encoding vectors and both
+%D default to the \PLAIN\ one.
+
+\edef\characterencoding   {@\s!default @}
+\edef\nocharacterencoding {@\s!default @}
+\edef\charactermapping    {@\s!default @}
+
+% todo, else \d j == \dj, print file and check
+
+\def\accentprefix   {}%{*}
+\def\commandprefix  {}%{=}
+\def\characterprefix{}%{-}
+
+%D \macros
+%D   {startcoding, reducetocoding}
+%D
+%D Before we can redefine accents and special characters, we
+%D have to tell \CONTEXT\ what encoding is in force. The next
+%D command is responsible for doing this and also takes care of
+%D the definition of the recoding commands. We use the \type
+%D {\start}||\type {\stop}||commands for definitions and the
+%D \type {\reduceto}||command for local switching to
+%D simplified commands.
+
+% etex : \ifcsname
+
+\def\justhandleaccent#1#2% \empty makes #2={} save % no \unexpanded
+  {\ifundefined{\accentprefix\characterencoding#1\string#2\empty}%
+     #2%
+   \else
+     \csname\accentprefix\characterencoding#1\string#2\empty\endcsname
+   \fi}
+
+\def\justhandlecommand#1% % no \unexpanded, otherwise pdfdoc will fail
+  {\ifundefined{\commandprefix\characterencoding#1}% as well as hyph patterns
+     #1%
+   \else
+     \csname\commandprefix\characterencoding#1\endcsname
+   \fi}
+
+\def\enableencoding
+  {\dodoubleempty\doenableencoding}
+
+\def\doenableencoding[#1][#2]% main fallback
+  {\iffirstargument\edef\characterencoding{@#1@}\fi
+   \edef\nocharacterencoding{@\ifsecondargument#2\else\s!default\fi @}%
+   \synchronizepatterns}
+
+\edef\xnocharacterencoding{@\s!default @}
+
+\def\fastenableencoding#1%
+  {\edef\characterencoding{@#1@}%
+   \let\nocharacterencoding\xnocharacterencoding}
+
+\def\startencoding
+  {\dodoubleempty\dostartencoding}
+
+\def\dostartencoding[#1][#2]% encoding regime
+  {%\showmessage\m!encodings1{#1}%
+   \pushmacro\characterencoding
+   \pushmacro\currentregime
+   \pushmacro\dohandleaccent              % still needed?
+   \pushmacro\dohandlecommand             % still needed?
+   \pushmacro\doautosetregime
+   \let\dohandleaccent\donthandleaccent   % still needed?
+   \let\dohandlecommand\donthandlecommand % still needed?
+   %let\definesortkey\savesortkey
+   \edef\characterencoding{@#1@}%
+   \doifelsenothing{#2}%
+     {\let\doautosetregime\gobbletwoarguments}
+     {\def\currentregime{#2}}}
+
+\def\stopencoding
+  {\popmacro\doautosetregime
+   \popmacro\dohandlecommand           % still needed?
+   \popmacro\dohandleaccent            % still needed?
+   \popmacro\currentregime
+   \popmacro\characterencoding}
+
+% probably obsolete (hm, not yet)
+
+\def\reducetocoding[#1]% use grouped!
+  {\doifsomething{#1}
+     {\let\dohandleaccent \justhandleaccent
+      \let\dohandlecommand\justhandlecommand
+      \enableencoding[#1]%
+      \enablelanguagespecifics[\currentlanguage]}}
+
+\let\startcoding  \startencoding
+\def\stopcoding  {\stopencoding}
+\let\enablecoding \enableencoding
+
+%D The use of these macros are not limited to font
+%D definition files, but may also be used when loading
+%D patterns.
+
+%D \macros
+%D   {definesortkey,flushsortkeys,flushsortkey}
+%D
+%D Yet another definition concerns sorting of indexes and
+%D lists.
+%D
+%D \starttyping
+%D \definesortkey {\'e} {e} {a} {\'e}
+%D \stoptyping
+%D
+%D The first argument denotes the string to be treated. The
+%D second argument is the raw replacement, while the third
+%D argument determines the sort order given the replacement.
+%D The last argument is used as entry in the index (a, b, etc).
+%D
+%D The keys can be flushed using \type {\flushsortkeys}
+%D which in turn results in a sequence of calls to \type
+%D {\flushsortkey}, a macro taking 4~arguments.
+%D
+%D This mechanism is currently being tested and subjected to
+%D changes! Obsolete:
+
+\let\definesortkey\gobblefourarguments
+\let\savesortkey  \gobblefourarguments
+\let\flushsortkeys\relax
+\let\flushsortkey \relax
+
+%D \macros
+%D   {defineaccent, definecharacter, definecommand}
+%D
+%D The actual definition of accents, special characters and
+%D commands is done with the next three commands.
+
+\def\defineaccent
+  {\protectfontcharacters
+   \dodefineaccent}
+
+\def\dodefineaccent#1 #2 %
+  {\unprotectfontcharacters
+   \dododefineaccent#1 #2 }
+
+\def\dododefineaccent#1 #2 #3 %
+  {\setvalue{#1}{\dohandleaccent{#1}}%
+   \doifnumberelse{\string#3}
+     {\setvalue{\accentprefix\characterencoding#1\string#2}{\char#3 }} % space added
+     {\setvalue{\accentprefix\characterencoding#1\string#2}{#3}}}
+
+\def\dohandleaccent#1#2%
+  {\ifcsname\accentprefix\characterencoding#1\string#2\empty\endcsname
+     \csname\accentprefix\characterencoding#1\string#2\empty\endcsname
+   \else\ifcsname\accentprefix\nocharacterencoding#1\string#2\empty\endcsname
+     \csname\accentprefix\nocharacterencoding#1\string#2\empty\endcsname
+   \else\ifcsname\accentprefix\characterencoding#1\endcsname
+     \csname\accentprefix\characterencoding#1\endcsname{#2}%
+   \else%\ifcsname\accentprefix\nocharacterencoding#1\endcsname
+     \csname\accentprefix\nocharacterencoding#1\endcsname{#2}%
+%   \else
+%     \donormaltextaccent{#1}{#2}%
+   \fi\fi\fi}%\fi}
+
+\def\patternchar#1 {\rawcharacter{#1}} % space is part of character definition !
+
+% \ifx \enablepatterntokens\undefined
+%   \def\handlepatterntoken#1]{\csname#1\endcsname}
+% \fi
+
+% we need to postpone catcode changes, e.g. hr patterns
+% have \catcode" -> which fails when " is letter
+
+\def\pathypsettings
+  {\ifx \enablepatterntokens\undefined
+     \defineactivecharacter [ {\handlepatterntoken}%
+   \else
+     \enablepatterntokens
+   \fi
+   \let\dochar\thechr
+   \lccode16=16 % brrr, extra quote in ec (turkish)
+   \lccode17=17 % brrr, extra quote in ec (turkish)
+   \lccode`\-=`\-
+   \lccode`\'=`\'
+   \lccode`\"=`\"
+   \relax}
+
+\def\patterns   {\pathypsettings\normalpatterns   }
+\def\hyphenation{\pathypsettings\normalhyphenation}
+
+%D Because we don't want to use the second command grouped, we
+%D (re)define it as follows:
+
+\def\hyphenation
+  {\begingroup\def\hyphenation{\normalhyphenation{\the\scratchtoks}\endgroup}%
+   \pathypsettings\afterassignment\hyphenation\scratchtoks=}
+
+%D This is not needed for patterns because they are loaded grouped
+%D anyway and it saves us an assignment. Can go ... no longer
+%D shared patterns.
+
+\def\startpatternloading#1#2#3% % we should use \everypatternloading
+  {\startreadingfile
+   \bgroup
+   % let's get rid of interfering stuff
+   \let\everyjob\scratchtoks
+   \let\message \gobbleoneargument
+   % we want direct characters
+   \let\char\patternchar
+   \doifelsenothing{#2}{\enableencoding[ec]}{\enableencoding[#2]}%
+   \doifelsenothing{#3}{\enablemapping [ec]}{\enablemapping [#3]}%
+   \expanded{\doifinstring{\f!languageprefix}{#1}}
+     {\ifx \enablepatternxml\undefined \else
+        \enablepatternxml
+      \fi}%
+   \let\dohandleaccent\normaldohandleaccent}
+
+\def\stoppatternloading
+  {\egroup
+   \stopreadingfile}
+
+           \def\thechr#1{\char#1 } % just in case \relax interferes
+\unexpanded\def\numchr#1{\char#1\relax}
+\unexpanded\def\strchr#1{\csname#1\endcsname}
+
+\let\dochar\numchr
+
+\def\startdirectcharacters {\pushmacro\dochar \let\dochar\thechr}
+\def\stopdirectcharacters  {\popmacro \dochar}
+
+\def\definecharacter#1 #2 %
+  {\ifundefined{#1}\setvalue{#1}{\dohandlecharacter{#1}}\fi
+   \doifnumberelse{\string#2}
+     {\setvalue{\characterprefix\characterencoding\string#1}{\dochar{#2}}%
+      \doautosetregime{#1}{#2}}
+     {\setvalue{\characterprefix\characterencoding\string#1}{#2}}}
+
+\def\dohandlecharacter#1%
+  {\csname\characterprefix\ifcsname\characterprefix\characterencoding#1\endcsname
+     \characterencoding\else\nocharacterencoding\fi#1\endcsname}
+
+% \def\fallbackpatternchar{x} % makes no sense, duplicate patterns
+
+\def\defaultcharacter#1%
+  {\csname\characterprefix\nocharacterencoding\strippedcsname#1\endcsname}
+
+%D Instead of numbers, a command may be entered.
+
+\def\definecommand#1 #2 %
+  {\setvalue{\string#1}{\dohandlecommand{#1}}%
+  %\redefinecommand #1 % just to be sure
+   \setvalue{\commandprefix\characterencoding\string#1}{#2}}
+
+%D Here we see that redefining accents is characters is more
+%D or less the same as redefining commands. We also could have
+%D said:
+%D
+%D \starttyping
+%D \def\defineaccent#1 #2 {\definecommand#1\string#2 \char}
+%D \def\definecharacter#1 {\definecommand#1 \char}
+%D \stoptyping
+
+%D \macros
+%D   {defineaccentcommand}
+%D
+%D When needed, one can overload the default positions of the
+%D accents. The \PLAIN\ \TEX\ defaults are:
+%D
+%D \starttyping
+%D \defineaccentcommand `  18
+%D \defineaccentcommand '  19
+%D \defineaccentcommand v  20
+%D \defineaccentcommand u  21
+%D \defineaccentcommand =  22
+%D \defineaccentcommand ^  94
+%D \defineaccentcommand .  95
+%D \defineaccentcommand H 125  % "7D
+%D \defineaccentcommand ~ 126  % "7E
+%D \defineaccentcommand " 127  % "7F
+%D \stoptyping
+
+\def\defineaccentcommand
+  {\protectfontcharacters
+   \dodefineaccentcommand}
+
+\def\dodefineaccentcommand#1 #2 % \string toegevoegd
+  {\doifnumberelse{\string#2}
+     {\setvalue{\accentprefix\characterencoding\string#1}##1{{\accent#2 ##1}}}
+     {\setvalue{\accentprefix\characterencoding\string#1}##1{{#2##1}}}%
+   \unprotectfontcharacters}
+
+%D We don't have to define them for the default \PLAIN\ case.
+%D Commands may be used instead of character codes.
+
+%D \macros
+%D   {redefinecommand}
+%D
+%D Redefinition of encoding dependant commands like \type{\b}
+%D and \type{\c} can be triggered by:
+%D
+%D \starttyping
+%D \redefinecommand  b  % something math
+%D \redefinecommand  c  % something math
+%D \stoptyping
+%D
+%D Handling of characters is easier than handling accents
+%D because here we don't have to take care of arguments. We
+%D just call for the right glyph in the right place.
+%D
+%D The \type{\next} construction permits handling of commands
+%D that take arguments. This means that we can use this
+%D command to redefine accent handling commands too
+%D (although today the next is not needed any longer in test
+%D macros).
+
+\def\redefinecommand#1 %
+  {% no \unexpanded, else pdfdoc fails
+   \setvalue{\string#1}{\dohandlecommand{#1}}}%
+
+\def\dohandlecommand#1%
+   {\csname\commandprefix
+      \ifcsname\commandprefix\characterencoding#1\endcsname
+        \characterencoding
+      \else
+        \nocharacterencoding
+      \fi
+    #1\endcsname}
+
+%D \macros
+%D   {currentencoding, currentmapping}
+%D
+%D When we show 'm, we don't want to see the protection
+%D measures.
+
+\def\currentencoding{\@EA\dopureencodingname\characterencoding}
+\def\currentmapping {\@EA\dopureencodingname\charactermapping }
+
+\def\dopureencodingname @#1@{#1}
+
+\def\pureencodingname#1{\@EA\dopureencodingname#1}
+
+%D \macros
+%D   {showaccents, showcharacters,
+%D    showcharacterbounds, showhyphenations}
+%D
+%D Encoding is a tricky business. Therefore we provide a
+%D a few macros that show most of the characters involved. The
+%D next two tables show the result of \type {\showaccents}.
+%D
+%D \placetable
+%D   {The special glyphs in default encoding.}
+%D   {\showaccents}
+%D
+%D \placetable
+%D   {The special glyphs in texnansi encoding.}
+%D   {\switchtobodyfont[lbr]\showaccents}
+%D
+%D The command
+%D
+%D \starttyping
+%D \showhyphenations{doordefini\"eren}
+%D \stoptyping
+%D
+%D can be used to check the correct loading of hyphenation
+%D patterns.
+
+\fetchruntimecommand \showaccents         {\f!encodingprefix\s!run}
+\fetchruntimecommand \showcharacters      {\f!encodingprefix\s!run}
+\fetchruntimecommand \showcharacterbounds {\f!encodingprefix\s!run}
+\fetchruntimecommand \showhyphenations    {\f!encodingprefix\s!run}
+\fetchruntimecommand \showmapping         {\f!encodingprefix\s!run}
+

+%D \macros
+%D   {everyuppercase, EveryUppercase,
+%D    everyuppercase, EveryUppercase}
+%D
+%D When we want to uppercase strings of characters, we have to
+%D take care of those characters that have a special meaning or
+%D are only accessible by means of macros. The next hack was
+%D introduced when Tobias Burnus started translating head and
+%D label texts into spanish and italian. The first application
+%D of this token register therefore can be found in the module
+%D that deals with these texts.
+
+\newevery \everyuppercase \EveryUppercase
+\newevery \everylowercase \EveryLowercase
+
+%D This magic trick maps takes care of mapping from lower to
+%D upper case and reverse.
+
+\def\reloadmapping{\the\executeifdefined{\@cas@\charactermapping}\emptytoks}
+
+\appendtoks\let\setuppercasecom\setcasecom\to\everyuppercase
+\appendtoks\let\setlowercasecom\setcasecom\to\everylowercase
+
+\appendtoks\reloadmapping\to\everyuppercase % slow, will be sped up
+\appendtoks\reloadmapping\to\everylowercase % slow, will be sped up
+
+\newtoks\everyULmap
+
+\appendtoks\let\remapcase\remapuppercase\the\everyULmap\to\everyuppercase
+\appendtoks\let\remapcase\remaplowercase\the\everyULmap\to\everylowercase
+
+\let\remapcase\gobbletwoarguments
+
+\def\remapuppercase#1#2{\let#2#1}  % more efficient:
+\def\remaplowercase#1#2{\let#1#2}  \let\remaplowercase\let
+
+\def\defineLCcharacter #1 #2 %
+  {\appendtoks\let\to\everylowercase
+   \@EA\appendtoks\csname#1\endcsname\to\everylowercase
+   \@EA\appendtoks\csname#2\endcsname\to\everylowercase}
+
+\def\defineUCcharacter #1 #2 %
+  {\appendtoks\let\to\everyuppercase
+   \@EA\appendtoks\csname#1\endcsname\to\everyuppercase
+   \@EA\appendtoks\csname#2\endcsname\to\everyuppercase}
+
+\def\defineULcharacter #1 #2 %
+  {\appendtoks\remapcase\to\everyULmap
+   \@EA\appendtoks\csname#1\endcsname\to\everyULmap
+   \@EA\appendtoks\csname#2\endcsname\to\everyULmap}
+
+% slightly faster with \smallcapped's but far more hash and stringspace
+%
+% \newif\ifuppercase \appendtoks\uppercasetrue\to\everyuppercase
+% \newif\iflowercase \appendtoks\lowercasetrue\to\everylowercase
+%
+% \def\defineULcharacter #1 #2 %
+%   {\def\!!stringa{@#1}\@EA\letvalue\@EA\!!stringa\csname#1\endcsname
+%    \def\!!stringa{@#2}\@EA\letvalue\@EA\!!stringa\csname#2\endcsname
+%    \setvalue{#1}{\getvalue{@\ifuppercase#2\else#1\fi}}%
+%    \setvalue{#2}{\getvalue{@\iflowercase#1\else#2\fi}}}
+
+% 2 = tricky, since expanding \definedfont[lowcasename] ... goes wrong
+
+\chardef\uppercasemode\plusthree % 0=ignore 1=normal 2=expand 3=auto
+\chardef\casecommode  \plusone   % 0=noexpand 1=expand
+
+\def\setcasecom #1#2{\def#1{\ifcase\casecommode\noexpand#1\else#2\fi}}
+
+% \def\OEPS{whatever}
+%
+% \startmapping[ec]
+%   \defineuppercasecom \oeps {\getvalue{OEPS}}
+% \stopmapping
+%
+% \WORD{xx \oeps}
+
+\def\douppercase#1%
+  {\bgroup
+   \let\douppercase\firstofoneargument
+   \the\everyuppercase % currently also checks uppercasemode
+   \let\dochar\rawcharacter
+   \ifcase\uppercasemode
+     #1%
+   \or % No expansion here, otherwise \getvalue problems! Default!!!
+    %\edef\next{#1}% keep this to prevent roll back
+    %\uppercase\expandafter{\next}% keep this to prevent roll back
+     \uppercase{#1}%
+   \or
+     \chardef\casecommode\zerocount
+     \let\docasecom\firstoftwoarguments
+     \edef\ascii{#1}%
+     \edef\ascii{\expandafter\uppercase\expandafter{\ascii}}% needed when in regime
+     \chardef\casecommode\plusone
+     \ascii
+   \else
+     % mode three may trigger setting 2 elsewhere (e.g. regime test)
+     \uppercase{#1}%
+   \fi
+   \egroup}
+
+\prependtoksonce
+  \doifnot\currentregime\s!default
+    {\ifnum\uppercasemode=\plusthree \chardef\uppercasemode\plustwo \fi}%
+\to \everyuppercase
+
+%D \macros
+%D   {everysanitize, EverySanitize}
+%D
+%D Whenever we are sanitizing strings, like we sometimes do
+%D when we deal with specials, the next token register can be
+%D called.
+
+\newevery \everysanitize \EverySanitize
+
+%D \macros
+%D   {defineuclass,defineudigit,udigit}
+%D
+%D The next few macros are experimental and needed for unicoded
+%D chinese characters.
+
+\def\defineuclass #1 #2 #3 %
+  {\setvalue{uc\the\numexpr#2*256+#3\relax}{#1}}
+
+\def\defineudigit #1 #2 #3 {\setvalue{\characterencoding uc#1}{\uchar{#2}{#3}}}
+
+%D It may look strange, but for the moment, we want the encoding
+%D to be part of the digit specification. This may change!
+
+\unexpanded\def\udigit#1#2{\getvalue{@#1 at uc\number#2}}
+
+%D \macros
+%D   {uchar, octuchar, hexuchar}
+
+\ifx\uchar\undefined \def\uchar#1#2{(\number#1,\number#2)} \fi
+
+\def\octuchar#1#2{\uchar{`#1}{`#2}}
+\def\hexuchar#1#2{\uchar{"#1}{"#2}}
+
+%D Basics and fallbacks.
+
+\newif\ifignoreaccent
+
+\let\textaccent      \accent
+\let\normaltextaccent\textaccent
+
+% ** we will explicitly embrace the two arguments, since in definitions
+% this may not be the case, and we don't want faulty expansions like
+% "\dobuildtextaccent \char 18 a" but "\dobuildtextaccent {\char 18}{a}"
+% instead
+
+\def\buildmathaccent#1%
+  {\mathaccent#1 }
+
+\def\buildtextaccent#1#2% **
+  {\ifignoreaccent
+     \expandafter\nobuildtextaccent
+   \else
+     \expandafter\dobuildtextaccent
+   \fi{#1}{#2}}
+
+\unexpanded\def\nobuildtextaccent#1#2%
+  {#2}
+
+\unexpanded\def\dobuildtextaccent#1#2%
+  {{\let\char\normalaccent#1\let\char\normalchar#2}}
+
+% some fake ones, name will change into build
+
+\unexpanded\def\bottomaccent#1#2#3#4#5% down right slantcorrection accent char
+  {\dontleavehmode % why this align mess
+   \vtop
+     {\forgetall
+      \baselineskip\zeropoint
+      \lineskip#1%
+      \everycr\emptytoks
+      \tabskip\zeropoint
+      \lineskiplimit\zeropoint
+      \setbox0\hbox{#4}%
+      \halign
+        {##\crcr\hbox{#5}\crcr
+         \hidewidth
+         \hskip#2\wd0
+         \hskip-#3\slantperpoint % in plain 1ex * dimenless value
+         \vbox to .2ex{\box0\vss}\hidewidth
+         \crcr}}}
+
+\def\buildtextmacron   {\bottomaccent{.25ex}{0}{15}{\textmacron}}
+\def\buildtextbottomdot{\bottomaccent{.25ex}{0}{5}{\textbottomdot}}
+\def\buildtextcedilla  {\bottomaccent{0ex}{0}{5}{\textcedilla}}
+\def\buildtextogonek   {\bottomaccent{-.1ex}{.5}{0}{\textogonek}}
+
+%D A collectors item:
+
+\def\buildtextbottomcomma{\bottomaccent{.15ex}{0}{5}{\tx,}}
+
+%D Rarely needed but there:
+
+\unexpanded\def\topaccent#1#2#3#4#5% down right slantcorrection accent char
+  {\dontleavehmode
+   \bgroup
+     \setbox0\hbox{#4}%
+     \setbox2\hbox{#5}%
+     \hbox to \wd2 \bgroup
+        \hss\copy2\hss
+        \hskip-\wd2
+        \hss\hskip#2\wd0\hskip-#3\slantperpoint\raise#1\hbox{#4}\hss
+     \egroup
+   \egroup}
+
+\def\buildtextgrave{\topaccent{0pt}{0}{15}{\textgrave}} % e.g.
+
+% \definecharacter schwa      {\hbox{\rotate[rotation=180,location=high]{\hbox{e}}}}
+% \definecharacter schwagrave {\buildtextgrave\schwa}
+
+% math stuff, will change
+
+\def\definemathaccent#1 #2%
+  {\setvalue{\string#1}{#2}%
+   \setvalue{normalmathaccent\string#1}{#2}}
+
+\def\donormalmathaccent#1%
+  {\getvalue{normalmathaccent\string#1}}
+
+%D Some precautions:
+
+\ifx\usepdffontresource\undefined
+  \def\usepdffontresource #1 {} % this will be defined elsewhere
+\fi
+
+\def\donthandleaccent        #1{\expandafter\string\csname#1\endcsname\space}
+\def\donthandlecommand       #1{\expandafter\string\csname#1\endcsname\space}
+\def\donthandlecharacter     #1{\expandafter\string\csname#1\endcsname\space}
+
+\def\stringifyhandleaccent   #1{\strchr{#1}}
+\def\stringifyhandlecommand  #1{\strchr{#1}}
+\def\stringifyhandlecharacter#1{\strchr{#1}}
+
+\def\keephandleaccent        #1{\expandafter\noexpand\csname#1\endcsname}
+\def\keephandlecommand       #1{\expandafter\noexpand\csname#1\endcsname}
+\def\keephandlecharacter     #1{\expandafter\noexpand\csname#1\endcsname}
+
+\def\handleaccent            #1{\csname#1\endcsname}
+\def\handlecommand           #1{\csname#1\endcsname}
+\def\handlecharacter         #1{\csname#1\endcsname}
+
+\def\dontexpandencoding
+  {\let\dohandleaccent   \donthandleaccent
+   \let\dohandlecommand  \donthandlecommand
+   \let\dohandlecharacter\donthandlecharacter}
+
+\def\keepencodedtokens
+  {\let\dohandleaccent   \keephandleaccent
+   \let\dohandlecommand  \keephandlecommand
+   \let\dohandlecharacter\keephandlecharacter}
+
+\def\literateencodedtokens
+  {% \let\dohandleaccent   \keephandleaccent
+   % \let\dohandlecommand  \keephandlecommand
+   \let\dohandlecharacter\keephandlecharacter}
+
+\def\stringifyencodedtokens
+  {% \let\dohandleaccent   \stringifyhandleaccent
+   % \let\dohandlecommand  \stringifyhandlecommand
+   \let\dohandlecharacter\stringifyhandlecharacter}
+
+\unexpanded\def\uhandleaccent   #1{\csname#1\endcsname}
+\unexpanded\def\uhandlecommand  #1{\csname#1\endcsname}
+\unexpanded\def\uhandlecharacter#1{\csname#1\endcsname}
+
+\def\dontexpandencodedtokens
+  {\def\dohandleaccent   {\uhandleaccent}%
+   \def\dohandlecommand  {\uhandlecommand}%
+   \def\dohandlecharacter{\uhandlecharacter}}
+
+% no longer: \def\convertencodedtokens{\dontexpandencoding} but:
+
+\def\convertencodedtokens{\stringifyencodedtokens}
+
+% test case:
+%
+% \enableregime[cp1250]
+% \mainlanguage[cz]
+%
+% \starttext
+%
+% \title{Ϭuޯu餭 kon졺p
+% \placelist[chapter][criterium=all]
+%
+% \startbuffer
+% <chapter>
+%     <title>Ϭuޯu餭 kon졺p󛱴itle>
+% </chapter>
+% \stopbuffer
+%
+% \defineXMLenvironment
+%   [chapter]
+%   {\defineXMLsave[title]}
+%   {\expanded{\chapter{\XMLflush{title}}}}
+% \processXMLbuffer
+%
+% \setuphead[chapter][expansion=yes]
+% \defineXMLenvironment
+%   [chapter]
+%   {\defineXMLsave[title]}
+%   {\chapter{\XMLflush{title}}}
+% \processXMLbuffer
+%
+% \stoptext
+
+%D Still valid? To be checked:
+
+\def\doignoreaccent #1#2{\string#1\string#2}%
+\def\doignorecommand  #1{\string#1}
+\def\doignorecharacter#1{\string#1}
+
+\def\ignoreencoding
+  {\let\dohandleaccent   \doignoreaccent
+   \let\dohandlecommand  \doignorecommand
+   \let\dohandlecharacter\doignorecharacter}
+
+\appendtoks
+  \ignoreencoding
+\to \everycleanupfeatures
+
+\appendtoks
+  \keepencodedtokens
+\to \everysafeexpanded
+
+%D Now we will not redefine any more, so:
+
+\let\normaldohandleaccent   \dohandleaccent
+\let\normaldohandlecharacter\dohandlecharacter
+
+\definecommand ` {\buildtextaccent\textgrave}
+\definecommand ' {\buildtextaccent\textacute}
+\definecommand r {\buildtextaccent\textring}
+\definecommand v {\buildtextaccent\textcaron}
+\definecommand u {\buildtextaccent\textbreve}
+\definecommand = {\buildtextaccent\textmacron}
+\definecommand ^ {\buildtextaccent\textcircumflex}
+\definecommand . {\buildtextaccent\textdotaccent}
+\definecommand H {\buildtextaccent\texthungarumlaut}
+\definecommand ~ {\buildtextaccent\texttilde}
+\definecommand " {\buildtextaccent\textdiaeresis}
+
+\definecommand c {\buildtextcedilla}
+\definecommand b {\buildtextmacron}
+\definecommand d {\buildtextbottomdot}
+\definecommand k {\buildtextogonek}
+
+\definemathaccent acute     {\buildmathaccent\mathacute}
+\definemathaccent grave     {\buildmathaccent\mathgrave}
+\definemathaccent ddot      {\buildmathaccent\mathddot}
+\definemathaccent tilde     {\buildmathaccent\mathtilde}
+\definemathaccent bar       {\buildmathaccent\mathbar}
+\definemathaccent breve     {\buildmathaccent\mathbreve}
+\definemathaccent check     {\buildmathaccent\mathcheck}
+\definemathaccent hat       {\buildmathaccent\mathhat}
+\definemathaccent vec       {\buildmathaccent\mathvec}
+\definemathaccent dot       {\buildmathaccent\mathdot}
+\definemathaccent widetilde {\buildmathaccent\mathwidetilde}
+\definemathaccent widehat   {\buildmathaccent\mathwidehat}
+
+\useencoding[def] % defaults (partly simplified)
+\useencoding[acc] % accent commands
+\useencoding[raw] % simplified (incomplete)
+\useencoding[com] % a few commands
+\useencoding[cas] % case mapping, not needed in mkiv
+\useencoding[mis] % a few commands
+
+%D We preload several encodings:
+
+\ifnum\texengine=\xetexengine
+    \setupencoding[\s!default=\s!default]
+\else
+    \useencoding[ans,il2,ec,tbo,pdf,pol,qx,t5,l7x,cyr,agr] % pol and il2 will go away, not needed in mkiv, uc removed
+    \useencoding[032,033,037] % fallbacks for some unicode chars
+    \setupencoding[\s!default=ec] % was: [\s!default=\s!default]
+\fi
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-l7x.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-l7x.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-l7x.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,236 @@
+%D \module
+%D   [     file=enco-l7x,
+%D      version=2010.01.22,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=\LATEX\ L7x Encoding,
+%D       author={Hans Hagen \& Mojca Miklavec},
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Encoding vector to support Latvian and Lithuanian. The first
+%D part is taken from EC encoding, the rest has not been tested
+%D extensively.
+
+\startmapping[l7x]
+
+\definecaseswap  25 `I                    % dotless i (TODO - probably wrong; maybe use \defineuppercasecom)
+\definecaseswap 156 140                   % oeligature
+\definecaseswap 184 168                   % ostroke
+\definecaseswap 186 170                   % rcommaaccent
+\definecaseswap 191 175                   % aeligature
+\definecaseself 223                       % ssharp (this is wrong, but no better way)
+
+\definecasemaps 192 to 222 lc +32 uc   0
+\definecasemaps 224 to 254 lc   0 uc -32
+\resetcaserange 215 to 215                % textmultiply
+\resetcaserange 247 to 247                % textdiv
+
+\stopmapping
+
+\startencoding[l7x]
+
+\definecharacter textgrave         0
+\definecharacter textacute         1
+\definecharacter textcircumflex    2
+\definecharacter texttilde         3
+\definecharacter textdiaeresis     4
+\definecharacter texthungarumlaut  5
+\definecharacter textring          6
+\definecharacter textcaron         7
+\definecharacter textbreve         8
+\definecharacter textmacron        9
+\definecharacter textdotaccent    10
+\definecharacter textcedilla      11
+\definecharacter textogonek       12
+\definecharacter quotesinglebase  13
+\definecharacter guilsingleleft   14
+\definecharacter guilsingleright  15
+\definecharacter quotedblleft     16
+\definecharacter quotedblright    17
+\definecharacter quotedblbase     18
+\definecharacter leftguillemot    19
+\definecharacter rightguillemot   20
+\definecharacter endash           21
+\definecharacter emdash           22
+%definecharacter compoundwordmark 23
+%definecharacter perthousand      24
+\definecharacter dotlessi         25 % or when missing: {j}
+\definecharacter dotlessj         26
+% ff                              27
+% fi                              28
+% fl                              29
+% ffi                             30
+% ffl                             31
+%definecharacter textvisiblespace 32
+% exclam         !                33
+\definecharacter quotedbl         34
+% numbersign     #                35
+% dollar         $                36
+\definecharacter percent          37
+% ampersand      &                38
+%definecharacter quotesingle      39 % fake 'm TODO:enco-def!!!!
+\definecharacter quoteright       39
+% parenleft      (                40
+% parenright     )                41
+% asterisk       *                42
+% plus           +                43
+% comma          ,                44
+\definecharacter softhyphen       45
+% period         .                46
+% slash          /                47
+% 0-9                          48-57
+% colon          :                58
+% semicolon      ;                59
+% less           <                60
+% equal          =                61
+% greater        >                62
+% question       ?                63
+% at             @                64
+% A-Z                          65-90
+% bracketleft    [                91
+\definecharacter textbackslash    92
+% bracketright   ]                93
+\definecharacter textasciicircum  94
+\definecharacter textunderscore   95
+\definecharacter quoteleft        96
+% a-z                         97-122
+\definecharacter textbraceleft   123
+\definecharacter textbraceright  125
+\definecharacter textasciitilde  126
+% .notdef                        127
+\definecharacter texteuro        128
+% .notdef                        129
+\definecharacter quotesinglebase 130
+\definecharacter textflorin      131 \definecharacter fhook           131
+\definecharacter quotedblbase    132
+\definecharacter textellipsis    133
+\definecharacter textdag         134
+\definecharacter textddag        135
+% .notdef                        136
+\definecharacter perthousand     137
+% .notdef                        138
+\definecharacter guilsingleleft  139
+\definecharacter OEligature      140 % TODO: also \OE???
+\definecharacter textdiaeresis   141
+\definecharacter textcaron       142
+\definecharacter textcedilla     143
+% .notdef                        144
+\definecharacter quoteleft       145
+\definecharacter quoteright      146
+\definecharacter quotedblleft    147
+\definecharacter quotedblright   148
+\definecharacter textbullet      149
+\definecharacter endash          150
+\definecharacter emdash          151
+% .notdef                        152
+\definecharacter trademark       153
+% .notdef                        154
+\definecharacter guilsingleright 155
+\definecharacter oeligature      156
+\definecharacter textmacron      157
+\definecharacter textogonek      158
+% .notdef                        159
+%definecharacter space           160 % TODO!!!
+\definecharacter quotedblright   161
+\definecharacter textcent        162
+\definecharacter textsterling    163
+\definecharacter textcurrency    164
+\definecharacter quotedblbase    165
+\definecharacter textbrokenbar   166
+\definecharacter sectionmark     167
+\definecharacter Ostroke         168
+\definecharacter copyright       169
+\definecharacter Rcommaaccent    170
+\definecharacter leftguillemot   171
+\definecharacter textlognot      172
+%definecharacter softhyphen      173 % -> 45 (TODO!!!)
+\definecharacter registered      174
+\definecharacter AEligature      175
+\definecharacter textdegree      176
+\definecharacter textpm          177
+\definecharacter twosuperior     178
+\definecharacter threesuperior   179
+\definecharacter quotedblleft    180
+\definecharacter textmu          181
+\definecharacter paragraphmark   182
+\definecharacter periodcentered  183
+\definecharacter ostroke         184
+\definecharacter onesuperior     185
+\definecharacter rcommaaccent    186
+\definecharacter rightguillemot  187
+\definecharacter onequarter      188
+\definecharacter onehalf         189
+\definecharacter threequarter    190
+\definecharacter aeligature      191
+\definecharacter Aogonek         192
+\definecharacter Iogonek         193
+\definecharacter Amacron         194
+\definecharacter Cacute          195
+\definecharacter Adiaeresis      196
+\definecharacter Aring           197
+\definecharacter Eogonek         198
+\definecharacter Emacron         199
+\definecharacter Ccaron          200
+\definecharacter Eacute          201
+\definecharacter Zacute          202
+\definecharacter Edotaccent      203
+\definecharacter Gcommaaccent    204
+\definecharacter Kcommaaccent    205
+\definecharacter Imacron         206
+\definecharacter Lcommaaccent    207
+\definecharacter Scaron          208
+\definecharacter Nacute          209
+\definecharacter Ncommaaccent    210
+\definecharacter Oacute          211
+\definecharacter Omacron         212
+\definecharacter Otilde          213
+\definecharacter Odiaeresis      214
+\definecharacter textmultiply    215
+\definecharacter Uogonek         216
+\definecharacter Lstroke         217
+\definecharacter Sacute          218
+\definecharacter Umacron         219
+\definecharacter Udiaeresis      220
+\definecharacter Zdotaccent      221
+\definecharacter Zcaron          222
+\definecharacter ssharp          223
+\definecharacter aogonek         224
+\definecharacter iogonek         225
+\definecharacter amacron         226
+\definecharacter cacute          227
+\definecharacter adiaeresis      228
+\definecharacter aring           229
+\definecharacter eogonek         230
+\definecharacter emacron         231
+\definecharacter ccaron          232
+\definecharacter eacute          233
+\definecharacter zacute          234
+\definecharacter edotaccent      235
+\definecharacter gcommaaccent    236
+\definecharacter kcommaaccent    237
+\definecharacter imacron         238
+\definecharacter lcommaaccent    239
+\definecharacter scaron          240
+\definecharacter nacute          241
+\definecharacter ncommaaccent    242
+\definecharacter oacute          243
+\definecharacter omacron         244
+\definecharacter otilde          245
+\definecharacter odiaeresis      246
+\definecharacter textdiv         247
+\definecharacter uogonek         248
+\definecharacter lstroke         249
+\definecharacter sacute          250
+\definecharacter umacron         251
+\definecharacter udiaeresis      252
+\definecharacter zdotaccent      253
+\definecharacter zcaron          254
+\definecharacter quoteright      255
+
+\stopencoding
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-lat.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-lat.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-lat.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,7 @@
+% temporary module, needed for downward compatibility
+
+\input regi-lat.tex
+
+\enableregime[latin2]
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-mis.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-mis.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-mis.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,188 @@
+%D \module
+%D   [       file=enco-mis,
+%D        version=2000.05.07, % 1999.11.11,
+%D          title=\CONTEXT\ Encoding Macros,
+%D       subtitle=Missing Glyphs,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D In this file we collect some definitions that construct
+%D pseudo characters. Some day we will move some definitions
+%D from \type {plain.tex} to this file. Some definitions are
+%D derived from definitions in the \LATEX\ distribution,
+%D especially Johannes Braams' Babel system.
+
+\startmapping[\s!default]
+
+\defineuppercasecom \dj  \DJ
+\defineuppercasecom \Dj  \dj
+\defineuppercasecom \DJ  \dj
+
+\definecharacter dstroke {\pseudoencodeddj}
+\definecharacter Dstroke {\pseudoencodedDJ}
+
+\stopmapping
+
+%D We need proper names like in enco-com.tex!
+
+\definecharacter dj {\dstroke} % {\pseudoencodeddj}
+\definecharacter Dj {\Dstroke} % {\pseudoencodedDJ}
+\definecharacter DJ {\Dstroke} % {\pseudoencodedDJ}
+
+\unprotect
+
+\def\pseudoencodeddj % like in babel, but safer
+  {\dontleavehmode\hbox\bgroup
+   \setbox\scratchbox\hbox{d}%
+   \scratchdimen\ht\scratchbox
+   \advance\scratchdimen 1ex
+   \scratchdimen.45\scratchdimen
+   \dimen2=\withoutpt\the\slantperpoint\dimen0
+   \advance\dimen2 .5ex
+   \hbox to \wd\scratchbox
+     {\box\scratchbox\hss
+      \raise\scratchdimen\hbox{\kern\dimen2\vbox{\hrule\!!height0.1ex\!!width0.3em}}}%
+   \egroup}
+
+\def\pseudoencodedDJ % design: taco; quality assurance: mojca; cleanup: hans
+  {\dontleavehmode
+   \hbox\bgroup
+   \setbox\scratchbox\hbox{D}%
+   \dimen2=1.1ex
+   \dimen2=\withoutpt\the\slantperpoint\dimen2
+   \hbox to \wd\scratchbox
+     {\rlap
+        {\raise.52\ht\scratchbox
+         \hbox
+           {\kern\dimen2
+            \vbox{\hrule\!!height.04ex\!!depth.04ex\!!width.4\wd\scratchbox}}}%
+     \box\scratchbox}%
+   \egroup}
+
+% currency
+
+\def\fakedollar % pretty cmr dependent
+  {\bgroup
+   \ifnum\fam=\itfam
+     \sl
+   \else\ifnum\fam=\bifam
+     \bs
+   \fi\fi
+   \$%
+   \egroup}
+
+\def\fakesterling % pretty cmr dependent
+  {\bgroup
+   \ifnum\fam=\bffam
+     \bi
+   \else\ifnum\fam=\bifam
+     \bi
+   \else\ifnum\fam=\bsfam
+     \bi
+   \else
+     \it
+   \fi\fi\fi
+   \$%
+   \egroup}
+
+\def\fakeflorin
+  {\bgroup
+   \ifnum\fam=\bffam
+     \bi
+   \else\ifnum\fam=\bifam
+     \bi
+   \else\ifnum\fam=\bsfam
+     \bi
+   \else
+     \it
+   \fi\fi\fi
+   f%
+   \egroup}
+
+% perthings
+
+\def\fakepercent
+  {\mathematics{^{\scriptscriptstyle0}\kern-.25em/\kern-.2em_{\scriptscriptstyle0}}}
+
+\def\fakeperthousand
+  {\mathematics{^{\scriptscriptstyle0}\kern-.25em/\kern-.2em_{\scriptscriptstyle00}}}
+
+\def\fakepermine
+  {\dontleavehmode
+   \bgroup
+   \setbox\scratchbox\hbox
+     {\mathematics{+}}%
+   \hbox to \wd\scratchbox
+     {\hss
+      \mathematics{^{\scriptscriptstyle-}\kern-.4em/\kern-.3em_{\scriptscriptstyle-}}%
+      \hss}%
+   \egroup}
+
+% guillemots
+
+%D Yes I know, they are ugly:
+
+\def\fakeleftguillemot
+  {\dontleavehmode\hbox{\raise.25ex\hbox{$\scriptscriptstyle\ll$}}}
+
+\def\fakerightguillemot
+  {\hbox{\raise.25ex\hbox{$\scriptscriptstyle\gg$}}}
+
+\def\fakeleftsubguillemot
+  {\dontleavehmode\hbox{\raise.25ex\hbox{$\scriptscriptstyle<$}}}
+
+\def\fakerightsubguillemot
+  {\hbox{\raise.25ex\hbox{$\scriptscriptstyle>$}}}
+
+%D Needed:
+
+\def\fakevisiblespace
+  {\leavevmode\hbox
+     {\setbox\scratchbox\hbox{(}%
+      \scratchdimen.1\dp\scratchbox
+      \setbox\scratchbox\hbox{\space}%
+      \hbox to \wd\scratchbox
+        {\vrule
+           \!!depth  5\scratchdimen
+           \!!width   \scratchdimen
+           \!!height  \zeropoint
+         \hss
+         \vrule
+           \!!depth  5\scratchdimen
+           \!!width   \wd\scratchbox
+           \!!height-4\scratchdimen
+         \hss
+         \vrule
+           \!!depth  5\scratchdimen
+           \!!width   \scratchdimen
+           \!!height  \zeropoint}}}
+
+%\def\fakeunderscore{\leavevmode\kern.06em\vbox{\hrule\!!width.3em}}
+
+\def\fakeunderscore
+  {\leavevmode\hbox
+     {\setbox\scratchbox\hbox{(}%
+      \scratchdimen.2\dp\scratchbox
+      \setbox\scratchbox\hbox{\space}%
+      \vrule
+        \!!depth \scratchdimen
+        \!!width \wd\scratchbox
+        \!!height\zeropoint}}
+
+\ifx\mathunderscore\undefined \let\mathunderscore\fakeunderscore \fi
+\ifx\textunderscore\undefined \let\textunderscore\fakeunderscore \fi
+
+\unexpanded\def\normalunderscore{\ifmmode\mathunderscore\else\textunderscore\fi}
+
+\let\_\normalunderscore
+
+% Handy but obsolete, replaced by \unknownchar:
+%
+% \def\missingglyph{\ruledhbox{?}}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-pdf.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-pdf.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-pdf.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,278 @@
+%D \module
+%D   [     file=enco-pdf,
+%D      version=1995.01.01,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=\YandY\ texnansi Encoding,
+%D       author=Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This is the \PDF\ document encoding.
+
+\startencoding[pdfdoc] % \rawcharacter{number}
+
+\definecharacter oeligature        ^^9c
+
+\definecharacter leftguillemot     ^^ab
+\definecharacter rightguillemot    ^^bb
+
+\definecharacter Agrave            ^^c0
+\definecharacter Aacute            ^^c1
+\definecharacter Acircumflex       ^^c2
+\definecharacter Atilde            ^^c3
+\definecharacter Adiaeresis        ^^c4
+\definecharacter OAligature        ^^c5
+\definecharacter AEligature        ^^c6
+\definecharacter Ccedilla          ^^c7
+\definecharacter Egrave            ^^c8
+\definecharacter Eacute            ^^c9
+\definecharacter Ecircumflex       ^^ca
+\definecharacter Ediaeresis        ^^cb
+\definecharacter Igrave            ^^cc
+\definecharacter Iacute            ^^cd
+\definecharacter Icircumflex       ^^ce
+\definecharacter Idiaeresis        ^^cf
+
+\definecharacter Ntilde            ^^d1
+\definecharacter Ograve            ^^d2
+\definecharacter Oacute            ^^d3
+\definecharacter Ocircumflex       ^^d4
+\definecharacter Otilde            ^^d5
+\definecharacter Odiaeresis        ^^d6
+
+\definecharacter Ugrave            ^^d9
+\definecharacter Uacute            ^^da
+\definecharacter Ucircumflex       ^^db
+\definecharacter Udiaeresis        ^^dc
+\definecharacter Yacute            ^^dd
+
+\definecharacter ssharp            ^^df
+\definecharacter agrave            ^^e0
+\definecharacter aacute            ^^e1
+\definecharacter acircumflex       ^^e2
+\definecharacter atilde            ^^e3
+\definecharacter adiaeresis        ^^e4
+\definecharacter oaligature        ^^e5
+\definecharacter aeligature        ^^e6
+\definecharacter ccedilla          ^^e7
+\definecharacter egrave            ^^e8
+\definecharacter eacute            ^^e9
+\definecharacter ecircumflex       ^^ea
+\definecharacter ediaeresis        ^^eb
+\definecharacter igrave            ^^ec
+\definecharacter iacute            ^^ed
+\definecharacter icircumflex       ^^ee
+\definecharacter idiaeresis        ^^ef
+
+\definecharacter ntilde            ^^f1
+\definecharacter ograve            ^^f2
+\definecharacter oacute            ^^f3
+\definecharacter ocircumflex       ^^f4
+\definecharacter otilde            ^^f5
+\definecharacter odiaeresis        ^^f6
+
+\definecharacter ugrave            ^^f9
+\definecharacter uacute            ^^fa
+\definecharacter ucircumflex       ^^fb
+\definecharacter udiaeresis        ^^fc
+\definecharacter yacute            ^^fd
+
+\definecharacter ydiaeresis        ^^ff
+
+\definecharacter leftsubguillemot  {\leftguillemot}
+\definecharacter rightsubguillemot {\rightguillemot}
+
+\definecharacter Uhungarumlaut     {\Ucircumflex}
+\definecharacter uhungarumlaut     {\ucircumflex}
+\definecharacter Ohungarumlaut     {\Ocircumflex}
+\definecharacter ohungarumlaut     {\ocircumflex}
+
+\definecharacter Aogonek           {A}
+\definecharacter aogonek           {a}
+\definecharacter Eogonek           {E}
+\definecharacter eogonek           {e}
+\definecharacter Iogonek           {I}
+\definecharacter iogonek           {i}
+\definecharacter Uogonek           {U}
+\definecharacter uogonek           {u}
+
+\definecharacter Aring             {A}
+\definecharacter aring             {a}
+\definecharacter Uring             {U}
+\definecharacter uring             {u}
+
+\definecharacter Abreve            {A}
+\definecharacter abreve            {a}
+\definecharacter Ebreve            {E}
+\definecharacter ebreve            {e}
+\definecharacter Gbreve            {G}
+\definecharacter gbreve            {g}
+\definecharacter Ibreve            {I}
+\definecharacter ibreve            {i}
+\definecharacter Obreve            {O}
+\definecharacter obreve            {o}
+\definecharacter Ubreve            {U}
+\definecharacter ubreve            {u}
+
+\definecharacter Ccaron            {C}
+\definecharacter ccaron            {c}
+\definecharacter Dcaron            {D}
+\definecharacter dcaron            {d}
+\definecharacter Ecaron            {E}
+\definecharacter ecaron            {e}
+\definecharacter Lcaron            {L}
+\definecharacter lcaron            {l}
+\definecharacter Ncaron            {N}
+\definecharacter ncaron            {n}
+\definecharacter Rcaron            {R}
+\definecharacter rcaron            {r}
+\definecharacter Scaron            {S}
+\definecharacter scaron            {s}
+\definecharacter Tcaron            {T}
+\definecharacter tcaron            {t}
+\definecharacter Ycaron            {Y}
+\definecharacter ycaron            {y}
+\definecharacter Zcaron            {Z}
+\definecharacter zcaron            {z}
+
+\definecharacter Lstroke           {L}
+\definecharacter lstroke           {l}
+\definecharacter Ostroke           {O}
+\definecharacter ostroke           {o}
+
+\definecharacter aumlaut           {\adiaeresis}
+\definecharacter eumlaut           {\ediaeresis}
+\definecharacter iumlaut           {\idiaeresis}
+\definecharacter oumlaut           {\odiaeresis}
+\definecharacter uumlaut           {\udiaeresis}
+
+\definecharacter Aumlaut           {\Adiaeresis}
+\definecharacter Eumlaut           {\Ediaeresis}
+\definecharacter Iumlaut           {\Idiaeresis}
+\definecharacter Oumlaut           {\Odiaeresis}
+\definecharacter Uumlaut           {\Udiaeresis}
+
+\definecharacter scommaaccent      {s}
+\definecharacter Scommaaccent      {S}
+\definecharacter tcommaaccent      {t}
+\definecharacter Tcommaaccent      {T}
+
+\definecharacter Etilde            {E}
+\definecharacter etilde            {e}
+
+\definecharacter Ahook             {A}
+\definecharacter ahook             {a}
+\definecharacter Ehook             {E}
+\definecharacter ehook             {e}
+\definecharacter Ihook             {I}
+\definecharacter ihook             {i}
+\definecharacter Ohook             {O}
+\definecharacter ohook             {o}
+\definecharacter Uhook             {U}
+\definecharacter uhook             {u}
+\definecharacter Yhook             {Y}
+\definecharacter yhook             {y}
+
+\definecharacter Acircumflexgrave  {\Acircumflex}
+\definecharacter Acircumflexacute  {\Acircumflex}
+\definecharacter Acircumflextilde  {\Acircumflex}
+\definecharacter Acircumflexhook   {\Acircumflex}
+\definecharacter acircumflexgrave  {\acircumflex}
+\definecharacter acircumflexacute  {\acircumflex}
+\definecharacter acircumflextilde  {\acircumflex}
+\definecharacter acircumflexhook   {\acircumflex}
+\definecharacter Ecircumflexgrave  {\Ecircumflex}
+\definecharacter Ecircumflexacute  {\Ecircumflex}
+\definecharacter Ecircumflextilde  {\Ecircumflex}
+\definecharacter Ecircumflexhook   {\Ecircumflex}
+\definecharacter ecircumflexgrave  {\ecircumflex}
+\definecharacter ecircumflexacute  {\ecircumflex}
+\definecharacter ecircumflextilde  {\ecircumflex}
+\definecharacter ecircumflexhook   {\ecircumflex}
+\definecharacter Ocircumflexgrave  {\Ocircumflex}
+\definecharacter Ocircumflexacute  {\Ocircumflex}
+\definecharacter Ocircumflextilde  {\Ocircumflex}
+\definecharacter Ocircumflexhook   {\Ocircumflex}
+\definecharacter ocircumflexgrave  {\ocircumflex}
+\definecharacter ocircumflexacute  {\ocircumflex}
+\definecharacter ocircumflextilde  {\ocircumflex}
+\definecharacter ocircumflexhook   {\ocircumflex}
+
+\definecharacter Abrevegrave       {A}
+\definecharacter Abreveacute       {A}
+\definecharacter Abrevetilde       {A}
+\definecharacter Abrevehook        {A}
+\definecharacter abrevegrave       {a}
+\definecharacter abreveacute       {a}
+\definecharacter abrevetilde       {a}
+\definecharacter abrevehook        {a}
+
+\definecharacter Adotbelow         {A}
+\definecharacter adotbelow         {a}
+\definecharacter Edotbelow         {E}
+\definecharacter edotbelow         {e}
+\definecharacter Idotbelow         {I}
+\definecharacter idotbelow         {i}
+\definecharacter Odotbelow         {O}
+\definecharacter odotbelow         {o}
+\definecharacter Udotbelow         {U}
+\definecharacter udotbelow         {u}
+\definecharacter Ydotbelow         {Y}
+\definecharacter ydotbelow         {y}
+\definecharacter Ohorndotbelow     {O}
+\definecharacter ohorndotbelow     {o}
+\definecharacter Uhorndotbelow     {U}
+\definecharacter uhorndotbelow     {u}
+
+\definecharacter Acircumflexdotbelow {\Acircumflex}
+\definecharacter acircumflexdotbelow {\acircumflex}
+\definecharacter Ecircumflexdotbelow {\Ecircumflex}
+\definecharacter ecircumflexdotbelow {\ecircumflex}
+\definecharacter Ocircumflexdotbelow {\Ocircumflex}
+\definecharacter ocircumflexdotbelow {\ocircumflex}
+\definecharacter Abrevedotbelow      {\Abreve}
+\definecharacter abrevedotbelow      {\abreve}
+
+\definecharacter Ohorn               {O}
+\definecharacter Ohorngrave          {O}
+\definecharacter Ohornacute          {O}
+\definecharacter Ohorntilde          {O}
+\definecharacter Ohornhook           {O}
+
+\definecharacter ohorn               {o}
+\definecharacter ohorngrave          {o}
+\definecharacter ohornacute          {o}
+\definecharacter ohorntilde          {o}
+\definecharacter ohornhook           {o}
+
+\definecharacter Uhorn               {U}
+\definecharacter Uhorngrave          {U}
+\definecharacter Uhornacute          {U}
+\definecharacter Uhorntilde          {U}
+\definecharacter Uhornhook           {U}
+
+\definecharacter uhorn               {u}
+\definecharacter uhorngrave          {u}
+\definecharacter uhornacute          {u}
+\definecharacter uhorntilde          {u}
+\definecharacter uhornhook           {u}
+
+\definecharacter Utilde              {U}
+\definecharacter utilde              {u}
+\definecharacter Itilde              {I}
+\definecharacter itilde              {i}
+\definecharacter Ygrave	    	     {Y}
+\definecharacter ygrave		         {y}
+\definecharacter Ytilde              {Y}
+\definecharacter ytilde              {y}
+
+\definecharacter dstroke             {d}
+\definecharacter Dstroke             {D}
+
+\stopencoding
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-pfr.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-pfr.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-pfr.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,305 @@
+%D \module
+%D   [       file=enco-pfr,
+%D        version=2000.12.10, % adapted 2005.08.14 to more delayed loading
+%D          title=\CONTEXT\ Encoding Macros,
+%D       subtitle=PDF Resources,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\ifnum\texengine>\pdftexengine
+    \expandafter \endinput
+\fi
+
+\ifdefined\pdffontresource \else
+    \expandafter \endinput
+\fi
+
+\writestatus{loading}{ConTeXt Encoding Macros / PDF Resources}
+
+%D This is an experimental module in which we implement
+%D font resource inclusion in \PDF. One reason to include
+%D font resources is that it enables a search engine to
+%D perform a search (I'm told). This feature ws requested by
+%D Petr Ferdus from Czech.
+
+%D A simple test file may look like this (watch how we first
+%D load the encoding and then the font; previous font
+%D definitions are left untouched.)
+%D
+%D \starttyping
+%D % output=pdftex interface=en
+%D
+%D \useencoding[pfr]
+%D \setupbodyfont[csr]
+%D
+%D \starttext
+%D   test \`z \'z \bf test \sl test \bs quite funny \`z \page
+%D   test \`z \'z \bf test \sl test \bs quite funny \`z \page
+%D \stoptext
+%D \stoptyping
+%D
+%D We do our best to include a (often large) font resources
+%D only once. The current implementation is not that
+%D general which is also due to the fact that \type
+%D {\pdffontattr} is expanded instantly and persistent. A
+%D more versatile (but also slower) approach is to keep track
+%D of the fonts and either flush the information at shipout
+%D time, or at the end of the document.
+
+%D \macros
+%D   {ifincludepdffontresources}
+%D
+%D You can turn of this feature using the following switch.
+
+\newif\ifincludepdffontresources \includepdffontresourcestrue
+
+\ifx\pdfglyphtounicode\undefined \else
+    \appendtoks
+        \doif\jobsuffix{pdf}{\readfile{pdfr-def.mkii}\donothing\donothing}%
+    \to \everystarttext
+\fi
+
+% somehow we cannot preload this beast; also, it's mk dependent
+%
+% \appendtoks
+%   \doifelse{\jobsuffix}{pdf}{\loadmkiifile{pdfr-def.mkii}}%
+% \to \everystarttext
+
+% ugly, this should go to the driver spec-tpd
+
+\ifx\pdfgentounicode\undefined \else
+    \ifcase\pdfgentounicode \else
+        \expandafter \expandafter \expandafter \endinput
+    \fi
+\fi
+
+\unprotect
+
+% a problem is that there is always an ec vector added even when
+% we switch to texnansi early; this has to do with the fact that
+% we need to setup fonts at startup; this a pain when we have
+% textless documents, so we should have a way around, i.e. an
+% extension to pdftex where we can tag numbers inside user specs
+% and attributes.
+%
+% currently we need to use immediate so we end up with entries
+
+%D The name of the resource is stored in a macro, as is its
+%D object reference. A resource is only processed once. When
+%D done, the resource name is erased, and we use this fact to
+%D prevent redefinition as well as well as reloading. So, a
+%D macro defined with \type {\pdffontfileresource} can have
+%D three states:
+%D
+%D \startitemize[packed]
+%D \item undefined: not yet loaded, and not yet included
+%D \item some value: loaded, but not yet included
+%D \item empty: loaded, and already included
+%D \stopitemize
+
+\def\pdffontresource    {pdfr:\currentencoding}
+\def\pdffontfileresource{pdff:\pdffontresource}
+
+%D A resource is defined in a file prefixed by \type {pdfr-}.
+%D The following \PDF\ code is composed by Ondrej Koala Vacha (I
+%D probably mispelled this name).
+%D
+%D \starttyping
+%D \startpdffontresource[il2]
+%D /CIDInit /ProcSet findresource begin
+%D 12 dict begin
+%D   begincmap
+%D     /CIDSystemInfo
+%D       << /Registry (Adobe)
+%D          /Ordering (T1UV)
+%D          /Supplement 0
+%D       >> def
+%D     /CMapName /Adobe-Identity-UCS def
+%D     /CMapType 1 def
+%D     1 begincodespacerange
+%D       <00> <FF>
+%D     endcodespacerange
+%D     %%FontSpecificEncoding
+%D     191 beginbfrange
+%D       <20> <20> <0020> % space         dec: 32 oct:040 hex:20
+%D       .... .... ...... . ........      .... .. ....... ......
+%D       <ff> <ff> <00ff> % dotaccent     dec:255 oct:377 hex:ff
+%D     endbfrange
+%D   endcmap
+%D CMapName currentdict /CMap defineresource pop end
+%D end
+%D \stoppdffontresource
+%D \stoptyping
+%D
+%D We don't preload such huge definitions, and process them
+%D run||time to save memory. Therefore, in the encoding
+%D vector, we only add an entry like:
+%D
+%D \starttyping
+%D \startencoding [il2]
+%D   \usepdffontresource il2
+%D \stopencoding
+%D \stoptyping
+%D
+%D This macro is defined as follows.
+
+\def\usepdffontresource #1 %
+  {\doifundefinedelse\pdffontfileresource % okay, undefined, so either
+     {\setxvalue\pdffontfileresource{#1}} % brand new, or not yet loaded
+     {\doifvaluesomething\pdffontfileresource  % only if not loaded in which
+        {\setxvalue\pdffontfileresource{#1}}}} % case it's made empty
+
+%D Watch how we check for duplicated loading. The resource
+%D itself, when asked for, is included immediately, after which
+%D we save its reference. Normally a document will have one
+%D such a resource.
+
+% \long\def\startpdffontresource[#1]#2\stoppdffontresource
+%   {\doif{#1}\currentencoding
+%     {\immediate\pdfobj useobjnum \getvalue{\pdffontresource} stream {#2}}}
+
+% alternatively we can use object references
+
+% fails when we switch back and forward between dvi/pdf mode
+%
+% \long\def\startpdffontresource[#1]#2\stoppdffontresource
+%   {\doif{#1}\currentencoding{\doifdefined\pdffontresource
+%      {\immediate\pdfobj useobjnum \getvalue{\pdffontresource} stream {#2}}}}
+
+\long\def\startpdffontresource[#1]#2\stoppdffontresource
+  {\doif{#1}\currentencoding{\doifdefined\pdffontresource
+     {\expanded{\doshipoutpdffontresource{\getvalue{\pdffontresource}}{#2}}}}}
+
+\def\doshipoutpdffontresource#1#2%
+  {\ifnum\realpageno<\plustwo
+     \doglobal\appendtoks
+       \ifcase\pdfoutput\else\immediate\pdfobj useobjnum #1 stream {#2}\fi
+     \to\everyfirstshipout
+   \else
+     \ifcase\pdfoutput\else\immediate\pdfobj useobjnum #1 stream {#2}\fi
+   \fi}
+
+% cleaner but not better:
+%
+% \newtoks \collectedpdffontresources
+%
+% \def\doshipoutpdffontresource#1#2%
+%   {\doglobal\appendtoks
+%      \ifcase\pdfoutput\else\immediate\pdfobj useobjnum #1 stream {#2}\fi
+%    \to \collectedpdffontresources}
+%
+% \def\dofluspdffontresources
+%   {\the\collectedpdffontresources
+%    \global\collectedpdffontresources\emptytoks}
+%
+% \appendtoks \dofluspdffontresources \to \everybeforeshipout
+
+%D The reference to such a vector is to be handled at font
+%D definition time, which is why we hook it into the font
+%D loading routine. A little bit of indirectness speeds up
+%D the process when this feature is disabled and keeps the
+%D macros readable.
+
+% \newevery \everyfont \relax
+
+\appendtoksonce \includepdffontresource \to \everyfont
+
+% \def\includepdffontresource
+%   {\ifincludepdffontresources
+%      \ifx\pdffontattr\undefined
+%        % we're not using (a recent version of) pdftex
+%      \else\ifcase\pdfoutput
+%        % we're not in pdf mode
+%      \else
+%        \doincludepdffontresource
+%      \fi\fi
+%    \fi}
+
+\def\includepdffontresource
+  {\ifx\pdfgentounicode\undefined
+     \expandafter\ifx\the\font\nullfont \else
+       \ifx\pdffontattr\undefined
+         % we're not using (a recent version of) pdftex
+       \else\ifcase\pdfoutput
+         % we're not in pdf mode
+       \else
+         \doincludepdffontresource
+       \fi\fi
+     \fi
+   \else\ifcase\pdfgentounicode
+     \ifincludepdffontresources
+       \expandafter\ifx\the\font\nullfont \else
+         \ifx\pdffontattr\undefined
+           % we're not using (a recent version of) pdftex
+         \else\ifcase\pdfoutput
+           % we're not in pdf mode
+         \else
+           \doincludepdffontresource
+         \fi\fi
+       \fi
+     \fi
+   \or
+     \global\let\includepdffontresource\relax % automatic, built in
+   \fi\fi}
+
+\def\dododoincludepdffontresource#1% encoding
+  {\bgroup
+   \edef\currentencoding{#1}%
+   \doifvaluesomething\pdffontfileresource
+     {\startreadingfile
+        \ignorelines % just in case \par is redefined; this thing can get called anywhere
+        \readsysfile{pdfr-\getvalue\pdffontfileresource.mkii}\donothing\donothing
+      \stopreadingfile
+      \letgvalue\pdffontfileresource\empty}%
+   \egroup}
+
+\def\doincludepdffontresource
+  {\ifcsname\s!ucmap\fontfile\endcsname\else
+     \dodoincludepdffontresource
+   \fi}
+
+\def\dodoincludepdffontresource
+  {% does this font has an encoding specified vector
+   \doifsomething\currentencoding % no \ifx
+     {% is there a pdf font encoding resource file defined
+      \ifcsname\pdffontresource\endcsname
+        % (fake) object defined
+      \else\ifcsname\pdffontfileresource\endcsname
+        % is there a resource already included
+        \doifsomething\pdffontfileresource
+          {\pdfobj reserveobjnum {}%
+           \setxvalue\pdffontresource{\the\pdflastobj}%
+           \flushatshipout{\dododoincludepdffontresource{\currentencoding}}}%
+%            \doglobal\appendetoks
+%              \noexpand\dododoincludepdffontresource{\currentencoding}%
+%            \to \everybeforeshipout}% prevent multiple loading
+      \fi\fi
+      \ifcsname\pdffontresource\endcsname
+        \expanded{\pdffontattr\font{/ToUnicode \csname\pdffontresource\endcsname\space0 R}}%
+        % do it only once for each font
+        \letgvalue{\s!ucmap\fontfile}\empty
+      \fi}}
+
+%D For the moment, we keep this definition here, if only
+%D because \type {\usepdffontencoding} is not defined in the
+%D core. In the end, this will go to \type {enco-*.tex}.
+%D
+%D Test:
+%D
+%D \starttyping
+%D \useencoding[pfr] \usetypescript[palatino][ec] \setupbodyfont[palatino]
+%D
+%D \starttext
+%D fi ff ffi
+%D \stoptext
+%D \stoptyping
+
+\startencoding [il2] \usepdffontresource il2 \stopencoding
+\startencoding [ec]  \usepdffontresource ec  \stopencoding
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-pol.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-pol.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-pol.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,276 @@
+%D \module
+%D   [     file=enco-pol,
+%D      version=2000.05.07, % 1999.28.8,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Polish Mixed Encoding,
+%D       author={Taco Hoekwater \& Hans Hagen},
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% This encoding will go but the regime will remain.
+
+%D Polish native encoding; normally polish users will use
+%D translate=cp1250pl in combination with ec encoding.
+
+\startmapping[pl0]
+
+\resetcaserange 128 to 255
+
+\definecaseswap 161 129 % a ogonek
+\definecaseswap 162 130 % c acute
+\definecaseswap 166 134 % e ogonek
+\definecaseswap 170 138 % l crossed
+\definecaseswap 171 139 % n acute
+\definecaseswap 177 145 % s acute
+\definecaseswap 185 153 % z acute
+\definecaseswap 187 155 % z dotaccent
+\definecaseswap 243 211 % o acute
+
+% \definecasemap 161 161 129 % a ogonek
+% \definecasemap 162 162 130 % c acute
+% \definecasemap 166 166 134 % e ogonek
+% \definecasemap 170 170 138 % l crossed
+% \definecasemap 171 171 139 % n acute
+% \definecasemap 177 177 145 % s acute
+% \definecasemap 185 185 153 % z acute
+% \definecasemap 187 187 155 % z dotaccent
+% \definecasemap 243 243 211 % o acute
+
+% \definecasemap 129 161 129  % A ogonek
+% \definecasemap 130 162 130  % C acute
+% \definecasemap 134 166 134  % E ogonek
+% \definecasemap 138 170 138  % L crossed
+% \definecasemap 139 171 139  % N acute
+% \definecasemap 145 177 145  % S acute
+% \definecasemap 153 185 153  % Z acute
+% \definecasemap 155 187 155  % Z dotaccent
+% \definecasemap 211 243 211  % O acute
+
+\stopmapping
+
+\startmapping[pl0]
+
+\definespacemap 129 999  % A ogonek
+\definespacemap 130 999  % C acute
+\definespacemap 134 999  % E ogonek
+\definespacemap 138 999  % L crossed
+\definespacemap 139 999  % N acute
+\definespacemap 211 999  % O acute
+\definespacemap 145 999  % S acute
+\definespacemap 153 999  % Z acute
+\definespacemap 155 999  % Z dot
+
+\stopmapping
+
+\startencoding[pl0][pl0]
+
+\definecharacter Aogonek    129
+\definecharacter Cacute     130
+\definecharacter Eogonek    134
+\definecharacter Lstroke    138
+\definecharacter Nacute     139
+\definecharacter Sacute     145
+\definecharacter Zacute     153
+\definecharacter Zdotaccent 155
+\definecharacter aogonek    161
+\definecharacter cacute     162
+\definecharacter eogonek    166
+\definecharacter lstroke    170
+\definecharacter nacute     171
+\definecharacter sacute     177
+\definecharacter zacute     185
+\definecharacter zdotaccent 187
+\definecharacter Oacute     211
+\definecharacter oacute     243
+
+\stopencoding
+
+\startencoding[pl0][pl0]
+
+\definecharacter leftguillemot   174
+\definecharacter rightguillemot  175
+\definecharacter guilsingleleft  174
+\definecharacter guilsingleright 175
+
+\stopencoding
+
+% obsolete
+%
+% \startencoding[pl0]
+%
+% \definesortkey {161} {a}{a}{\k a}   \definesortkey {129} {a}{a}{\k a}
+% \definesortkey {162} {c}{a}{\'c}    \definesortkey {130} {c}{a}{\'c}
+% \definesortkey {166} {e}{a}{\k e}   \definesortkey {134} {e}{a}{\k e}
+% \definesortkey {170} {l}{a}{\l }    \definesortkey {138} {l}{a}{\l }
+% \definesortkey {171} {n}{a}{\'n}    \definesortkey {139} {n}{a}{\'n}
+% \definesortkey {177} {s}{a}{\'s}    \definesortkey {145} {s}{a}{\'s}
+% \definesortkey {185} {z}{a}{\'z}    \definesortkey {153} {z}{a}{\'z}
+% \definesortkey {187} {z}{b}{\.z}    \definesortkey {155} {z}{b}{\.z}
+% \definesortkey {243} {o}{a}{\'o}    \definesortkey {211} {o}{a}{\'o}
+%
+% \definesortkey {\'c} {c}{a}{\'c}    \definesortkey {\'C} {c}{a}{\'c}
+% \definesortkey {\'n} {n}{a}{\'n}    \definesortkey {\'N} {n}{a}{\'n}
+% \definesortkey {\'o} {o}{a}{\'o}    \definesortkey {\'O} {o}{a}{\'o}
+% \definesortkey {\'s} {s}{a}{\'s}    \definesortkey {\'S} {s}{a}{\'s}
+% \definesortkey {\'z} {z}{a}{\'z}    \definesortkey {\'Z} {z}{a}{\'z}
+% \definesortkey {\.z} {z}{b}{\.z}    \definesortkey {\.Z} {z}{b}{\.z}
+% \definesortkey {\k a}{a}{a}{\k a}   \definesortkey {\k A}{a}{a}{\k a}
+% \definesortkey {\k e}{e}{a}{\k e}   \definesortkey {\k E}{e}{a}{\k e}
+% \definesortkey {\l } {l}{a}{\l}     \definesortkey {\L } {l}{a}{\l}
+%
+% \stopencoding
+
+%D Polish CP-1250 encoding.
+
+% \startmapping[pl1]
+%
+%
+% \resetcaserange 128 to 255
+%
+% \definecasemap 185 185 165  % a ogonek
+% \definecasemap 230 230 198  % c acute
+% \definecasemap 234 234 202  % e ogonek
+% \definecasemap 179 179 163  % l crossed
+% \definecasemap 241 241 209  % n acute
+% \definecasemap 243 243 211  % o acute
+% \definecasemap 156 156 140  % s acute
+% \definecasemap 159 159 143  % z acute
+% \definecasemap 191 191 175  % z dot
+%
+% \definecasemap 165 165 185  % A ogonek
+% \definecasemap 198 198 230  % C acute
+% \definecasemap 202 202 234  % E ogonek
+% \definecasemap 163 163 179  % L crossed
+% \definecasemap 209 209 241  % N acute
+% \definecasemap 211 211 243  % O acute
+% \definecasemap 140 140 156  % S acute
+% \definecasemap 143 143 159  % Z acute
+% \definecasemap 175 175 191  % Z dot
+%
+% \stopmapping
+%
+% \startmapping[pl1]
+%
+% \definespacemap 165 999  % A ogonek
+% \definespacemap 198 999  % C acute
+% \definespacemap 202 999  % E ogonek
+% \definespacemap 163 999  % L crossed
+% \definespacemap 209 999  % N acute
+% \definespacemap 211 999  % O acute
+% \definespacemap 140 999  % S acute
+% \definespacemap 143 999  % Z acute
+% \definespacemap 175 999  % Z dot
+%
+% \stopmapping
+%
+% \startencoding[pl1]
+%
+% \definecharacter Sacute     140
+% \definecharacter Zacute     143
+% \definecharacter sacute     156
+% \definecharacter zacute     159
+% \definecharacter Lstroke    163
+% \definecharacter Aogonek    165
+% \definecharacter Zdotaccent 175
+% \definecharacter lstroke    179
+% \definecharacter aogonek    185
+% \definecharacter zdotaccent 191
+% \definecharacter Cacute     198
+% \definecharacter Eogonek    202
+% \definecharacter Nacute     209
+% \definecharacter Oacute     211
+% \definecharacter cacute     230
+% \definecharacter eogonek    234
+% \definecharacter nacute     241
+% \definecharacter oacute     243
+%
+% \stopencoding
+%
+% \startencoding[pl1]
+%
+% \definecharacter leftguillemot   174
+% \definecharacter rightguillemot  175
+% \definecharacter guilsingleleft  174
+% \definecharacter guilsingleright 175
+%
+% \stopencoding
+
+%D Polish ISO-8859-2 encoding.
+
+% \startmapping[pl2]
+%
+% \resetcaserange 128 to 255
+%
+% \definecasemap 177 177 161  % a ogonek
+% \definecasemap 230 230 198  % c acute
+% \definecasemap 234 234 202  % e ogonek
+% \definecasemap 179 179 163  % l crossed
+% \definecasemap 241 241 209  % n acute
+% \definecasemap 243 243 211  % o acute
+% \definecasemap 182 182 166  % s acute
+% \definecasemap 188 188 172  % z acute
+% \definecasemap 191 191 175  % z dotaccent
+%
+% \definecasemap 161 161 177  % A ogonek
+% \definecasemap 198 198 230  % C acute
+% \definecasemap 202 202 234  % E ogonek
+% \definecasemap 163 163 179  % L crossed
+% \definecasemap 209 209 241  % N acute
+% \definecasemap 211 211 243  % O acute
+% \definecasemap 166 166 182  % S acute
+% \definecasemap 172 172 188  % Z acute
+% \definecasemap 175 175 191  % Z dotaccent
+%
+% \stopmapping
+%
+% \startmapping[pl2]
+%
+% \definespacemap 161 999  % A ogonek
+% \definespacemap 198 999  % C acute
+% \definespacemap 202 999  % E ogonek
+% \definespacemap 163 999  % L crossed
+% \definespacemap 209 999  % N acute
+% \definespacemap 211 999  % O acute
+% \definespacemap 166 999  % S acute
+% \definespacemap 172 999  % Z acute
+% \definespacemap 175 999  % Z dot
+%
+% \stopmapping
+%
+% \startencoding[pl2]
+%
+% \definecharacter Aogonek    161
+% \definecharacter Lstroke    163
+% \definecharacter Sacute     166
+% \definecharacter Zacute     172
+% \definecharacter Zdotaccent 175
+% \definecharacter aogonek    177
+% \definecharacter lstroke    179
+% \definecharacter sacute     182
+% \definecharacter zacute     188
+% \definecharacter zdotaccent 191
+% \definecharacter Cacute     198
+% \definecharacter Eogonek    202
+% \definecharacter Nacute     209
+% \definecharacter Oacute     211
+% \definecharacter cacute     230
+% \definecharacter eogonek    234
+% \definecharacter nacute     241
+% \definecharacter oacute     243
+%
+% \stopencoding
+%
+% \startencoding[pl2]
+%
+% \definecharacter leftguillemot   174
+% \definecharacter rightguillemot  175
+% \definecharacter guilsingleleft  174
+% \definecharacter guilsingleright 175
+%
+% \stopencoding
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-qx.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-qx.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-qx.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,268 @@
+%D \module
+%D   [     file=enco-qx,
+%D      version=2004.04.03,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Polish QX Encoding,
+%D       author=Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% to be done
+
+%  35          numbersign
+%  95           dotaccent
+% 132        greaterequal
+% 133         approxequal
+% 137           lessequal
+% 142                 ell
+% 156                  IJ
+% 173            infinity
+% 182 threequartersemdash
+% 188                  ij
+% 247            anglearc
+% 248            diameter
+
+\startmapping[qx] % to be done
+
+\resetcaserange 128 to 128
+\resetcaserange 131 to 133
+\resetcaserange 136 to 137
+\resetcaserange 140 to 144
+\resetcaserange 148 to 148
+\resetcaserange 150 to 150
+\resetcaserange 157 to 160
+\resetcaserange 163 to 165
+\resetcaserange 168 to 169
+\resetcaserange 172 to 176
+\resetcaserange 180 to 180
+\resetcaserange 182 to 182
+\resetcaserange 189 to 191
+\resetcaserange 198 to 198
+\resetcaserange 215 to 216
+\resetcaserange 223 to 223
+\resetcaserange 230 to 230
+\resetcaserange 247 to 248
+\resetcaserange 255 to 255
+
+\definecaseswap 161 129
+\definecaseswap 162 130
+
+\definecaseswap 166 134
+\definecaseswap 167 135
+
+\definecaseswap 170 138
+\definecaseswap 171 139
+
+\definecaseswap 177 145
+\definecaseswap 178 146
+\definecaseswap 179 147
+
+\definecaseswap 181 149
+
+\definecasemaps 151 to 156 lc +32 uc   0
+\definecasemaps 183 to 188 lc   0 uc -32
+
+\definecasemaps 192 to 197 lc +32 uc   0
+\definecasemaps 224 to 229 lc   0 uc -32
+
+\definecasemaps 199 to 214 lc +32 uc   0
+\definecasemaps 231 to 246 lc   0 uc -32
+
+\definecasemaps 217 to 222 lc +32 uc   0
+\definecasemaps 249 to 254 lc   0 uc -32
+
+\definecaseself 39 % quoteright
+
+\stopmapping
+
+\startencoding[qx]
+
+\definecharacter textacute         19
+\definecharacter textbreve         21
+\definecharacter textcaron         20
+\definecharacter textcedilla       24
+\definecharacter textcircumflex    94
+\definecharacter textdiaeresis    127
+\definecharacter textdotaccent     94
+\definecharacter textgrave         18
+\definecharacter texthungarumlaut 125
+\definecharacter textmacron        22
+\definecharacter textogonek       150
+\definecharacter textring          23
+\definecharacter texttilde        126
+
+\definecharacter dotlessi          16
+\definecharacter dotlessj          17
+
+\definecharacter endash           123
+\definecharacter emdash           124
+
+\definecharacter aeligature        26
+\definecharacter AEligature        29
+\definecharacter oeligature        27
+\definecharacter OEligature        30
+
+\definecharacter ssharp            25
+%definecharacter Ssharp            25
+
+\definecharacter thorn            254
+\definecharacter Thorn            222
+
+\definecharacter Dstroke          208 % also Eth, mapped into enco-def
+\definecharacter eth              240
+
+\definecharacter exclamdown        60
+\definecharacter questiondown      62
+
+\definecharacter sectionmark      159
+
+\definecharacter percent           37
+\definecharacter perthousand      216
+
+\definecharacter textasciicircum  141
+\definecharacter textasciitilde   140
+\definecharacter textbackslash    198
+\definecharacter textbraceleft    157
+\definecharacter textbraceright   158
+\definecharacter textunderscore   230
+
+\definecharacter textcurrency     215
+\definecharacter textdollar        36
+\definecharacter texteuro         128
+
+\definecharacter periodcentered   189
+\definecharacter textdag          143
+\definecharacter textddag         144
+\definecharacter textdegree       148
+\definecharacter textbullet       180
+
+\definecharacter paragraphmark    176
+
+\definecharacter copyright        164
+\definecharacter registered       163
+
+\definecharacter textbrokenbar    223
+\definecharacter textellipsis       8
+\definecharacter textslash         47
+\definecharacter textpm           172
+\definecharacter textdiv          165
+\definecharacter textminus        168
+\definecharacter textmultiply     169
+\definecharacter textmu             7
+
+\definecharacter quotedbl         190
+\definecharacter quotedblbase     255
+\definecharacter quotedblleft      92
+\definecharacter quotedblright     34
+
+\definecharacter quotesingle      191
+
+\definecharacter quoteleft         96
+\definecharacter quoteright        39
+
+\definecharacter leftguillemot    174
+\definecharacter rightguillemot   175
+
+\definecharacter aacute           225
+\definecharacter Aacute           193
+\definecharacter cacute           162
+\definecharacter Cacute           130
+\definecharacter eacute           233
+\definecharacter Eacute           201
+\definecharacter iacute           237
+\definecharacter Iacute           205
+\definecharacter Nacute           139
+\definecharacter Oacute           211
+\definecharacter nacute           171
+\definecharacter oacute           243
+\definecharacter sacute           177
+\definecharacter Sacute           145
+\definecharacter uacute           250
+\definecharacter Uacute           218
+\definecharacter yacute           253
+\definecharacter Yacute           221
+\definecharacter zacute           185
+\definecharacter Zacute           153
+
+\definecharacter scaron           178
+\definecharacter Scaron           146
+\definecharacter zcaron           186
+\definecharacter Zcaron           154
+
+\definecharacter ccedilla         231
+\definecharacter Ccedilla         199
+
+\definecharacter acircumflex      226
+\definecharacter Acircumflex      194
+\definecharacter ecircumflex      234
+\definecharacter Ecircumflex      202
+\definecharacter icircumflex      238
+\definecharacter Icircumflex      206
+\definecharacter ocircumflex      244
+\definecharacter Ocircumflex      212
+\definecharacter ucircumflex      251
+\definecharacter Ucircumflex      219
+
+\definecharacter adiaeresis       228
+\definecharacter Adiaeresis       196
+\definecharacter ediaeresis       235
+\definecharacter Ediaeresis       203
+\definecharacter idiaeresis       239
+\definecharacter Idiaeresis       207
+\definecharacter odiaeresis       246
+\definecharacter Odiaeresis       214
+\definecharacter udiaeresis       252
+\definecharacter Udiaeresis       220
+\definecharacter ydiaeresis       184
+\definecharacter Ydiaeresis       152
+
+\definecharacter zdotaccent       187
+\definecharacter Zdotaccent       155
+
+\definecharacter agrave           224
+\definecharacter Agrave           192
+\definecharacter egrave           232
+\definecharacter Egrave           200
+\definecharacter igrave           236
+\definecharacter Igrave           204
+\definecharacter ograve           242
+\definecharacter Ograve           210
+\definecharacter ugrave           249
+\definecharacter Ugrave           217
+
+\definecharacter aogonek          161
+\definecharacter Aogonek          129
+\definecharacter eogonek          166
+\definecharacter Eogonek          134
+\definecharacter iogonek          167
+\definecharacter Iogonek          135
+\definecharacter uogonek          183
+\definecharacter Uogonek          151
+
+\definecharacter aring            229
+\definecharacter Aring            197
+
+\definecharacter lstroke          170
+\definecharacter Lstroke          138
+\definecharacter ostroke           28
+\definecharacter Ostroke           31
+
+\definecharacter atilde           227
+\definecharacter Atilde           195
+\definecharacter ntilde           241
+\definecharacter Ntilde           209
+\definecharacter otilde           245
+\definecharacter Otilde           213
+
+\definecharacter scommaaccent     179
+\definecharacter Scommaaccent     147
+\definecharacter tcommaaccent     181
+\definecharacter Tcommaaccent     149
+
+\stopencoding
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-raw.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-raw.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-raw.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,119 @@
+% default instelbaar maken: \enableencoding[main][fallback]
+
+\startencoding[raw]
+
+\definecharacter Acircumflex {A} \definecharacter acircumflex {a}
+\definecharacter Ccircumflex {C} \definecharacter ccircumflex {c}
+\definecharacter Ecircumflex {E} \definecharacter ecircumflex {e}
+\definecharacter Gcircumflex {G} \definecharacter gcircumflex {g}
+\definecharacter Hcircumflex {H} \definecharacter hcircumflex {h}
+\definecharacter Icircumflex {I} \definecharacter icircumflex {i}
+\definecharacter Jcircumflex {J} \definecharacter jcircumflex {j}
+\definecharacter Ocircumflex {O} \definecharacter ocircumflex {o}
+\definecharacter Scircumflex {S} \definecharacter scircumflex {s}
+\definecharacter Ucircumflex {U} \definecharacter ucircumflex {u}
+\definecharacter Wcircumflex {W} \definecharacter wcircumflex {w}
+\definecharacter Ycircumflex {Y} \definecharacter ycircumflex {y}
+
+\definecharacter Agrave {A} \definecharacter agrave {a}
+\definecharacter Egrave {E} \definecharacter egrave {e}
+\definecharacter Igrave {I} \definecharacter igrave {i}
+\definecharacter Ograve {O} \definecharacter ograve {o}
+\definecharacter Ugrave {U} \definecharacter ugrave {u}
+\definecharacter Ygrave {Y} \definecharacter ygrave {y}
+
+\definecharacter Atilde {A} \definecharacter atilde {a}
+\definecharacter Itilde {I} \definecharacter itilde {i}
+\definecharacter Otilde {O} \definecharacter otilde {o}
+\definecharacter Utilde {U} \definecharacter utilde {u}
+\definecharacter Utilde {N} \definecharacter utilde {n}
+
+\definecharacter Adiaeresis {A} \definecharacter adiaeresis {a}
+\definecharacter Ediaeresis {E} \definecharacter ediaeresis {e}
+\definecharacter Idiaeresis {I} \definecharacter idiaeresis {i}
+\definecharacter Odiaeresis {O} \definecharacter odiaeresis {o}
+\definecharacter Udiaeresis {U} \definecharacter udiaeresis {u}
+\definecharacter Ydiaeresis {Y} \definecharacter ydiaeresis {y}
+
+\definecharacter Aacute {A} \definecharacter aacute {a}
+\definecharacter Cacute {C} \definecharacter cacute {c}
+\definecharacter Eacute {E} \definecharacter eacute {e}
+\definecharacter Iacute {I} \definecharacter iacute {i}
+\definecharacter Lacute {L} \definecharacter lacute {l}
+\definecharacter Nacute {N} \definecharacter nacute {n}
+\definecharacter Oacute {O} \definecharacter oacute {o}
+\definecharacter Racute {R} \definecharacter racute {r}
+\definecharacter Sacute {S} \definecharacter sacute {s}
+\definecharacter Uacute {U} \definecharacter uacute {u}
+\definecharacter Yacute {Y} \definecharacter yacute {y}
+\definecharacter Zacute {Z} \definecharacter zacute {z}
+
+\definecharacter Dstroke {D} \definecharacter dstroke {d}
+\definecharacter Hstroke {H} \definecharacter hstroke {h}
+\definecharacter Tstroke {T} \definecharacter tstroke {t}
+
+\definecharacter Cdotaccent {C} \definecharacter cdotaccent {c}
+\definecharacter Edotaccent {E} \definecharacter edotaccent {e}
+\definecharacter Gdotaccent {G} \definecharacter gdotaccent {g}
+\definecharacter Idotaccent {I} \definecharacter idotaccent {i}
+\definecharacter Zdotaccent {Z} \definecharacter zdotaccent {z}
+
+\definecharacter Amacron {A} \definecharacter amacron {a}
+\definecharacter Emacron {E} \definecharacter emacron {e}
+\definecharacter Imacron {I} \definecharacter imacron {i}
+\definecharacter Omacron {O} \definecharacter omacron {o}
+\definecharacter Umacron {U} \definecharacter umacron {u}
+
+\definecharacter Ccedilla {C} \definecharacter ccedilla {c}
+\definecharacter Kcedilla {K} \definecharacter kcedilla {k}
+\definecharacter Lcedilla {L} \definecharacter lcedilla {l}
+\definecharacter Ncedilla {N} \definecharacter ncedilla {n}
+\definecharacter Rcedilla {R} \definecharacter rcedilla {r}
+\definecharacter Scedilla {S} \definecharacter scedilla {s}
+\definecharacter Tcedilla {T} \definecharacter tcedilla {t}
+
+\definecharacter Ohungarumlaut {O} \definecharacter ohungarumlaut {o}
+\definecharacter Uhungarumlaut {U} \definecharacter uhungarumlaut {u}
+
+\definecharacter Aogonek {A} \definecharacter aogonek {a}
+\definecharacter Eogonek {E} \definecharacter eogonek {e}
+\definecharacter Iogonek {I} \definecharacter iogonek {i}
+\definecharacter Uogonek {U} \definecharacter uogonek {u}
+
+\definecharacter Aring {A} \definecharacter aring {a}
+\definecharacter Uring {U} \definecharacter uring {u}
+
+\definecharacter Abreve {A} \definecharacter abreve {a}
+\definecharacter Ebreve {E} \definecharacter ebreve {e}
+\definecharacter Gbreve {G} \definecharacter gbreve {g}
+\definecharacter Ibreve {I} \definecharacter ibreve {i}
+\definecharacter Obreve {O} \definecharacter obreve {o}
+\definecharacter Ubreve {U} \definecharacter ubreve {u}
+
+\definecharacter Ccaron {C} \definecharacter ccaron {c}
+\definecharacter Dcaron {D} \definecharacter dcaron {d}
+\definecharacter Ecaron {E} \definecharacter ecaron {e}
+\definecharacter Lcaron {L} \definecharacter lcaron {l}
+\definecharacter Ncaron {N} \definecharacter ncaron {n}
+\definecharacter Rcaron {R} \definecharacter rcaron {r}
+\definecharacter Scaron {S} \definecharacter scaron {s}
+\definecharacter Tcaron {T} \definecharacter tcaron {t}
+\definecharacter Zcaron {Z} \definecharacter zcaron {z}
+
+\definecharacter dotlessI {I} \definecharacter dotlessi {i}
+\definecharacter dotlessJ {J} \definecharacter dotlessj {j}
+
+\definecharacter AEligature {AE} \definecharacter aeligature {ae}
+\definecharacter Lstroke    {L}  \definecharacter lstroke    {l}
+\definecharacter Ostroke    {O}  \definecharacter ostroke    {o}
+\definecharacter OEligature {OE} \definecharacter oeligature {oe}
+\definecharacter Ssharp     {SS} \definecharacter ssharp     {ss}
+\definecharacter IJligature {IJ} \definecharacter ijligature {ij}
+
+\definecharacter Aumlaut {A} \definecharacter aumlaut {a}
+\definecharacter Eumlaut {E} \definecharacter eumlaut {e}
+\definecharacter Iumlaut {I} \definecharacter iumlaut {i}
+\definecharacter Oumlaut {O} \definecharacter oumlaut {o}
+\definecharacter Uumlaut {U} \definecharacter uumlaut {u}
+
+\stopencoding

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-run.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-run.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-run.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,149 @@
+%D \module
+%D   [     file=enco-run,
+%D      version=2000.27.12, % moved to runtime module
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Runtime Macros,
+%D       author=Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\gdef\visualizecharacters% {}'s needed
+  {\def\uchar##1##2{\hbox to 2.5em
+     {\ifcase##1\relax\red\or\blue\else\green\fi##1\hss##2}}%
+   \let\normalbuildtextaccent\buildtextaccent
+   \let\normalbottomaccent   \bottomaccent
+  %\def\char{\green\normalchar}%
+   \def\char % can be used in \oalign
+     {\bgroup\def\char{\green\normalchar\scratchcounter\egroup}%
+      \afterassignment\char\scratchcounter}%
+   \def\buildtextaccent{\let\green\empty\blue\normalbuildtextaccent}%
+   \def\bottomaccent{\let\green\empty\red\normalbottomaccent}}
+
+\unexpanded\gdef\visualizecharacterslegend
+  {\hbox
+     {\edef\banner{\currentencoding\space\fontname\font}%
+      \tttf\banner:\space
+      {\blue composed}\space{\red bottom}\space{\green char}\space raw}}
+
+\gdef\showaccents
+  {\bgroup
+   \savefont
+   \setuptextrules[\c!bodyfont=,\c!style=]
+   \starttextrule{\visualizecharacterslegend}
+   \whitespace
+   \restorefont\setupinterlinespace
+   \visualizecharacters
+   \def\do##1%
+     {{\def\dodo####1%
+         {\hss\hbox to 1em{\hss\expanded{##1####1\recurselevel}\hss}}%
+       \hbox to \hsize
+         {\strut
+          \localcolortrue
+          \hbox to 2em{\tttf\string##1\hss}%
+          \dorecurse{26}{\dodo\character}}%
+       \hbox to \hsize
+         {\strut
+          \localcolortrue
+          \hskip2em
+          \dorecurse{26}{\dodo\Character}}}%
+       \par}
+   \do\'\do\`\do\^\do\~\do\"
+   \do\H\do\r\do\v\do\u\do\=
+   \do\.\do\b\do\d\do\k\do\c
+   \stoptextrule
+   \egroup}
+
+\gdef\showcharacters
+  {\bgroup
+   \savefont
+   \setuptextrules[\c!bodyfont=,\c!style=]
+   \starttextrule{\visualizecharacterslegend}
+   \whitespace
+   \dontcomplain
+   \forgetall
+   \def\startencoding[##1]{}
+   \def\stopencoding{\endinput}
+   \dimen0=\zeropoint
+   \dimen2=\zeropoint
+   \def\definecharacter ##1 ##2 %
+     {\setbox0=\hbox spread 1em{\getvalue{##1}}%
+      \ifdim\wd0>\dimen0 \dimen0=\wd0 \fi
+      \setbox2=\hbox spread 1em{\box0 \tttf##1}
+      \ifdim\wd2>\dimen2 \dimen2=\wd2 \fi}%
+   \readsysfile{\f!encodingprefix def}{}{}
+   \edef\encwidth{\the\dimen0}
+   \dimen0=\hsize
+   \advance\dimen0 2em
+   \advance\dimen2 2em
+   \divide \dimen0 by \dimen2 \advance\dimen0 1sp
+   \edef\enccols{\number\dimen0}
+   \visualizecharacters
+   \startcolumns[\c!n=\enccols,\c!distance=2em]
+   \restorefont\setupinterlinespace
+   \def\definecharacter ##1 ##2 %
+     {\setbox0=\hbox to \hsize{\localcolortrue\hbox to \encwidth{\getvalue{##1}\hss}\tttf##1}%
+      \ht0\strutheight \dp0\strutdepth \box0 \allowbreak}
+   \readsysfile{\f!encodingprefix def}{}{}
+   \stopcolumns
+   \stoptextrule
+   \egroup}
+
+% \hbox
+%   {\font\test=uplr8t \test \ruledhbox{t}
+%    \font\test=uplr8r \test \ruledhbox{t}}
+
+\ifnum\texengine=\pdftexengine
+
+    \gdef\showhyphenations#1%
+      {\starttabulate[|le|l|]
+       \NC language \NC \currentlanguage\ (internal code:\the\normallanguage)    \NC \NR
+       \NC font     \NC \fontname\font                                           \NC \NR
+       \NC encoding \NC \ifx\@@fontencoding\empty not set\else\@@fontencoding\fi \NC \NR
+       \NC mapping  \NC \ifx\@@fontmapping \empty not set\else\@@fontmapping \fi \NC \NR
+       \NC handling \NC \ifx\@@fonthandling\empty not set\else\@@fonthandling\fi \NC \NR
+       \NC sample   \NC \hyphenatedword{#1}                                      \NC \NR
+       \stoptabulate}
+
+    \gdef\showmapping
+      {\dostepwiserecurse{128}{255}{1}
+          {\hbox\bgroup
+             \hbox to 2em{\hss\recurselevel}%
+             \hbox to 2em{\hss\char\recurselevel\hss}%
+             \hbox to 3em{\hss\ifcase\lccode\recurselevel\else\the \lccode\recurselevel\fi}%
+             \hbox to 2em{\hss\ifcase\lccode\recurselevel\else\char\lccode\recurselevel\fi\hss}%
+             \hbox to 3em{\hss\ifcase\lccode\recurselevel\else\the \uccode\recurselevel\fi}%
+             \hbox to 2em{\hss\ifcase\uccode\recurselevel\else\char\uccode\recurselevel\fi\hss}%
+           \egroup
+           \endgraf}}
+
+    \gdef\showcharacterbounds
+      {\bgroup
+       \localcolortrue
+       \dorecurse{255}
+         {\ifdim\fontcharwd\font\recurselevel>\zeropoint
+            \noindent\ruledhbox{\darkgray\char\recurselevel}\space
+          \fi}\unskip
+       \egroup}
+
+\else
+
+    \gdef\showhyphenations#1%
+      {\starttabulate[|le|l|]
+       \NC language \NC \currentlanguage\ (internal code:\the\normallanguage) \NC \NR
+       \NC font     \NC \fontname\font                                        \NC \NR
+       \NC sample   \NC \hyphenatedword{#1}                                   \NC \NR
+       \stoptabulate}
+
+    \globallet\showmapping\relax
+
+    \globallet\showcharacterbounds\relax
+
+\fi
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-t5.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-t5.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-t5.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,248 @@
+%D \module
+%D   [     file=enco-t5,
+%D      version=2004.11.16,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=New Vietnamese Encoding,
+%D       author=Hans Hagen \& Adam Lindsay,
+%D         date=\currentdate,
+%D    copyright={Adam Lindsay \& Hans Hagen}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This module is derived from the enco-x5 encoding, but now
+%D approaches the world with named glyphs.
+
+\startencoding[t5]
+
+\definecasemaps 128 to 159 lc +32 uc   0
+
+\definecasemaps 160 to 191 lc   0 uc -32
+
+\definecasemaps 192 to 223 lc +32 uc   0
+
+\definecasemaps 224 to 225 lc   0 uc -32
+
+\definecasemap 26 26 27 \definecasemap 27 26 27
+\definecasemap 28 28 29 \definecasemap 29 28 29
+\definecasemap 30 30 31 \definecasemap 31 30 31
+
+\definecharacter textgrave             0
+\definecharacter textacute             1
+\definecharacter textcircumflex        2
+\definecharacter texttilde             3
+\definecharacter textdiaeresis         4
+\definecharacter textbottomdot         5
+\definecharacter textring              6
+\definecharacter textcaron             7
+\definecharacter textbreve             8
+\definecharacter textmacron            9
+\definecharacter textdotaccent        10
+\definecharacter textcedilla          11
+\definecharacter texthookabove        12
+\definecharacter textogonek           {}
+
+\definecharacter quotesinglebase      13
+\definecharacter guilsingleleft       14
+\definecharacter guilsingleright      15
+\definecharacter quotedblleft         16
+\definecharacter quotedblright        17
+\definecharacter quotedblbase         18
+\definecharacter leftguillemot        19
+\definecharacter rightguillemot       20
+\definecharacter endash               21
+\definecharacter emdash               22
+
+\definecharacter cwm                  23
+\definecharacter zeroinferior         24
+\definecharacter Yhook                26
+\definecharacter yhook                27
+\definecharacter Ydotbelow            28
+\definecharacter ydotbelow            29
+\definecharacter Dstroke              30
+\definecharacter dstroke              31
+\definecharacter textvisiblespace     32
+
+\definecharacter dotlessi             25
+%definecharacter DJ                   30
+%definecharacter dj                   31
+\definecharacter Agrave              128
+\definecharacter Aacute              129
+\definecharacter Atilde              130
+\definecharacter Ahook               131
+\definecharacter Adotbelow           132
+\definecharacter Acircumflex         133
+\definecharacter Acircumflexgrave    134
+\definecharacter Acircumflexacute    135
+\definecharacter Acircumflextilde    136
+\definecharacter Acircumflexhook     137
+\definecharacter Acircumflexdotbelow 138
+\definecharacter Abreve              139
+\definecharacter Abrevegrave         140
+\definecharacter Abreveacute         141
+\definecharacter Abrevetilde         142
+\definecharacter Abrevehook          143
+\definecharacter Abrevedotbelow      144
+\definecharacter Egrave              145
+\definecharacter Eacute              146
+\definecharacter Etilde              147
+\definecharacter Ehook               148
+\definecharacter Edotbelow           149
+\definecharacter Ecircumflex         150
+\definecharacter Ecircumflexgrave    151
+\definecharacter Ecircumflexacute    152
+\definecharacter Ecircumflextilde    153
+\definecharacter Ecircumflexhook     154
+\definecharacter Ecircumflexdotbelow 155
+\definecharacter Igrave              156
+\definecharacter Iacute              157
+\definecharacter Itilde              158
+\definecharacter Ihook               159
+\definecharacter agrave              160
+\definecharacter aacute              161
+\definecharacter atilde              162
+\definecharacter ahook               163
+\definecharacter adotbelow           164
+\definecharacter acircumflex         165
+\definecharacter acircumflexgrave    166
+\definecharacter acircumflexacute    167
+\definecharacter acircumflextilde    168
+\definecharacter acircumflexhook     169
+\definecharacter acircumflexdotbelow 170
+\definecharacter abreve              171
+\definecharacter abrevegrave         172
+\definecharacter abreveacute         173
+\definecharacter abrevetilde         174
+\definecharacter abrevehook          175
+\definecharacter abrevedotbelow      176
+\definecharacter egrave              177
+\definecharacter eacute              178
+\definecharacter etilde              179
+\definecharacter ehook               180
+\definecharacter edotbelow           181
+\definecharacter ecircumflex         182
+\definecharacter ecircumflexgrave    183
+\definecharacter ecircumflexacute    184
+\definecharacter ecircumflextilde    185
+\definecharacter ecircumflexhook     186
+\definecharacter ecircumflexdotbelow 187
+\definecharacter igrave              188
+\definecharacter iacute              189
+\definecharacter itilde              190
+\definecharacter ihook               191
+\definecharacter Idotbelow           192
+\definecharacter Ograve              193
+\definecharacter Oacute              194
+\definecharacter Otilde              195
+\definecharacter Ohook               196
+\definecharacter Odotbelow           197
+\definecharacter Ocircumflex         198
+\definecharacter Ocircumflexgrave    199
+\definecharacter Ocircumflexacute    200
+\definecharacter Ocircumflextilde    201
+\definecharacter Ocircumflexhook     202
+\definecharacter Ocircumflexdotbelow 203
+\definecharacter Ohorn               204
+\definecharacter Ohorngrave          205
+\definecharacter Ohornacute          206
+\definecharacter Ohorntilde          207
+\definecharacter Ohornhook           208
+\definecharacter Ohorndotbelow       209
+\definecharacter Ugrave              210
+\definecharacter Uacute              211
+\definecharacter Utilde              212
+\definecharacter Uhook               213
+\definecharacter Udotbelow           214
+\definecharacter Uhorn               215
+\definecharacter Uhorngrave          216
+\definecharacter Uhornacute          217
+\definecharacter Uhorntilde          218
+\definecharacter Uhornhook           219
+\definecharacter Uhorndotbelow       220
+\definecharacter Ytilde              223
+\definecharacter idotbelow           224
+\definecharacter ograve              225
+\definecharacter oacute              226
+\definecharacter otilde              227
+\definecharacter ohook               228
+\definecharacter odotbelow           229
+\definecharacter ocircumflex         230
+\definecharacter ocircumflexgrave    231
+\definecharacter ocircumflexacute    232
+\definecharacter ocircumflextilde    233
+\definecharacter ocircumflexhook     234
+\definecharacter ocircumflexdotbelow 235
+\definecharacter ohorn               236
+\definecharacter ohorngrave          237
+\definecharacter ohornacute          238
+\definecharacter ohorntilde          239
+\definecharacter ohornhook           240
+\definecharacter ohorndotbelow       241
+\definecharacter ugrave              242
+\definecharacter uacute              243
+\definecharacter utilde              244
+\definecharacter uhook               245
+\definecharacter udotbelow           246
+\definecharacter uhorn               247
+\definecharacter uhorngrave          248
+\definecharacter uhornacute          249
+\definecharacter uhorntilde          250
+\definecharacter uhornhook           251
+\definecharacter uhorndotbelow       252
+\definecharacter ygrave              253
+\definecharacter yacute              254
+\definecharacter ytilde              255
+
+\stopencoding
+
+\endinput
+
+% \startencoding [x5]
+%
+% \definecharacter aa {\xfiveencodedaa}
+% \definecharacter AA {\xfiveencodedAA}
+%
+% \stopencoding
+%
+% \unprotect
+%
+% \def\xfiveencodedaa%
+%   {\accent23a}
+%
+% \def\xfiveencodedAA%
+%   {\leavevmode
+%    \setbox\zerocount\hbox{h}%
+%    \dimen@\ht\zerocount
+%    \advance\dimen@ -1ex
+%    \rlap{\raise.67\dimen@\hbox{\char23}}A}
+%
+% \protect
+%
+% \quotesinglbase     13
+% \guilsinglleft      14
+% \guilsinglright     15
+% \textquotedblleft   16
+% \textquotedblright  17
+% \quotedblbase       18
+% \guillemotleft      19
+% \guillemotright     20
+% \textendash         21
+% \textemdash         22
+% \textcompwordmark   23
+% \textperthousand    \% \char 24
+% \textpertenthousand \%\char 24\char 24
+% \textvisiblespace   32
+% \textquotedbl       `\"
+% \textdollar         `\$
+% \textquoteright     `\'
+% \textless           `\<
+% \textgreater        `\>
+% \textbackslash      `\
+% \textasciicircum    `\^
+% \textunderscore     95
+% \textquoteleft      `\`
+% \textbraceleft      `\{
+% \textbar            `\|
+% \textbraceright     `\}
+% \textasciitilde     `\~

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-tbo.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-tbo.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-tbo.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,222 @@
+%D \module
+%D   [     file=enco-tbo,
+%D      version=2000.05.07, % 2001.8.4,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=TeXBaseOne Encoding,
+%D       author={Patrick Gundlach, Hans Hagen},
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startmapping[8r]
+
+\resetcaserange 128 to 255
+
+\definecasemap 228 228 196 \definecasemap 196 228 196
+\definecasemap 235 235 203 \definecasemap 203 235 203
+\definecasemap 239 239 207 \definecasemap 207 239 207
+\definecasemap 246 246 214 \definecasemap 214 246 214
+\definecasemap 252 252 220 \definecasemap 220 252 220
+\definecasemap 255 255 159 \definecasemap 159 255 159
+
+\definecasemap 225 225 193 \definecasemap 193 225 193
+\definecasemap 233 233 201 \definecasemap 201 233 201
+\definecasemap 237 237 205 \definecasemap 205 237 205
+\definecasemap 243 243 211 \definecasemap 211 243 211
+\definecasemap 250 250 218 \definecasemap 218 250 218
+\definecasemap 253 253 221 \definecasemap 221 253 221
+
+\definecasemap 224 224 192 \definecasemap 192 224 192
+\definecasemap 232 232 200 \definecasemap 200 232 200
+\definecasemap 236 236 204 \definecasemap 204 236 204
+\definecasemap 242 242 210 \definecasemap 210 242 210
+\definecasemap 249 249 217 \definecasemap 217 249 217
+
+\definecasemap 226 226 194 \definecasemap 194 226 194
+\definecasemap 234 234 202 \definecasemap 202 234 202
+\definecasemap 238 238 206 \definecasemap 206 238 206
+\definecasemap 244 244 212 \definecasemap 212 244 212
+\definecasemap 251 251 219 \definecasemap 219 251 219
+
+\definecasemap 227 227 195 \definecasemap 195 227 195
+\definecasemap 241 241 209 \definecasemap 209 241 209
+\definecasemap 245 245 213 \definecasemap 213 245 213
+
+\stopmapping
+
+\startencoding[8r]
+
+\definecharacter textacute         180
+\definecharacter textbreve          11
+\definecharacter textcaron          16
+\definecharacter textcedilla       184
+\definecharacter textcircumflex    136
+\definecharacter textdiaeresis     168
+\definecharacter textdotaccent       1
+\definecharacter textgrave          30
+\definecharacter texthungarumlaut    5
+\definecharacter textmacron        175
+\definecharacter textogonek          8
+\definecharacter textring            9
+\definecharacter texttilde         152
+
+\definecharacter dotlessi           17
+%definecharacter dotlessj           18
+
+\definecharacter endash            150
+\definecharacter emdash            151
+
+\definecharacter oeligature        156
+\definecharacter OEligature        140
+\definecharacter aeligature        230
+\definecharacter AEligature        198
+
+\definecharacter ssharp            223
+
+\definecharacter thorn             254
+\definecharacter Thorn             222
+
+\definecharacter exclamdown        161
+\definecharacter questiondown      191
+
+\definecharacter copyright         169
+\definecharacter registered        174
+\definecharacter trademark         153
+
+\definecharacter sectionmark       167
+\definecharacter paragraphmark     182
+
+\definecharacter onequarter        188
+\definecharacter onehalf           189
+\definecharacter threequarter      190
+\definecharacter onesuperior       185
+\definecharacter twosuperior       178
+\definecharacter threesuperior     179
+
+\definecharacter textcent          162
+\definecharacter textcurrency      164
+\definecharacter texteuro          128
+\definecharacter textflorin        131
+\definecharacter textsterling      163
+\definecharacter textyen           165
+
+\definecharacter percent            37
+\definecharacter perthousand       137
+
+\definecharacter periodcentered    183
+\definecharacter softhyphen        173
+
+\definecharacter textasciicircum    94
+\definecharacter textasciitilde    126
+\definecharacter textslash          47
+\definecharacter textbackslash      92
+\definecharacter textbraceleft     123
+\definecharacter textbraceright    125
+\definecharacter textunderscore     95
+
+\definecharacter textbrokenbar     166
+\definecharacter textbullet        149
+\definecharacter textdag           134
+\definecharacter textddag          135
+\definecharacter textdegree        176
+\definecharacter textdiv           247
+\definecharacter textellipsis      133
+\definecharacter textfraction        4
+\definecharacter textlognot        172
+\definecharacter textminus          12
+\definecharacter textmu            181
+\definecharacter textmultiply      215
+\definecharacter textpm            177
+
+\definecharacter quotedbl           34
+\definecharacter quotedblbase      132
+\definecharacter quotedblleft      147
+\definecharacter quotedblright     148
+
+\definecharacter quotesingle        31
+\definecharacter quotesinglebase   130
+
+\definecharacter quoteleft          96
+\definecharacter quoteright         39
+
+\definecharacter guilsingleleft    139
+\definecharacter guilsingleright   155
+\definecharacter leftguillemot     171
+\definecharacter rightguillemot    187
+
+\definecharacter aacute            225
+\definecharacter Aacute            193
+\definecharacter eacute            233
+\definecharacter Eacute            201
+\definecharacter iacute            237
+\definecharacter Iacute            205
+\definecharacter oacute            243
+\definecharacter Oacute            211
+\definecharacter uacute            250
+\definecharacter Uacute            218
+\definecharacter Yacute            221
+\definecharacter yacute            253
+
+\definecharacter scaron            154
+\definecharacter Scaron            138
+%definecharacter Zcaron            141
+
+\definecharacter ccedilla          231
+\definecharacter Ccedilla          199
+
+\definecharacter acircumflex       226
+\definecharacter Acircumflex       194
+\definecharacter ecircumflex       234
+\definecharacter Ecircumflex       202
+\definecharacter icircumflex       238
+\definecharacter Icircumflex       206
+\definecharacter ocircumflex       244
+\definecharacter Ocircumflex       212
+\definecharacter ucircumflex       251
+\definecharacter Ucircumflex       219
+
+\definecharacter adiaeresis        228
+\definecharacter Adiaeresis        196
+\definecharacter ediaeresis        235
+\definecharacter Ediaeresis        203
+\definecharacter idiaeresis        239
+\definecharacter Idiaeresis        207
+\definecharacter odiaeresis        246
+\definecharacter Odiaeresis        214
+\definecharacter udiaeresis        252
+\definecharacter Udiaeresis        220
+\definecharacter ydiaeresis        255
+\definecharacter Ydiaeresis        159
+
+\definecharacter agrave            224
+\definecharacter Agrave            192
+\definecharacter egrave            232
+\definecharacter Egrave            200
+\definecharacter igrave            236
+\definecharacter Igrave            204
+\definecharacter ograve            242
+\definecharacter Ograve            210
+\definecharacter ugrave            249
+\definecharacter Ugrave            217
+
+\definecharacter aring             229
+\definecharacter Aring             197
+
+\definecharacter lstroke             7
+\definecharacter Lstroke             6
+\definecharacter ostroke           248
+\definecharacter Ostroke           216
+
+\definecharacter atilde            227
+\definecharacter Atilde            195
+\definecharacter ntilde            241
+\definecharacter Ntilde            209
+\definecharacter otilde            245
+\definecharacter Otilde            213
+
+\stopencoding
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-uc.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-uc.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-uc.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,1093 @@
+%D \module
+%D   [     file=enco-uc,
+%D      version=2000.xx.xx, % and later
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Unicode (backwards mapping),
+%D       author={Adam Lindsay \& Hans Hagen},
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D An alternative approach would be to misuse the utf vectors, but they
+%D don't carry enough info around.
+
+% todo : \defineucharacter hebrewAlef 5 "D0
+
+\startencoding[uc]
+
+\definecharacter Agrave        {\uchar0{192}}
+\definecharacter Aacute        {\uchar0{193}}
+\definecharacter Acircumflex   {\uchar0{194}}
+\definecharacter Atilde        {\uchar0{195}}
+\definecharacter Adiaeresis    {\uchar0{196}}
+\definecharacter Aring         {\uchar0{197}}
+\definecharacter AEligature    {\uchar0{198}}
+\definecharacter Ccedilla      {\uchar0{199}}
+\definecharacter Egrave        {\uchar0{200}}
+\definecharacter Eacute        {\uchar0{201}}
+\definecharacter Ediaeresis    {\uchar0{203}}
+\definecharacter Igrave        {\uchar0{204}}
+\definecharacter Iacute        {\uchar0{205}}
+\definecharacter Icircumflex   {\uchar0{206}}
+\definecharacter Idiaeresis    {\uchar0{207}}
+\definecharacter Eth           {\uchar0{208}}
+\definecharacter Ntilde        {\uchar0{209}}
+\definecharacter Ograve        {\uchar0{210}}
+\definecharacter Oacute        {\uchar0{211}}
+\definecharacter Ocircumflex   {\uchar0{212}}
+\definecharacter Otilde        {\uchar0{213}}
+\definecharacter Odiaeresis    {\uchar0{214}}
+
+\definecharacter Ostroke       {\uchar0{216}}
+\definecharacter Ugrave        {\uchar0{217}}
+\definecharacter Uacute        {\uchar0{218}}
+\definecharacter Uhungarumlaut {\uchar0{219}}
+\definecharacter Udiaeresis    {\uchar0{220}}
+\definecharacter Yacute        {\uchar0{221}}
+\definecharacter Thorn         {\uchar0{222}}
+\definecharacter ssharp        {\uchar0{223}}
+\definecharacter agrave        {\uchar0{224}}
+\definecharacter aacute        {\uchar0{225}}
+\definecharacter acircumflex   {\uchar0{226}}
+\definecharacter atilde        {\uchar0{227}}
+\definecharacter adiaeresis    {\uchar0{228}}
+\definecharacter aring         {\uchar0{229}}
+\definecharacter aeligature    {\uchar0{230}}
+\definecharacter ccedilla      {\uchar0{231}}
+\definecharacter egrave        {\uchar0{232}}
+\definecharacter eacute        {\uchar0{233}}
+\definecharacter ecircumflex   {\uchar0{234}}
+\definecharacter ediaeresis    {\uchar0{235}}
+\definecharacter igrave        {\uchar0{236}}
+\definecharacter iacute        {\uchar0{237}}
+\definecharacter icircumflex   {\uchar0{238}}
+\definecharacter idiaeresis    {\uchar0{239}}
+\definecharacter eth           {\uchar0{240}}
+\definecharacter ntilde        {\uchar0{241}}
+\definecharacter ograve        {\uchar0{242}}
+\definecharacter oacute        {\uchar0{243}}
+\definecharacter ocircumflex   {\uchar0{244}}
+\definecharacter otilde        {\uchar0{245}}
+\definecharacter odiaeresis    {\uchar0{246}}
+
+\definecharacter ostroke       {\uchar0{248}}
+\definecharacter ugrave        {\uchar0{249}}
+\definecharacter uacute        {\uchar0{250}}
+\definecharacter ucircumflex   {\uchar0{251}}
+\definecharacter udiaeresis    {\uchar0{252}}
+\definecharacter yacute        {\uchar0{253}}
+\definecharacter thorn         {\uchar0{254}}
+\definecharacter ydiaeresis    {\uchar0{255}}
+
+\definecharacter Amacron       {\uchar1{0}}
+\definecharacter amacron       {\uchar1{1}}
+\definecharacter Abreve        {\uchar1{2}}
+\definecharacter abreve        {\uchar1{3}}
+\definecharacter Aogonek       {\uchar1{4}}
+\definecharacter aogonek       {\uchar1{5}}
+\definecharacter Cacute        {\uchar1{6}}
+\definecharacter cacute        {\uchar1{7}}
+\definecharacter Ccircumflex   {\uchar1{8}}
+\definecharacter ccircumflex   {\uchar1{9}}
+\definecharacter Cdotaccent    {\uchar1{10}}
+\definecharacter cdotaccent    {\uchar1{11}}
+\definecharacter Ccaron        {\uchar1{12}}
+\definecharacter ccaron        {\uchar1{13}}
+\definecharacter Dcaron        {\uchar1{14}}
+\definecharacter dcaron        {\uchar1{15}}
+\definecharacter Dstroke       {\uchar1{16}}
+\definecharacter dstroke       {\uchar1{17}}
+\definecharacter Emacron       {\uchar1{18}}
+\definecharacter emacron       {\uchar1{19}}
+\definecharacter Ebreve        {\uchar1{20}}
+\definecharacter ebreve        {\uchar1{21}}
+\definecharacter Edotaccent    {\uchar1{22}}
+\definecharacter edotaccent    {\uchar1{23}}
+\definecharacter Eogonek       {\uchar1{24}}
+\definecharacter eogonek       {\uchar1{25}}
+\definecharacter Ecaron        {\uchar1{26}}
+\definecharacter ecaron        {\uchar1{27}}
+\definecharacter Gcircumflex   {\uchar1{28}}
+\definecharacter gcircumflex   {\uchar1{29}}
+\definecharacter Gbreve        {\uchar1{30}}
+\definecharacter gbreve        {\uchar1{31}}
+\definecharacter Gdotaccent    {\uchar1{32}}
+\definecharacter gdotaccent    {\uchar1{33}}
+\definecharacter Gcommaaccent  {\uchar1{34}}
+\definecharacter gcommaaccent  {\uchar1{35}}
+\definecharacter Hcircumflex   {\uchar1{36}}
+\definecharacter hcircumflex   {\uchar1{37}}
+\definecharacter Hstroke       {\uchar1{38}}
+\definecharacter hstroke       {\uchar1{39}}
+\definecharacter Itilde        {\uchar1{40}}
+\definecharacter itilde        {\uchar1{41}}
+\definecharacter Imacron       {\uchar1{42}}
+\definecharacter imacron       {\uchar1{43}}
+\definecharacter Ibreve        {\uchar1{44}}
+\definecharacter ibreve        {\uchar1{45}}
+\definecharacter Iogonek       {\uchar1{46}}
+\definecharacter iogonek       {\uchar1{47}}
+\definecharacter Idotaccent    {\uchar1{48}}
+\definecharacter dotlessi      {\uchar1{49}}
+\definecharacter IJligature    {\uchar1{50}}
+\definecharacter ijligature    {\uchar1{51}}
+\definecharacter Jcircumflex   {\uchar1{52}}
+\definecharacter jcircumflex   {\uchar1{53}}
+\definecharacter Kcommaaccent  {\uchar1{54}}
+\definecharacter kcommaaccent  {\uchar1{55}}
+\definecharacter kkra          {\uchar1{56}}
+\definecharacter Lacute        {\uchar1{57}}
+\definecharacter lacute        {\uchar1{58}}
+\definecharacter Lcommaaccent  {\uchar1{59}}
+\definecharacter lcommaaccent  {\uchar1{60}}
+\definecharacter Lcaron        {\uchar1{61}}
+\definecharacter lcaron        {\uchar1{62}}
+\definecharacter Ldotmiddle    {\uchar1{63}}
+\definecharacter ldotmiddle    {\uchar1{64}}
+\definecharacter Lstroke       {\uchar1{65}}
+\definecharacter lstroke       {\uchar1{66}}
+\definecharacter Nacute        {\uchar1{67}}
+\definecharacter nacute        {\uchar1{68}}
+\definecharacter Ncommaaccent  {\uchar1{69}}
+\definecharacter ncommaaccent  {\uchar1{70}}
+\definecharacter Ncaron        {\uchar1{71}}
+\definecharacter ncaron        {\uchar1{72}}
+\definecharacter napostrophe   {\uchar1{73}}
+\definecharacter Neng          {\uchar1{74}}
+\definecharacter neng          {\uchar1{75}}
+\definecharacter Omacron       {\uchar1{76}}
+\definecharacter omacron       {\uchar1{77}}
+\definecharacter Obreve        {\uchar1{78}}
+\definecharacter obreve        {\uchar1{79}}
+\definecharacter Ohungarumlaut {\uchar1{80}}
+\definecharacter ohungarumlaut {\uchar1{81}}
+\definecharacter OEligature    {\uchar1{82}}
+\definecharacter oeligature    {\uchar1{83}}
+\definecharacter Racute        {\uchar1{84}}
+\definecharacter racute        {\uchar1{85}}
+\definecharacter Rcommaaccent  {\uchar1{86}}
+\definecharacter rcommaaccent  {\uchar1{87}}
+\definecharacter Rcaron        {\uchar1{88}}
+\definecharacter rcaron        {\uchar1{89}}
+\definecharacter Sacute        {\uchar1{90}}
+\definecharacter sacute        {\uchar1{91}}
+\definecharacter Scircumflex   {\uchar1{92}}
+\definecharacter scircumflex   {\uchar1{93}}
+\definecharacter Scedilla      {\uchar1{94}}
+\definecharacter scedilla      {\uchar1{95}}
+\definecharacter Scaron        {\uchar1{96}}
+\definecharacter scaron        {\uchar1{97}}
+\definecharacter Tcedilla      {\uchar1{98}}
+\definecharacter tcedilla      {\uchar1{99}}
+\definecharacter Tcaron        {\uchar1{100}}
+\definecharacter tcaron        {\uchar1{101}}
+\definecharacter Tstroke       {\uchar1{102}}
+\definecharacter tstroke       {\uchar1{103}}
+\definecharacter Utilde        {\uchar1{104}}
+\definecharacter utilde        {\uchar1{105}}
+\definecharacter Umacron       {\uchar1{106}}
+\definecharacter umacron       {\uchar1{107}}
+\definecharacter Ubreve        {\uchar1{108}}
+\definecharacter ubreve        {\uchar1{109}}
+\definecharacter Uring         {\uchar1{110}}
+\definecharacter uring         {\uchar1{111}}
+\definecharacter Uhungarumlaut {\uchar1{112}}
+\definecharacter uhungarumlaut {\uchar1{113}}
+\definecharacter Uogonek       {\uchar1{114}}
+\definecharacter uogonek       {\uchar1{115}}
+\definecharacter Wcircumflex   {\uchar1{116}}
+\definecharacter wcircumflex   {\uchar1{117}}
+\definecharacter Ycircumflex   {\uchar1{118}}
+\definecharacter ycircumflex   {\uchar1{119}}
+\definecharacter Ydiaeresis    {\uchar1{120}}
+\definecharacter Zacute        {\uchar1{121}}
+\definecharacter zacute        {\uchar1{122}}
+\definecharacter Zdotaccent    {\uchar1{123}}
+\definecharacter zdotaccent    {\uchar1{124}}
+\definecharacter Zcaron        {\uchar1{125}}
+\definecharacter zcaron        {\uchar1{126}}
+\definecharacter slong         {\uchar1{127}}
+
+\stopencoding
+
+\startencoding[uc]
+
+\definecharacter endash          {\uchar{32}{19}}
+\definecharacter emdash          {\uchar{32}{20}}
+\definecharacter quoteleft       {\uchar{32}{24}}
+\definecharacter quoteright      {\uchar{32}{25}}
+\definecharacter quotesinglebase {\uchar{32}{26}}
+
+\definecharacter quotedblleft    {\uchar{32}{28}}
+\definecharacter quotedblright   {\uchar{32}{29}}
+\definecharacter quotedblbase    {\uchar{32}{30}}
+
+\definecharacter leftguillemot   {\uchar0{171}}
+\definecharacter rightguillemot  {\uchar0{187}}
+
+\definecharacter guilsingleleft  {\uchar{32}{57}}
+\definecharacter guilsingleright {\uchar{32}{58}}
+
+\stopencoding
+
+%D Adam Lindsay's additions
+
+\startencoding[uc]
+
+\definecharacter exclamdown       {\uchar0{161}}
+\definecharacter textcent         {\uchar0{162}}
+\definecharacter textsterling     {\uchar0{163}}
+\definecharacter textcurrency     {\uchar0{164}}
+\definecharacter textyen          {\uchar0{165}}
+\definecharacter textbrokenbar    {\uchar0{166}}
+\definecharacter sectionmark      {\uchar0{167}}
+\definecharacter textdiaresis     {\uchar0{168}}
+\definecharacter copyright        {\uchar0{169}}
+
+\definecharacter textlognot       {\uchar0{172}}
+\definecharacter softhyphen       {\uchar0{173}}
+\definecharacter registered       {\uchar0{174}}
+\definecharacter textmacron       {\uchar0{175}}
+\definecharacter textdegree       {\uchar0{176}}
+\definecharacter textpm           {\uchar0{177}}
+\definecharacter twosuperior      {\uchar0{178}}
+\definecharacter threesuperior    {\uchar0{179}}
+\definecharacter textacute        {\uchar0{180}}
+\definecharacter textmu           {\uchar0{181}}
+\definecharacter paragraphmark    {\uchar0{182}}
+\definecharacter periodcentered   {\uchar0{183}}
+\definecharacter textcedilla      {\uchar0{184}}
+\definecharacter onesuperior      {\uchar0{185}}
+
+\definecharacter textgrave        {\uchar3{0}}
+\definecharacter textacute        {\uchar3{1}}
+\definecharacter textcircumflex   {\uchar3{2}}
+\definecharacter texttilde        {\uchar3{3}}
+\definecharacter textmacron       {\uchar3{4}}
+\definecharacter textbreve        {\uchar3{6}}
+\definecharacter textdotaccent    {\uchar3{7}}
+\definecharacter textdiaeresis    {\uchar3{8}}
+\definecharacter textring         {\uchar3{10}}
+\definecharacter texthungarumlaut {\uchar3{11}}
+\definecharacter textcaron        {\uchar3{12}}
+\definecharacter textogonek       {\uchar3{40}}
+
+\definecharacter percent          {\uchar0{37}}
+\definecharacter textunderscore   {\uchar0{95}}
+
+\definecharacter ordfeminine      {\uchar0{170}}
+\definecharacter ordmasculine     {\uchar0{186}}
+\definecharacter onequarter       {\uchar0{188}}
+\definecharacter onehalf          {\uchar0{189}}
+\definecharacter threequarter     {\uchar0{190}}
+\definecharacter questiondown     {\uchar0{191}}
+
+\definecharacter textmultiply     {\uchar0{215}}
+\definecharacter textdiv          {\uchar0{247}}
+
+\definecharacter textminus        {\uchar{32}{18}}
+\definecharacter textdag          {\uchar{32}{32}}
+\definecharacter textddag         {\uchar{32}{33}}
+\definecharacter textbullet       {\uchar{32}{34}}
+\definecharacter textellipsis     {\uchar{32}{38}}
+\definecharacter perthousand      {\uchar{32}{48}}
+
+%new:
+\definecharacter Scommaaccent     {\uchar2{24}}
+\definecharacter scommaaccent     {\uchar2{25}}
+\definecharacter Tcommaaccent     {\uchar2{26}}
+\definecharacter tcommaaccent     {\uchar2{27}}
+
+\stopencoding
+
+%D Mojca's and Taco's additions:
+
+\startencoding[uc]
+
+\definecharacter textasciicircum  {\uchar{0}{94}}  % 5e
+\definecharacter textgrave        {\uchar{0}{96}}  % 60
+\definecharacter textdiaeresis    {\uchar{0}{168}} % a8
+%definecharacter textmacron       {\uchar{0}{175}} % af
+%definecharacter textacute        {\uchar{0}{180}} % b4
+%definecharacter textcedilla      {\uchar{0}{184}} % b8
+\definecharacter textcircumflex   {\uchar{2}{198}} % c6
+\definecharacter textcaron        {\uchar{2}{199}} % c7
+\definecharacter textbreve        {\uchar{2}{216}} % d8
+\definecharacter textdotaccent    {\uchar{2}{217}} % d9
+\definecharacter textring         {\uchar{2}{218}} % da
+\definecharacter textogonek       {\uchar{2}{219}} % db
+\definecharacter texttilde        {\uchar{2}{220}} % dc
+\definecharacter texthungarumlaut {\uchar{2}{221}} % dd
+
+\stopencoding
+
+%D Vietnamese:
+
+\startencoding[uc]
+
+\definecharacter   Ohorn                {\uchar1{160}}
+\definecharacter   ohorn                {\uchar1{161}}
+\definecharacter   Uhorn                {\uchar1{175}}
+\definecharacter   uhorn                {\uchar1{176}}
+
+\definecharacter   Yhook                {\uchar{30}{246}}
+\definecharacter   yhook                {\uchar{30}{247}}
+\definecharacter   Ydotbelow            {\uchar{30}{244}}
+\definecharacter   ydotbelow            {\uchar{30}{245}}
+\definecharacter   Ahook                {\uchar{30}{162}}
+\definecharacter   Adotbelow            {\uchar{30}{160}}
+\definecharacter   Acircumflexgrave     {\uchar{30}{166}}
+\definecharacter   Acircumflexacute     {\uchar{30}{164}}
+\definecharacter   Acircumflextilde     {\uchar{30}{170}}
+\definecharacter   Acircumflexhook      {\uchar{30}{168}}
+\definecharacter   Acircumflexdotbelow  {\uchar{30}{172}}
+\definecharacter   Abrevegrave          {\uchar{30}{176}}
+\definecharacter   Abreveacute          {\uchar{30}{174}}
+\definecharacter   Abrevetilde          {\uchar{30}{180}}
+\definecharacter   Abrevehook           {\uchar{30}{178}}
+\definecharacter   Abrevedotbelow       {\uchar{30}{182}}
+\definecharacter   Ehook                {\uchar{30}{186}}
+\definecharacter   Edotbelow            {\uchar{30}{184}}
+\definecharacter   Ecircumflexgrave     {\uchar{30}{192}}
+\definecharacter   Ecircumflexacute     {\uchar{30}{190}}
+\definecharacter   Ecircumflextilde     {\uchar{30}{196}}
+\definecharacter   Ecircumflexhook      {\uchar{30}{194}}
+\definecharacter   Ecircumflexdotbelow  {\uchar{30}{198}}
+\definecharacter   Ihook                {\uchar{30}{200}}
+\definecharacter   ahook                {\uchar{30}{163}}
+\definecharacter   adotbelow            {\uchar{30}{161}}
+\definecharacter   acircumflexgrave     {\uchar{30}{167}}
+\definecharacter   acircumflexacute     {\uchar{30}{165}}
+\definecharacter   acircumflextilde     {\uchar{30}{171}}
+\definecharacter   acircumflexhook      {\uchar{30}{169}}
+\definecharacter   acircumflexdotbelow  {\uchar{30}{173}}
+\definecharacter   abrevegrave          {\uchar{30}{177}}
+\definecharacter   abreveacute          {\uchar{30}{175}}
+\definecharacter   abrevetilde          {\uchar{30}{181}}
+\definecharacter   abrevehook           {\uchar{30}{179}}
+\definecharacter   abrevedotbelow       {\uchar{30}{183}}
+\definecharacter   ehook                {\uchar{30}{187}}
+\definecharacter   edotbelow            {\uchar{30}{185}}
+\definecharacter   ecircumflexgrave     {\uchar{30}{193}}
+\definecharacter   ecircumflexacute     {\uchar{30}{191}}
+\definecharacter   ecircumflextilde     {\uchar{30}{197}}
+\definecharacter   ecircumflexhook      {\uchar{30}{195}}
+\definecharacter   ecircumflexdotbelow  {\uchar{30}{199}}
+\definecharacter   ihook                {\uchar{30}{201}}
+\definecharacter   Idotbelow            {\uchar{30}{202}}
+\definecharacter   Ohook                {\uchar{30}{206}}
+\definecharacter   Odotbelow            {\uchar{30}{204}}
+\definecharacter   Ocircumflexgrave     {\uchar{30}{210}}
+\definecharacter   Ocircumflexacute     {\uchar{30}{208}}
+\definecharacter   Ocircumflextilde     {\uchar{30}{214}}
+\definecharacter   Ocircumflexhook      {\uchar{30}{212}}
+\definecharacter   Ocircumflexdotbelow  {\uchar{30}{216}}
+\definecharacter   Ohorngrave           {\uchar{30}{220}}
+\definecharacter   Ohornacute           {\uchar{30}{218}}
+\definecharacter   Ohorntilde           {\uchar{30}{224}}
+\definecharacter   Ohornhook            {\uchar{30}{222}}
+\definecharacter   Ohorndotbelow        {\uchar{30}{226}}
+\definecharacter   Uhook                {\uchar{30}{230}}
+\definecharacter   Udotbelow            {\uchar{30}{228}}
+\definecharacter   Uhorngrave           {\uchar{30}{234}}
+\definecharacter   Uhornacute           {\uchar{30}{232}}
+\definecharacter   Uhorntilde           {\uchar{30}{238}}
+\definecharacter   Uhornhook            {\uchar{30}{236}}
+\definecharacter   Uhorndotbelow        {\uchar{30}{240}}
+\definecharacter   Ytilde               {\uchar{30}{248}}
+\definecharacter   idotbelow            {\uchar{30}{203}}
+\definecharacter   ohook                {\uchar{30}{207}}
+\definecharacter   odotbelow            {\uchar{30}{205}}
+\definecharacter   ocircumflexgrave     {\uchar{30}{211}}
+\definecharacter   ocircumflexacute     {\uchar{30}{209}}
+\definecharacter   ocircumflextilde     {\uchar{30}{215}}
+\definecharacter   ocircumflexhook      {\uchar{30}{213}}
+\definecharacter   ocircumflexdotbelow  {\uchar{30}{217}}
+\definecharacter   ohorngrave           {\uchar{30}{221}}
+\definecharacter   ohornacute           {\uchar{30}{219}}
+\definecharacter   ohorntilde           {\uchar{30}{225}}
+\definecharacter   ohornhook            {\uchar{30}{223}}
+\definecharacter   ohorndotbelow        {\uchar{30}{227}}
+\definecharacter   uhook                {\uchar{30}{231}}
+\definecharacter   udotbelow            {\uchar{30}{229}}
+\definecharacter   uhorngrave           {\uchar{30}{235}}
+\definecharacter   uhornacute           {\uchar{30}{233}}
+\definecharacter   uhorntilde           {\uchar{30}{239}}
+\definecharacter   uhornhook            {\uchar{30}{237}}
+\definecharacter   uhorndotbelow        {\uchar{30}{241}}
+\definecharacter   ytilde               {\uchar{30}{249}}
+
+\definecharacter   Etilde               {\uchar{30}{188}}
+\definecharacter   etilde               {\uchar{30}{189}}
+\definecharacter   Ygrave               {\uchar{30}{242}}
+\definecharacter   ygrave               {\uchar{30}{243}}
+
+\stopencoding
+
+% Greek:
+
+\startencoding[uc]
+
+\definecharacter greekAlphatonos         {\uchar3{134}}
+\definecharacter greekEpsilontonos       {\uchar3{136}}
+\definecharacter greekEtatonos           {\uchar3{137}}
+\definecharacter greekIotatonos          {\uchar3{138}}
+\definecharacter greekOmicrontonos       {\uchar3{140}}
+\definecharacter greekUpsilontonos       {\uchar3{142}}
+\definecharacter greekOmegatonos         {\uchar3{143}}
+\definecharacter greekiotadialytikatonos {\uchar3{144}}
+\definecharacter greekAlpha              {\uchar3{145}}
+\definecharacter greekBeta               {\uchar3{146}}
+\definecharacter greekGamma              {\uchar3{147}}
+\definecharacter greekDelta              {\uchar3{148}}
+\definecharacter greekEpsilon            {\uchar3{149}}
+\definecharacter greekZeta               {\uchar3{150}}
+\definecharacter greekEta                {\uchar3{151}}
+\definecharacter greekTheta              {\uchar3{152}}
+\definecharacter greekIota               {\uchar3{153}}
+\definecharacter greekKappa              {\uchar3{154}}
+\definecharacter greekLambda             {\uchar3{155}}
+\definecharacter greekMu                 {\uchar3{156}}
+\definecharacter greekNu                 {\uchar3{157}}
+\definecharacter greekXi                 {\uchar3{158}}
+\definecharacter greekOmicron            {\uchar3{159}}
+\definecharacter greekPi                 {\uchar3{160}}
+\definecharacter greekRho                {\uchar3{161}}
+\definecharacter greekSigma              {\uchar3{163}}
+\definecharacter greekTau                {\uchar3{164}}
+\definecharacter greekUpsilon            {\uchar3{165}}
+\definecharacter greekPhi                {\uchar3{166}}
+\definecharacter greekChi                {\uchar3{167}}
+\definecharacter greekPsi                {\uchar3{168}}
+\definecharacter greekOmega              {\uchar3{169}}
+
+\definecharacter greekalpha              {\uchar3{177}}
+\definecharacter greekbeta               {\uchar3{178}}
+\definecharacter greekgamma              {\uchar3{179}}
+\definecharacter greekdelta              {\uchar3{180}}
+\definecharacter greekepsilon            {\uchar3{181}}
+\definecharacter greekzeta               {\uchar3{182}}
+\definecharacter greeketa                {\uchar3{183}}
+\definecharacter greektheta              {\uchar3{184}}
+\definecharacter greekiota               {\uchar3{185}}
+\definecharacter greekkappa              {\uchar3{186}}
+\definecharacter greeklambda             {\uchar3{187}}
+\definecharacter greekmu                 {\uchar3{188}}
+\definecharacter greeknu                 {\uchar3{189}}
+\definecharacter greekxi                 {\uchar3{190}}
+\definecharacter greekomicron            {\uchar3{191}}
+\definecharacter greekpi                 {\uchar3{192}}
+\definecharacter greekrho                {\uchar3{193}}
+\definecharacter greekfinalsigma         {\uchar3{194}}
+\definecharacter greeksigma              {\uchar3{195}}
+\definecharacter greektau                {\uchar3{196}}
+\definecharacter greekupsilon            {\uchar3{197}}
+\definecharacter greekphi                {\uchar3{198}}
+\definecharacter greekchi                {\uchar3{199}}
+\definecharacter greekpsi                {\uchar3{200}}
+\definecharacter greekomega              {\uchar3{201}}
+\definecharacter greekiotadialytika      {\uchar3{202}}
+\definecharacter greekupsilondialytika   {\uchar3{203}}
+\definecharacter greekomicrontonos       {\uchar3{204}}
+\definecharacter greekupsilontonos       {\uchar3{205}}
+\definecharacter greekomegatonos         {\uchar3{206}}
+
+\definecharacter greekIotadialytika          {\uchar3{170}}
+\definecharacter greekUpsilondialytika       {\uchar3{171}}
+
+\definecharacter greekalphatonos             {\uchar3{172}}
+\definecharacter greekepsilontonos           {\uchar3{173}}
+\definecharacter greeketatonos               {\uchar3{174}}
+\definecharacter greekiotatonos              {\uchar3{175}}
+\definecharacter greekupsilondialytikatonos  {\uchar3{176}}
+
+% new:
+
+\definecharacter greekbetaalt                {\uchar3{208}}
+\definecharacter greekthetaalt               {\uchar3{209}}
+\definecharacter greekphialt                 {\uchar3{213}}
+\definecharacter greekpialt                  {\uchar3{214}}
+\definecharacter greekrhoalt                 {\uchar3{241}}
+\definecharacter greekepsilonalt             {\uchar3{245}}
+
+\stopencoding
+
+% Cyrillic:
+
+\startencoding[uc]
+
+\definecharacter cyrillicA     {\uchar4{16}}
+\definecharacter cyrillicB     {\uchar4{17}}
+\definecharacter cyrillicV     {\uchar4{18}}
+\definecharacter cyrillicG     {\uchar4{19}}
+\definecharacter cyrillicD     {\uchar4{20}}
+\definecharacter cyrillicE     {\uchar4{21}}
+\definecharacter cyrillicZH    {\uchar4{22}}
+\definecharacter cyrillicZ     {\uchar4{23}}
+\definecharacter cyrillicI     {\uchar4{24}}
+\definecharacter cyrillicISHRT {\uchar4{25}}
+\definecharacter cyrillicK     {\uchar4{26}}
+\definecharacter cyrillicL     {\uchar4{27}}
+\definecharacter cyrillicM     {\uchar4{28}}
+\definecharacter cyrillicN     {\uchar4{29}}
+\definecharacter cyrillicO     {\uchar4{30}}
+\definecharacter cyrillicP     {\uchar4{31}}
+\definecharacter cyrillicR     {\uchar4{32}}
+\definecharacter cyrillicS     {\uchar4{33}}
+\definecharacter cyrillicT     {\uchar4{34}}
+\definecharacter cyrillicU     {\uchar4{35}}
+\definecharacter cyrillicF     {\uchar4{36}}
+\definecharacter cyrillicH     {\uchar4{37}}
+\definecharacter cyrillicC     {\uchar4{38}}
+\definecharacter cyrillicCH    {\uchar4{39}}
+\definecharacter cyrillicSH    {\uchar4{40}}
+\definecharacter cyrillicSHCH  {\uchar4{41}}
+\definecharacter cyrillicHRDSN {\uchar4{42}}
+\definecharacter cyrillicERY   {\uchar4{43}}
+\definecharacter cyrillicSFTSN {\uchar4{44}}
+\definecharacter cyrillicEREV  {\uchar4{45}}
+\definecharacter cyrillicYU    {\uchar4{46}}
+\definecharacter cyrillicYA    {\uchar4{47}}
+
+\definecharacter cyrillica     {\uchar4{48}}
+\definecharacter cyrillicb     {\uchar4{49}}
+\definecharacter cyrillicv     {\uchar4{50}}
+\definecharacter cyrillicg     {\uchar4{51}}
+\definecharacter cyrillicd     {\uchar4{52}}
+\definecharacter cyrillice     {\uchar4{53}}
+\definecharacter cyrilliczh    {\uchar4{54}}
+\definecharacter cyrillicz     {\uchar4{55}}
+\definecharacter cyrillici     {\uchar4{56}}
+\definecharacter cyrillicishrt {\uchar4{57}}
+\definecharacter cyrillick     {\uchar4{58}}
+\definecharacter cyrillicl     {\uchar4{59}}
+\definecharacter cyrillicm     {\uchar4{60}}
+\definecharacter cyrillicn     {\uchar4{61}}
+\definecharacter cyrillico     {\uchar4{62}}
+\definecharacter cyrillicp     {\uchar4{63}}
+\definecharacter cyrillicr     {\uchar4{64}}
+\definecharacter cyrillics     {\uchar4{65}}
+\definecharacter cyrillict     {\uchar4{66}}
+\definecharacter cyrillicu     {\uchar4{67}}
+\definecharacter cyrillicf     {\uchar4{68}}
+\definecharacter cyrillich     {\uchar4{69}}
+\definecharacter cyrillicc     {\uchar4{70}}
+\definecharacter cyrillicch    {\uchar4{71}}
+\definecharacter cyrillicsh    {\uchar4{72}}
+\definecharacter cyrillicshch  {\uchar4{73}}
+\definecharacter cyrillichrdsn {\uchar4{74}}
+\definecharacter cyrillicery   {\uchar4{75}}
+\definecharacter cyrillicsftsn {\uchar4{76}}
+\definecharacter cyrillicerev  {\uchar4{77}}
+\definecharacter cyrillicyu    {\uchar4{78}}
+\definecharacter cyrillicya    {\uchar4{79}}
+
+%D I tried to figure out what these were, but the unicode
+%D tables suggested they were the same as cyrillici, which was
+%D already defined! So, a temporary definition:
+
+% \def\cyrillicII{\cyrillicI}
+% \def\cyrillicii{\cyrillici}
+
+%D a guess derived from looking at enco-cyr suggests that this is
+%D identical to the Roman I/i pair. To me, that sounds like
+%D CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I in the UC tables!
+
+\definecharacter cyrillicII    {\uchar4{6}}
+\definecharacter cyrillicii    {\uchar4{86}}
+
+%D Guessing that tlir6a corresponds with t2a encoding as advertised,
+%D here are some more, cos I had some spare time: (AL)
+
+\definecharacter cyrillicDJE    {\uchar4{2}}
+\definecharacter cyrillicTSHE   {\uchar4{11}}
+%definecharacter cyrillicSHHA   132
+%definecharacter cyrillicZHDSC  133
+\definecharacter cyrillicZDSC   {\uchar4{152}}
+\definecharacter cyrillicLJE    {\uchar4{9}}
+\definecharacter cyrillicYI     {\uchar4{7}}
+\definecharacter cyrillicAE     {\uchar4{212}}
+%definecharacter cyrillicNDSC   141
+%definecharacter cyrillicNG     142
+\definecharacter cyrillicDZE    {\uchar4{5}}
+%definecharacter cyrillicOTLD   144
+\definecharacter cyrillicSDSC   {\uchar4{170}}
+\definecharacter cyrillicUSHRT  {\uchar4{14}}
+%definecharacter cyrillicY      147
+%definecharacter cyrillicYHCRS  148
+%definecharacter cyrillicHDSC   149
+\definecharacter cyrillicDZHE   {\uchar4{15}}
+\definecharacter cyrillicIE     {\uchar4{4}}
+\definecharacter cyrillicNJE    {\uchar4{10}}
+\definecharacter cyrillicYO     {\uchar4{1}}
+
+\definecharacter cyrillicdje    {\uchar4{82}}
+\definecharacter cyrillictshe   {\uchar4{91}}
+%definecharacter cyrillicshha   164
+%definecharacter cyrilliczhdsc  165
+\definecharacter cyrilliczdsc   {\uchar4{153}}
+\definecharacter cyrilliclje    {\uchar4{89}}
+\definecharacter cyrillicyi     {\uchar4{87}}
+\definecharacter cyrillicae     {\uchar4{213}}
+%definecharacter cyrillicndsc   173
+%definecharacter cyrillicng     174
+\definecharacter cyrillicdze    {\uchar4{85}}
+%definecharacter cyrillicotld   176
+\definecharacter cyrillicsdsc   {\uchar4{171}}
+\definecharacter cyrillicushrt  {\uchar4{94}}
+%definecharacter cyrillicy      179
+%definecharacter cyrillicyhcrs  180
+%definecharacter cyrillichdsc   181
+\definecharacter cyrillicdzhe   {\uchar4{95}}
+\definecharacter cyrillicie     {\uchar4{84}}
+\definecharacter cyrillicnje    {\uchar4{90}}
+\definecharacter cyrillicyo     {\uchar4{81}}
+
+% is there overlap with the above definitions
+
+\definecharacter cyrillicEgrave             {\uchar4{0}}
+\definecharacter cyrillicGJE                {\uchar4{3}}
+\definecharacter cyrillicJE                 {\uchar4{8}}
+\definecharacter cyrillicKJE                {\uchar4{12}}
+\definecharacter cyrillicIgrave             {\uchar4{13}}
+\definecharacter cyrillicegrave             {\uchar4{80}}
+\definecharacter cyrillicgje                {\uchar4{83}}
+\definecharacter cyrillicje                 {\uchar4{88}}
+\definecharacter cyrillickje                {\uchar4{92}}
+\definecharacter cyrillicigrave             {\uchar4{93}}
+\definecharacter cyrillicOMEGA              {\uchar4{96}}
+\definecharacter cyrillicomega              {\uchar4{97}}
+\definecharacter cyrillicYAT                {\uchar4{98}}
+\definecharacter cyrillicyat                {\uchar4{99}}
+\definecharacter cyrillicEiotified          {\uchar4{100}}
+\definecharacter cyrilliceiotified          {\uchar4{101}}
+\definecharacter cyrillicLITTLEYUS          {\uchar4{102}}
+\definecharacter cyrilliclittleyus          {\uchar4{103}}
+\definecharacter cyrillicLITTLEYUSiotified  {\uchar4{104}}
+\definecharacter cyrilliclittleyusiotified  {\uchar4{105}}
+\definecharacter cyrillicBIGYUS             {\uchar4{106}}
+\definecharacter cyrillicbigyus             {\uchar4{107}}
+\definecharacter cyrillicBIGYUSiotified     {\uchar4{108}}
+\definecharacter cyrillicbigyusiotified     {\uchar4{109}}
+\definecharacter cyrillicKSI                {\uchar4{110}}
+\definecharacter cyrillicksi                {\uchar4{111}}
+\definecharacter cyrillicPSI                {\uchar4{112}}
+\definecharacter cyrillicpsi                {\uchar4{113}}
+\definecharacter cyrillicFITA               {\uchar4{114}}
+\definecharacter cyrillicfita               {\uchar4{115}}
+\definecharacter cyrillicIZHITSA            {\uchar4{116}}
+\definecharacter cyrillicizhitsa            {\uchar4{117}}
+\definecharacter cyrillicIZHITSAdoublegrave {\uchar4{118}}
+\definecharacter cyrillicizhitsadoublegrave {\uchar4{119}}
+\definecharacter cyrillicUK                 {\uchar4{120}}
+\definecharacter cyrillicuk                 {\uchar4{121}}
+\definecharacter cyrillicOMEGAround         {\uchar4{122}}
+\definecharacter cyrillicomegaround         {\uchar4{123}}
+\definecharacter cyrillicOMEGAtitlo         {\uchar4{124}}
+\definecharacter cyrillicomegatitlo         {\uchar4{125}}
+\definecharacter cyrillicOT                 {\uchar4{126}}
+\definecharacter cyrillicot                 {\uchar4{127}}
+\definecharacter cyrillicKOPPA              {\uchar4{128}}
+\definecharacter cyrillickoppa              {\uchar4{129}}
+\definecharacter cyrillicTITLO              {\uchar4{131}}
+\definecharacter cyrillicPALATALIZATION     {\uchar4{132}}
+\definecharacter cyrillicDASIAPNEUMATA      {\uchar4{133}}
+\definecharacter cyrillicPSILIPNEUMATA      {\uchar4{134}}
+\definecharacter cyrillicISHRTtail          {\uchar4{138}}
+\definecharacter cyrillicishrttail          {\uchar4{139}}
+\definecharacter cyrillicSEMISOFT           {\uchar4{140}}
+\definecharacter cyrillicsemisoft           {\uchar4{141}}
+\definecharacter cyrillicERtick             {\uchar4{142}}
+\definecharacter cyrillicertick             {\uchar4{143}}
+\definecharacter cyrillicGHEupturn          {\uchar4{144}}
+\definecharacter cyrillicgheupturn          {\uchar4{145}}
+\definecharacter cyrillicGHEstroke          {\uchar4{146}}
+\definecharacter cyrillicghestroke          {\uchar4{147}}
+\definecharacter cyrillicGHEmidhook         {\uchar4{148}}
+\definecharacter cyrillicghemidhook         {\uchar4{149}}
+\definecharacter cyrillicZHEdescender       {\uchar4{150}}
+\definecharacter cyrilliczhedescender       {\uchar4{151}}
+\definecharacter cyrillicZDSC               {\uchar4{152}}
+\definecharacter cyrilliczdsc               {\uchar4{153}}
+\definecharacter cyrillicKADC               {\uchar4{154}}
+\definecharacter cyrillickadc               {\uchar4{155}}
+\definecharacter cyrillicKAvertstroke       {\uchar4{156}}
+\definecharacter cyrillickavertstroke       {\uchar4{157}}
+\definecharacter cyrillicKAstroke           {\uchar4{158}}
+\definecharacter cyrillickastroke           {\uchar4{159}}
+\definecharacter cyrillicKAbashkir          {\uchar4{160}}
+\definecharacter cyrillickabashkir          {\uchar4{161}}
+\definecharacter cyrillicENDC               {\uchar4{162}}
+\definecharacter cyrillicendc               {\uchar4{163}}
+\definecharacter cyrillicENGHE              {\uchar4{164}}
+\definecharacter cyrillicenghe              {\uchar4{165}}
+\definecharacter cyrillicPEmidhook          {\uchar4{166}}
+\definecharacter cyrillicpemidhook          {\uchar4{167}}
+\definecharacter cyrillicHA                 {\uchar4{168}}
+\definecharacter cyrillicha                 {\uchar4{169}}
+%definecharacter cyrillicSDSC               {\uchar4{170}} % already defined
+%definecharacter cyrilliccdsc               {\uchar4{171}} % already defined
+\definecharacter cyrillicTEDC               {\uchar4{172}}
+\definecharacter cyrillictedc               {\uchar4{173}}
+\definecharacter cyrillicYstr               {\uchar4{174}}
+\definecharacter cyrillicystr               {\uchar4{175}}
+\definecharacter cyrillicYstrstroke         {\uchar4{176}}
+\definecharacter cyrillicystrstroke         {\uchar4{177}}
+\definecharacter cyrillicHADC               {\uchar4{178}}
+\definecharacter cyrillichadc               {\uchar4{179}}
+\definecharacter cyrillicTETSE              {\uchar4{180}}
+\definecharacter cyrillictetse              {\uchar4{181}}
+\definecharacter cyrillicCHEDC              {\uchar4{182}}
+\definecharacter cyrillicchedc              {\uchar4{183}}
+\definecharacter cyrillicCHEvertstroke      {\uchar4{184}}
+\definecharacter cyrillicchevertstroke      {\uchar4{185}}
+\definecharacter cyrillicSHHA               {\uchar4{186}}
+\definecharacter cyrillicshha               {\uchar4{187}}
+\definecharacter cyrillicCHEabkhasian       {\uchar4{188}}
+\definecharacter cyrilliccheabkhasian       {\uchar4{189}}
+\definecharacter cyrillicCHEDCabkhasian     {\uchar4{190}}
+\definecharacter cyrillicchedcabkhasian     {\uchar4{191}}
+\definecharacter cyrillicPALOCHKA           {\uchar4{192}}
+\definecharacter cyrillicZHEbreve           {\uchar4{193}}
+\definecharacter cyrilliczhebreve           {\uchar4{194}}
+\definecharacter cyrillicKAhook             {\uchar4{195}}
+\definecharacter cyrillickahook             {\uchar4{196}}
+\definecharacter cyrillicELtail             {\uchar4{197}}
+\definecharacter cyrilliceltail             {\uchar4{198}}
+\definecharacter cyrillicENhook             {\uchar4{199}}
+\definecharacter cyrillicenhook             {\uchar4{200}}
+\definecharacter cyrillicENtail             {\uchar4{201}}
+\definecharacter cyrillicentail             {\uchar4{202}}
+\definecharacter cyrillicCHEkhakassian      {\uchar4{203}}
+\definecharacter cyrillicchekhakassian      {\uchar4{204}}
+\definecharacter cyrillicEMtail             {\uchar4{205}}
+\definecharacter cyrillicemtail             {\uchar4{206}}
+\definecharacter cyrillicAbreve             {\uchar4{208}}
+\definecharacter cyrillicabreve             {\uchar4{209}}
+\definecharacter cyrillicAdiaeresis         {\uchar4{210}}
+\definecharacter cyrillicadiaeresis         {\uchar4{211}}
+%definecharacter cyrillicAE                 {\uchar4{212}} % already defined
+%definecharacter cyrillicae                 {\uchar4{213}} % already defined
+\definecharacter cyrillicEbreve             {\uchar4{214}}
+\definecharacter cyrillicebreve             {\uchar4{215}}
+\definecharacter cyrillicSCHWA              {\uchar4{216}}
+\definecharacter cyrillicschwa              {\uchar4{217}}
+\definecharacter cyrillicSCHWAdiaeresis     {\uchar4{218}}
+\definecharacter cyrillicschwadiaeresis     {\uchar4{219}}
+\definecharacter cyrillicZHEdiaeresis       {\uchar4{220}}
+\definecharacter cyrilliczhediaeresis       {\uchar4{221}}
+\definecharacter cyrillicZEdiaeresis        {\uchar4{222}}
+\definecharacter cyrilliczediaeresis        {\uchar4{223}}
+\definecharacter cyrillicDZEabkhasian       {\uchar4{224}}
+\definecharacter cyrillicdzeabkhasian       {\uchar4{225}}
+\definecharacter cyrillicImacron            {\uchar4{226}}
+\definecharacter cyrillicimacron            {\uchar4{227}}
+\definecharacter cyrillicIdiaeresis         {\uchar4{228}}
+\definecharacter cyrillicidiaeresis         {\uchar4{229}}
+\definecharacter cyrillicOdiaeresis         {\uchar4{230}}
+\definecharacter cyrillicodiaeresis         {\uchar4{231}}
+\definecharacter cyrillicObarred            {\uchar4{232}}
+\definecharacter cyrillicobarred            {\uchar4{233}}
+\definecharacter cyrillicObarreddiaeresis   {\uchar4{234}}
+\definecharacter cyrillicobarreddiaeresis   {\uchar4{235}}
+\definecharacter cyrillicEdiaeresis         {\uchar4{236}}
+\definecharacter cyrillicediaeresis         {\uchar4{237}}
+\definecharacter cyrillicUmacron            {\uchar4{238}}
+\definecharacter cyrillicumacron            {\uchar4{239}}
+\definecharacter cyrillicUdiaeresis         {\uchar4{240}}
+\definecharacter cyrillicudiaeresis         {\uchar4{241}}
+\definecharacter cyrillicUdoubleacute       {\uchar4{242}}
+\definecharacter cyrillicudoubleacute       {\uchar4{243}}
+\definecharacter cyrillicCHEdiaeresis       {\uchar4{244}}
+\definecharacter cyrillicchediaeresis       {\uchar4{245}}
+\definecharacter cyrillicYERUdiaeresis      {\uchar4{248}}
+\definecharacter cyrillicyerudiaeresis      {\uchar4{249}}
+
+\stopencoding
+
+% Greek Extended
+
+\startencoding[uc]
+
+\definecharacter greekalphapsili                     {\uchar{31}{0}}
+\definecharacter greekalphadasia                     {\uchar{31}{1}}
+\definecharacter greekalphapsilivaria                {\uchar{31}{2}}
+\definecharacter greekalphadasiavaria                {\uchar{31}{3}}
+\definecharacter greekalphapsilitonos                {\uchar{31}{4}}
+\definecharacter greekalphadasiatonos                {\uchar{31}{5}}
+\definecharacter greekalphapsiliperispomeni          {\uchar{31}{6}}
+\definecharacter greekalphadasiaperispomeni          {\uchar{31}{7}}
+\definecharacter greekAlphapsili                     {\uchar{31}{8}}
+\definecharacter greekAlphadasia                     {\uchar{31}{9}}
+\definecharacter greekAlphapsilivaria                {\uchar{31}{10}}
+\definecharacter greekAlphadasiavaria                {\uchar{31}{11}}
+\definecharacter greekAlphapsilitonos                {\uchar{31}{12}}
+\definecharacter greekAlphadasiatonos                {\uchar{31}{13}}
+\definecharacter greekAlphapsiliperispomeni          {\uchar{31}{14}}
+\definecharacter greekAlphadasiaperispomeni          {\uchar{31}{15}}
+\definecharacter greekepsilonpsili                   {\uchar{31}{16}} % 1f10
+\definecharacter greekepsilondasia                   {\uchar{31}{17}}
+\definecharacter greekepsilonpsilivaria              {\uchar{31}{18}}
+\definecharacter greekepsilondasiavaria              {\uchar{31}{19}}
+\definecharacter greekepsilonpsilitonos              {\uchar{31}{20}}
+\definecharacter greekepsilondasiatonos              {\uchar{31}{21}}
+\definecharacter greekEpsilonpsili                   {\uchar{31}{24}}
+\definecharacter greekEpsilondasia                   {\uchar{31}{25}}
+\definecharacter greekEpsilonpsilivaria              {\uchar{31}{26}}
+\definecharacter greekEpsilondasiavaria              {\uchar{31}{27}}
+\definecharacter greekEpsilonpsilitonos              {\uchar{31}{28}}
+\definecharacter greekEpsilondasiatonos              {\uchar{31}{29}}
+\definecharacter greeketapsili                       {\uchar{31}{32}} % 1f20
+\definecharacter greeketadasia                       {\uchar{31}{33}}
+\definecharacter greeketapsilivaria                  {\uchar{31}{34}}
+\definecharacter greeketadasiavaria                  {\uchar{31}{35}}
+\definecharacter greeketapsilitonos                  {\uchar{31}{36}}
+\definecharacter greeketadasiatonos                  {\uchar{31}{37}}
+\definecharacter greeketapsiliperispomeni            {\uchar{31}{38}}
+\definecharacter greeketadasiaperispomeni            {\uchar{31}{39}}
+\definecharacter greekEtapsili                       {\uchar{31}{40}}
+\definecharacter greekEtadasia                       {\uchar{31}{41}}
+\definecharacter greekEtapsilivaria                  {\uchar{31}{42}}
+\definecharacter greekEtadasiavaria                  {\uchar{31}{43}}
+\definecharacter greekEtapsilitonos                  {\uchar{31}{44}}
+\definecharacter greekEtadasiatonos                  {\uchar{31}{45}}
+\definecharacter greekEtapsiliperispomeni            {\uchar{31}{46}}
+\definecharacter greekEtadasiaperispomeni            {\uchar{31}{47}}
+\definecharacter greekiotapsili                      {\uchar{31}{48}} % 1f30
+\definecharacter greekiotadasia                      {\uchar{31}{49}}
+\definecharacter greekiotapsilivaria                 {\uchar{31}{50}}
+\definecharacter greekiotadasiavaria                 {\uchar{31}{51}}
+\definecharacter greekiotapsilitonos                 {\uchar{31}{52}}
+\definecharacter greekiotadasiatonos                 {\uchar{31}{53}}
+\definecharacter greekiotapsiliperispomeni           {\uchar{31}{54}}
+\definecharacter greekiotadasiaperispomeni           {\uchar{31}{55}}
+\definecharacter greekIotapsili                      {\uchar{31}{56}}
+\definecharacter greekIotadasia                      {\uchar{31}{57}}
+\definecharacter greekIotapsilivaria                 {\uchar{31}{58}}
+\definecharacter greekIotadasiavaria                 {\uchar{31}{59}}
+\definecharacter greekIotapsilitonos                 {\uchar{31}{60}}
+\definecharacter greekIotadasiatonos                 {\uchar{31}{61}}
+\definecharacter greekIotapsiliperispomeni           {\uchar{31}{62}}
+\definecharacter greekIotadasiaperispomeni           {\uchar{31}{63}}
+\definecharacter greekomicronpsili                   {\uchar{31}{64}} % 1f40
+\definecharacter greekomicrondasia                   {\uchar{31}{65}}
+\definecharacter greekomicronpsilivaria              {\uchar{31}{66}}
+\definecharacter greekomicrondasiavaria              {\uchar{31}{67}}
+\definecharacter greekomicronpsilitonos              {\uchar{31}{68}}
+\definecharacter greekomicrondasiatonos              {\uchar{31}{69}}
+\definecharacter greekOmicronpsili                   {\uchar{31}{72}}
+\definecharacter greekOmicrondasia                   {\uchar{31}{73}}
+\definecharacter greekOmicronpsilivaria              {\uchar{31}{74}}
+\definecharacter greekOmicrondasiavaria              {\uchar{31}{75}}
+\definecharacter greekOmicronpsilitonos              {\uchar{31}{76}}
+\definecharacter greekOmicrondasiatonos              {\uchar{31}{77}}
+\definecharacter greekupsilonpsili                   {\uchar{31}{80}} % 1f50
+\definecharacter greekupsilondasia                   {\uchar{31}{81}}
+\definecharacter greekupsilonpsilivaria              {\uchar{31}{82}}
+\definecharacter greekupsilondasiavaria              {\uchar{31}{83}}
+\definecharacter greekupsilonpsilitonos              {\uchar{31}{84}}
+\definecharacter greekupsilondasiatonos              {\uchar{31}{85}}
+\definecharacter greekupsilonpsiliperispomeni        {\uchar{31}{86}}
+\definecharacter greekupsilondasiaperispomeni        {\uchar{31}{87}}
+\definecharacter greekUpsilondasia                   {\uchar{31}{89}}
+\definecharacter greekUpsilondasiavaria              {\uchar{31}{91}}
+\definecharacter greekUpsilondasiatonos              {\uchar{31}{93}}
+\definecharacter greekUpsilondasiaperispomeni        {\uchar{31}{95}}
+\definecharacter greekomegapsili                     {\uchar{31}{96}} % 1f60
+\definecharacter greekomegadasia                     {\uchar{31}{97}}
+\definecharacter greekomegapsilivaria                {\uchar{31}{98}}
+\definecharacter greekomegadasiavaria                {\uchar{31}{99}}
+\definecharacter greekomegapsilitonos                {\uchar{31}{100}}
+\definecharacter greekomegadasiatonos                {\uchar{31}{101}}
+\definecharacter greekomegapsiliperispomeni          {\uchar{31}{102}}
+\definecharacter greekomegadasiaperispomeni          {\uchar{31}{103}}
+\definecharacter greekOmegapsili                     {\uchar{31}{104}}
+\definecharacter greekOmegadasia                     {\uchar{31}{105}}
+\definecharacter greekOmegapsilivaria                {\uchar{31}{106}}
+\definecharacter greekOmegadasiavaria                {\uchar{31}{107}}
+\definecharacter greekOmegapsilitonos                {\uchar{31}{108}}
+\definecharacter greekOmegadasiatonos                {\uchar{31}{109}}
+\definecharacter greekOmegapsiliperispomeni          {\uchar{31}{110}}
+\definecharacter greekOmegadasiaperispomeni          {\uchar{31}{111}}
+\definecharacter greekalphavaria                     {\uchar{31}{112}} % 1f70
+\definecharacter greekalphaoxia                      {\uchar{31}{113}}
+\definecharacter greekepsilonvaria                   {\uchar{31}{114}}
+\definecharacter greekepsilonoxia                    {\uchar{31}{115}}
+\definecharacter greeketavaria                       {\uchar{31}{116}}
+\definecharacter greeketaoxia                        {\uchar{31}{117}}
+\definecharacter greekiotavaria                      {\uchar{31}{118}}
+\definecharacter greekiotaoxia                       {\uchar{31}{119}}
+\definecharacter greekomicronvaria                   {\uchar{31}{120}}
+\definecharacter greekomicronoxia                    {\uchar{31}{121}}
+\definecharacter greekupsilonvaria                   {\uchar{31}{122}}
+\definecharacter greekupsilonoxia                    {\uchar{31}{123}}
+\definecharacter greekomegavaria                     {\uchar{31}{124}}
+\definecharacter greekomegaoxia                      {\uchar{31}{125}}
+\definecharacter greekalphaiotasubpsili              {\uchar{31}{128}} % 1f80
+\definecharacter greekalphaiotasubdasia              {\uchar{31}{129}}
+\definecharacter greekalphaiotasubpsilivaria         {\uchar{31}{130}}
+\definecharacter greekalphaiotasubdasiavaria         {\uchar{31}{131}}
+\definecharacter greekalphaiotasubpsilitonos         {\uchar{31}{132}}
+\definecharacter greekalphaiotasubdasiatonos         {\uchar{31}{133}}
+\definecharacter greekalphaiotasubpsiliperispomeni   {\uchar{31}{134}}
+\definecharacter greekalphaiotasubdasiaperispomeni   {\uchar{31}{135}}
+\definecharacter greekAlphaiotasubpsili              {\uchar{31}{136}}
+\definecharacter greekAlphaiotasubdasia              {\uchar{31}{137}}
+\definecharacter greekAlphaiotasubpsilivaria         {\uchar{31}{138}}
+\definecharacter greekAlphaiotasubdasiavaria         {\uchar{31}{139}}
+\definecharacter greekAlphaiotasubpsilitonos         {\uchar{31}{140}}
+\definecharacter greekAlphaiotasubdasiatonos         {\uchar{31}{141}}
+\definecharacter greekAlphaiotasubpsiliperispomeni   {\uchar{31}{142}}
+\definecharacter greekAlphaiotasubdasiaperispomeni   {\uchar{31}{143}}
+\definecharacter greeketaiotasubpsili                {\uchar{31}{144}} % 1f90
+\definecharacter greeketaiotasubdasia                {\uchar{31}{145}}
+\definecharacter greeketaiotasubpsilivaria           {\uchar{31}{146}}
+\definecharacter greeketaiotasubdasiavaria           {\uchar{31}{147}}
+\definecharacter greeketaiotasubpsilitonos           {\uchar{31}{148}}
+\definecharacter greeketaiotasubdasiatonos           {\uchar{31}{149}}
+\definecharacter greeketaiotasubpsiliperispomeni     {\uchar{31}{150}}
+\definecharacter greeketaiotasubdasiaperispomeni     {\uchar{31}{151}}
+\definecharacter greekEtaiotasubpsili                {\uchar{31}{152}}
+\definecharacter greekEtaiotasubdasia                {\uchar{31}{153}}
+\definecharacter greekEtaiotasubpsilivaria           {\uchar{31}{154}}
+\definecharacter greekEtaiotasubdasiavaria           {\uchar{31}{155}}
+\definecharacter greekEtaiotasubpsilitonos           {\uchar{31}{156}}
+\definecharacter greekEtaiotasubdasiatonos           {\uchar{31}{157}}
+\definecharacter greekEtaiotasubpsiliperispomeni     {\uchar{31}{158}}
+\definecharacter greekEtaiotasubdasiaperispomeni     {\uchar{31}{159}}
+\definecharacter greekomegaiotasubpsili              {\uchar{31}{160}} % 1fa0
+\definecharacter greekomegaiotasubdasia              {\uchar{31}{161}}
+\definecharacter greekomegaiotasubpsilivaria         {\uchar{31}{162}}
+\definecharacter greekomegaiotasubdasiavaria         {\uchar{31}{163}}
+\definecharacter greekomegaiotasubpsilitonos         {\uchar{31}{164}}
+\definecharacter greekomegaiotasubdasiatonos         {\uchar{31}{165}}
+\definecharacter greekomegaiotasubpsiliperispomeni   {\uchar{31}{166}}
+\definecharacter greekomegaiotasubdasiaperispomeni   {\uchar{31}{167}}
+\definecharacter greekOmegaiotasubpsili              {\uchar{31}{168}}
+\definecharacter greekOmegaiotasubdasia              {\uchar{31}{169}}
+\definecharacter greekOmegaiotasubpsilivaria         {\uchar{31}{170}}
+\definecharacter greekOmegaiotasubdasiavaria         {\uchar{31}{171}}
+\definecharacter greekOmegaiotasubpsilitonos         {\uchar{31}{172}}
+\definecharacter greekOmegaiotasubdasiatonos         {\uchar{31}{173}}
+\definecharacter greekOmegaiotasubpsiliperispomeni   {\uchar{31}{174}}
+\definecharacter greekOmegaiotasubdasiaperispomeni   {\uchar{31}{175}}
+\definecharacter greekalphavrachy                    {\uchar{31}{176}} % 1fb0
+\definecharacter greekalphamacron                    {\uchar{31}{177}}
+\definecharacter greekalphaiotasubvaria              {\uchar{31}{178}}
+\definecharacter greekalphaiotasub                   {\uchar{31}{179}}
+\definecharacter greekalphaiotasubtonos              {\uchar{31}{180}}
+\definecharacter greekalphaperispomeni               {\uchar{31}{182}}
+\definecharacter greekalphaiotasubperispomeni        {\uchar{31}{183}}
+\definecharacter greekAlphavrachy                    {\uchar{31}{184}}
+\definecharacter greekAlphamacron                    {\uchar{31}{185}}
+\definecharacter greekAlphavaria                     {\uchar{31}{186}}
+\definecharacter greekAlphatonos                     {\uchar{31}{187}}
+\definecharacter greekAlphaiotasub                   {\uchar{31}{188}}
+\definecharacter greekCoronis                        {\uchar{31}{189}}
+\definecharacter greekprosgegrammeni                 {\uchar{31}{190}}
+\definecharacter greekpsili                          {\uchar{31}{191}}
+\definecharacter greekperispomeni                    {\uchar{31}{192}} % 1fc0
+\definecharacter greekdialytikaperispomeni           {\uchar{31}{193}}
+\definecharacter greeketaiotasubvaria                {\uchar{31}{194}}
+\definecharacter greeketaiotasub                     {\uchar{31}{195}}
+\definecharacter greeketaiotasubtonos                {\uchar{31}{196}}
+\definecharacter greeketaperispomeni                 {\uchar{31}{198}}
+\definecharacter greeketaiotasubperispomeni          {\uchar{31}{199}}
+\definecharacter greekEpsilonvaria                   {\uchar{31}{200}}
+\definecharacter greekEpsilontonos                   {\uchar{31}{201}}
+\definecharacter greekEtavaria                       {\uchar{31}{202}}
+\definecharacter greekEtatonos                       {\uchar{31}{203}}
+\definecharacter greekEtaiotasub                     {\uchar{31}{204}}
+\definecharacter greekpsilivaria                     {\uchar{31}{205}}
+\definecharacter greekpsilitonos                     {\uchar{31}{206}}
+\definecharacter greekpsiliperispomeni               {\uchar{31}{207}}
+\definecharacter greekiotavrachy                     {\uchar{31}{208}} % 1fd0
+\definecharacter greekiotamacron                     {\uchar{31}{209}}
+\definecharacter greekiotadialytikavaria             {\uchar{31}{210}}
+\definecharacter greekiotadialytikatonos             {\uchar{31}{211}}
+\definecharacter greekiotaperispomeni                {\uchar{31}{214}}
+\definecharacter greekiotadialytikaperispomeni       {\uchar{31}{215}}
+\definecharacter greekIotavrachy                     {\uchar{31}{216}}
+\definecharacter greekIotamacron                     {\uchar{31}{217}}
+\definecharacter greekIotavaria                      {\uchar{31}{218}}
+\definecharacter greekIotatonos                      {\uchar{31}{219}}
+\definecharacter greekdasiavaria                     {\uchar{31}{221}}
+\definecharacter greekdasiatonos                     {\uchar{31}{222}}
+\definecharacter greekdasiaperispomeni               {\uchar{31}{223}}
+\definecharacter greekupsilonvrachy                  {\uchar{31}{224}} % 1fe0
+\definecharacter greekupsilonmacron                  {\uchar{31}{225}}
+\definecharacter greekupsilondialytikavaria          {\uchar{31}{226}}
+\definecharacter greekupsilondialytikatonos          {\uchar{31}{227}}
+\definecharacter greekrhopsili                       {\uchar{31}{228}}
+\definecharacter greekrhodasia                       {\uchar{31}{229}}
+\definecharacter greekupsilonperispomeni             {\uchar{31}{230}}
+\definecharacter greekupsilondialytikaperispomeni    {\uchar{31}{231}}
+\definecharacter greekUpsilonvrachy                  {\uchar{31}{232}}
+\definecharacter greekUpsilonmacron                  {\uchar{31}{233}}
+\definecharacter greekUpsilonvaria                   {\uchar{31}{234}}
+\definecharacter greekUpsilontonos                   {\uchar{31}{235}}
+\definecharacter greekRhodasia                       {\uchar{31}{236}}
+\definecharacter greekdialytikavaria                 {\uchar{31}{237}}
+\definecharacter greekdialytikatonos                 {\uchar{31}{238}}
+\definecharacter greekvaria                          {\uchar{31}{239}}
+\definecharacter greekomegaiotasubvaria              {\uchar{31}{242}}
+\definecharacter greekomegaiotasub                   {\uchar{31}{243}}
+\definecharacter greekomegaiotasubtonos              {\uchar{31}{244}}
+\definecharacter greekomegaperispomeni               {\uchar{31}{246}}
+\definecharacter greekomegaiotasubperispomeni        {\uchar{31}{247}}
+\definecharacter greekOmicronvaria                   {\uchar{31}{248}}
+\definecharacter greekOmicrontonos                   {\uchar{31}{249}}
+\definecharacter greekOmegavaria                     {\uchar{31}{250}}
+\definecharacter greekOmegatonos                     {\uchar{31}{251}}
+\definecharacter greekOmegaiotasub                   {\uchar{31}{252}}
+\definecharacter greekoxia                           {\uchar{31}{253}}
+\definecharacter greekdasia                          {\uchar{31}{254}}
+\definecharacter greeksigmalunate                    {\uchar3{242}}
+\definecharacter greekSigmalunate                    {\uchar3{249}}
+\definecharacter greeksampi                          {\uchar3{225}}
+\definecharacter greekdigamma                        {\uchar3{221}}
+\definecharacter greekstigma                         {\uchar3{219}}
+\definecharacter greeknumkoppa                       {\uchar3{223}}
+\definecharacter greekkoppa                          {\uchar3{217}}
+\definecharacter greekupsilondiaeresis               {\uchar3{203}}
+
+\stopencoding
+
+% Hebrew:
+
+\startencoding[uc]
+
+\definecharacter hebrewAlef          {\uchar5{208}} %  05D0
+\definecharacter hebrewBet           {\uchar5{209}}
+\definecharacter hebrewGimel         {\uchar5{210}}
+\definecharacter hebrewDalet         {\uchar5{211}}
+\definecharacter hebrewHe            {\uchar5{212}}
+\definecharacter hebrewVav           {\uchar5{213}}
+\definecharacter hebrewZayin         {\uchar5{214}}
+\definecharacter hebrewHet           {\uchar5{215}}
+\definecharacter hebrewTet           {\uchar5{216}}
+\definecharacter hebrewYod           {\uchar5{217}}
+\definecharacter hebrewKaffinal      {\uchar5{218}}
+\definecharacter hebrewKaf           {\uchar5{219}}
+\definecharacter hebrewLamed         {\uchar5{220}}
+\definecharacter hebrewMemfinal      {\uchar5{221}}
+\definecharacter hebrewMem           {\uchar5{222}}
+\definecharacter hebrewNunfinal      {\uchar5{223}}
+\definecharacter hebrewNun           {\uchar5{224}}
+\definecharacter hebrewSamekh        {\uchar5{225}}
+\definecharacter hebrewAyin          {\uchar5{226}}
+\definecharacter hebrewPefinal       {\uchar5{227}}
+\definecharacter hebrewPe            {\uchar5{228}}
+\definecharacter hebrewTsadifinal    {\uchar5{229}}
+\definecharacter hebrewTsadi         {\uchar5{230}}
+\definecharacter hebrewQof           {\uchar5{231}}
+\definecharacter hebrewResh          {\uchar5{232}}
+\definecharacter hebrewShin          {\uchar5{233}}
+\definecharacter hebrewTav           {\uchar5{234}} % 05EA
+
+\stopencoding
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-vis.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-vis.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-vis.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,3 @@
+% temporary module, needed for downward compatibility
+
+\input regi-vis.tex \enableregime[viscii] \endinput 

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-vna.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-vna.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-vna.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,145 @@
+%D \module
+%D   [     file=enco-vna,
+%D      version=1999.12.12,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Vietnamese Accents,
+%D       author=Han The Thanh & Adam Lindsay & Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This module is originally derived from the some files Han The Thanh
+%D prepared for \LATEX. The dual accent support is still preliminary,
+%D but works ok. It's now adapted to named glyphs, and is activated by
+%D \type {\useencoding[thisfile]}.
+
+%D This was apparently buggy from the start: there is nothing to
+%D disambiguate \type {\ohorn} from \type {\ohook}. Both are entered
+%D with \type {\h{o}} (AL)!
+
+%D Once stable, this code will move to \type {enco-acc.tex}.
+
+\startencoding[default]
+
+\defineaccent h  A       {\Ahook}
+\defineaccent d  A       {\Adotbelow}
+\defineaccent ` ^A       {\Acircumflexgrave}
+\defineaccent ' ^A       {\Acircumflexacute}
+\defineaccent ~ ^A       {\Acircumflextilde}
+\defineaccent h ^A       {\Acircumflexhook}
+\defineaccent d ^A       {\Acircumflexdotbelow}
+\defineaccent ` uA       {\Abrevegrave}
+\defineaccent ' uA       {\Abreveacute}
+\defineaccent ~ uA       {\Abrevetilde}
+\defineaccent h uA       {\Abrevehook}
+\defineaccent d uA       {\Abrevedotbelow}
+\defineaccent h  E       {\Ehook}
+\defineaccent d  E       {\Edotbelow}
+\defineaccent ` ^E       {\Ecircumflexgrave}
+\defineaccent ' ^E       {\Ecircumflexacute}
+\defineaccent ~ ^E       {\Ecircumflextilde}
+\defineaccent h ^E       {\Ecircumflexhook}
+\defineaccent d ^E       {\Ecircumflexdotbelow}
+\defineaccent h  I       {\Ihook}
+\defineaccent d  I       {\Idotbelow}
+\defineaccent h  O       {\Ohook}
+\defineaccent d  O       {\Odotbelow}
+\defineaccent ` ^O       {\Ocircumflexgrave}
+\defineaccent ' ^O       {\Ocircumflexacute}
+\defineaccent ~ ^O       {\Ocircumflextilde}
+\defineaccent h ^O       {\Ocircumflexhook}
+\defineaccent d ^O       {\Ocircumflexdotbelow}
+%defineaccent h  O       {\Ohorn}                % !!! conflict with \Ohook!
+\defineaccent ` hO       {\Ohorngrave}
+\defineaccent ` {\Ohorn} {\Ohorngrave}
+\defineaccent ' hO       {\Ohornacute}
+\defineaccent ' {\Ohorn} {\Ohornacute}
+\defineaccent ~ hO       {\Ohorntilde}
+\defineaccent ~ {\Ohorn} {\Ohorntilde}
+\defineaccent h hO       {\Ohornhook}
+\defineaccent h {\Ohorn} {\Ohornhook}
+\defineaccent d hO       {\Ohorndotbelow}
+\defineaccent d {\Ohorn} {\Ohorndotbelow}
+\defineaccent h  U       {\Uhook}
+\defineaccent d  U       {\Udotbelow}
+%defineaccent h  U       {\Uhorn}                % !!! conflict with \Uhook! honestly, people!
+\defineaccent ` hU       {\Uhorngrave}
+\defineaccent ` {\Uhorn} {\Uhorngrave}
+\defineaccent ' hU       {\Uhornacute}
+\defineaccent ' {\Uhorn} {\Uhornacute}
+\defineaccent ~ hU       {\Uhorntilde}
+\defineaccent ~ {\Uhorn} {\Uhorntilde}
+\defineaccent h hU       {\Uhornhook}
+\defineaccent h {\Uhorn} {\Uhornhook}
+\defineaccent d hU       {\Uhorndotbelow}
+\defineaccent d {\Uhorn} {\Uhorndotbelow}
+\defineaccent `  Y       {\Ygrave}
+\defineaccent '  Y       {\Yacute}
+\defineaccent ~  Y       {\Ytilde}
+\defineaccent h  Y       {\Yhook}
+\defineaccent d  Y       {\Ydotbelow}
+\defineaccent h  a       {\ahook}
+\defineaccent d  a       {\adotbelow}
+\defineaccent ` ^a       {\acircumflexgrave}
+\defineaccent ' ^a       {\acircumflexacute}
+\defineaccent ~ ^a       {\acircumflextilde}
+\defineaccent h ^a       {\acircumflexhook}
+\defineaccent d ^a       {\acircumflexdotbelow}
+\defineaccent ` ua       {\abrevegrave}
+\defineaccent ' ua       {\abreveacute}
+\defineaccent ~ ua       {\abrevetilde}
+\defineaccent h ua       {\abrevehook}
+\defineaccent d ua       {\abrevedotbelow}
+\defineaccent h  e       {\ehook}
+\defineaccent d  e       {\edotbelow}
+\defineaccent ` ^e       {\ecircumflexgrave}
+\defineaccent ' ^e       {\ecircumflexacute}
+\defineaccent ~ ^e       {\ecircumflextilde}
+\defineaccent h ^e       {\ecircumflexhook}
+\defineaccent d ^e       {\ecircumflexdotbelow}
+\defineaccent h  i       {\ihook}
+\defineaccent d  i       {\idotbelow}
+\defineaccent h  o       {\ohook}
+\defineaccent d  o       {\odotbelow}
+\defineaccent ^  o       {\ocircumflex}
+\defineaccent ` ^o       {\ocircumflexgrave}
+\defineaccent ' ^o       {\ocircumflexacute}
+\defineaccent ~ ^o       {\ocircumflextilde}
+\defineaccent h ^o       {\ocircumflexhook}
+\defineaccent d ^o       {\ocircumflexdotbelow}
+%defineaccent h  o       {\ohorn}                % !!!
+\defineaccent ` ho       {\ohorngrave}
+\defineaccent ' ho       {\ohornacute}
+\defineaccent ~ ho       {\ohorntilde}
+\defineaccent h ho       {\ohornhook}
+\defineaccent d ho       {\ohorndotbelow}
+\defineaccent ` {\ohorn} {\ohorngrave}
+\defineaccent ' {\ohorn} {\ohornacute}
+\defineaccent ~ {\ohorn} {\ohorntilde}
+\defineaccent h {\ohorn} {\ohornhook}
+\defineaccent d {\ohorn} {\ohorndotbelow}
+\defineaccent h  u       {\uhook}
+\defineaccent d  u       {\udotbelow}
+%defineaccent h  u       {\uhorn}                % !!!
+\defineaccent ` hu       {\uhorngrave}
+\defineaccent ' hu       {\uhornacute}
+\defineaccent ~ hu       {\uhorntilde}
+\defineaccent h hu       {\uhornhook}
+\defineaccent d hu       {\uhorndotbelow}
+\defineaccent ` {\uhorn} {\uhorngrave}
+\defineaccent ' {\uhorn} {\uhornacute}
+\defineaccent ~ {\uhorn} {\uhorntilde}
+\defineaccent h {\uhorn} {\uhornhook}
+\defineaccent d {\uhorn} {\uhorndotbelow}
+\defineaccent `  y       {\ygrave}
+\defineaccent '  y       {\yacute}
+\defineaccent ~  y       {\ytilde}
+\defineaccent h  y       {\yhook}
+\defineaccent d  y       {\ydotbelow}
+
+\stopencoding
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-win.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-win.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-win.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,7 @@
+% temporary module, needed for downward compatibility
+
+%\input regi-win.tex 
+
+\enableregime[windows] 
+
+\endinput 

Added: trunk/Master/texmf-dist/tex/context/base/mkii/enco-x5.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/enco-x5.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/enco-x5.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,222 @@
+%D \module
+%D   [     file=enco-x5,
+%D      version=1999.12.12,
+%D        title=\CONTEXT\ Encoding Macros,
+%D     subtitle=Vietnamese Encoding,
+%D       author=Hans Hagen,
+%D         date=\currentdate,
+%D    copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This module is derived from the some files Han The Thanh
+%D prepared for \LATEX. The dual accent support is still
+%D preliminary, but works ok.
+
+\startencoding[x5]
+
+\definecharacter textgrave         0
+\definecharacter textacute         1
+\definecharacter textcircumflex    2
+\definecharacter texttilde         3
+\definecharacter textdiaeresis     4
+\definecharacter texthungarumlaut  5
+\definecharacter textring          6
+\definecharacter textcaron         7
+\definecharacter textbreve         8
+\definecharacter textmacron        9
+\definecharacter textdotaccent    10
+\definecharacter textcedilla      11
+\definecharacter textogonek       12
+
+\definecharacter dotlessi         25
+\definecharacter DJ               30
+\definecharacter dj               31
+
+\defineaccent `  A 128
+\defineaccent '  A 129
+\defineaccent ~  A 130
+\defineaccent h  A 131
+\defineaccent d  A 132
+\defineaccent ^  A 133
+\defineaccent ` ^A 134
+\defineaccent ' ^A 135
+\defineaccent ~ ^A 136
+\defineaccent h ^A 137
+\defineaccent d ^A 138
+\defineaccent u  A 139
+\defineaccent ` uA 140
+\defineaccent ' uA 141
+\defineaccent ~ uA 142
+\defineaccent h uA 143
+\defineaccent d uA 144
+\defineaccent `  E 145
+\defineaccent '  E 146
+\defineaccent ~  E 147
+\defineaccent h  E 148
+\defineaccent d  E 149
+\defineaccent ^  E 150
+\defineaccent ` ^E 151
+\defineaccent ' ^E 152
+\defineaccent ~ ^E 153
+\defineaccent h ^E 154
+\defineaccent d ^E 155
+\defineaccent `  I 156
+\defineaccent '  I 157
+\defineaccent ~  I 158
+\defineaccent h  I 159
+\defineaccent d  I 192
+\defineaccent `  O 193
+\defineaccent '  O 194
+\defineaccent ~  O 195
+\defineaccent h  O 196
+\defineaccent d  O 197
+\defineaccent ^  O 198
+\defineaccent ` ^O 199
+\defineaccent ' ^O 200
+\defineaccent ~ ^O 201
+\defineaccent h ^O 202
+\defineaccent d ^O 203
+\defineaccent h  O 204
+\defineaccent ` hO 205
+\defineaccent ' hO 206
+\defineaccent ~ hO 207
+\defineaccent h hO 208
+\defineaccent d hO 209
+\defineaccent `  U 210
+\defineaccent '  U 211
+\defineaccent ~  U 212
+\defineaccent h  U 213
+\defineaccent d  U 214
+\defineaccent h  U 215
+\defineaccent ` hU 216
+\defineaccent ' hU 217
+\defineaccent ~ hU 218
+\defineaccent h hU 219
+\defineaccent d hU 220
+\defineaccent `  Y 221
+\defineaccent '  Y 222
+\defineaccent ~  Y 223
+\defineaccent h  Y  26
+\defineaccent d  Y  28
+\defineaccent `  a 160
+\defineaccent '  a 161
+\defineaccent ~  a 162
+\defineaccent h  a 163
+\defineaccent d  a 164
+\defineaccent ^  a 165
+\defineaccent ` ^a 166
+\defineaccent ' ^a 167
+\defineaccent ~ ^a 168
+\defineaccent h ^a 169
+\defineaccent d ^a 170
+\defineaccent u  a 171
+\defineaccent ` ua 172
+\defineaccent ' ua 173
+\defineaccent ~ ua 174
+\defineaccent h ua 175
+\defineaccent d ua 176
+\defineaccent `  e 177
+\defineaccent '  e 178
+\defineaccent ~  e 179
+\defineaccent h  e 180
+\defineaccent d  e 181
+\defineaccent ^  e 182
+\defineaccent ` ^e 183
+\defineaccent ' ^e 184
+\defineaccent ~ ^e 185
+\defineaccent h ^e 186
+\defineaccent d ^e 187
+\defineaccent `  i 188
+\defineaccent '  i 189
+\defineaccent ~  i 190
+\defineaccent h  i 191
+\defineaccent d  i 224
+\defineaccent `  o 225
+\defineaccent '  o 226
+\defineaccent ~  o 227
+\defineaccent h  o 228
+\defineaccent d  o 229
+\defineaccent ^  o 230
+\defineaccent ` ^o 231
+\defineaccent ' ^o 232
+\defineaccent ~ ^o 233
+\defineaccent h ^o 234
+\defineaccent d ^o 235
+\defineaccent h  o 236
+\defineaccent ` ho 237
+\defineaccent ' ho 238
+\defineaccent ~ ho 239
+\defineaccent h ho 240
+\defineaccent d ho 241
+\defineaccent `  u 242
+\defineaccent '  u 243
+\defineaccent ~  u 244
+\defineaccent h  u 245
+\defineaccent d  u 246
+\defineaccent h  u 247
+\defineaccent ` hu 248
+\defineaccent ' hu 249
+\defineaccent ~ hu 250
+\defineaccent h hu 251
+\defineaccent d hu 252
+\defineaccent `  y 253
+\defineaccent '  y 254
+\defineaccent ~  y 255
+\defineaccent h  y  27
+\defineaccent d  y  29
+
+\stopencoding
+
+\endinput
+
+% \startencoding [x5]
+%
+% \definecharacter aa {\xfiveencodedaa}
+% \definecharacter AA {\xfiveencodedAA}
+%
+% \stopencoding
+%
+% \unprotect
+%
+% \def\xfiveencodedaa%
+%   {\accent23a}
+%
+% \def\xfiveencodedAA%
+%   {\leavevmode
+%    \setbox\zerocount\hbox{h}%
+%    \dimen@\ht\zerocount
+%    \advance\dimen@ -1ex
+%    \rlap{\raise.67\dimen@\hbox{\char23}}A}
+%
+% \protect
+%
+% \quotesinglbase     13
+% \guilsinglleft      14
+% \guilsinglright     15
+% \textquotedblleft   16
+% \textquotedblright  17
+% \quotedblbase       18
+% \guillemotleft      19
+% \guillemotright     20
+% \textendash         21
+% \textemdash         22
+% \textcompwordmark   23
+% \textperthousand    \% \char 24
+% \textpertenthousand \%\char 24\char 24
+% \textvisiblespace   32
+% \textquotedbl       `\"
+% \textdollar         `\$
+% \textquoteright     `\'
+% \textless           `\<
+% \textgreater        `\>
+% \textbackslash      `\
+% \textasciicircum    `\^
+% \textunderscore     95
+% \textquoteleft      `\`
+% \textbraceleft      `\{
+% \textbar            `\|
+% \textbraceright     `\}
+% \textasciitilde     `\~

Added: trunk/Master/texmf-dist/tex/context/base/mkii/filt-bas.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/filt-bas.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/filt-bas.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,63 @@
+%D \module
+%D   [       file=filt-bas,
+%D        version=2000.09.19,
+%D          title=\CONTEXT\ Filter Macros,
+%D       subtitle=A Base Collection,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for 
+%C details. 
+
+% BEWARE: THIS IS A TEST MODULE, NAMES MAY CHANGE!
+
+\definefiltersynonym [utf8 to unicode16] [inutf8]
+
+\definefiltersynonym [persian fix]       [FarsiToArabic]
+\definefiltersynonym [arabic analysis]   [uni2cuni]
+\definefiltersynonym [arabic glyphs]     [cuni2oar]
+
+\definefiltersequence
+  [farsi]
+  [utf8 to unicode16,
+   persian fix,
+   arabic analysis,
+   arabic glyphs]
+
+\definefiltersynonym [basic context analysis step1]     [bcaa-1]
+\definefiltersynonym [basic context analysis step2]     [bcaa-2]
+\definefiltersynonym [basic context analysis step3]     [bcaa-3]
+\definefiltersynonym [farsi processing for uomarab]     [uomarab-farsi]
+
+\definefiltersynonym [basic presentation forms to sf]   [bpftosf]
+
+\definefiltersynonym [omega persian fix]                [FarsiToArabic]
+\definefiltersynonym [omega arabic analysis]            [uni2cuni]
+\definefiltersynonym [omega arabic glyphs]              [cuni2oar]
+
+\definefiltersequence
+  [farsi-1]
+  [utf8 to unicode16,
+   omega persian fix,
+   omega arabic analysis,
+   omega arabic glyphs]
+
+\definefiltersequence
+  [farsi-2]
+  [utf8 to unicode16,
+   basic context analysis step1,
+   basic context analysis step2,
+   basic context analysis step3,
+   farsi processing for uomarab]
+
+\definefiltersequence
+  [farsi-3]
+  [utf8 to unicode16,
+   basic context analysis step1,
+   basic context analysis step2,
+   basic context analysis step3,
+   basic presentation forms to sf]
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/filt-ini.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/filt-ini.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/filt-ini.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,121 @@
+%D \module
+%D   [       file=filt-ini,
+%D        version=2000.09.19,
+%D          title=\CONTEXT\ Filter Macros,
+%D       subtitle=Initialization,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Filter Macros / Initialization}
+
+% \ifx\OmegaVersion\undefined
+
+%            \let\definefiltersynonym  \gobbledoubleempty
+%            \let\definefiltersequence \gobbledoubleempty
+% \unexpanded\def\usefiltersequence   {\gobblesingleempty}
+%            \let\usefilter            \gobblesingleempty
+%            \let\truefiltername       \gobbleoneargument
+
+%   \expandafter \endinput
+% \fi
+
+\unprotect
+
+%D The real work starts here.
+
+% We need the {\??ot::#1} check because otherwise aleph will crash. Taco's
+% torture test:
+%
+% \ocp\ArabicContext = contextual
+%
+% \dorecurse {5000} {
+%     \message{[\recurselevel]}
+%     \ocplist\Arabic=\addbeforeocplist 1 \ArabicContext \nullocplist
+% }
+
+%D \macros
+%D   {definefiltersynonym}
+
+\def\definefiltersynonym
+  {\dodoubleargument\dodefinefiltersynonym}
+
+\def\dodefinefiltersynonym[#1][#2]%
+  {\setvalue{\??or#1}{#2}}
+
+%D \macros
+%D   {truefiltername}
+
+\def\truefiltername#1%
+  {\ifundefined{\??or#1}#1\else\truefiltername{\getvalue{\??or#1}}\fi}
+
+%D \macros
+%D   {definefiltersequence}
+
+\def\definefiltersequence
+  {\dodoubleargument\dodefinefiltersequence}
+
+% \def\dodefinefiltersequence[#1][#2]%
+%   {\setvalue{\??ot#1}{#2}}
+
+\def\dodefinefiltersequence[#1][#2]%
+  {\setxvalue{\??ot#1}{#2}%
+   \letgvalue{\??ot::#1}\v!stop}
+
+%D \macros
+%D   {usefiltersequence}
+%D
+
+\def\magicocpnumber{1}
+
+% one can do:
+%
+%  \definefiltersequence
+%    [farsi]
+%    [utf8 to unicode16=>5,
+%     persian fix,
+%     arabic analysis=>3,
+%     arabic glyphs]
+%
+% so, => is used to signal a priority
+
+\def\dodousefiltersequence#1%
+  {\expandafter\ocp\csname\??or:#1\endcsname=\truefiltername{#1}\relax
+   \splitstring#1\at=>\to\!!stringa\and\!!stringb
+   \edef\!!stringb{\number\ifx\!!stringb\empty\magicocpnumber\else\!!stringb\fi}%
+   \appendetoks
+     \noexpand\addbeforeocplist
+     \!!stringb\space
+     \expandafter\noexpand\csname\??or:\!!stringa\endcsname
+   \to \scratchtoks}
+
+\unexpanded\def\usefiltersequence[#1]%
+  {\doifdefined{\??ot::#1}%
+     {\doifvalue{\??ot::#1}\v!stop
+         {\scratchtoks\emptytoks
+          \expanded{\processcommalist[\getvalue{\??ot#1}]}\dodousefiltersequence
+          \expanded{\global\ocplist\csname\??ot:#1\endcsname=\the\scratchtoks}\nullocplist
+          \letgvalue{\??ot::#1}\v!start}%
+       \expanded{\pushocplist\csname\??ot:#1\endcsname}\relax}}
+
+%D \macros
+%D   {usefilter}
+
+\def\dousefilter#1%
+  {\doifundefined{\c!file\f!filterprefix#1}%
+     {\letvalue{\c!file\f!filterprefix#1}\empty
+      \makeshortfilename[\truefilename{\f!filterprefix#1}]%
+      \startreadingfile
+        \readsysfile{\shortfilename.mkii}
+          {\showmessage\m!filters1{#1}}
+          {\showmessage\m!filters2{#1}}%
+      \stopreadingfile}}
+
+\def\usefilter[#1]%
+  {\processcommalist[#1]\dousefilter}
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/font-arb.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/font-arb.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/font-arb.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,5 @@
+\unprotected \writestatus\m!systems{load ARABTEX as a module instead}
+
+\usemodule[arabtex]
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/font-bfm.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/font-bfm.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/font-bfm.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,196 @@
+%D \module
+%D   [       file=font-bfm,
+%D        version=2003.11.25,
+%D          title=\CONTEXT\ Font Macros,
+%D       subtitle=Mixed Normal and Bold Math,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Font Macros / Mixed Bold Math Support}
+
+%D The following example demonstrates how to use normal, bold, and mixed
+%D normal|/|bold math. Since not everyone has the Lucida on his|/|her
+%D machine we don't show the result.
+%D
+%D \starttyping
+%D \setupformulas
+%D   [method=bold]
+%D
+%D \definetypeface [mainface] [rm] [serif]    [lucida] [default] [encoding=texnansi]
+%D \definetypeface [mainface] [tt] [mono]     [lucida] [default] [encoding=texnansi]
+%D \definetypeface [mainface] [ss] [sans]     [lucida] [default] [encoding=texnansi]
+%D \definetypeface [mainface] [mm] [math]     [lucida] [default] [encoding=texnansi]
+%D \definetypeface [mainface] [mm] [bfmath]   [lucida] [default] [encoding=texnansi]
+%D
+%D \definetypeface [boldmath] [rm] [serif]    [lucida] [default] [encoding=texnansi]
+%D \definetypeface [boldmath] [tt] [mono]     [lucida] [default] [encoding=texnansi]
+%D \definetypeface [boldmath] [ss] [sans]     [lucida] [default] [encoding=texnansi]
+%D \definetypeface [boldmath] [mm] [boldmath] [lucida] [default] [encoding=texnansi]
+%D
+%D \switchtobodyfont[mainface]
+%D
+%D \startlines
+%D $\mainface x=10 \Gamma \Delta \alpha \delta \zeta$
+%D $\boldmath x=10 \Gamma \Delta \alpha \delta \zeta$
+%D \stoplines
+%D
+%D \startformula
+%D   x=12=\fontbody  \Gamma \Delta \alpha \delta \zeta
+%D \stopformula
+%D
+%D \startformula[mainface]
+%D   x=12=\fontbody  \Gamma \Delta \alpha \delta \zeta
+%D \stopformula
+%D
+%D \startformula[boldmath]
+%D   x=12=\fontbody  \Gamma \Delta \alpha \delta \zeta
+%D \stopformula
+%D
+%D \startformula[boldmath,8pt]
+%D   x=8=\fontbody  \Gamma \Delta \alpha \delta \zeta
+%D \stopformula
+%D
+%D \startformula[boldmath,12pt,small]
+%D   x=12s=\fontbody  \Gamma \Delta \alpha \delta \zeta
+%D \stopformula
+%D
+%D \startformula[boldmath,small]
+%D   x=s=\fontbody  \Gamma \Delta \alpha \delta \zeta
+%D \stopformula
+%D
+%D \startformula[boldmath,10pt]
+%D   x=10=\fontbody  \Gamma \Delta \alpha \delta \zeta
+%D \stopformula
+%D
+%D \startformula[boldmath,11pt,small]
+%D   x=11s=\fontbody  \Gamma \Delta \alpha \delta \zeta
+%D \stopformula
+%D
+%D \startformula[boldmath,9pt]
+%D   x=9=\fontbody \Gamma \Delta \alpha \delta \zeta
+%D \stopformula
+%D
+%D \startlines
+%D \formula{1=2x}
+%D \formula[boldmath]{1=2x}
+%D \formula[mainface]{1=2x}
+%D \formula[mainface]{1 \theta \Gamma = \bfm 1 \beta \hbox{\sl test}\Gamma \alpha ' x x}
+%D \formula[mainface]{1 \theta \Gamma = {\bfm 1 \beta \hbox{\sl test}\Gamma \alpha ' x} x}
+%D \stoplines
+%D \stoptyping
+
+\unprotect
+
+%D \TEX\ has some hard wired expectations about where to look for
+%D certain characters.  This means that we cannot overload the families
+%D 0 upto~3. Also, since we use C upto~F  for math as well, we are left
+%D with the range 4 upto~B.
+
+\chardef\mrbffam\itfam \edef\c!mrbf{\c!mr\c!bf} \let\hexmrbffam\hexitfam % 4 it
+\chardef\exbffam\slfam \edef\c!exbf{\c!ex\c!bf} \let\hexexbffam\hexslfam % 5 sl
+\chardef\mibffam\bffam \edef\c!mibf{\c!mi\c!bf} \let\hexmibffam\hexbffam % 6 bf
+\chardef\sybffam\nnfam \edef\c!sybf{\c!sy\c!bf} \let\hexsybffam\hexnnfam % 7 nn
+\chardef\mabffam\bsfam \edef\c!mabf{\c!ma\c!bf} \let\hexmabffam\hexbsfam % 8 bs
+\chardef\mbbffam\bifam \edef\c!mbbf{\c!mb\c!bf} \let\hexmbbffam\hexbifam % 9 bi
+\chardef\mcbffam\scfam \edef\c!mcbf{\c!mc\c!bf} \let\hexmcbffam\hexscfam % A sc
+\chardef\mdbffam\scfam \edef\c!mdbf{\c!mc\c!bf} \let\hexmdbffam\hexscfam % B tf % tricky
+
+%D The next bunch of code looks horrible and tricky but one has to keep in
+%D mind that because \TEX\ makes several passes over the math list we need to
+%D make sure that grouping is handled well. Later assignments to a family
+%D overload previous ones, the last one counts.
+
+\newtoks \boldmathstrategies
+\newtoks \boldsymbstrategies
+
+\appendtoks
+  \dosetmathfamily\mrbffam\textface\scriptface\scriptscriptface\c!mrbf\mrfallback
+  \dosetmathfamily\mibffam\textface\scriptface\scriptscriptface\c!mibf\empty
+  \dosetmathfamily\sybffam\textface\scriptface\scriptscriptface\c!sybf\empty
+  \dosetmathfamily\exbffam\textface\textface  \textface        \c!exbf\empty
+  \dosetmathfamily\mabffam\textface\scriptface\scriptscriptface\c!mabf\empty
+  \dosetmathfamily\mbbffam\textface\scriptface\scriptscriptface\c!mbbf\empty
+  \dosetmathfamily\mcbffam\textface\scriptface\scriptscriptface\c!mcbf\empty
+\to \boldmathstrategies
+
+\appendtoks
+  \dosetskewchar\mifam\defaultskewcharmi
+  \dosetskewchar\syfam\defaultskewcharsy
+\to \boldmathstrategies
+
+\appendtoks
+  \dosetsymbfamily\mrbffam\textface\scriptface\scriptscriptface\c!mrbf
+  \dosetsymbfamily\mibffam\textface\scriptface\scriptscriptface\c!mibf
+  \dosetsymbfamily\sybffam\textface\scriptface\scriptscriptface\c!sybf
+  \dosetsymbfamily\exbffam\textface\textface  \textface        \c!exbf
+  \dosetsymbfamily\mabffam\textface\scriptface\scriptscriptface\c!mabf
+  \dosetsymbfamily\mbbffam\textface\scriptface\scriptscriptface\c!mbbf
+  \dosetsymbfamily\mcbffam\textface\scriptface\scriptscriptface\c!mcbf
+\to \boldsymbstrategies
+
+%D Here comes the real mess (due to semi||global settings en multiple
+%D passes over the math list once the input is expanded.
+
+\newevery \everyboldfacemath  \relax
+\chardef  \boldfacemathmethod \zerocount
+
+\appendtoks
+  \ifcase\boldfacemathmethod \else \the\boldmathstrategies \fi
+\to \mathstrategies
+
+\appendtoks
+  \ifcase\boldfacemathmethod \else \the\boldsymbstrategies \fi
+\to \symbstrategies
+
+\appendtoks
+  \let\mrfam\mrbffam \let\c!mr\c!mrbf \let\hexmrfam\hexmrbffam
+  \let\mifam\mibffam \let\c!mi\c!mibf \let\hexmifam\hexmibffam
+  \let\syfam\sybffam \let\c!sy\c!sybf \let\hexsyfam\hexsybffam
+  \let\exfam\exbffam \let\c!ex\c!exbf \let\hexexfam\hexexbffam
+  \let\mafam\mabffam \let\c!ma\c!mabf \let\hexmafam\hexmabffam
+  \let\mbfam\mbbffam \let\c!mb\c!mbbf \let\hexmbfam\hexmbbffam
+  \let\mcfam\mcbffam \let\c!mc\c!mcbf \let\hexmcfam\hexmcbffam
+\to \everyboldfacemath
+
+\appendtoks
+  \let\mathsubfamily\c!bf
+\to \everyboldfacemath
+
+\appendtoks
+  \synchronizemath \aftergroup\synchronizemath
+\to \everyboldfacemath
+
+%D \macros
+%D   {boldfacemath, bfm, autoboldfacemath}
+%D
+%D These are the user commands, with \type {\bfm} being the most comfortable.
+
+\def\boldfacemath    {\ifcase\boldfacemathmethod\else\the\everyboldfacemath\fi}
+\def\bfm             {\boldfacemath} % no \let, so that we can redefine
+\def\autoboldfacemath{\appendtoks\ifcase\boldfacemathmethod\else\let\bf\boldfacemath\fi\to\everymathematics}
+
+%D We hook this feature into the formula mechanism.
+
+\setupformulas
+  [\c!method=\v!normal]
+
+\appendtoks
+  \doifelse{\formulaparameter\c!method}\v!bold
+    {\chardef\boldfacemathmethod\plusone}
+    {\chardef\boldfacemathmethod\zerocount}%
+\to \everysetupformulas
+
+%D Of course this only works when bfmath fonts are set up (see example at
+%D the top of this file) and bold math is enabled:
+%D
+%D \starttyping
+%D \setupformulas
+%D   [method=bold]
+%D \stoptyping
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/font-chi.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/font-chi.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/font-chi.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,1156 @@
+%D \module
+%D   [       file=font-chi,
+%D        version=1999.10.10,
+%D          title=\CONTEXT\ Font Macros,
+%D       subtitle=Chinese,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D    suggestions=Wang Lei,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\ifx\handlechineseunicodeglyph\undefined \else \endinput \fi
+
+% NOT YET ADAPTED TO THE NEW FONT MACROS
+
+%D The first implementation (most of which is here) is based on
+%D the specific font layout. This is because not all glyphs are
+%D available in uniciode, which means that we cannot use
+%D unicode codepoints (yet); if it were possible we could use
+%D just one table per input encoding.
+
+\writestatus{loading}{ConTeXt Font Macros / Chinese}
+
+% much will to typo-chi.tex
+
+%D Still to be implemented:
+%D
+%D \startitemize
+%D \item columns left right touch
+%D \item distance = (hsize-n*bodyfontsize)/(n-1)
+%D \item char grids
+%D \item char tables
+%D \item all kind of rotated combinations
+%D \item hanging puctuation
+%D \item a few more encodings
+%D \item rotation list
+%D \stopitemize
+
+%M \setupbodyfont[chi]
+%M
+%M \def\WangLei{\purechinese{\uchar{205}{245}\uchar{192}{218}}}
+
+\useencoding[chi]
+
+%D When \WangLei\ sent me a mail asking if \CONTEXT\ was able
+%D to support Chinese, I wasn't sure if the answer could be
+%D yes. I knew that those languages, rich of glyphs, were
+%D typeset by \TEX, so in principle it should be possible. I
+%D asked or some more input and was told that there were
+%D \LATEX\ styles regarding those languages. When I unzipped
+%D the accompanying files, it became clear that I had to
+%D implement support for Chinese from scratch. There was a
+%D multitude of font, with rather unfamiliar encodings, a
+%D large collection of files with |<|at least for me|>|
+%D unknown purposes, and worse, the documentation was mainly
+%D in Chinese.
+%D
+%D So, \WangLei\ and I started exchanging some emails and it
+%D soon became clear that supporting Chinese was not that
+%D complicated at all. It mostly came to dealing with handling
+%D \UNICODE\ fonts. It also became clear that everything
+%D Chinese took place in the upper region of the eight bit
+%D character set. I wrote some macros that could process the
+%D small \type {Hello World} file \WangLei\ had send me, and
+%D after some bug fixes real Chinese came out. I started to
+%D like the look and fel of Chinese glyphs, so on we went.
+%D
+%D The first comments concerned spacing. The mix of English
+%D and Chinese demands some rather deliberate handling of
+%D spacing. Breaking lines was not so much a problem, and
+%D could be solved by adding some glue between Chinese glyphs.
+%D
+%D In the meantime had asked \WangLei\ for some language bound
+%D labels and texts, and implementing these was rather
+%D straightforward. But, there were still some issues to deal
+%D with: conversion of numbers, date handling and index
+%D sorting.
+%D
+%D I consider(ed) writing Chinese support to be a nice puzzle,
+%D since I have to act on chinese \CONTEXT\ code, where I only
+%D understand the \CONTEXT\ part. The drawings \WangLei\ made
+%D me (in drawing packages) were of great help. Since I write
+%D these modules from scratch, although I fall back on some
+%D basic encoding and font modules, I consider them to be
+%D rather clean. This cannot be said of all \CONTEXT\ font
+%D modules \type {-)}.
+
+\unprotect
+
+%D Because Chinese glyphs have more height than the average
+%D Latin glyph, and at the same time don't have much depth,
+%D we adapt the scale.
+%D
+%D Before and after the glyph we have to deal with Chinese
+%D spacing. Special attention is given to punctuation.
+%D
+%D \starttyping
+%D [some short nice chinese text with () and english]
+%D \stoptyping
+%D
+%D We insert a bit of stretch and introduce a signal to
+%D keep track of previous characters. We use a similar
+%D method in the units module, which may be a nice
+%D introduction to using signals.
+
+%D \macros
+%D   {chineseunicodescale, chineseinterglyphskip,
+%D    chineseunicodeheight, chineseunicodedepth, chinesespace}
+%D
+%D There are a few variables, that can be (re|)|set
+%D depending on the current font. They default to:
+
+% hm, why don't we use the normal unicodestrut mechanism?
+
+\def\chineseunicodescale  {1.00} % not smaller than .85
+\def\chineseunicodeheight {1.00}
+\def\chineseunicodedepth  {1.00}
+\def\chineseinterglyphskip{0pt   \!!plus .05em \!!minus .01em}
+\def\chinesesurroundskip  {.25em \!!plus .15em \!!minus .05em}
+
+%D We define a few signals. As said, another example of
+%D using signals can be found in the module \type {m-units}.
+
+\newsignal\chineseLsignal % left boundary character
+\newsignal\chineseRsignal % right boundary character
+\newsignal\chineseSsignal % any other character (symbol)
+
+\chardef\chineseBstatus=0 % 0=unknown 1=left 2=right 3=chinese 4=nospace
+\chardef\chineseAstatus=0 % 0=unknown 1=left 2=right 3=space
+\chardef\chineseSstatus=0 % 0=unknown 1=left 2=right
+
+\sfcode`(=2000  % a temporary hack
+
+\def\chinesenobreak
+ {\relax
+  \iftracechinese
+    \nobreak
+    \kern-.5pt\color[red]{\vrule\!!width1pt}\kern-.5pt
+    \nobreak
+  \else
+    \nobreak
+  \fi}
+
+\newif\ifcorrectchineseboundarychars
+
+\def\chineseunskip
+  {\unskip\unskip\unskip\unskip}
+
+\def\insertchineseglyph
+  {\iftracechinese\tracedchineseglyph\else\insertunicodeglyph\fi}
+
+\newif\ifverticalchinese
+
+\def\handlechineseunicodeglyph
+  {\ifinpagebody
+     \horizontalchineseunicodeglyph
+   \else\ifverticalchinese
+     \verticalchineseunicodeglyph
+   \else
+     \horizontalchineseunicodeglyph
+   \fi\fi}
+
+% chinese classes: left=1|right=2|center=3
+
+\chardef\plusfour=4
+
+\def\analyzechineseunicodeglyph % beware, no zerocount !
+  {\chardef\chineseSstatus0\getvalue{uc\number\unicodeposition}\relax}
+
+\def\analyzechineseunicodeenviroment
+  {% left
+   \ifx (\nextutoken              \chardef\chineseAstatus\plusone   \else
+   \ifx [\nextutoken              \chardef\chineseAstatus\plusone   \else
+   % right
+   \ifx ,\nextutoken              \chardef\chineseAstatus\plustwo   \else
+   \ifx .\nextutoken              \chardef\chineseAstatus\plustwo   \else
+   \ifx ?\nextutoken              \chardef\chineseAstatus\plustwo   \else
+   \ifx ;\nextutoken              \chardef\chineseAstatus\plustwo   \else
+   \ifx :\nextutoken              \chardef\chineseAstatus\plustwo   \else
+   \ifx !\nextutoken              \chardef\chineseAstatus\plustwo   \else
+   \ifx )\nextutoken              \chardef\chineseAstatus\plustwo   \else
+   \ifx ]\nextutoken              \chardef\chineseAstatus\plustwo   \else
+   % space
+   \ifx\nextutoken\blankspace     \chardef\chineseAstatus\plusthree \else
+   \ifx\nextutoken\space          \chardef\chineseAstatus\plusthree \else
+                                  \chardef\chineseAstatus\zerocount
+   % unknown
+   \fi\fi\fi\fi\fi \fi\fi\fi\fi\fi \fi\fi
+   % maybe save the last skip?
+   \chardef\chineseBstatus\ifdim\lastskip=\zeropoint\plusfour\else\zerocount\fi
+   \ifdim\lastskip=\chineseLsignal \chardef\chineseBstatus\plusone   \else
+   \ifdim\lastskip=\chineseRsignal \chardef\chineseBstatus\plustwo   \else
+   \ifdim\lastskip=\chineseSsignal \chardef\chineseBstatus\plusthree \else
+     \scratchskip=\lastskip \unskip
+     \ifdim\lastskip=\chineseLsignal \chardef\chineseBstatus\plusone   \else
+     \ifdim\lastskip=\chineseRsignal \chardef\chineseBstatus\plustwo   \else
+     \ifdim\lastskip=\chineseSsignal \chardef\chineseBstatus\plusthree \else
+       \space\scratchskip=\lastskip \unskip
+       \setbox\scratchbox=\hbox\bgroup
+         (\space
+         \ifdim\lastskip=\scratchskip
+           \egroup \chardef\chineseBstatus\plusone
+         \else
+           \egroup
+           \ifdim\scratchskip=\zeropoint \chardef\chineseBstatus\plusfour \fi
+         \fi
+     \fi\fi\fi
+   \fi\fi\fi}
+
+\def\horizontalchineseunicodeglyph
+  {\relax
+   \ifhmode\else\dontleavehmode\fi % added
+   \setunicodescale\chineseunicodescale % redundant
+   \setunicodestrut\chineseunicodeheight\chineseunicodedepth % redundant
+   \ifprocessingverbatim
+     \iftracechinese
+       \ruledhbox{\insertunicodeglyph}%
+     \else
+       \insertunicodeglyph
+     \fi
+   \else\ifx\nextutoken\relax
+       \insertunicodeglyph
+   \else
+     \analyzechineseunicodeglyph
+     \analyzechineseunicodeenviroment
+     \ifcase\chineseSstatus\relax
+       \ifcase\chineseBstatus\relax
+         \chineseunskip
+         \hskip\chinesesurroundskip      % unknown
+       \or
+         \chineseunskip
+         \chinesenobreak                 % left
+       \or
+         \ifcorrectchineseboundarychars\else\chineseunskip\fi
+         \hskip\chineseinterglyphskip    % right
+       \or
+         \chineseunskip
+         \hskip\chineseinterglyphskip    % chinese
+       \or
+                                         % whatever
+       \fi
+       \insertchineseglyph
+       \ifcase\chineseAstatus\relax
+         \hskip\chineseinterglyphskip    % unknown
+         \hskip\chinesesurroundskip
+         \ifcase\chineseSstatus
+           \hskip\chineseSsignal
+         \or
+           \hskip\chineseLsignal
+         \else
+           \hskip\chineseRsignal
+         \fi
+       \or
+         \hskip\chineseinterglyphskip    % left
+         \chinesenobreak
+         \hskip\chineseLsignal
+       \or
+         \chinesenobreak                 % right
+         \hskip\chineseinterglyphskip
+         \chinesenobreak
+         \hskip\chineseRsignal
+       \or
+         \hskip\chineseinterglyphskip    % space
+         \hskip\chinesesurroundskip
+         \hskip\chineseSsignal
+       \fi
+     \or % left
+       \ifcorrectchineseboundarychars
+         \let\unicodecharcommand\chineseleftcharcommand
+       \fi
+       \chineseunskip
+       \insertchineseglyph
+       \chinesenobreak
+       \hskip\chineseLsignal
+     \or % right
+       \ifcorrectchineseboundarychars
+         \let\unicodecharcommand\chineserightcharcommand
+       \fi
+       \chineseunskip
+       \chinesenobreak
+       \insertchineseglyph
+       \hskip\chineseRsignal
+     \else % center
+       \chineseunskip
+       \chinesenobreak
+       \insertchineseglyph
+       \hskip\chineseinterglyphskip
+       \hskip\chineseRsignal
+     \fi\fi
+     \aftergroup\ignorespaces            % watch this
+   \fi}
+
+\def\verticalchineseunicodeglyph
+  {\relax
+   \ifprocessingverbatim % to do
+     \horizontalchineseunicodeglyph
+   \else
+     \setunicodescale\chineseunicodescale % redundant
+     \setunicodestrut\chineseunicodeheight\chineseunicodedepth % redundant
+     \ifx\nextutoken\relax
+       \insertchineseglyph
+       \ifvmode % catches \hbox{...}, actually \hbox should be \vbox -)
+         \nointerlineskip
+       \fi
+       \allowbreak
+     \else
+       \analyzechineseunicodeglyph
+       \setbox\scratchbox\hbox to \hsize
+         {\hss
+          \ifcase\chineseSstatus\relax
+            \insertchineseglyph
+          \else % left / right
+            \setbox\scratchbox\hbox{\insertchineseglyph}%
+            \rotate[\c!rotation=270]{\box\scratchbox}%
+          \fi
+          \hss}%
+       \ht\scratchbox\unicodeheight\strutht
+       \dp\scratchbox\unicodedepth \strutdp
+       \ifvmode % catches \hbox{...}, actually \hbox should be \vbox -)
+         \nointerlineskip
+       \fi
+       \ifcase\prevchineseSstatus\relax
+         \ifnum\chineseSstatus=\plustwo \par\nobreak\else\allowbreak\fi
+       \or % left
+         \par\nobreak
+       \or % right
+         \ifnum\chineseSstatus=\plustwo \par\nobreak\else\allowbreak\fi
+       \fi
+       \global\chardef\prevchineseSstatus\chineseSstatus % pagebody ...
+       \box\scratchbox\par
+     \fi
+     \aftergroup\ignorespaces                           % watch this
+   \fi}
+
+%D \macros
+%D   {setupchinese,startvertical,nochinese}
+%D
+%D The previous macros implement horizontal as well as
+%D vertical typesetting. Vertical typesetting is implemented
+%D on top of the multi||column routines.
+
+\def\setupchinese
+  {\dodoubleargument\getparameters[\??vt]}
+
+\def\startvertical
+  {\dosingleempty\dostartvertical}
+
+\def\dostartvertical[#1]%
+  {\bgroup
+   \def\maxnofcolumns{25}%
+   \verticalchinesetrue
+   \global\chardef\prevchineseSstatus\zerocount
+   \let\nochinese\nochineseinvertical
+   \doif\@@vtn\v!fit
+     {\dimen0=\textwidth    \advance\dimen0 \@@vtdistance
+      \dimen2=\bodyfontsize \advance\dimen2 \@@vtdistance
+      \divide\dimen0 \number\dimen2
+      \edef\@@vtn{\number\dimen0}}%
+   \startcolumns
+     [\c!direction=\@@vtdirection,
+      \c!balance=\@@vtbalance,
+      \c!distance=\@@vtdistance,
+      \c!n=\@@vtn,
+      #1]}
+
+\def\stopvertical
+  {\stopcolumns
+   \egroup}
+
+\setupchinese
+  [\c!direction=\v!left,
+   \c!balance=\v!no,
+   \c!n=\v!fit,
+   \c!distance=1.5\bodyfontsize]
+
+%D We can set up vertical typesetting with \type
+%D {\setupchinese}.
+
+%D \macros
+%D   {nochineseinvertical}
+%D
+%D English (non chinese) text is typeset rotated:
+
+\def\nochineseinvertical#1%
+  {\par
+   \setbox\scratchbox\hbox{\strut#1}
+   \getnoflines{\wd\scratchbox}
+   \setbox\scratchbox\hbox to \noflines\openlineheight
+     {\hss\box\scratchbox\hss}
+   \hbox to \hsize
+     {\hss
+      \rotate
+        [\c!rotation=270]
+        {\vbox to \ht\scratchbox{\vss\box\scratchbox\vss}}%
+      \hss}
+   \par}
+
+%D \macros
+%D   {correctchineseboundarychars}
+%D
+%D Careful reading of the previous macro learns that we
+%D treat left and right glyphs differently. When we say
+%D
+%D \starttyping
+%D \correctchineseboundarycharstrue
+%D \stoptyping
+%D
+%D For the moment correction in on by default.
+
+\correctchineseboundarycharstrue
+
+\def\chineserightcharcommand#1%
+  {\iftracechinese\ruledhbox\else\hbox\fi \!!to .5em{#1\hss}%
+   \hskip.25em\!!plus .25em\relax}%
+
+\def\chineseleftcharcommand#1%
+  {\ifnum\chineseBstatus<4 \hskip.25em \!!plus .25em\relax\fi
+   \iftracechinese\ruledhbox\else\hbox\fi \!!to .5em{\hss#1}}%
+
+% \def\chineserightcharcommand#1%
+%   {\setbox\scratchbox=\hbox{#1}%
+%    \scratchdimen=.5em
+%    \ifdim\wd\scratchbox>\scratchdimen
+%      \iftracechinese\ruledhbox\else\hbox\fi \!!to \scratchdimen
+%        {\box\scratchbox\hss}%
+%      \hskip.5\scratchdimen\!!plus.5\scratchdimen\relax
+%    \else
+%      \box\scratchbox
+%    \fi}
+
+% \def\chineseleftcharcommand#1%
+%   {\setbox\scratchbox=\hbox{#1}%
+%    \scratchdimen=.5em
+%    \ifdim\wd\scratchbox>\scratchdimen
+%      \ifnum\chineseBstatus<4
+%        \hskip.5\scratchdimen\!!plus.5\scratchdimen\relax
+%      \fi
+%      \iftracechinese\ruledhbox\else\hbox\fi \!!to \scratchdimen
+%        {\hss\box\scratchbox}%
+%    \else
+%      \box\scratchbox
+%    \fi}
+
+%D The long list of numbers in the previous macro identify the
+%D characters where special care is needed for breaking lines.
+%D A linebreak is not permitted before:
+%D
+%D \def\DoIt #1 #2 %
+%D   {\hbox{\hbox to 2em{\uchar{#1}{#2}\hss}#1 #2}\par}
+%D
+%D \startcolumns[n=5]
+%D \DoIt 161 162 \DoIt 161 163 \DoIt 161 164 \DoIt 161 167 \DoIt 161 173
+%D \DoIt 161 175 \DoIt 161 177 \DoIt 161 179 \DoIt 161 181 \DoIt 161 183
+%D \DoIt 161 185 \DoIt 161 187 \DoIt 161 189 \DoIt 161 191 \DoIt 161 227
+%D \DoIt 161 228 \DoIt 161 229 \DoIt 163 161 \DoIt 163 162 \DoIt 163 167
+%D \DoIt 163 169 \DoIt 163 172 \DoIt 163 174 \DoIt 163 186 \DoIt 163 187
+%D \DoIt 163 190 \DoIt 163 191 \DoIt 163 221 \DoIt 163 253
+%D \stopcolumns
+%D
+%D A linebreak is not permitted after the following glyphs:
+%D
+%D \startcolumns[n=5]
+%D \DoIt 161 174 \DoIt 161 176 \DoIt 161 178 \DoIt 161 180 \DoIt 161 182
+%D \DoIt 161 184 \DoIt 161 186 \DoIt 161 188 \DoIt 161 190 \DoIt 163 168
+%D \DoIt 163 219 \DoIt 163 224 \DoIt 163 251
+%D \stopcolumns
+
+%D \macros
+%D   {tracechinesetrue, showchinesetracelegend}
+%D
+%D When we say \type {\tracechinesetrue}, we get some
+%D insight in the way \CONTEXT\ handles the Chinese glyphs.
+%D The symbols and color used represent:
+%D
+%D \showchinesetracelegend
+
+\newif\iftracechinese
+
+\def\showchinesetracelegend
+  {\definetabulate[\s!dummy][|c|l|l|l|]%
+   \startdummy
+     \HL
+     \NC \bf key \NC \bf meaning        \NC \bf glyph              \NC \bf keys  \NC\NR
+     \HL
+     \NC u \NC unknown character type   \NC \color[green]{current} \NC u l r     \NC\NR
+     \NC l \NC left boundary character  \NC \color[red]{previous}  \NC u l r c n \NC\NR
+     \NC r \NC right boundary character \NC \color[blue]{next}     \NC u l r s   \NC\NR
+     \NC c \NC chinese character        \NC                        \NC           \NC\NR
+     \NC s \NC following space          \NC                        \NC           \NC\NR
+     \NC n \NC no preceding space       \NC                        \NC           \NC\NR
+     \HL
+   \stopdummy}
+
+\def\tracedchineseglyph
+  {\dontleavehmode
+   \ruledhbox
+     {\setbox\scratchbox\hbox{\insertunicodeglyph}%
+      \hbox to \wd\scratchbox
+        {\localcolortrue
+         \copy\scratchbox
+         \infofont
+         \hskip-\wd\scratchbox
+         \hbox to \wd\scratchbox
+           {\hss
+            \color[green]{\ifcase\chineseSstatus\relax u\or l\or r\fi}%
+            \hss}%
+         \hskip-\wd\scratchbox
+         \lower\dp\scratchbox\hbox to \wd\scratchbox
+           {\hss
+            \color[red]{\ifcase\chineseBstatus\relax u\or l\or r\or c\or n\fi}%
+            \hss
+            \color[blue]{\ifcase\chineseAstatus\relax u\or l\or r\or s\fi}%
+            \hss}}}}
+
+%D The following example shows how tracing works.
+%D
+%D \start \tracechinesetrue
+%D \xD4\xDA\xD5\xE2һ\xB4θ\xFC\xD0\xC2\xD6\xD0\xCE\xD2\xC3ǽ\xAB\xBD\xE9\xC9ܶ\xD4\xD6\xD0\xCEĵ\xC4֧\xB3\xD6\xA1\xA3\xB5\xB1\xB1\xBE\xCEĵ\xC4\xD6\xD0\xCE\xC4\xD2\xEB\xD5\xDF\xCD\xF5\xC0\xDA
+%D ѯ\xCE\xCA\xCE\xD2 \nochinese{\CONTEXT} \xCAǷ\xF1\xC4ܴ\xA6\xC0\xED\xBA\xBA\xD3\xEFʱ\xA3\xAC\xCB\xFB\xD2Ѿ\xAD\xB3\xA2\xCAԹ\xFD
+%D \xD4\xCB\xD0\xD0\xCF\xD6\xD3еĺ꼯\xA3\xAC\xB5\xAB\xCA\xC7û\xD3еõ\xBD\xBD\xE1\xB9\xFB\xA1\xA3\xD5\xE2\xD2\xE2ζ\xD7Ŷ\xD4\xD6\xD0\xCEĵ\xC4֧\xB3\xD6\xBB\xB9û
+%D \xD3\xD0ʵ\xCF֡\xA3
+%D
+%D \xD4\xDA\xD5\xE2һ(\xB4θ\xFC\xD0\xC2)\xD6\xD0\xCE\xD2\xC3\xC7 (\xBD\xAB\xBD\xE9) \xC9ܶ\xD4\xD6\xD0\xCEĵ\xC4֧\xB3\xD6\xA1\xA3\xB5\xB1\xB1\xBE\xCEĵ\xC4\xD6\xD0\xCE\xC4\xD2\xEB,
+%D \xD5\xDF\xCD\xF5\xC0\xDAѯ\xCE\xCA\xCE\xD2\nochinese{\CONTEXT}\xCAǷ\xF1\xC4ܴ\xA6\xC0\xED\xBA\xBA\xD3\xEFʱ\xA3\xAC\xCB\xFB\xD2Ѿ\xAD\xB3\xA2
+%D \xCAԹ\xFD\xD4\xCB\xD0\xD0\xCF\xD6\xD3еĺ꼯\xA3\xAC\xB5\xAB\xCA\xC7û\xD3еõ\xBD\xBD\xE1\xB9\xFB\xA1\xA3\xD5\xE2\xD2\xE2ζ\xD7Ŷ\xD4\xD6\xD0\xCEĵ\xC4֧\xB3\xD6
+%D \xBB\xB9û\xD3\xD0ʵ\xCF֡\xA3.
+%D \stop
+
+%D Because fonts are defined each time a \UNICODE\ is
+%D encountered |<|which is less inefficient than one would
+%D imagine, because \TEX\ is optimized quite well in this
+%D repect|>| we can define macros like this to take care of
+%D font switches. When available, one can add definitions
+%D for italic, slanted, bold fonts and combinations of these.
+
+%D \macros
+%D   {chinesenumber}
+%D
+%D The chinese numbering systems rather straightforward. First
+%D there are the digits:
+%D
+%D \starttabulate[|c|c|c|c|c|c|c|c|c|c|]
+%D \NC 0 \NC 1 \NC 2 \NC 3 \NC 4 \NC 5 \NC 6 \NC 7 \NC 8 \NC 9 \NC\NR
+%D \NC \chinesenumber{0} \NC \chinesenumber{1} \NC \chinesenumber{2}
+%D \NC \chinesenumber{3} \NC \chinesenumber{4} \NC \chinesenumber{5}
+%D \NC \chinesenumber{6} \NC \chinesenumber{7} \NC \chinesenumber{8}
+%D \NC \chinesenumber{9} \NC\NR
+%D \stoptabulate
+%D
+%D Apart from these numbers, we have dedicated representations
+%D of some powers of~$10$.
+%D
+%D \starttabulate[|c|c|c|c|c|]
+%D \NC 10 \NC 100 \NC 1000 \NC 10000 \NC 100000000 \NC\NR
+%D \NC \chinesenumber{10} \NC \chinesenumber{100}
+%D \NC \chinesenumber{1000} \NC \chinesenumber{10000}
+%D \NC \chinesenumber{100000000} \NC\NR
+%D \stoptabulate
+%D
+%D The number~12 is a combination of $1\times10+2$, or:
+%D \chinesenumber {12}, while~22 becomes \chinesenumber {22}.
+%D The numbers below 20 are treated a bit different, just like
+%D numbers with series of $0$'s. So $2\times10$ comes out as
+%D two glyphs, but $1\times10$ as one, because in the latter
+%D case the~$1$ is redundant. The same is true for the powers
+%D of~10.
+%D
+%D \starttabulate[|r|r|r|r|r|r|]
+%D \NC     1 \NC \chinesenumber     {1} \NC
+%D         9 \NC \chinesenumber     {9} \NC
+%D         4 \NC \chinesenumber     {4} \NC\NR
+%D \NC    11 \NC \chinesenumber    {11} \NC
+%D        99 \NC \chinesenumber    {99} \NC
+%D        16 \NC \chinesenumber    {16} \NC\NR
+%D \NC   111 \NC \chinesenumber   {111} \NC
+%D       999 \NC \chinesenumber   {999} \NC
+%D       256 \NC \chinesenumber   {256} \NC\NR
+%D \NC  1111 \NC \chinesenumber  {1111} \NC
+%D      9999 \NC \chinesenumber  {9999} \NC
+%D     65536 \NC \chinesenumber {65536} \NC\NR
+%D \stoptabulate
+%D
+%D The implementation is rather simple. For internal purposes,
+%D we let zero expand to~0. The digits $0-9$ and numbers $10$,
+%D $100$, $1000$, $10000$ and $100000000$ are hard coded.
+
+% This was the first implementation, before \WangLei\ asked
+% me to look into Big Five encoding, so, like everthing in
+% \TEX, things become a bit more complicated, but also more
+% versatile.
+%
+% \starttypen
+% \def\chinesedigit#1%
+%   {\ifnum      #1=100000000 \uchar{210}{218}% 100000000
+%    \else\ifnum #1=10000     \uchar{205}{242}% 10000
+%    \else\ifnum #1=1000      \uchar{199}{167}% 1000
+%    \else\ifnum #1=100       \uchar{176}{217}% 100
+%    \else\ifnum #1=10        \uchar{202}{174}% 10
+%    \else\ifcase#1           \uchar{193}{227}% 0
+%    \or                      \uchar{210}{187}% 1
+%    \or                      \uchar{182}{254}% 2
+%    \or                      \uchar{200}{253}% 3
+%    \or                      \uchar{203}{196}% 4
+%    \or                      \uchar{206}{229}% 5
+%    \or                      \uchar{193}{249}% 6
+%    \or                      \uchar{198}{223}% 7
+%    \or                      \uchar{176}{203}% 8
+%    \or                      \uchar{190}{197}% 9
+%    \fi\fi\fi\fi\fi\fi}
+% \stoptypen
+
+%D We will implement four methods, the one described earlier,
+%D a derived one with capitalized characters, an extended
+%D version of the first method, and a rather Arabic method.
+%D
+%D \starttabulate[|l|l|]
+%D \HL
+%D \NC \bf command                      \NC \bf number 39                 \NC\NR
+%D \HL
+%D \NC \type{\normalchinesenumber}      \NC \normalchinesenumber     {39} \NC\NR
+%D \NC \type{\capitalizedchinesenumber} \NC \capitalizedchinesenumber{39} \NC\NR
+%D \NC \type{\arabicchinesenumber}      \NC \arabicchinesenumber     {39} \NC\NR
+%D \NC \type{\extendedchinesenumber}    \NC \extendedchinesenumber   {39} \NC\NR
+%D \HL
+%D \stoptabulate
+%D
+%D We use a dirty trick to enable Chinese Capital Digits. In
+%D the encoding vectors, we define these by appending a suffix
+%D \type {*} to the digit, which in the following macro is
+%D appended or not (by passing \type {\empty}).
+
+\def\chinesedigit#1#2% #2: suffix, here * or \empty
+  {\udigit{\chineseencoding}{\number#1#2}}
+
+% Normal Chinese Number
+
+\def\normalchinesenumber#1%
+  {\expandafter\dochinesenumber\number#1\relax\empty}
+
+\def\dochinesenumber#1#2\relax#3%
+  {\ifnum#1#2<10 % 1-10
+     \chinesedigit{#1}#3%
+   \else\ifnum#1#2<20 % 11-99
+     \chinesedigit{10}#3%
+     \dodochinesenumberA#2\relax#3%
+   \else
+     \dodochinesenumber#1#2\relax#3%
+   \fi\fi}
+
+\def\dodochinesenumber#1#2\relax#3%
+  {\ifnum#1=0
+     \chinesedigit{0}#3%
+     \dododochinesenumber0#2\relax#3%
+   \else\ifnum#1#2<10 % 1-10
+     \chinesedigit{#1#2}#3%
+     \dodochinesenumberA#2\relax#3%
+   \else\ifnum#1#2<100 % 11-99
+     \dodochinesenumber#1\relax#3%
+     \chinesedigit{10}#3%
+     \dodochinesenumberA#2\relax#3%
+   \else\ifnum#1#2<1000 % 100-999
+     \dodochinesenumber#1\relax#3%
+     \chinesedigit{100}#3%
+     \dodochinesenumberA#2\relax#3%
+   \else\ifnum#1#2<10000 % 1000-9999
+     \dodochinesenumber#1\relax#3%
+     \chinesedigit{1000}#3%
+     \dodochinesenumberA#2\relax#3%
+   \else\ifnum#1#2<100000 % 10000-99999
+     \dodochinesenumber#1\relax#3%
+     \chinesedigit{10000}#3%
+     \dodochinesenumberA#2\relax#3%
+   \else\ifnum#1#2<1000000 % 100000-999999
+     \dodochinesenumberB#1#2\relax#3%
+   \else\ifnum#1#2<10000000 % 1000000-9999999
+     \dodochinesenumberC#1#2\relax#3%
+   \else\ifnum#1#2<100000000 % 10000000-99999999
+     \dodochinesenumberD#1#2\relax#3%
+   \else\ifnum#1#2<1000000000 % 10000000-99999999
+     \dochinesenumber#1\relax#3%
+     \chinesedigit{100000000}#3%
+     \dododochinesenumber#2\relax#3%
+   \else
+     \dodochinesenumberE#1#2\relax#3%
+   \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+\def\dododochinesenumber#1#2\relax#3%
+  {\ifnum#1=0
+     \ifnum0#2>0 \dododochinesenumber#2\relax#3\fi
+   \else
+     \dodochinesenumber#1#2\relax#3%
+   \fi}
+
+\def\dodochinesenumberA#1\relax#2%
+  {\ifcase0#1 \else\dodochinesenumber#1\relax#2\fi}
+
+\def\dodochinesenumberB#1#2#3\relax#4%
+  {\dochinesenumber#1#2\relax#4%
+   \chinesedigit{10000}#4%
+   \dododochinesenumber#3\relax#4}
+
+\def\dodochinesenumberC#1#2#3#4\relax#5%
+  {\dochinesenumber#1#2#3\relax#5%
+   \chinesedigit{10000}#5%
+   \dododochinesenumber#4\relax#5}
+
+\def\dodochinesenumberD#1#2#3#4#5\relax#6%
+  {\dochinesenumber#1#2#3#4\relax#6%
+   \chinesedigit{10000}#6%
+   \dododochinesenumber#5\relax#6}
+
+\def\dodochinesenumberE#1#2#3\relax#4%
+  {\dochinesenumber#1#2\relax#4%
+   \chinesedigit{100000000}#4%
+   \dododochinesenumber#3\relax#4}
+
+% Capitalized Chinese Number
+
+\def\capitalizedchinesenumber#1%
+  {\expandafter\dochinesenumber\number#1\relax*}
+
+% Extended Chinese Number
+
+\def\extendedchinesenumber#1%
+  {\expandafter\doextendedchinesenumber\number#1\relax}
+
+\def\doextendedchinesenumber#1#2\relax%
+  {\ifnum     #1#2<20 %  0-19
+     \dochinesenumber#1#2\relax\empty
+   \else\ifnum#1#2<30 % 20-29
+     \chinesedigit{20}\empty
+     \ifcase#2\else\chinesedigit{2#2}\fi
+   \else\ifnum#1#2<40 % 30-39
+     \chinesedigit{30}\empty
+     \ifcase#2\else\chinesedigit{3#2}\fi
+   \else
+     \dochinesenumber#1#2\relax\empty
+   \fi\fi\fi}
+
+% Arabic Chinese Number
+
+\def\arabicchinesenumber#1%
+  {\expandafter\doarabicchinesenumber\number#1@\relax}
+
+\def\doarabicchinesenumber#1#2\relax
+  {\if#1@\else
+     \chinesedigit{#1}\empty
+     \doarabicchinesenumber#2\relax
+   \fi}
+
+% The short call:
+
+\def\chinesenumber{\normalchinesenumber}
+
+% \dorecurse{40}
+%   {\hbox
+%      {\processingverbatimtrue
+%       \hbox to 1cm{\hss\recurselevel}\quad
+%       \hbox to 3cm{\hss\strut\normalchinesenumber     {\recurselevel}}\quad
+%       \hbox to 3cm{\hss\strut\capitalizedchinesenumber{\recurselevel}}\quad
+%       \hbox to 3cm{\hss\strut\arabicchinesenumber     {\recurselevel}}\quad
+%       \hbox to 3cm{\hss\strut\extendedchinesenumber   {\recurselevel}}\crlf}}
+
+%D The next table demonstates the correctness of the
+%D conversion macro.
+%D
+%D \startbuffer
+%D \starttable[|l|l|l|l|l|l|]
+%D \HL
+%D \NC number     \NC converter                  \NC hard coded \NC
+%D     number     \NC converter                  \NC hard coded\NC \SR
+%D \HL
+%D \NC 1          \NC \chinesenumber{1}          \NC һ \NC
+%D     0          \NC \chinesenumber{0}          \NC \xC1\xE3 \NC\FR
+%D \NC 11         \NC \chinesenumber{11}         \NC ʮһ \NC
+%D     10         \NC \chinesenumber{10}         \NC ʮ  \NC\MR
+%D \NC 111        \NC \chinesenumber{111}        \NC һ\xB0\xD9һʮһ \NC
+%D     100        \NC \chinesenumber{100}        \NC һ\xB0\xD9 \NC\MR
+%D \NC 101        \NC \chinesenumber{101}        \NC һ\xB0\xD9\xC1\xE3һ \NC
+%D     120        \NC \chinesenumber{120}        \NC һ\xB0ٶ\xFEʮ \NC\MR
+%D \NC 1111       \NC \chinesenumber{1111}       \NC һǧһ\xB0\xD9һʮһ \NC
+%D     1000       \NC \chinesenumber{1000}       \NC һǧ \NC\MR
+%D \NC 1001       \NC \chinesenumber{1001}       \NC һǧ\xC1\xE3һ \NC
+%D     1020       \NC \chinesenumber{1020}       \NC һǧ\xC1\xE3\xB6\xFEʮ \NC\MR
+%D \NC 11111      \NC \chinesenumber{11111}      \NC һ\xCD\xF2һǧһ\xB0\xD9һʮһ \NC
+%D     10000      \NC \chinesenumber{10000}      \NC һ\xCD\xF2 \NC\MR
+%D \NC 10001      \NC \chinesenumber{10001}      \NC һ\xCD\xF2\xC1\xE3һ \NC
+%D     10200      \NC \chinesenumber{10200}      \NC һ\xCD\xF2\xC1\xE3\xB6\xFE\xB0\xD9 \NC\LR
+%D \HL
+%D \NC 111111     \NC \chinesenumber{111111}     \NC ʮһ\xCD\xF2һǧһ\xB0\xD9һʮһ \NC
+%D     100000     \NC \chinesenumber{100000}     \NC ʮ\xCD\xF2 \NC\FR
+%D \NC 1111111    \NC \chinesenumber{1111111}    \NC һ\xB0\xD9һʮһ\xCD\xF2һǧһ\xB0\xD9һʮһ \NC
+%D     1000000    \NC \chinesenumber{1000000}    \NC һ\xB0\xD9\xCD\xF2 \NC\MR
+%D \NC 11111111   \NC \chinesenumber{11111111}   \NC һǧһ\xB0\xD9һʮһ\xCD\xF2һǧһ\xB0\xD9һʮһ \NC
+%D     10000000   \NC \chinesenumber{10000000}   \NC һǧ\xCD\xF2 \NC\MR
+%D \NC 111111111  \NC \chinesenumber{111111111}  \NC һ\xD2\xDAһǧһ\xB0\xD9һʮһ\xCD\xF2һǧһ\xB0\xD9һʮһ \NC
+%D     100000000  \NC \chinesenumber{100000000}  \NC һ\xD2\xDA \NC\MR
+%D \NC 1111111111 \NC \chinesenumber{1111111111} \NC ʮһ\xD2\xDAһǧһ\xB0\xD9һʮһ\xCD\xF2һǧһ\xB0\xD9һʮһ \NC
+%D     1000000000 \NC \chinesenumber{1000000000} \NC ʮ\xD2\xDA \NC\LR
+%D \HL
+%D \stoptable
+%D \stopbuffer
+%D
+%D \placetable{Some Chinese number examples.}{\getbuffer}
+
+%D Although the conversion can be hooked into most commands
+%D that deal with numbers |<|those familiar with \TEX\ macro
+%D programming will notice that the macro if fully
+%D expandable|>| in many cases Chinese documents use western
+%D digits. So, in practice, the change that the next example
+%D shows up, is minimal.
+%D
+%D \starttabulate[|r|r|c|]
+%D \NC  2546 \NC \chinesenumber  {2546} \NC     \NC\NR
+%D \NC  9258 \NC \chinesenumber  {9258} \NC $+$ \NC\NR
+%D \HL
+%D \NC 11804 \NC \chinesenumber {11804} \NC     \NC\NR
+%D \stoptabulate
+%D
+%D While in arabic arithmics addition leads to more digits, in
+%D Chinese the number of glyphs can (temporary) decrease.
+%D Given that the number of people dealing with Chinese is
+%D considerably larger than the number of latin speaking
+%D people, a successor of \TEX\ definitely must provide a
+%D \type {\chinesenumeral} primitive.
+
+\defineconversion [c]                  [\normalchinesenumber]
+\defineconversion [chinese]            [\normalchinesenumber]
+\defineconversion [nc]                 [\normalchinesenumber]
+\defineconversion [normalchinese]      [\normalchinesenumber]
+\defineconversion [cc]                 [\capitalizedchinesenumber]
+\defineconversion [capitalizedchinese] [\capitalizedchinesenumber]
+\defineconversion [ec]                 [\extendedchinesenumber]
+\defineconversion [extendedchinese]    [\extendedchinesenumber]
+\defineconversion [ac]                 [\arabicchinesenumber]
+\defineconversion [arabicchinese]      [\arabicchinesenumber]
+
+%D Date conversion:
+
+\defineconversion [cn] [\v!day]   [\chinesenumber]
+\defineconversion [cn] [\v!month] [\chinesenumber]
+\defineconversion [cn] [\v!year]  [\chinesenumber]
+
+%D \macros
+%D   {SimChi, TraChi}
+%D
+%D These components enable us to construct dedicated Chinese
+%D font switches, like:
+
+\setupunicodefont
+  [chinese]
+  [       \c!scale=\chineseunicodescale,
+         \c!height=\chineseunicodeheight,
+          \c!depth=\chineseunicodedepth,
+          \c!strut=\v!yes,
+ \c!interlinespace=\v!yes,
+     \c!conversion=\chinesenumber,
+       \c!commands=\setchineseencoding, % needed for digits
+        \c!command=\handlechineseunicodeglyph]
+
+%D For the moment, this encoding is implemented rather ugly. The
+%D trick is to move the encoding value from the current font
+%D definition to the \type {\chineseencoding} macro.
+
+\let\chineseencoding\empty
+
+\def\setchineseencoding % normally SomeChineseRegular
+  {\getfontfileparameters\unicodestyle
+   \ifx\currentfontfileencoding\undefined \else
+     \let\chineseencoding\currentfontfileencoding
+   \fi}
+
+%D We could have said:
+%D
+%D \starttyping
+%D \defineunicodefont
+%D   [SimChi]
+%D   [SimplifiedChinese]
+%D   [\c!scale=\chineseunicodescale,
+%D    \c!height=\chineseunicodeheight,
+%D    \c!depth=\chineseunicodedepth,
+%D    \c!conversion=\chinesenumber,
+%D    \c!commands=\setchineseencoding, % needed for digits
+%D    \c!command=\handlechineseunicodeglyph]
+%D \stoptyping
+%D
+%D However, the former definitions is more general. Next we
+%D map a few fonts:
+
+\definefontsynonym [SimplifiedChineseRegular]      [gbsong]   [encoding=gbk]
+\definefontsynonym [SimplifiedChineseSlanted]      [gbsongsl] [encoding=gbk]
+\definefontsynonym [SimplifiedChineseItalic]       [gbsongsl] [encoding=gbk]
+\definefontsynonym [SimplifiedChineseBold]         [gbhei]    [encoding=gbk]
+\definefontsynonym [SimplifiedChineseBoldSlanted]  [gbheisl]  [encoding=gbk]
+\definefontsynonym [SimplifiedChineseBoldItalic]   [gbheisl]  [encoding=gbk]
+
+\definefontsynonym [TraditionalChineseRegular]     [b5song]   [encoding=big5]
+\definefontsynonym [TraditionalChineseSlanted]     [b5songsl] [encoding=big5]
+\definefontsynonym [TraditionalChineseItalic]      [b5songsl] [encoding=big5]
+\definefontsynonym [TraditionalChineseBold]        [b5hei]    [encoding=big5]
+\definefontsynonym [TraditionalChineseBoldSlanted] [b5heisl]  [encoding=big5]
+\definefontsynonym [TraditionalChineseBoldItalic]  [b5heisl]  [encoding=big5]
+
+% we need to move this to typescripts
+
+\doifelse \currentregime {utf} {
+
+    \definefontsynonym [SimplifiedChineseRegular]     [ChineseRegular]
+    \definefontsynonym [SimplifiedChineseSlanted]     [ChineseSlanted]
+    \definefontsynonym [SimplifiedChineseItalic]      [ChineseItalic]
+    \definefontsynonym [SimplifiedChineseBold]        [ChineseBold]
+    \definefontsynonym [SimplifiedChineseBoldSlanted] [ChineseBoldSlanted]
+    \definefontsynonym [SimplifiedChineseBoldItalic]  [ChineseBoldItalic]
+
+    \definefontsynonym [TraditionalChineseRegular]    [ChineseRegular]
+    \definefontsynonym [TraditionalChineseSlanted]    [ChineseSlanted]
+    \definefontsynonym [TraditionalChineseItalic]     [ChineseItalic]
+    \definefontsynonym [TraditionalChineseBold]       [ChineseBold]
+    \definefontsynonym [TraditionalChineseBoldSlanted][ChineseBoldSlanted]
+    \definefontsynonym [TraditionalChineseBoldItalic] [ChineseBoldItalic]
+
+    \definefontsynonym [ChineseRegular]    [uni-htsong-][encoding=cjk-uni]
+    \definefontsynonym [ChineseSlanted]    [uni-htsong-][encoding=cjk-uni]
+    \definefontsynonym [ChineseItalic]     [uni-htsong-][encoding=cjk-uni]
+    \definefontsynonym [ChineseBold]       [uni-hthei-] [encoding=cjk-uni]
+    \definefontsynonym [ChineseBoldSlanted][uni-hthei-] [encoding=cjk-uni]
+    \definefontsynonym [ChineseBoldItalic] [uni-hthei-] [encoding=cjk-uni]
+
+    \loadmapfile[uni-htsong.map]
+    \loadmapfile[uni-htfs.map]
+    \loadmapfile[uni-hthei.map]
+    \loadmapfile[uni-htkai.map]
+
+} {
+
+    \loadmapfile[gbk]
+
+}
+
+\defineunicodefont [SimChi] [SimplifiedChinese]  [chinese]
+\defineunicodefont [TraChi] [TraditionalChinese] [chinese]
+
+%D We default to these so called Simplified Chinese fonts.
+
+\SimChi
+
+%D In addition to these fonts, we (pre|)|define some commonly
+%D used fonts:
+
+\definefontsynonym [SimplifiedChineseSongTiRegular]        [gbsong]   [encoding=gbk]
+\definefontsynonym [SimplifiedChineseSongTiSlanted]        [gbsongsl] [encoding=gbk]
+\definefontsynonym [SimplifiedChineseSongTiBold]           [gbsong]   [encoding=gbk]
+\definefontsynonym [SimplifiedChineseSongTiBoldSlanted]    [gbsongsl] [encoding=gbk]
+
+\definefontsynonym [TraditionalChineseSongTiRegular]       [b5song]   [encoding=big5]
+\definefontsynonym [TraditionalChineseSongTiSlanted]       [b5songsl] [encoding=big5]
+\definefontsynonym [TraditionalChineseSongTiBold]          [b5song]   [encoding=big5]
+\definefontsynonym [TraditionalChineseSongTiBoldSlanted]   [b5songsl] [encoding=big5]
+
+\definefontsynonym [SimplifiedChineseHeiTiRegular]         [gbhei]    [encoding=gbk]
+\definefontsynonym [SimplifiedChineseHeiTiSlanted]         [gbheisl]  [encoding=gbk]
+\definefontsynonym [SimplifiedChineseHeiTiBold]            [gbhei]    [encoding=gbk]
+\definefontsynonym [SimplifiedChineseHeiTiBoldSlanted]     [gbheisl]  [encoding=gbk]
+
+\definefontsynonym [TraditionalChineseHeiTiRegular]        [b5hei]    [encoding=big5]
+\definefontsynonym [TraditionalChineseHeiTiSlanted]        [b5heisl]  [encoding=big5]
+\definefontsynonym [TraditionalChineseHeiTiBold]           [b5hei]    [encoding=big5]
+\definefontsynonym [TraditionalChineseHeiTiBoldSlanted]    [b5heisl]  [encoding=big5]
+
+\definefontsynonym [SimplifiedChineseKaiTiRegular]         [gbkai]    [encoding=gbk]
+\definefontsynonym [SimplifiedChineseKaiTiSlanted]         [gbkaisl]  [encoding=gbk]
+\definefontsynonym [SimplifiedChineseKaiTiBold]            [gbkai]    [encoding=gbk]
+\definefontsynonym [SimplifiedChineseKaiTiBoldSlanted]     [gbkaisl]  [encoding=gbk]
+
+\definefontsynonym [TraditionalChineseKaiTiRegular]        [b5kai]    [encoding=big5]
+\definefontsynonym [TraditionalChineseKaiTiSlanted]        [b5kaisl]  [encoding=big5]
+\definefontsynonym [TraditionalChineseKaiTiBold]           [b5kai]    [encoding=big5]
+\definefontsynonym [TraditionalChineseKaiTiBoldSlanted]    [b5kaisl]  [encoding=big5]
+
+\definefontsynonym [SimplifiedChineseFangSongRegular]      [gbfs]     [encoding=gbk]
+\definefontsynonym [SimplifiedChineseFangSongSlanted]      [gbfssl]   [encoding=gbk]
+\definefontsynonym [SimplifiedChineseFangSongBold]         [gbfs]     [encoding=gbk]
+\definefontsynonym [SimplifiedChineseFangSongBoldSlanted]  [gbfssl]   [encoding=gbk]
+
+\definefontsynonym [TraditionalChineseFangSongRegular]     [b5fs]     [encoding=big5]
+\definefontsynonym [TraditionalChineseFangSongSlanted]     [b5fssl]   [encoding=big5]
+\definefontsynonym [TraditionalChineseFangSongBold]        [b5fs]     [encoding=big5]
+\definefontsynonym [TraditionalChineseFangSongBoldSlanted] [b5fssl]   [encoding=big5]
+
+\definefontsynonym [SimplifiedChineseLiShuRegular]         [gbli]     [encoding=gbk]
+\definefontsynonym [SimplifiedChineseLiShuSlanted]         [gblisl]   [encoding=gbk]
+\definefontsynonym [SimplifiedChineseLiShuBold]            [gbli]     [encoding=gbk]
+\definefontsynonym [SimplifiedChineseLiShuBoldSlanted]     [gblisl]   [encoding=gbk]
+
+\definefontsynonym [TraditionalChineseLiShuRegular]        [b5li]     [encoding=big5]
+\definefontsynonym [TraditionalChineseLiShuSlanted]        [b5lisl]   [encoding=big5]
+\definefontsynonym [TraditionalChineseLiShuBold]           [b5li]     [encoding=big5]
+\definefontsynonym [TraditionalChineseLiShuBoldSlanted]    [b5lisl]   [encoding=big5]
+
+%D The following definitions provide us the commands to switch
+%D to these fonts.
+
+\defineunicodefont [SimSongTi]   [SimplifiedChineseSongTi]    [chinese]
+\defineunicodefont [TraSongTi]   [TraditionalChineseSongTi]   [chinese]
+
+\defineunicodefont [SimHeiTi]    [SimplifiedChineseHeiTi]     [chinese]
+\defineunicodefont [TraHeiTi]    [TraditionalChineseHeiTi]    [chinese]
+
+\defineunicodefont [SimKaiTi]    [SimplifiedChineseKaiTi]     [chinese]
+\defineunicodefont [TraKaiTi]    [TraditionalChineseKaiTi]    [chinese]
+
+\defineunicodefont [SimFangSong] [SimplifiedChineseFangSong]  [chinese]
+\defineunicodefont [TraFangSong] [TraditionalChineseFangSong] [chinese]
+
+\defineunicodefont [SimLiShu]    [SimplifiedChineseLiShu]     [chinese]
+\defineunicodefont [TraLiShu]    [TraditionalChineseLiShu]    [chinese]
+
+% \definealternativestyle [ChineseTitleFont] [\bfd\SimKaiTi] []
+
+%D \macros
+%D   {purechinese}
+%D
+%D Use this macro to suppress spacing around Chinese text.
+
+\def\purechinese#1% evt geen rek
+  {\hskip\chineseSsignal\relax
+   #1\unskip\unskip\unskip
+   \hskip\chineseSsignal\relax}
+
+%D \macros
+%D   {stillchinese}
+%D
+%D Use the next macro when you want the next item to be put
+%D tight to the previous chinese character.
+
+\def\stillchinese
+  {\hskip\chineseSsignal\relax}
+
+%D \macros
+%D   {nochinese}
+%D
+%D When we want to be sure of non||Chinese inline text,
+%D we can package the for instance english text in \type
+%D {\nochinese}.
+
+\def\nochinese#1%
+  {\unskip\unskip\unskip
+   \hskip\chinesesurroundskip
+   \hskip\chineseinterglyphskip\relax
+   #1%
+   \hskip\chineseinterglyphskip\relax
+   \hskip\chinesesurroundskip
+   \ignorespaces}
+
+%D \macros
+%D   {chisize}
+%D
+%D Chinese font sizes are specified in a different way,
+%D using positive and negative numbers:
+
+\def\chisize#1%
+  {\ifnum#11<0 % a trick to catch -0
+     \ifcase#1\space36\or24\or18\or15\or12\or9\or\else6.5\fi
+   \else
+     \ifcase#1\space42\or26\or22\or16\or14\or10.5\or7.5\or5.5\else5\fi
+   \fi pt}
+
+%D So:
+%D
+%D \startbuffer
+%D [\chisize{-1}] [\chisize{7}] [\chisize{+4}]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D gives:
+%D
+%D \getbuffer
+%D
+%D The full range of sizes is:
+%D
+%D \starttabulate[|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|]
+%D \NC          8 \NC         7 \NC         -6 \NC         6 \NC
+%D             -5 \NC         5 \NC         -4 \NC         4 \NC
+%D             -3 \NC         3 \NC         -2 \NC         2 \NC
+%D             -1 \NC         1 \NC         -0 \NC         0 \NC\NR
+%D \NC\chisize {8}\NC\chisize{7}\NC\chisize{-6}\NC\chisize{6}\NC
+%D    \chisize{-5}\NC\chisize{5}\NC\chisize{-4}\NC\chisize{4}\NC
+%D    \chisize{-3}\NC\chisize{3}\NC\chisize{-2}\NC\chisize{2}\NC
+%D    \chisize{-1}\NC\chisize{1}\NC\chisize{-0}\NC\chisize{0}\NC\NR
+%D \stoptabulate
+
+%D Now it's time for some real Chinese. This example
+%D also shows that font switching is supported.
+%D
+%D \startnarrower
+%D \midaligned{\tfd ˮ\xB5\xF7\xB8\xE8ͷ}
+%D \blank
+%D \midaligned{\tfb \xB1\xFB\xB3\xBD\xD6\xD0\xC7\xBB\xB6\xD2\xFB\xB4ﵩ\xA3\xAC\xB4\xF3\xD7\xED\xD7\xF7\xB4\xCBƪ\xA3\xAC\xBC\xE6\xBB\xB3\xD7\xD3\xD3ɡ\xA3}
+%D \blank
+%D \midaligned{\tfb \xCB\xD5\xE9\xF8}
+%D \blank
+%D \xC3\xF7\xD4¼\xB8ʱ\xD3У\xBF\xB0Ѿ\xC6\xCE\xCA\xC7\xE0\xCC졣\xB2\xBB֪\xCC\xEC\xC9Ϲ\xAC\xE3ڣ\xAC\xBD\xF1Ϧ\xCAǺ\xCE\xC4ꣿ\xCE\xD2\xD3\xFB\xB3˷\xE7\xB9\xE9ȥ
+%D \xA3\xAC\xD3ֿ\xD6\xC7\xED¥\xD3\xF1\xD3\xB8\xDF\xB4\xA6\xB2\xBB\xCA\xA4\xBA\xAE\xA1\xA3\xC6\xF0\xCE\xE8Ū\xC7\xE5Ӱ\xA3\xAC\xBA\xCE\xCB\xC6\xD4\xDA\xC8˼䣿
+%D \blank
+%D ת\xD6\xEC\xB8󣬵ͻ\xA7\xA3\xAC\xD5\xD5\xCE\xDE\xC3ߡ\xA3\xB2\xBBӦ\xD3кޣ\xAC\xBA\xCE\xCA\xC2ƫ\xCF\xF2\xB1\xF0ʱԲ\xA3\xBF\xC8\xCB\xD3б\xAF\xBB\xB6\xC0\xEB\xBAϣ\xAC
+%D \xD4\xC2\xD3\xD0\xD2\xF5\xC7\xE7Բȱ\xA3\xAC\xB4\xCB\xCA¹\xC5\xC4\xD1ȫ\xA1\xA3\xB5\xABԸ\xC8˳\xA4\xBE\xC3\xA3\xACǧ\xC0ﹲ濾ꡣ
+%D \stopnarrower
+%D
+%D The english translation is:
+%D
+%D \startnarrower
+%D \midaligned{\tfd Tune: Prelude to the Melody of Water}
+%D \blank
+%D \midaligned{\tfb On the night of the Mid||Autumn Festival of
+%D 1076, I drank happily till dawn and wrote this in my cups
+%D while thinking of Zi||you.}
+%D \blank
+%D \midaligned{\tfb Su Shi}
+%D \blank
+%D How long will the bright moon appear? Wine||cup in hand, I
+%D ask the sky. I do not know waht time of year it would be
+%D tonight in the palace on high. Riding the wind, there I
+%D would fly, yet I fear the crystal palace would be far too
+%D high and cold for me. I rise and dance, with my shadow I
+%D play. On high as on earth, would it be as gay?
+%D \blank
+%D The moon goes round the mansion red though gauze||draped
+%D windows soft to shed her light upon the sleepless bed.
+%D Against man she should have no spite. Why then when people
+%D part is she oft full and bright? Men have sorrow and joy,
+%D they part or meet again; The moon may be bright or dim, she
+%D may wax or wane. There has been nothing perfect since the
+%D olden days. So let us wish that man will live long as he
+%D can! Though miles apart, we'll share the beauty she
+%D displays.
+%D \stopnarrower
+
+%D This package is written in the city of Hasselt, a pretty
+%D small town in the |<|compared to China real small|>|
+%D Netherlands. Like most dutch cities, even this small one
+%D has a chinese restaurant, run by chinese, speaking chinese,
+%D and |<|indeed|>| writing chinese. Eating there will never
+%D be the same, since now I can at least pretend to know the
+%D glyphs all around the place. The numbers should pose me no
+%D problems, but I fear I will never manage to recognize those
+%D scribles they draw on their pads when thay take your order.
+
+%D To make our lives more easy, we put it here (too):
+
+\setuptyping[\c!tab=\v!no]
+
+\protect \endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/font-heb.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/font-heb.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/font-heb.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,5 @@
+\unprotected \writestatus\m!systems{load ARABTEX as a module instead}
+
+\usemodule[arabtex]
+
+\endinput

Added: trunk/Master/texmf-dist/tex/context/base/mkii/font-ini.mkii
===================================================================
--- trunk/Master/texmf-dist/tex/context/base/mkii/font-ini.mkii	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/base/mkii/font-ini.mkii	2023-12-13 10:03:52 UTC (rev 69110)
@@ -0,0 +1,4452 @@
+%D \module
+%D   [       file=font-ini,
+%D        version=1998.09.11, % (second)
+%D        version=2001.02.20, % (third)
+%D          title=\CONTEXT\ Font Macros,
+%D       subtitle=Initialization,
+%D         author=Hans Hagen,
+%D           date=\currentdate,
+%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Font Macros / Initialization}
+
+\unprotect
+
+% \def\fontrange#1%
+%   {\dofontrange{#1 =\bodyfontsize}}
+%
+% \def\dofontrange#1%
+%   {\dodofontrange#1 \relax}% \fontstringA
+%
+% \def\dodofontrange#1 #2 %
+%   {\ifdim\bodyfontsize#2%
+%      #1\expandafter\gobbleuntilrelax
+%    \else
+%      \expandafter\dodofontrange
+%    \fi}
+%
+% \definefont
+%   [crap]
+%   [\fontrange
+%      {Regular        <10pt
+%       RegularBold    <12pt
+%       RegularSlanted <15pt
+%       Regular} sa 1]
+%
+% may be better:
+%
+% \definefontrange
+%   [crap]
+%   [Regular        <10pt
+%    RegularBold    <12pt
+%    RegularSlanted <15pt]
+%   [Regular sa 1]
+%
+%
+% \dostepwiserecurse{2}{15}{1}
+%   {{\switchtobodyfont[\recurselevel pt]\crap test}\endgraf}
+

+% adapted, else wrong interlinespace
+
+\def\setfontparameters
+  {\synchronizefontsfalse
+   \the\everybodyfont
+   \synchronizefontstrue}
+

+% handy
+
+\newcounter\pushedfont
+
+\def\savefont
+  {\edef\savedfont{\the\font}%
+   \pushmacro\savedfont
+   \pushmacro\currentregime
+   \pushmacro\charactermapping
+   \pushmacro\characterencoding}
+
+\def\restorefont
+  {\popmacro\characterencoding
+   \popmacro\charactermapping
+   \popmacro\currentregime
+   \popmacro\savedfont
+   \savedfont}
+
+\def\pushcurrentfont
+  {\edef\popcurrentfont
+     {\noexpand\def\noexpand\fontbody{\fontbody}%
+      \noexpand\def\noexpand\fontstyle{\fontstyle}%
+      \noexpand\dosetcurrentfontalternative{\fontalternative}%
+      \noexpand\dosetcurrentfontsize{\fontsize}%
+      \noexpand\synchronizefont}}
+
+% \definetypeface[one][rm][serif][computer-roman][default]
+% \definetypeface[two][rm][serif][computer-roman][default][rscale=.9]
+%
+% {\one \bf test \two test}
+% {\one \bf test \pushcurrentfont \two \popcurrentfont test}
+

+%D \macros
+%D   {definedfont,startfont,doiffontcharelse}
+%D
+%D A couple of relatively new macros:
+
+\newevery \everydefinedfont \relax
+
+\def\dodefinedfont[#1]%
+  {\iffirstargument\definefont[\string\thedefinedfont][#1]\fi
+   \csname\string\thedefinedfont\endcsname % can be \relax
+   \the\everydefinedfont} % hm, redundant
+
+\unexpanded\def\definedfont
+  {\dosingleempty\dodefinedfont}
+
+\unexpanded\def\startfont
+  {\bgroup\definedfont}
+
+\def\stopfont
+  {\egroup}
+
+\def\doiffontcharelse#1#2%
+  {\bgroup
+   \definedfont[#1]%
+   \iffontchar\font#2\relax
+     \egroup\expandafter\firstoftwoarguments
+   \else
+     \egroup\expandafter\secondoftwoarguments
+   \fi}
+

+%%% message 14 added
+
+% messages moved
+
+% messages moved
+
+% messages moved
+
+% messages moved
+
+% messages moved
+
+% messages moved
+
+% messages moved
+
+% messages moved
+
+%D This module is one of the oldest modules of \CONTEXT. The
+%D macros below evolved out of the \PLAIN\ \TEX\ macros and
+%D therefore use a similar naming scheme (\type{\rm},
+%D \type{\bf}, etc). This module grew out of our needs. We
+%D started with the \PLAIN\ \TEX\ definitions, generalized the
+%D underlaying macros, and extended those to a level at which
+%D probably no one will ever recognize them.
+%D
+%D In 2001 we ran into a couple of projects where more than
+%D one combined set of fonts was involved in a document. To
+%D make definitions more readable, as well as to overcome the
+%D problem of ever growing file name lists, and also because
+%D we needed to scale fonts relative to each other, the low
+%D level implementation was partly rewritten. Global
+%D font assignments, relative scaling, font classes and alike
+%D were added then. At the same time some macros were made a
+%D bit more readable, and math support was extended to the
+%D larger sizes.
+%D
+%D One important characteristic of the font mechanism presented
+%D here is the postponing of font loading. This makes it
+%D possible to distribute \type{fmt} files without bothering
+%D about the specific breed of \type{tfm} files.
+%D
+%D Another feature implemented here is the massive switching
+%D from roman to {\ss sans serif}, {\tt teletype} or else. This
+%D means one doesn't have to take care of all kind of relations
+%D between fonts.
+%D
+%D \page[bigpreference]
+
+%D \macros
+%D   {rm,ss,tt,hw,cg}
+%D
+%D Fonts are defined in separate files. When we define a font,
+%D we distinguish between several styles. In most cases we will
+%D use:
+%D
+%D \startlinecorrection
+%D \starttable[|l||]
+%D \HL
+%D \NC roman regular serif    \NC \type{\rm} \NC\FR
+%D \NC sansserif sans support \NC \type{\ss} \NC\MR
+%D \NC type teletype mono     \NC \type{\tt} \NC\LR
+%D \HL
+%D \stoptable
+%D \stoplinecorrection
+%D
+%D The number of styles is not limited to these three. When
+%D using Lucida Bright we can for instance also define:
+%D
+%D \startlinecorrection
+%D \starttable[|l||]
+%D \HL
+%D \NC handwritten  \NC \type{\hw} \NC\FR
+%D \NC calligraphic \NC \type{\cg} \NC\LR
+%D \HL
+%D \stoptable
+%D \stoplinecorrection
+%D
+%D Anyone who feels the need, can define additional ones, like
+%D
+%D \startlinecorrection
+%D \starttable[|l||]
+%D \HL
+%D \NC faxfont    \NC \type{\ff} \NC\FR
+%D \NC blackboard \NC \type{\bb} \NC\LR
+%D \HL
+%D \stoptable
+%D \stoplinecorrection
+%D
+%D Or even
+%D
+%D \startlinecorrection
+%D \starttable[|l||]
+%D \HL
+%D \NC hebrew \NC \type{\hb} \NC\SR
+%D \HL
+%D \stoptable
+%D \stoplinecorrection
+%D
+%D Styles are grouped in font sets. At the moment there are
+%D three main sets defined:
+%D
+%D \startlinecorrection
+%D \starttable[|l|l||]
+%D \HL
+%D \NC Computer Modern Roman     \NC Knuth             \NC \type{cmr} \NC\FR
+%D \NC Lucida Bright             \NC Bigelow \& Holmes \NC \type{lbr} \NC\MR
+%D \NC Standard Postscript Fonts \NC Adobe             \NC \type{pos} \NC\LR
+%D \HL
+%D \stoptable
+%D \stoplinecorrection
+%D
+%D There are also some Computer Modern Roman alternatives:
+%D
+%D \startlinecorrection
+%D \starttable[|l|l||]
+%D \HL
+%D \NC Computer Modern Roman    \NC Knuth \& Sauter \NC \type{sau} \NC\FR
+%D \NC Euler fonts              \NC Zapf            \NC \type{eul} \NC\MR
+%D \NC Computer Modern Concrete \NC Knuth \& Zapf   \NC \type{con} \NC\LR
+%D \HL
+%D \stoptable
+%D \stoplinecorrection
+%D
+%D All these definitions are ordered in files with names like
+%D \type{font-cmr} and \type{font-pos}, where the last three
+%D characters specify the name as known to \CONTEXT.
+%D
+%D Within such a font set (\type{cmr}) and style (\type{\rm})
+%D we can define a number of text font alternatives:
+%D
+%D \startlinecorrection
+%D \starttable[|l||]
+%D \HL
+%D \NC typeface    \NC \type{\tf} \NC\FR
+%D \NC boldface    \NC \type{\bf} \NC\MR
+%D \NC slanted     \NC \type{\sl} \NC\MR
+%D \NC italic      \NC \type{\it} \NC\MR
+%D \NC boldslanted \NC \type{\bs} \NC\MR
+%D \NC bolditalic  \NC \type{\bi} \NC\MR
+%D \NC smallcaps   \NC \type{\sc} \NC\LR
+%D \HL
+%D \stoptable
+%D \stoplinecorrection
+
+%D For old stylish Frans Goddijn we have:
+%D
+%D \startlinecorrection
+%D \starttable[|l||]
+%D \HL
+%D \NC oldstyle \NC \type{\os} \NC\SR
+%D \HL
+%D \stoptable
+%D \stoplinecorrection
+%D
+%D The availability of these alternatives depends on the
+%D completeness of a font family and of course the definitions
+%D in the font files.
+%D
+%D But let's not forget math. In addition to the previous \TEX\
+%D families (the mysterious \type{\fam}'s) we've got some more:
+%D
+%D \startlinecorrection
+%D \starttable[|l||]
+%D \HL
+%D \NC Math Roman  \NC \type{\mr} \NC\FR
+%D \NC Math Italic \NC \type{\mi} \NC\MR
+%D \NC Math Symbol \NC \type{\sy} \NC\MR
+%D \NC Math Extra  \NC \type{\ex} \NC\MR
+%D \NC Math A      \NC \type{\ma} \NC\MR
+%D \NC Math B      \NC \type{\mb} \NC\MR
+%D \NC Math C      \NC \type{\mc} \NC\LR
+%D \HL
+%D \stoptable
+%D \stoplinecorrection
+%D
+%D Users can call for specific fonts in many ways. Switches to
+%D other typefaces, like the switch from normal to bold, are as
+%D intuitive as possible, which means that all dependant fonts
+%D also switch. One can imagine that this takes quite some
+%D processing time.
+%D
+%D Internally fonts are stored as combination of size, style
+%D and alternative, e.g. \type{12pt}+\type{\ss}+\type{\bf}.
+%D Users are not confronted with sizes, but use the style or
+%D style+alternative to activate them.
+%D
+%D During the definition of a bodyfont one can also declare the
+%D available larger alternatives:
+%D
+%D \starttyping
+%D \tf \tfa \tfb \tfc ...
+%D \bf \bfa \bfb \bfc ...
+%D \sl \sla \slb \slc ...
+%D \stoptyping
+%D
+%D The smaller ones are automatically supplied and derived from
+%D the the bodyfont environment.
+%D
+%D \starttyping
+%D \tfx \tfxx
+%D \bfx \bfxx
+%D \slx \slxx
+%D \stoptyping
+%D
+%D There are only two smaller alternatives per style. The
+%D larger alternatives on the other hand have no limitations.
+%D
+%D These larger alternatives are mostly used in chapter and
+%D section titles or on title pages. When one switches to a
+%D larger alternative, the bold an other ones automatically
+%D adapt themselves:
+%D
+%D \startbuffer
+%D \tfd Hi \bf there\sl, here \tfb I \bf am
+%D \stopbuffer
+%D
+%S \startnarrower
+%D \typebuffer
+%S \stopnarrower
+%D
+%D therefore becomes:
+%D
+%D \startvoorbeeld
+%D \getbuffer
+%D \stopvoorbeeld
+%D
+%D Maybe this mechanism isn't always as logic, but as said
+%D before, we tried to make it as intuitive as possible.
+%D
+%D So a specific kind of glyph can be characterized by:
+%D
+%D \startnarrower
+%D family (cmr) + bodyfont (12pt) + style (rm) + alternative (bf) + size (a)
+%D \stopnarrower
+%D
+%D The last component (the size) is optional.
+%D
+%D We introduced \type{\tf} as command to call for the current
+%D normally sized typeface. This commands results in roman,
+%D sans serif, teletype or whatever style is in charge. Such
+%D rather massive switches of style sometimes take more
+%D processing time than comfortable. Of course there is a
+%D workaround for this: we can call fonts directly by means of
+%D commands like:
+%D
+%D \starttyping
+%D \rmtf \sssl \tttf \rmbsa
+%D \stoptyping
+%D
+%D One should realize that this fast calls have limitations,
+%D they lack for instance automatic super- and subscript
+%D support.
+%D
+%D This leaves us two more commands: \type{\tx} and
+%D \type{\txx}. These activate a smaller and even more smaller
+%D font than the current one and adapt themselves to the
+%D current alternative, so when \type{\bf} is active,
+%D \type{\tx} gives a smaller boldface, which in turn can be
+%D called directly by \type{\bfx}.
+%D
+%D These two smaller alternatives are specified by the bodyfont
+%D environment and therefore not necessarily have similar sizes
+%D as \type{\scriptsize} and \type{\scriptscriptsize}. The main
+%D reason for this incompatibility (which can easily be undone)
+%D lays in the fact that we often want a bit bigger characters
+%D than in math mode. In \CONTEXT\ for instance the \type{\tx}
+%D and \type{\txx} commands are used for surrogate
+%D \cap{smallcaps} which support both nesting and alternatives,
+%D like in {\bf\cap{a \cap{small} world}}, which was typeset by
+%D
+%D \starttyping
+%D \bf\cap{a \cap{small} world}
+%D \stoptyping
+%D
+%D And compare $\rm \scriptstyle THIS$ with the slightly larger
+%D \cap{THIS}: \ruledhbox{$\rm \scriptstyle scriptstyle: THIS$}
+%D or \ruledhbox{\cap{x style: THIS}} makes a big difference.
+
+%D The \type{x..d} sizes should be used grouped. If you
+%D don't group them, i.e. call them in a row, \CONTEXT\ will
+%D not be able to sort out your intention (\type {x} inside
+%D \type {d} inside \type {x}. etc.). The following table
+%D demonstrates this:
+%D
+%D \def\FontState{\setstrut\ruledhbox{\strut Hello}}
+%D
+%D \starttabulate[|||||]
+%D \HL
+%D \NC \rlap{\quad\bf grouped} \NC \NC \type {\tx} \NC \type {\txx} \NC \NR
+%D \HL
+%D \NC \type{\tfx}  \NC \tfx  \FontState \NC \tfx \tx \FontState \NC \tfx \txx \FontState  \NC \NR
+%D \NC \type{\tfxx} \NC \tfxx \FontState \NC \tfxx\tx \FontState \NC \tfxx\txx \FontState  \NC \NR
+%D \NC \type{\tf}   \NC \tf   \FontState \NC \tf  \tx \FontState \NC \tf  \txx \FontState  \NC \NR
+%D \NC \type{\tfa}  \NC \tfa  \FontState \NC \tfa \tx \FontState \NC \tfa \txx \FontState  \NC \NR
+%D \NC \type{\tfb}  \NC \tfb  \FontState \NC \tfb \tx \FontState \NC \tfb \txx \FontState  \NC \NR
+%D \NC \type{\tfc}  \NC \tfc  \FontState \NC \tfc \tx \FontState \NC \tfc \txx \FontState  \NC \NR
+%D \NC \type{\tfd}  \NC \tfd  \FontState \NC \tfd \tx \FontState \NC \tfd \txx \FontState  \NC \NR
+%D \NC \type{\tfx}  \NC \tfx  \FontState \NC \tfx \tx \FontState \NC \tfx \txx \FontState  \NC \NR
+%D \NC \type{\tfxx} \NC \tfxx \FontState \NC \tfxx\tx \FontState \NC \tfxx\txx \FontState  \NC \NR
+%D \HL
+%D \stoptabulate
+%D
+%D \blank
+%D
+%D \starttabulate[|||||]
+%D \HL
+%D \NC \rlap{\quad\bf stacked} \NC \NC \type {\tx} \NC \type {\txx} \NC \NR
+%D \HL
+%D \NC \type{\tfx}
+%D \NC \tfx                                   \FontState
+%D \NC \tfx                              \tx  \FontState
+%D \NC \tfx                              \txx \FontState
+%D \NC \NR
+%D \NC \type{\tfxx}
+%D \NC \tfx\tfxx                              \FontState
+%D \NC \tfx\tfxx                         \tx  \FontState
+%D \NC \tfx\tfxx                         \txx \FontState
+%D \NC \NR
+%D \NC \type{\tf}
+%D \NC \tfx\tfxx\tf                           \FontState
+%D \NC \tfx\tfxx\tf                      \tx  \FontState
+%D \NC \tfx\tfxx\tf                      \txx \FontState
+%D \NC \NR
+%D \NC \type{\tfa}
+%D \NC \tfx\tfxx\tf\tfa                       \FontState
+%D \NC \tfx\tfxx\tf\tfa                  \tx  \FontState
+%D \NC \tfx\tfxx\tf\tfa                  \txx \FontState
+%D \NC \NR
+%D \NC \type{\tfb}
+%D \NC \tfx\tfxx\tf\tfa\tfb                   \FontState
+%D \NC \tfx\tfxx\tf\tfa\tfb              \tx  \FontState
+%D \NC \tfx\tfxx\tf\tfa\tfb              \txx \FontState
+%D \NC \NR
+%D \NC \type{\tfc}
+%D \NC \tfx\tfxx\tf\tfa\tfb\tfc               \FontState
+%D \NC \tfx\tfxx\tf\tfa\tfb\tfc          \tx  \FontState
+%D \NC \tfx\tfxx\tf\tfa\tfb\tfc          \txx \FontState
+%D \NC \NR
+%D \NC \type{\tfd}
+%D \NC \tfx\tfxx\tf\tfa\tfb\tfd               \FontState
+%D \NC \tfx\tfxx\tf\tfa\tfb\tfd          \tx  \FontState
+%D \NC \tfx\tfxx\tf\tfa\tfb\tfd          \txx \FontState
+%D \NC \NR
+%D \NC \type{\tfx}
+%D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx           \FontState
+%D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx      \tx  \FontState
+%D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx      \txx \FontState
+%D \NC \NR
+%D \NC \type{\tfxx}
+%D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx\tfxx      \FontState
+%D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx\tfxx \tx  \FontState
+%D \NC \tfx\tfxx\tf\tfa\tfb\tfc\tfx\tfxx \txx \FontState
+%D \NC \NR
+%D \HL
+%D \stoptabulate
+
+%D \macros
+%D   {mf}
+%D
+%D Math fonts are a species in their own. They are tightly
+%D hooked into smaller and even smaller ones of similar breed
+%D to form a tight family. Let's first see how these are
+%D related:
+%D
+%D \startbuffer
+%D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+ \bi x^2 =\rm 6x^2$
+%D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+{\bi x^2}=\rm 6x^2$
+%D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+ \bi x^2 =\tf 6x^2$
+%D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+{\bi x^2}=\tf 6x^2$
+%D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+ \bi x^2 =\bf 6x^2$
+%D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+{\bi x^2}=\bf 6x^2$
+%D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+ \bi x^2 =\sl 6x^2$
+%D $\tf x^2+\bf x^2+\sl x^2+\it x^2+\bs x^2+{\bi x^2}=\sl 6x^2$
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D Gives both an expected and unexpected result:
+%D
+%D \startvoorbeeld
+%D \startlines
+%D \getbuffer
+%D \stoplines
+%D \stopvoorbeeld
+%D
+%D We see here that the character shapes change accordingly to
+%D the current family, but that the symbols are always typeset
+%D in the font assigned to \type{\fam0}.
+%D
+%D \startbuffer
+%D $\tf\mf x^2 + x^2 + x^2 + x^2 + x^2 + x^2 = 6x^2$
+%D $\bf\mf x^2 + x^2 + x^2 + x^2 + x^2 + x^2 = 6x^2$
+%D $\sl\mf x^2 + x^2 + x^2 + x^2 + x^2 + x^2 = 6x^2$
+%D $\bs\mf x^2 + x^2 + x^2 + x^2 + x^2 + x^2 = 6x^2$
+%D $\it\mf x^2 + x^2 + x^2 + x^2 + x^2 + x^2 = 6x^2$
+%D $\bi\mf x^2 + x^2 + x^2 + x^2 + x^2 + x^2 = 6x^2$
+%D \stopbuffer
+%D
+%D \startvoorbeeld
+%D \startlines
+%D \getbuffer
+%D \stoplines
+%D \stopvoorbeeld
+%D
+%D In this example we see a new command \type{\mf} surface
+%D which means as much as {\em math font}. This commands
+%D reactivates the last font alternative and therefore equals
+%D \type{\bf}, \type{\sl} etc. but by default it equals
+%D \type{\tf}:
+
+\unexpanded\def\mf
+  {\dodosetmathfont\fontalternative
+   \csname\fontalternative\endcsname}
+
+%D The previous example was typeset saying:
+%D
+%D \typebuffer
+%D
+%D Beware: the exact location of \type{\mf} is not that
+%D important, we could as well has said
+%D
+%D \startbuffer
+%D $\bf x^2 + x^2 + x^2 + x^2 + x^2 + x^2 = \mf 6x^2$
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D This is due to the way \TEX\ handles fonts in math mode.
+%D
+%D Of course we'll have to redefine \type{\mf} every time we
+%D change the current \type{\fam}.
+
+%D \macros
+%D   {mbox,enablembox,mathop}
+%D
+%D Now how can we put this to use? Will the next sequence
+%D give the desired result?
+%D
+%D \startbuffer
+%D $\bf x^2 + \hbox{\mf whatever} + \sin(2x)$
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D It won't!
+%D
+%D \startvoorbeeld
+%D \let\mathop=\normalmathop \getbuffer
+%D \stopvoorbeeld
+%D
+%D The reason for this is that \type{\sin} is defined as:
+%D
+%D \starttyping
+%D \def\sin{\mathop{\rm sin}\nolimits}
+%D \stoptyping
+%D
+%D We can fix this by defining
+
+\unexpanded\def\mathop
+  {\normalmathop
+   \bgroup
+   \let\rm\mf
+   \let\next=}
+
+%D We can fix arbitrary horizontal boxes by redefining the
+%D \TEX\ primitive \type{\hbox}:
+%D
+%D \starttyping
+%D \def\hbox{\ifmmode\mbox\else\normalhbox\fi}
+%D \stoptyping
+%D
+%D with
+%D
+%D \starttyping
+%D \def\mbox#1#%
+%D   {\normalhbox#1\bgroup\mf\let\next=}
+%D \stoptyping
+%D
+%D or more robust, that is, also accepting \type{\hbox\bgroup}:
+%D
+%D \starttyping
+%D \def\mbox%
+%D   {\normalhbox\bgroup\mf
+%D    \dowithnextbox{\flushnextbox\egroup}%
+%D    \normalhbox}
+%D \stoptyping
+%D
+%D And now:
+%D
+%D \startbuffer
+%D $\bf x^2 + \hbox{whatever} + \sin(2x)$
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D Indeed gives:
+%D
+%D \startvoorbeeld
+%D \enablembox\getbuffer
+%D \stopvoorbeeld
+%D
+%D But, do we want this kind of trickery to be activated? No,
+%D simply because we cannot be sure of incompatibilities,
+%D although for instance unboxing goes ok. Therefore we
+%D introduce:
+
+% best can go to math-ini and make \mf a hook then
+
+% better use \dowithnextboxcontent
+
+\def\normalmbox
+  {\normalhbox\bgroup\mf
+   \dowithnextbox{\flushnextbox\egroup}\normalhbox}
+
+% to test:
+%
+% \def\normalmbox
+%   {\dowithnextboxcontent\mf\flushnextbox\normalhbox}
+
+\def\mbox % we cannot add \dontleavehmode ... else no \setbox0\mbox possible
+  {\ifmmode\normalmbox\else\normalhbox\fi}
+
+\def\enablembox
+  {\appendtoks
+     \ifx\normalhbox\undefined\let\normalhbox\hbox\fi
+     \let\hbox\mbox
+   \to\everymathematics}
+
+%D So in fact one can enable this feature if needed. I would say:
+%D go along, but use grouping if needed!
+
+%D \macros
+%D   {mrfam,mifam,syfam,exfam,
+%D    bsfam,bifam,scfam,tffam,
+%D    mafam,mbfam,msfam}
+%D
+%D After this short mathematical excursion, we enter the world
+%D of fonts and fontswitching. We start with something very
+%D \TEX: \type{\fam} specified font families. \TEX\ uses
+%D families for managing fonts in math mode. Such a family has
+%D three members: text, script and scriptscript: $x^{y^z}$. In
+%D \CONTEXT\ we take a bit different approach than \PLAIN\
+%D \TEX\ does. \PLAIN\ \TEX\ needs at least four families for
+%D typesetting math. We use those but give them symbolic names.
+
+\chardef\mrfam =  0 % (Plain TeX) Math Roman
+\chardef\mifam =  1 % (Plain TeX) Math Italic
+\chardef\syfam =  2 % (Plain TeX) Math Symbol
+\chardef\exfam =  3 % (Plain TeX) Math Extra
+
+%D \PLAIN\ \TEX\ also defines families for {\it italic}, {\sl
+%D slanted} and {\bf bold} typefaces, so we don't have to
+%D define them here.
+
+\ifx\itfam\undefined
+
+\chardef\itfam =  4 % (Plain TeX) Italic
+\chardef\slfam =  5 % (Plain TeX) Slanted
+\chardef\bffam =  6 % (Plain TeX) Boldface
+
+\fi
+
+%D Family~7 in \PLAIN\ \TEX\ is not used in \CONTEXT, because
+%D we do massive switches from roman to sans serif, teletype or
+%D other faces.
+
+\ifx\ttfam\undefined
+
+\chardef\ttfam =  7 % (Plain TeX) can be reused!
+
+\fi
+
+%D We define ourselves some more families for {\bs bold
+%D slanted}, {\bi bold italic} and {\sc Small Caps}, so
+%D we can use them in math mode too. Instead of separate
+%D families for {\ss sans serif} and \type{teletype} we use the
+%D more general \type{\tffam}, which stands for typeface.
+
+\chardef\bsfam =  8 % (ConTeXt) BoldSlanted
+\chardef\bifam =  9 % (ConTeXt) BoldItalic
+\chardef\scfam = 10 % (ConTeXt) SmallCaps
+\chardef\tffam = 11 % (ConTeXt) TypeFace
+
+%D Because Taco needs a few more math families, we reuse
+%D family~7 for all those typefaces that have no related
+%D family, and therefore are grouped into one.
+
+\chardef\nnfam =  7 % (ReUsed) NoName
+
+%D Normally \type{\mrfam} equals \type{\tffam}, but a more
+%D distinctive alternatives are possible, for instance the
+%D Euler and Concrete Typefaces.
+%D
+%D After having defined all those in nature non||mathematical
+%D families, we define ourselves some real math ones. These are
+%D needed for the \AMS\ Symbol Fonts and Extended Lucida
+%D Bright.
+
+\chardef\mafam = 12 % (ConTeXt) Math A Fam (AmsTeX A)
+\chardef\mbfam = 13 % (ConTeXt) Math B Fam (AmsTeX B)
+\chardef\mcfam = 14 % (ConTeXt) Math C Fam (MathTime)
+\chardef\mdfam = 15 % (ConTeXt) Math D Fam (MathTime)
+
+%D Because there are 16~families and because \type{\ttfam}
+%D is reused, at the moment we have no so many families
+%D left. By default, we map any newly defined family on the
+%D last one (F).
+
+\def\newfam#1{\chardef#1=15 }
+
+%D This hack is also needed because in \ETEX\ we are going
+%D to reuse the \type {\newfam} allocation counter.
+
+%D To ease the support of font packages, we als define
+%D shortcuts to these familynames. This is necessary because
+%D the family names are in fact \type{\chardef}'s, which means
+%D that we're dealing with numbers (one can check this by
+%D applying \type{\showthe} and \type{\show}). In the
+%D specification of math symbols however we need hexadecimal
+%D numbers, so we have to convert the \type{\fam}'s value.
+
+\edef\hexmrfam {\hexnumber\mrfam}  \edef\hexbsfam {\hexnumber\bsfam}
+\edef\hexmifam {\hexnumber\mifam}  \edef\hexbifam {\hexnumber\bifam}
+\edef\hexsyfam {\hexnumber\syfam}  \edef\hexscfam {\hexnumber\scfam}
+\edef\hexexfam {\hexnumber\exfam}  \edef\hextffam {\hexnumber\tffam}
+\edef\hexitfam {\hexnumber\itfam}  \edef\hexmafam {\hexnumber\mafam}
+\edef\hexslfam {\hexnumber\slfam}  \edef\hexmbfam {\hexnumber\mbfam}
+\edef\hexbffam {\hexnumber\bffam}  \edef\hexmcfam {\hexnumber\mcfam}
+\edef\hexnnfam {\hexnumber\nnfam}  \edef\hexmdfam {\hexnumber\mdfam}
+
+%D \macros
+%D   {uchar}
+%D
+%D This macro prepares \CONTEXT\ for \UNICODE\ support. By
+%D defining it here, we have at least an safeguard for utility
+%D file reading.
+
+\ifx\uchar\undefined \unexpanded\def\uchar#1#2{[#1,#2]} \fi
+
+%D We define some (very private) constants to improve speed,
+%D memory usage and consistency.
+
+\def\@size@       {@f at si@} % bodyfont size prefix (12pt etc)
+\def\@style@      {@f at st@} % full style prefix (roman etc)
+\def\@shortstyle@ {@f at sh@} % short style prefix (rm etc)
+\def\@letter@     {@f at le@} % first alternative typeface
+\def\@noletter@   {@f at no@} % second alternative typeface
+\def\@fontclass@  {@f at cl@} % fontclass
+
+%D The families can be grouped into math specific ones and
+%D more text related families, although text ones can be
+%D mapped onto the math ones to get for instance bold math.
+%D
+%D Both groups of families are handles by a couple of token
+%D list tagged as strategies. This implementation makes
+%D implementing extensions more comfortable.
+
+\newtoks \textstrategies
+\newtoks \mathstrategies
+\newtoks \symbstrategies
+
+\newif\ifsynchronizemathfonts \synchronizemathfontstrue
+
+\def\synchronizetext % stylish text in mmode
+  {\ifsynchronizemathfonts\the\textstrategies\fi} % \if...\fam\minusone\fi}
+
+\def\synchronizemath % math stuff in mmode
+  {\ifsynchronizemathfonts\the\mathstrategies\fi} % \if...\fam\minusone\fi}
+
+\def\synchronizesymb % stylish math stuff in mmode
+  {\ifsynchronizemathfonts\the\symbstrategies\fi} % \if...\fam\minusone\fi}
+
+%D By not setting the family we can append a font switch to \type
+%D {\everymath}. On the other hand, one never knows in what family
+%D state the strategies brought us.
+%D
+%D \starttyping
+%D {\bfa $\the\fam$} {\bfa \everymath{} $\the\fam$}
+%D \stoptyping
+
+%D \macros
+%D   {textonly}
+%D
+%D We can inhibit this slow||downer with:
+
+\def\textonly{\synchronizemathfontsfalse} % document this
+
+\appendtoks
+  \dosettextfamily\c!tf
+  \dosettextfamily\c!bf
+  \dosettextfamily\c!sl
+  \dosettextfamily\c!it
+  \dosettextfamily\c!bs
+  \dosettextfamily\c!bi
+  \dosettextfamily\c!sc
+\to \textstrategies
+
+\def\dosettextfamily#1% better pass fontbody to dodoset
+  {\let\savedfontbody\fontbody
+   \let\fontfamily#1%
+   \let\fontbody\scriptscriptface\dodosettextfamily\scriptscriptfont
+   \let\fontbody\scriptface      \dodosettextfamily      \scriptfont
+   \let\fontbody\textface        \dodosettextfamily        \textfont
+   \let\fontbody\savedfontbody}
+
+% \def\s!nullfont{nullfont}
+
+\def\dodosettextfamily
+  {\ifx\fontclass\empty
+     \@EA\dodosettextfamilyA
+   \else
+     \@EA\dodosettextfamilyB
+   \fi}
+
+\def\dodosettextfamilyA#1%
+  {\ifcsname          \fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse
+     \csname          \fontbody\c!mm\fontfamily\fontsize\endcsname \else
+   \ifcsname          \fontbody\c!mm\fontfamily\endcsname          \autofontsizetrue
+     \csname          \fontbody\c!mm\fontfamily\endcsname          \else
+   \ifcsname          \fontbody\c!rm\fontfamily\fontsize\endcsname \autofontsizefalse
+     \csname          \fontbody\c!rm\fontfamily\fontsize\endcsname \else
+   \ifcsname          \fontbody\c!rm\fontfamily\endcsname          \autofontsizetrue
+     \csname          \fontbody\c!rm\fontfamily\endcsname          \else
+                      \nullfont                                    \autofontsizetrue
+   \fi\fi\fi\fi
+   #1\csname\fontfamily\s!fam\endcsname\font}
+
+\def\dodosettextfamilyB#1%
+  {\ifcsname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse
+     \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \else
+   \ifcsname\fontclass\fontbody\c!mm\fontfamily\endcsname          \autofontsizetrue
+     \csname\fontclass\fontbody\c!mm\fontfamily\endcsname          \else
+   \ifcsname\fontclass\fontbody\c!rm\fontfamily\fontsize\endcsname \autofontsizefalse
+     \csname\fontclass\fontbody\c!rm\fontfamily\fontsize\endcsname \else
+   \ifcsname\fontclass\fontbody\c!rm\fontfamily\endcsname          \autofontsizetrue
+     \csname\fontclass\fontbody\c!rm\fontfamily\endcsname          \else
+     \dodosettextfamilyA#1%
+   \fi\fi\fi\fi
+   #1\csname\fontfamily\s!fam\endcsname\font}
+
+\def\mrfallback{\c!rm\c!tf}
+
+\appendtoks
+  \dosetmathfamily\mrfam\textface\scriptface\scriptscriptface\c!mr\mrfallback
+  \dosetmathfamily\mifam\textface\scriptface\scriptscriptface\c!mi\empty
+  \dosetmathfamily\syfam\textface\scriptface\scriptscriptface\c!sy\empty
+  \dosetmathfamily\exfam\textface\textface  \textface        \c!ex\empty
+  \dosetmathfamily\mafam\textface\scriptface\scriptscriptface\c!ma\empty
+  \dosetmathfamily\mbfam\textface\scriptface\scriptscriptface\c!mb\empty
+  \dosetmathfamily\mcfam\textface\scriptface\scriptscriptface\c!mc\empty
+% \dosetmathfamily\mdfam\textface\scriptface\scriptscriptface\c!md\empty
+  \dosetmathfamily\nnfam\textface\scriptface\scriptscriptface\c!nn\empty
+\to \mathstrategies
+
+\appendtoks
+  \dosetskewchar\mifam\defaultskewcharmi % implemented later on
+  \dosetskewchar\syfam\defaultskewcharsy % implemented later on
+\to \mathstrategies
+
+\def\dosetmathfamily#1#2#3#4#5#6%
+  {\let\savedfontbody\fontbody % op hoger plan
+   \let\fontfamily#5%
+   \let\backfamily#6%
+   \let\fontbody  #4\dodosetmathfamily\scriptscriptfont#1%
+   \let\fontbody  #3\dodosetmathfamily      \scriptfont#1%
+   \let\fontbody  #2\dodosetmathfamily        \textfont#1%
+   \let\fontbody\savedfontbody}
+
+\def\dodosetmathfamily
+  {\ifx\fontclass\empty
+     \@EA\dodosetmathfamilyA
+   \else
+     \@EA\dodosetmathfamilyB
+   \fi}
+
+\def\dodosetmathfamilyA#1#2%
+  {\ifcsname          \fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse
+     \csname          \fontbody\c!mm\fontfamily\fontsize\endcsname \else
+   \ifcsname          \fontbody\c!mm\fontfamily         \endcsname \autofontsizetrue
+     \csname          \fontbody\c!mm\fontfamily         \endcsname \else
+   \ifcsname          \fontbody     \backfamily\fontsize\endcsname \autofontsizefalse
+     \csname          \fontbody     \backfamily\fontsize\endcsname \else
+   \ifcsname          \fontbody     \backfamily         \endcsname \autofontsizetrue
+     \csname          \fontbody     \backfamily         \endcsname \else
+                      \nullfont                                    \autofontsizetrue
+   \fi\fi\fi\fi
+   #1#2\font}
+
+\def\dodosetmathfamilyB#1#2%
+  {\ifcsname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse
+     \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \else
+   \ifcsname\fontclass\fontbody\c!mm\fontfamily         \endcsname \autofontsizetrue
+     \csname\fontclass\fontbody\c!mm\fontfamily         \endcsname \else
+   \ifcsname\fontclass\fontbody     \backfamily\fontsize\endcsname \autofontsizefalse
+     \csname\fontclass\fontbody     \backfamily\fontsize\endcsname \else
+   \ifcsname\fontclass\fontbody     \backfamily         \endcsname \autofontsizetrue
+     \csname\fontclass\fontbody     \backfamily         \endcsname \else
+     \dodosetmathfamilyA#1#2%
+   \fi\fi\fi\fi
+   #1#2\font}
+
+\appendtoks
+  \dosetsymbfamily\mrfam\textface\scriptface\scriptscriptface\c!mr
+  \dosetsymbfamily\mifam\textface\scriptface\scriptscriptface\c!mi
+  \dosetsymbfamily\syfam\textface\scriptface\scriptscriptface\c!sy
+  \dosetsymbfamily\exfam\textface\textface  \textface        \c!ex
+  \dosetsymbfamily\mafam\textface\scriptface\scriptscriptface\c!ma
+  \dosetsymbfamily\mbfam\textface\scriptface\scriptscriptface\c!mb
+  \dosetsymbfamily\mcfam\textface\scriptface\scriptscriptface\c!mc
+% \dosetsymbfamily\mdfam\textface\scriptface\scriptscriptface\c!md % also ?
+\to \symbstrategies
+
+\def\dosetsymbfamily#1#2#3#4#5%
+  {\let\savedfontbody\fontbody
+   \let\fontfamily#5%
+   \let\fontbody  #4\dodosetsymbfamily\scriptscriptfont#1%
+   \let\fontbody  #3\dodosetsymbfamily      \scriptfont#1%
+   \let\fontbody  #2\dodosetsymbfamily        \textfont#1%
+   \let\fontbody\savedfontbody}
+
+\def\dodosetsymbfamily#1#2%
+  {\ifcsname\fontclass\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
+     \csname\fontclass\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
+     #1#2\font
+   \else\ifcsname\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
+     \csname\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
+     #1#2\font
+   \fi\fi}
+

+%D All used styles, like rm, ss and tt, are saved in a comma
+%D separated list. Appart from practical limitations one can
+%D define as many styles as needed.
+
+\def\fontrelativesizelist{\s!text,\s!script,\s!scriptscript,\c!x,\c!xx,\c!big,\c!small}
+
+%D \macros
+%D   {magfactor,magfactorhalf}
+%D
+%D There are several ways to specify a font. Three of them are
+%D pure \TeX\ ones, the fourth one is new:
+%D
+%D \starttyping
+%D \font\name=cmr12
+%D \font\name=cmr12 at 10pt
+%D \font\name=cmr12 scaled \magstep2
+%D \font\name=cmr12 sa 1.440
+%D \stoptyping
+%D
+%D The non||\TEX\ alternative \type{sa} stands for {\em scaled
+%D at}. This means as much as: scale the bodyfontsize with this
+%D factor. The value 1.440 in this example is derived
+%D from the \type{\magstep}'s as mentioned in
+%D \in{table}[tab:magstep]. We therefore introduce
+%D \type{\magfactor} as an alternative for \type{\magstep}.
+%D
+%D \placetable[here][tab:magstep]
+%D   {Factors to be used with \type{sa.}}
+%D \starttable[|c|c|c|]
+%D \HL
+%D \NC \bf magstep \NC \bf equivalent     \NC \bf factor \NC\SR
+%D \HL
+%D \NC 1           \NC \type{\magfactor1} \NC 1.200      \NC\FR
+%D \NC 2           \NC \type{\magfactor2} \NC 1.440      \NC\MR
+%D \NC 3           \NC \type{\magfactor3} \NC 1.728      \NC\MR
+%D \NC 4           \NC \type{\magfactor4} \NC 2.074      \NC\MR
+%D \NC 5           \NC \type{\magfactor5} \NC 2.488      \NC\LR
+%D \HL
+%D \stoptable
+
+\def\magstep#1% \relax removed, otherwise space after it sticks, else added
+  {\ifcase#1 1000\or1200\or1440\or1728\or2074\or2488\or1000\fi}
+
+\def\magstephalf
+  {1095}
+
+\def\magfactor#1%
+  {\ifcase#1 1.000\or1.200\or1.440\or1.728\or2.074\or2.488\or1\fi}
+
+\def\magfactorhalf
+  {1.095}
+
+%D These macros enable the use of definitions like \type{sa
+%D \magfactor3} which saves us both (mis|)|calculations and
+%D potential mistypings.
+%D
+%D Because \type {sa} (scaled at) and \type {mo} (mapped on)
+%D are not low level \TEX\ supported alternatives, we have to
+%D test for it ourselves. In doing so, we need an auxiliary
+%D \DIMENSION. We cannot use \type{\scratchdimen} because font
+%D loading can happen at any moment due to postponed loading.
+%D We could instead have used dirty grouping tricks, but this
+%D one works too.
+
+\let\defaultrelativefontsize \plusone
+\let\localrelativefontsize   \plusone

@@ Diff output truncated at 1234567 characters. @@


More information about the tex-live-commits mailing list.