From 7043cd3b7046f6a11112a5d49c4ae5e2dc0c6896 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Sat, 31 Oct 2020 00:09:22 +0100 Subject: 2020-10-30 22:27:00 --- tex/context/base/mkii/bibl-tra.mkii | 2 + tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkii/mult-cs.mkii | 2 +- tex/context/base/mkii/mult-ro.mkii | 5 +- tex/context/base/mkiv/anch-pgr.lua | 4 +- tex/context/base/mkiv/anch-pos.lua | 15 +- tex/context/base/mkiv/attr-col.lua | 1 - tex/context/base/mkiv/attr-eff.mkxl | 60 + tex/context/base/mkiv/attr-ini.mkxl | 143 + tex/context/base/mkiv/back-exp.lua | 12 +- tex/context/base/mkiv/back-exp.mkiv | 8 +- tex/context/base/mkiv/back-ini.mkxl | 3 +- tex/context/base/mkiv/back-lua.mkxl | 4 +- tex/context/base/mkiv/back-mps.mkxl | 4 +- tex/context/base/mkiv/back-out.lmt | 2 +- tex/context/base/mkiv/back-out.mkxl | 11 +- tex/context/base/mkiv/back-pdf.mkxl | 68 +- tex/context/base/mkiv/bibl-tra.mkiv | 3 - tex/context/base/mkiv/blob-ini.mkxl | 14 +- tex/context/base/mkiv/buff-par.mkvi | 4 +- tex/context/base/mkiv/buff-ver.mkiv | 8 +- tex/context/base/mkiv/buff-ver.mkxl | 303 +- tex/context/base/mkiv/catc-ctx.mkiv | 1 + tex/context/base/mkiv/catc-ctx.mkxl | 162 + tex/context/base/mkiv/catc-ini.mkxl | 329 + tex/context/base/mkiv/char-def.lua | 44 +- tex/context/base/mkiv/char-ini.lua | 2 +- tex/context/base/mkiv/char-ini.mkiv | 2 + tex/context/base/mkiv/char-ini.mkxl | 130 + tex/context/base/mkiv/char-tex.lua | 161 +- tex/context/base/mkiv/chem-str.mkiv | 2 +- tex/context/base/mkiv/chem-str.mkxl | 761 + tex/context/base/mkiv/cldf-ini.lua | 123 +- tex/context/base/mkiv/cldf-ini.mkiv | 8 +- tex/context/base/mkiv/cldf-int.mkxl | 23 +- tex/context/base/mkiv/cldf-lmt.lmt | 22 +- tex/context/base/mkiv/cldf-scn.lua | 3 +- tex/context/base/mkiv/colo-ini.mkiv | 5 +- tex/context/base/mkiv/colo-ini.mkxl | 352 +- tex/context/base/mkiv/cont-log.mkiv | 2 +- tex/context/base/mkiv/cont-new.mkiv | 12 +- tex/context/base/mkiv/cont-run.lua | 34 +- tex/context/base/mkiv/cont-run.mkiv | 12 + tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/context.mkxl | 99 +- tex/context/base/mkiv/core-con.mkiv | 4 + tex/context/base/mkiv/core-con.mkxl | 1013 + tex/context/base/mkiv/core-dat.mkiv | 33 +- tex/context/base/mkiv/core-def.mkiv | 2 +- tex/context/base/mkiv/core-env.lmt | 193 + tex/context/base/mkiv/core-env.lua | 84 +- tex/context/base/mkiv/core-env.mkiv | 10 +- tex/context/base/mkiv/core-env.mkxl | 819 + tex/context/base/mkiv/core-ini.mkiv | 2 +- tex/context/base/mkiv/driv-shp.lmt | 16 +- tex/context/base/mkiv/enco-ini.mkiv | 2 +- tex/context/base/mkiv/enco-ini.mkxl | 570 + tex/context/base/mkiv/file-ini.mkvi | 2 +- tex/context/base/mkiv/file-job.mkvi | 7 +- tex/context/base/mkiv/file-syn.mklx | 61 + tex/context/base/mkiv/font-ctx.lua | 10 +- tex/context/base/mkiv/font-emp.mklx | 70 +- tex/context/base/mkiv/font-fea.mklx | 380 + tex/context/base/mkiv/font-fil.mklx | 153 +- tex/context/base/mkiv/font-ini.mklx | 338 +- tex/context/base/mkiv/font-mat.mklx | 24 +- tex/context/base/mkiv/font-nod.lua | 4 +- tex/context/base/mkiv/font-ocm.lua | 2 +- tex/context/base/mkiv/font-ots.lua | 302 +- tex/context/base/mkiv/font-pre.mkiv | 4 + tex/context/base/mkiv/font-sol.lua | 4 +- tex/context/base/mkiv/font-sty.mklx | 109 +- tex/context/base/mkiv/font-sty.mkvi | 9 +- tex/context/base/mkiv/font-sym.mklx | 39 +- tex/context/base/mkiv/font-tra.mkiv | 2 +- tex/context/base/mkiv/grph-epd.lua | 2 +- tex/context/base/mkiv/grph-fig.mkiv | 3 + tex/context/base/mkiv/grph-pat.mkxl | 119 + tex/context/base/mkiv/grph-trf.mkiv | 17 +- tex/context/base/mkiv/hand-ini.mkxl | 38 +- tex/context/base/mkiv/lang-def.mkiv | 16 + tex/context/base/mkiv/lang-dis.lmt | 222 + tex/context/base/mkiv/lang-dis.lua | 2 +- tex/context/base/mkiv/lang-exp.lua | 2 +- tex/context/base/mkiv/lang-hyp.lmt | 1806 ++ tex/context/base/mkiv/lang-hyp.lua | 4 +- tex/context/base/mkiv/lang-hyp.mkiv | 6 +- tex/context/base/mkiv/lang-ini.lmt | 670 + tex/context/base/mkiv/lang-ini.lua | 1 - tex/context/base/mkiv/lang-ini.mkxl | 149 +- tex/context/base/mkiv/lang-lab.mkxl | 95 +- tex/context/base/mkiv/lang-mis.mkiv | 18 +- tex/context/base/mkiv/lang-mis.mkxl | 68 +- tex/context/base/mkiv/lang-rep.lua | 359 +- tex/context/base/mkiv/lang-url.lua | 10 +- tex/context/base/mkiv/lang-url.mkiv | 37 +- tex/context/base/mkiv/lang-wrd.lua | 4 +- tex/context/base/mkiv/lpdf-epa.lua | 2 +- tex/context/base/mkiv/luat-cnf.lua | 12 +- tex/context/base/mkiv/luat-cod.lmt | 6 +- tex/context/base/mkiv/luat-cod.mkxl | 30 +- tex/context/base/mkiv/luat-fmt.lua | 5 +- tex/context/base/mkiv/luat-ini.mkiv | 32 +- tex/context/base/mkiv/luat-lib.mkiv | 8 +- tex/context/base/mkiv/luat-log.lmt | 739 + tex/context/base/mkiv/luat-log.lua | 795 + tex/context/base/mkiv/luat-mac.lua | 66 +- tex/context/base/mkiv/luat-run.lua | 26 + tex/context/base/mkiv/luat-usr.mkiv | 7 +- tex/context/base/mkiv/lxml-ini.mkxl | 544 + tex/context/base/mkiv/math-ali.mkxl | 1893 ++ tex/context/base/mkiv/math-def.mkiv | 10 +- tex/context/base/mkiv/math-fen.mkiv | 12 + tex/context/base/mkiv/math-frc.mkiv | 2 - tex/context/base/mkiv/math-frc.mkxl | 753 + tex/context/base/mkiv/math-ini.lua | 4 + tex/context/base/mkiv/math-ini.mkxl | 648 +- tex/context/base/mkiv/math-noa.lmt | 2399 ++ tex/context/base/mkiv/math-noa.lua | 10 +- tex/context/base/mkiv/math-pln.mkxl | 245 + tex/context/base/mkiv/math-tag.lmt | 596 + tex/context/base/mkiv/math-tag.lua | 4 +- tex/context/base/mkiv/math-toy.mkxl | 13 +- tex/context/base/mkiv/meta-blb.lua | 2 +- tex/context/base/mkiv/meta-ini.mkxl | 406 +- tex/context/base/mkiv/meta-mac.mkxl | 49 +- tex/context/base/mkiv/mlib-pdf.lua | 8 +- tex/context/base/mkiv/mlib-pdf.mkxl | 49 +- tex/context/base/mkiv/mlib-pps.lua | 16 +- tex/context/base/mkiv/mult-aux.mkxl | 671 +- tex/context/base/mkiv/mult-def.lua | 13 +- tex/context/base/mkiv/mult-def.mkiv | 6 +- tex/context/base/mkiv/mult-fmt.lua | 2 + tex/context/base/mkiv/mult-ini.lua | 86 - tex/context/base/mkiv/mult-ini.mkxl | 801 + tex/context/base/mkiv/mult-low.lua | 37 +- tex/context/base/mkiv/mult-prm.lua | 43 +- tex/context/base/mkiv/mult-sys.mkiv | 24 +- tex/context/base/mkiv/mult-sys.mkxl | 596 + tex/context/base/mkiv/node-aux.lmt | 10 +- tex/context/base/mkiv/node-aux.lua | 10 +- tex/context/base/mkiv/node-cmp.lmt | 6 - tex/context/base/mkiv/node-fin.lua | 97 - tex/context/base/mkiv/node-fin.mkiv | 1 + tex/context/base/mkiv/node-ini.lmt | 175 +- tex/context/base/mkiv/node-ini.lua | 39 +- tex/context/base/mkiv/node-ini.mkiv | 6 +- tex/context/base/mkiv/node-ltp.lua | 44 +- tex/context/base/mkiv/node-nut.lmt | 19 +- tex/context/base/mkiv/node-nut.lua | 11 +- tex/context/base/mkiv/node-par.lmt | 48 + tex/context/base/mkiv/node-par.lua | 6 +- tex/context/base/mkiv/node-ref.lua | 4 +- tex/context/base/mkiv/node-res.lua | 22 +- tex/context/base/mkiv/node-rul.lua | 4 +- tex/context/base/mkiv/node-scn.lua | 4 +- tex/context/base/mkiv/node-ser.lmt | 285 + tex/context/base/mkiv/node-tex.lmt | 39 + tex/context/base/mkiv/node-tex.lua | 9 - tex/context/base/mkiv/node-tra.lua | 25 +- tex/context/base/mkiv/pack-box.mkxl | 1114 + tex/context/base/mkiv/pack-com.mkxl | 949 + tex/context/base/mkiv/pack-lyr.mkxl | 105 +- tex/context/base/mkiv/pack-mrl.mkxl | 82 +- tex/context/base/mkiv/pack-ori.mkxl | 6 +- tex/context/base/mkiv/pack-rul.mkiv | 6 +- tex/context/base/mkiv/pack-rul.mkxl | 380 +- tex/context/base/mkiv/page-bck.mkxl | 715 + tex/context/base/mkiv/page-ini.mkxl | 376 + tex/context/base/mkiv/page-inj.mkvi | 2 +- tex/context/base/mkiv/page-lay.mkxl | 1625 ++ tex/context/base/mkiv/page-lin.mkvi | 3 +- tex/context/base/mkiv/page-mcl.mkxl | 31 +- tex/context/base/mkiv/page-one.mkiv | 7 +- tex/context/base/mkiv/page-spr.mkxl | 131 + tex/context/base/mkiv/page-txt.mklx | 201 +- tex/context/base/mkiv/phys-dim.mkiv | 2 - tex/context/base/mkiv/publ-ini.lua | 2 +- tex/context/base/mkiv/publ-ini.mkiv | 34 +- tex/context/base/mkiv/scrn-but.mkvi | 2 +- tex/context/base/mkiv/scrn-wid.mkvi | 2 +- tex/context/base/mkiv/spac-ali.mkiv | 8 +- tex/context/base/mkiv/spac-ali.mkxl | 357 +- tex/context/base/mkiv/spac-chr.lua | 2 +- tex/context/base/mkiv/spac-chr.mkiv | 7 + tex/context/base/mkiv/spac-grd.mkxl | 107 +- tex/context/base/mkiv/spac-hor.mkxl | 479 +- tex/context/base/mkiv/spac-lin.mkiv | 6 +- tex/context/base/mkiv/spac-par.mkiv | 3 +- tex/context/base/mkiv/spac-par.mkxl | 175 +- tex/context/base/mkiv/spac-prf.lua | 4 +- tex/context/base/mkiv/spac-ver.lmt | 2623 ++ tex/context/base/mkiv/spac-ver.lua | 81 +- tex/context/base/mkiv/spac-ver.mkiv | 2 +- tex/context/base/mkiv/spac-ver.mkxl | 643 +- tex/context/base/mkiv/status-files.pdf | Bin 28214 -> 28808 bytes tex/context/base/mkiv/status-lua.pdf | Bin 256244 -> 244626 bytes tex/context/base/mkiv/strc-con.mklx | 1156 + tex/context/base/mkiv/strc-con.mkvi | 34 +- tex/context/base/mkiv/strc-des.mklx | 194 + tex/context/base/mkiv/strc-enu.mklx | 375 + tex/context/base/mkiv/strc-flt.lua | 6 +- tex/context/base/mkiv/strc-flt.mkvi | 4 +- tex/context/base/mkiv/strc-itm.mklx | 212 +- tex/context/base/mkiv/strc-lab.mkxl | 198 + tex/context/base/mkiv/strc-lst.mkvi | 2 +- tex/context/base/mkiv/strc-mat.mkiv | 4 + tex/context/base/mkiv/strc-not.mklx | 1972 ++ tex/context/base/mkiv/strc-pag.mkiv | 21 +- tex/context/base/mkiv/strc-ref.mkvi | 4 +- tex/context/base/mkiv/strc-reg.mkiv | 4 +- tex/context/base/mkiv/strc-ren.mkiv | 6 +- tex/context/base/mkiv/strc-sbe.mkxl | 139 + tex/context/base/mkiv/strc-sec.mkiv | 2 +- tex/context/base/mkiv/strc-sec.mkxl | 1345 + tex/context/base/mkiv/strc-syn.mkxl | 658 + tex/context/base/mkiv/supp-box.lmt | 84 +- tex/context/base/mkiv/supp-box.lua | 4 +- tex/context/base/mkiv/supp-box.mkiv | 26 +- tex/context/base/mkiv/supp-box.mkxl | 572 +- tex/context/base/mkiv/supp-ran.lua | 3 + tex/context/base/mkiv/symb-imp-cc.mkiv | 4 +- tex/context/base/mkiv/syst-aux.lmt | 747 + tex/context/base/mkiv/syst-aux.lua | 90 +- tex/context/base/mkiv/syst-aux.mkiv | 19 +- tex/context/base/mkiv/syst-aux.mkxl | 1861 +- tex/context/base/mkiv/syst-con.mkxl | 41 +- tex/context/base/mkiv/syst-ini.mkiv | 34 +- tex/context/base/mkiv/syst-ini.mkxl | 654 +- tex/context/base/mkiv/syst-lua.lmt | 23 +- tex/context/base/mkiv/syst-lua.mkiv | 4 +- tex/context/base/mkiv/syst-lua.mkxl | 32 +- tex/context/base/mkiv/syst-mac.lmt | 4 +- tex/context/base/mkiv/syst-mes.mkiv | 6 +- tex/context/base/mkiv/tabl-com.mkxl | 69 + tex/context/base/mkiv/tabl-frm.mkxl | 261 + tex/context/base/mkiv/tabl-ltb.mkxl | 813 + tex/context/base/mkiv/tabl-mis.mkiv | 4 +- tex/context/base/mkiv/tabl-ntb.mkxl | 215 +- tex/context/base/mkiv/tabl-nte.mkiv | 4 +- tex/context/base/mkiv/tabl-nte.mkxl | 107 + tex/context/base/mkiv/tabl-tab.mkiv | 2 +- tex/context/base/mkiv/tabl-tab.mkxl | 2229 ++ tex/context/base/mkiv/tabl-tbl.lua | 9 +- tex/context/base/mkiv/tabl-tbl.mkxl | 633 +- tex/context/base/mkiv/tabl-xnt.mklx | 142 + tex/context/base/mkiv/tabl-xtb.mklx | 983 + tex/context/base/mkiv/task-ini.lua | 1 - tex/context/base/mkiv/toks-aux.lmt | 241 +- tex/context/base/mkiv/toks-aux.mkiv | 4 - tex/context/base/mkiv/toks-ini.lmt | 12 +- tex/context/base/mkiv/toks-ini.lua | 3 - tex/context/base/mkiv/trac-deb.lmt | 12 +- tex/context/base/mkiv/trac-deb.mkiv | 8 +- tex/context/base/mkiv/trac-log.lua | 611 +- tex/context/base/mkiv/trac-vis.lmt | 1700 ++ tex/context/base/mkiv/trac-vis.lua | 42 +- tex/context/base/mkiv/trac-vis.mkiv | 26 +- tex/context/base/mkiv/trac-vis.mkxl | 219 + tex/context/base/mkiv/type-ini.mklx | 309 +- tex/context/base/mkiv/typo-bld.lua | 78 +- tex/context/base/mkiv/typo-brk.lua | 10 +- tex/context/base/mkiv/typo-chr.lua | 4 +- tex/context/base/mkiv/typo-dha.lua | 4 +- tex/context/base/mkiv/typo-dir.mkxl | 30 +- tex/context/base/mkiv/typo-drp.lua | 6 +- tex/context/base/mkiv/typo-dua.lua | 8 +- tex/context/base/mkiv/typo-dub.lua | 8 +- tex/context/base/mkiv/typo-duc.lua | 118 +- tex/context/base/mkiv/typo-fln.lua | 4 +- tex/context/base/mkiv/typo-itc.mkvi | 4 + tex/context/base/mkiv/typo-lig.mkxl | 23 + tex/context/base/mkiv/typo-lin.lua | 6 +- tex/context/base/mkiv/typo-mar.mkiv | 4 +- tex/context/base/mkiv/typo-rub.lua | 4 +- tex/context/bib/mkii/bibl-ams.tex | 25 +- tex/context/bib/mkii/bibl-apa-de.tex | 28 +- tex/context/bib/mkii/bibl-apa-fr.tex | 28 +- tex/context/bib/mkii/bibl-apa-it.tex | 2 +- tex/context/bib/mkii/bibl-apa.tex | 2 +- tex/context/bib/mkii/bibl-aps.tex | 32 +- tex/context/bib/mkii/bibl-num-fr.tex | 30 +- tex/context/bib/mkii/bibl-num.tex | 32 +- tex/context/bib/mkii/bibl-ssa.tex | 52 +- tex/context/interface/mkii/keys-cs.xml | 2 +- tex/context/interface/mkii/keys-ro.xml | 5 +- tex/context/modules/mkiv/m-catchword.mkiv | 2 +- tex/context/modules/mkiv/m-chart.lua | 2 +- tex/context/modules/mkiv/m-chart.mkvi | 4 +- tex/context/modules/mkiv/m-format.mkiv | 2 +- tex/context/modules/mkiv/m-nodechart.lua | 4 +- tex/context/modules/mkiv/m-ntb-to-xtb.mkiv | 6 +- tex/context/modules/mkiv/m-oldfun.mkiv | 6 +- tex/context/modules/mkiv/m-oldnum.mkiv | 12 +- tex/context/modules/mkiv/m-scite.mkiv | 2 +- tex/context/modules/mkiv/m-tikz.mkiv | 19 +- tex/context/modules/mkiv/m-visual.mkiv | 4 +- tex/context/modules/mkiv/s-article-titlepage.mkiv | 2 +- tex/context/modules/mkiv/s-inf-01.mkvi | 38 +- .../modules/mkiv/s-languages-hyphenation.lua | 25 +- tex/context/modules/mkiv/s-maps.mkiv | 7 +- tex/context/modules/mkiv/s-present-balls.mkiv | 2 +- tex/context/modules/mkiv/s-present-colorful.mkiv | 2 +- tex/context/modules/mkiv/s-present-funny.mkiv | 2 +- tex/context/modules/mkiv/s-present-fuzzy.mkiv | 2 +- tex/context/modules/mkiv/s-present-green.mkiv | 2 +- tex/context/modules/mkiv/s-present-organic.mkiv | 2 +- tex/context/modules/mkiv/s-present-original.mkiv | 2 +- tex/context/modules/mkiv/s-present-split.mkiv | 2 +- tex/context/modules/mkiv/s-present-stack.mkiv | 2 +- tex/context/modules/mkiv/s-present-stepper.mkiv | 2 +- tex/context/modules/mkiv/s-present-tiles.mkiv | 2 +- tex/context/modules/mkiv/s-present-weird.mkiv | 2 +- tex/context/modules/mkiv/s-present-windows.mkiv | 2 +- tex/context/modules/mkiv/s-system-macros.mkxl | 86 + tex/context/modules/mkiv/s-tugboat-columns.mkiv | 16 +- tex/context/modules/mkiv/s-tugboat.mkiv | 6 +- tex/context/modules/mkiv/x-mathml-basics.mkiv | 12 +- tex/context/modules/mkiv/x-setups-basics.mkiv | 12 +- tex/context/patterns/common/lang-bg.rme | 3 +- tex/context/patterns/common/lang-de.rme | 3 +- tex/context/patterns/common/lang-deo.rme | 3 +- tex/context/patterns/common/lang-eo.rme | 7 + tex/context/patterns/mkii/lang-ala.pat | 26718 ++++++++++++++++++- tex/context/patterns/mkii/lang-eo.hyp | 8 + tex/context/patterns/mkii/lang-eo.pat | 98 + tex/context/patterns/mkii/lang-es.pat | 1863 +- tex/context/patterns/mkii/lang-nb.hyp | 112 +- tex/context/patterns/mkii/lang-nn.hyp | 112 +- tex/context/patterns/mkiv/lang-af.lua | 8 +- tex/context/patterns/mkiv/lang-ala.lua | 8 +- tex/context/patterns/mkiv/lang-bg.lua | 2 +- tex/context/patterns/mkiv/lang-de.lua | 2 +- tex/context/patterns/mkiv/lang-deo.lua | 2 +- tex/context/patterns/mkiv/lang-eo.lua | 20 + tex/context/patterns/mkiv/lang-es.lua | 6 +- tex/context/patterns/mkiv/lang-fr.lua | 8 +- tex/context/patterns/mkiv/lang-it.lua | 8 +- tex/context/patterns/mkiv/lang-nb.lua | 8 +- tex/context/patterns/mkiv/lang-nn.lua | 8 +- tex/context/patterns/mkiv/lang-uk.lua | 8 +- tex/generic/context/luatex/luatex-basics-nod.lua | 14 + tex/generic/context/luatex/luatex-fonts-merged.lua | 295 +- 344 files changed, 73707 insertions(+), 9355 deletions(-) create mode 100644 tex/context/base/mkiv/attr-eff.mkxl create mode 100644 tex/context/base/mkiv/attr-ini.mkxl create mode 100644 tex/context/base/mkiv/catc-ctx.mkxl create mode 100644 tex/context/base/mkiv/catc-ini.mkxl create mode 100644 tex/context/base/mkiv/char-ini.mkxl create mode 100644 tex/context/base/mkiv/chem-str.mkxl create mode 100644 tex/context/base/mkiv/core-con.mkxl create mode 100644 tex/context/base/mkiv/core-env.lmt create mode 100644 tex/context/base/mkiv/core-env.mkxl create mode 100644 tex/context/base/mkiv/enco-ini.mkxl create mode 100644 tex/context/base/mkiv/file-syn.mklx create mode 100644 tex/context/base/mkiv/font-fea.mklx create mode 100644 tex/context/base/mkiv/grph-pat.mkxl create mode 100644 tex/context/base/mkiv/lang-dis.lmt create mode 100644 tex/context/base/mkiv/lang-hyp.lmt create mode 100644 tex/context/base/mkiv/lang-ini.lmt create mode 100644 tex/context/base/mkiv/luat-log.lmt create mode 100644 tex/context/base/mkiv/luat-log.lua create mode 100644 tex/context/base/mkiv/lxml-ini.mkxl create mode 100644 tex/context/base/mkiv/math-ali.mkxl create mode 100644 tex/context/base/mkiv/math-frc.mkxl create mode 100644 tex/context/base/mkiv/math-noa.lmt create mode 100644 tex/context/base/mkiv/math-pln.mkxl create mode 100644 tex/context/base/mkiv/math-tag.lmt create mode 100644 tex/context/base/mkiv/mult-ini.mkxl create mode 100644 tex/context/base/mkiv/mult-sys.mkxl create mode 100644 tex/context/base/mkiv/node-par.lmt create mode 100644 tex/context/base/mkiv/node-ser.lmt create mode 100644 tex/context/base/mkiv/node-tex.lmt create mode 100644 tex/context/base/mkiv/pack-box.mkxl create mode 100644 tex/context/base/mkiv/pack-com.mkxl create mode 100644 tex/context/base/mkiv/page-bck.mkxl create mode 100644 tex/context/base/mkiv/page-ini.mkxl create mode 100644 tex/context/base/mkiv/page-lay.mkxl create mode 100644 tex/context/base/mkiv/page-spr.mkxl create mode 100644 tex/context/base/mkiv/spac-ver.lmt create mode 100644 tex/context/base/mkiv/strc-con.mklx create mode 100644 tex/context/base/mkiv/strc-des.mklx create mode 100644 tex/context/base/mkiv/strc-enu.mklx create mode 100644 tex/context/base/mkiv/strc-lab.mkxl create mode 100644 tex/context/base/mkiv/strc-not.mklx create mode 100644 tex/context/base/mkiv/strc-sbe.mkxl create mode 100644 tex/context/base/mkiv/strc-sec.mkxl create mode 100644 tex/context/base/mkiv/strc-syn.mkxl create mode 100644 tex/context/base/mkiv/syst-aux.lmt create mode 100644 tex/context/base/mkiv/tabl-com.mkxl create mode 100644 tex/context/base/mkiv/tabl-frm.mkxl create mode 100644 tex/context/base/mkiv/tabl-ltb.mkxl create mode 100644 tex/context/base/mkiv/tabl-nte.mkxl create mode 100644 tex/context/base/mkiv/tabl-tab.mkxl create mode 100644 tex/context/base/mkiv/tabl-xnt.mklx create mode 100644 tex/context/base/mkiv/tabl-xtb.mklx create mode 100644 tex/context/base/mkiv/trac-vis.lmt create mode 100644 tex/context/base/mkiv/trac-vis.mkxl create mode 100644 tex/context/base/mkiv/typo-lig.mkxl create mode 100644 tex/context/modules/mkiv/s-system-macros.mkxl create mode 100644 tex/context/patterns/common/lang-eo.rme create mode 100644 tex/context/patterns/mkii/lang-eo.hyp create mode 100644 tex/context/patterns/mkii/lang-eo.pat create mode 100644 tex/context/patterns/mkiv/lang-eo.lua (limited to 'tex') diff --git a/tex/context/base/mkii/bibl-tra.mkii b/tex/context/base/mkii/bibl-tra.mkii index 868ca0fc6..a6388465f 100644 --- a/tex/context/base/mkii/bibl-tra.mkii +++ b/tex/context/base/mkii/bibl-tra.mkii @@ -173,6 +173,8 @@ \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 diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index 523e792c6..10383d3a2 100644 --- a/tex/context/base/mkii/cont-new.mkii +++ b/tex/context/base/mkii/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2020.09.20 22:59} +\newcontextversion{2020.10.30 22:24} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii index 5588e40d7..d1f827650 100644 --- a/tex/context/base/mkii/context.mkii +++ b/tex/context/base/mkii/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2020.09.20 22:59} +\edef\contextversion{2020.10.30 22:24} %D For those who want to use this: diff --git a/tex/context/base/mkii/mult-cs.mkii b/tex/context/base/mkii/mult-cs.mkii index 0c79a0ae3..c9db70f68 100644 --- a/tex/context/base/mkii/mult-cs.mkii +++ b/tex/context/base/mkii/mult-cs.mkii @@ -1805,7 +1805,7 @@ \setinterfacecommand{resetpath}{resetpath} \setinterfacecommand{resetperiodkerning}{resetperiodkerning} \setinterfacecommand{resetsystemmode}{resetsystemmode} -\setinterfacecommand{resettext}{resettextcontent} +\setinterfacecommand{resettextcontent}{resettextcontent} \setinterfacecommand{resetvisualizers}{resetvisualizers} \setinterfacecommand{restoreglobalbodyfont}{restoreglobalbodyfont} \setinterfacecommand{retestfeature}{retestfeature} diff --git a/tex/context/base/mkii/mult-ro.mkii b/tex/context/base/mkii/mult-ro.mkii index 871cc3d30..1c8de1c87 100644 --- a/tex/context/base/mkii/mult-ro.mkii +++ b/tex/context/base/mkii/mult-ro.mkii @@ -283,6 +283,7 @@ \setinterfacevariable{intermezzo}{intermezzo} \setinterfacevariable{intext}{intext} \setinterfacevariable{intro}{intro} +\setinterfacevariable{invertedshort}{invertedshort} \setinterfacevariable{italic}{italic} \setinterfacevariable{italicbold}{italicaldin} \setinterfacevariable{item}{element} @@ -386,6 +387,7 @@ \setinterfacevariable{nonumber}{nonumber} \setinterfacevariable{norepeat}{norepeat} \setinterfacevariable{normal}{normal} +\setinterfacevariable{normalshort}{normalshort} \setinterfacevariable{nospacing}{nospacing} \setinterfacevariable{nostopper}{nostopper} \setinterfacevariable{not}{nu} @@ -453,6 +455,7 @@ \setinterfacevariable{rectangular}{rectangular} \setinterfacevariable{reference}{referinta} \setinterfacevariable{referral}{referinta} +\setinterfacevariable{region}{region} \setinterfacevariable{register}{registru} \setinterfacevariable{regular}{regular} \setinterfacevariable{relative}{relativ} @@ -1805,7 +1808,7 @@ \setinterfacecommand{resetpath}{resetpath} \setinterfacecommand{resetperiodkerning}{resetperiodkerning} \setinterfacecommand{resetsystemmode}{resetsystemmode} -\setinterfacecommand{resettext}{resettextcontent} +\setinterfacecommand{resettextcontent}{resettextcontent} \setinterfacecommand{resetvisualizers}{resetvisualizers} \setinterfacecommand{restoreglobalbodyfont}{restoreglobalbodyfont} \setinterfacecommand{retestfeature}{retestfeature} diff --git a/tex/context/base/mkiv/anch-pgr.lua b/tex/context/base/mkiv/anch-pgr.lua index be9e28c08..239b33010 100644 --- a/tex/context/base/mkiv/anch-pgr.lua +++ b/tex/context/base/mkiv/anch-pgr.lua @@ -76,7 +76,7 @@ local getheight = nuts.getheight local getdepth = nuts.getdepth local nodecodes = nodes.nodecodes -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local start_of_par = nuts.start_of_par local insert_before = nuts.insert_before @@ -165,7 +165,7 @@ local function flush(head,f,l,a,parent,depth) ln = new_hlist(setlink(new_rule(65536,65536*4,0),new_kern(-65536),ln)) rn = new_hlist(setlink(new_rule(65536,0,65536*4),new_kern(-65536),rn)) end - if getid(f) == localpar_code and start_of_par(f) then -- we need to clean this mess + if getid(f) == par_code and start_of_par(f) then -- we need to clean this mess insert_after(head,f,ln) else head, f = insert_before(head,f,ln) diff --git a/tex/context/base/mkiv/anch-pos.lua b/tex/context/base/mkiv/anch-pos.lua index 554f3fdc0..b2ad5b8b5 100644 --- a/tex/context/base/mkiv/anch-pos.lua +++ b/tex/context/base/mkiv/anch-pos.lua @@ -50,6 +50,7 @@ local ctx_latelua = context.latelua local tex = tex local texgetcount = tex.getcount +local texgetinteger = tex.getintegervalue or tex.getcount local texsetcount = tex.setcount local texget = tex.get local texsp = tex.sp @@ -282,7 +283,7 @@ local function setall(name,p,x,y,w,h,d,extra) e = extra ~= "" and extra or nil, r = region, c = column, - r2l = texgetcount("inlinelefttoright") == 1 and true or nil, + r2l = texgetinteger("inlinelefttoright") == 1 and true or nil, } end @@ -626,7 +627,7 @@ implement { x = true, y = true, n = nofparagraphs > 0 and nofparagraphs or nil, - r2l = texgetcount("inlinelefttoright") == 1 or nil, + r2l = texgetinteger("inlinelefttoright") == 1 or nil, } tobesaved[name] = spec ctx_latelua { action = enhance, specification = spec } @@ -647,7 +648,7 @@ implement { h = h ~= 0 and h or nil, d = d ~= 0 and d or nil, n = nofparagraphs > 0 and nofparagraphs or nil, - r2l = texgetcount("inlinelefttoright") == 1 or nil, + r2l = texgetinteger("inlinelefttoright") == 1 or nil, } tobesaved[name] = spec ctx_latelua { action = enhance, specification = spec } @@ -670,7 +671,7 @@ implement { h = h ~= 0 and h or nil, d = d ~= 0 and d or nil, n = nofparagraphs > 0 and nofparagraphs or nil, - r2l = texgetcount("inlinelefttoright") == 1 or nil, + r2l = texgetinteger("inlinelefttoright") == 1 or nil, } tobesaved[name] = spec ctx_latelua { action = enhance, specification = spec } @@ -692,7 +693,7 @@ implement { d = d ~= 0 and d or nil, n = nofparagraphs > 0 and nofparagraphs or nil, e = scanstring(), - r2l = texgetcount("inlinelefttoright") == 1 or nil, + r2l = texgetinteger("inlinelefttoright") == 1 or nil, } tobesaved[name] = spec ctx_latelua { action = enhance, specification = spec } @@ -714,7 +715,7 @@ implement { h = h ~= 0 and h or nil, d = d ~= 0 and d or nil, n = nofparagraphs > 0 and nofparagraphs or nil, - r2l = texgetcount("inlinelefttoright") == 1 or nil, + r2l = texgetinteger("inlinelefttoright") == 1 or nil, } tobesaved[name] = spec ctx_latelua { action = enhance, specification = spec } @@ -737,7 +738,7 @@ implement { h = h ~= 0 and h or nil, d = d ~= 0 and d or nil, n = nofparagraphs > 0 and nofparagraphs or nil, - r2l = texgetcount("inlinelefttoright") == 1 or nil, + r2l = texgetinteger("inlinelefttoright") == 1 or nil, } tobesaved[name] = spec ctx_latelua { action = enhance, specification = spec } diff --git a/tex/context/base/mkiv/attr-col.lua b/tex/context/base/mkiv/attr-col.lua index 88358aeb7..9c542a942 100644 --- a/tex/context/base/mkiv/attr-col.lua +++ b/tex/context/base/mkiv/attr-col.lua @@ -445,7 +445,6 @@ function colors.setmodel(name,weightgray) else -- stil the same end - return default end diff --git a/tex/context/base/mkiv/attr-eff.mkxl b/tex/context/base/mkiv/attr-eff.mkxl new file mode 100644 index 000000000..04a0c55ce --- /dev/null +++ b/tex/context/base/mkiv/attr-eff.mkxl @@ -0,0 +1,60 @@ +%D \module +%D [ file=attr-eff, +%D version=2007.06.06, +%D title=\CONTEXT\ Attribute Macros, +%D subtitle=Effects, +%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 Attribute Macros / Effects} + +\registerctxluafile{attr-eff}{} + +\unprotect + +\installcorenamespace{effect} + +\installcommandhandler \??effect {effect} \??effect + +\setupeffect + [\c!method=\v!none, + \c!stretch=\zerocount, + \c!rulethickness=\zeropoint, + \c!alternative=\v!normal] + +\appendtoks + \edef\p_method{\effectparameter\c!method}% + \ifx\p_method\v!command + \setuxvalue{\e!start\currenteffect}{\starteffect[#1]}% + \setuxvalue{\e!stop \currenteffect}{\stopeffect}% + \fi +\to \everydefineeffect + +\permanent\protected\def\starteffect[#1]% + {\clf_seteffect + alternative {\namedeffectparameter{#1}\c!alternative} + stretch \numexpr\namedeffectparameter{#1}\c!stretch\relax + rulethickness \dimexpr\namedeffectparameter{#1}\c!rulethickness\relax + \relax} + +\permanent\protected\def\stopeffect % can be special + {\clf_reseteffect} % v!normal 0 0 + +\permanent\protected\def\effect[#1]% + {\groupedcommand{\starteffect[#1]}{\stopeffect}} + +% yes or no grouped + +\defineeffect [\v!inner] [\c!alternative=\v!inner,\c!rulethickness=.25pt] +\defineeffect [\v!outer] [\c!alternative=\v!outer,\c!rulethickness=.25pt] +\defineeffect [\v!both] [\c!alternative=\v!both, \c!rulethickness=.25pt] +\defineeffect [\v!normal] [\c!alternative=\v!normal] +\defineeffect [\v!hidden] [\c!alternative=\v!hidden] +\defineeffect [\v!stretch] [\c!alternative=\v!stretch,\c!stretch=1] + +\protect \endinput diff --git a/tex/context/base/mkiv/attr-ini.mkxl b/tex/context/base/mkiv/attr-ini.mkxl new file mode 100644 index 000000000..d36ad1d0e --- /dev/null +++ b/tex/context/base/mkiv/attr-ini.mkxl @@ -0,0 +1,143 @@ +%D \module +%D [ file=attr-ini, +%D version=2007.06.06, +%D title=\CONTEXT\ Attribute Macros, +%D subtitle=Initialization, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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 Attribute Macros / Initialization} + +%D Although it's still somewhat experimental, here we introduce code +%D related to attributes. Housekeeping will move completely to \LUA\ +%D and \type {\newattribute} will go away. + +\unprotect + +\registerctxluafile{attr-ini}{} + +\installcorenamespace{attributecount} % the counter representing the attribute (attrdef'd) +\installcorenamespace{attributeid} % the internal number +\installcorenamespace{attributestack} % the attribute specific stack +\installcorenamespace{attributepickup} + +\permanent\protected\def\pushattribute#1% + {\global\advance\csname\??attributestack\string#1\endcsname\plusone + \expandafter\xdef\csname\??attributestack\string#1:\number\csname\??attributestack\string#1\endcsname\endcsname{\number\attribute#1}} + +\permanent\protected\def\popattribute#1% + {\attribute#1\csname\??attributestack\string#1:\number\csname\??attributestack\string#1\endcsname\endcsname\relax + \global\advance\csname\??attributestack\string#1\endcsname\minusone} + +\permanent\protected\def\installattributestack#1% + {\ifcsname\??attributestack\string#1\endcsname \else + \expandafter\newcount\csname\??attributestack\string#1\endcsname + \fi} + +\newtoks \t_attr_list_global +\newtoks \t_attr_list_local +\newtoks \t_attr_list_pickup +\newtoks \t_attr_list_nomath + +\ifdefined \s!global \else \immutable\def\s!global {global} \fi % for metatex % or hard check later +\ifdefined \s!public \else \immutable\def\s!public {public} \fi % for metatex % or hard check later +\ifdefined \s!private \else \immutable\def\s!private {private} \fi % for metatex % or hard check later +\ifdefined \s!attribute \else \immutable\def\s!attribute{attribute} \fi % for metatex % or hard check later +\ifdefined \s!pickup \else \immutable\def\s!pickup {pickup} \fi % for metatex % or hard check later +\ifdefined \s!forget \else \immutable\def\s!forget {forget} \fi % for metatex % or hard check later + +\immutable\def\??attributeprefix{c_attr_} + +\permanent\protected\def\defineattribute {\attr_basics_define_indeed[\s!public ]} +\permanent\protected\def\definesystemattribute{\attr_basics_define_indeed[\s!private]} + +\tolerant\def\attr_basics_define_indeed[#1]#*[#2]#*[#3]% + {\ifcsname\??attributeprefix#2\endcsname\else + \scratchcounter\clf_defineattribute{#2}{#1}\relax + %\writestatus\m!system{defining #1 attribute #2 with number \number\scratchcounter}% + \global\expandafter\attributedef\csname\??attributeprefix#2\endcsname\scratchcounter % \foo = 123 + \global\expandafter\integerdef \csname\??attributeid #2\endcsname\scratchcounter % \attribute\foo = 123 + % some attributes are always global + \doifelseinset\s!global{#3}% + {\xtoksapp\t_attr_list_global{\csname\??attributeprefix#2\endcsname\attributeunsetvalue}}% \c_attr_foo + {\xtoksapp\t_attr_list_local {\csname\??attributeprefix#2\endcsname\attributeunsetvalue}}% + \doifinset\s!nomath{#3}% + {\xtoksapp\t_attr_list_nomath{\csname\??attributeprefix#2\endcsname\attributeunsetvalue}}% + \doifinset\s!public{#3}% + {\aliased\expandafter\glet\csname#2\s!attribute\expandafter\endcsname\csname\??attributeid#2\endcsname}% \attribute\fooattribute + \doifinset\s!pickup{#3}% + {\global\expandafter\integerdef\csname\??attributepickup#2\endcsname\attributeunsetvalue + \xtoksapp\t_attr_list_pickup{\csname\??attributeprefix#2\endcsname\csname\??attributepickup#2\endcsname}% + \ifcsname#2\s!attribute\endcsname + \expandafter\xdef\csname\s!pickup#2\s!attribute\endcsname{\expandafter\integerdef\csname\??attributepickup#2\endcsname\csname\??attributeprefix#2\endcsname}% + \expandafter\xdef\csname\s!forget#2\s!attribute\endcsname{\expandafter\integerdef\csname\??attributepickup#2\endcsname\attributeunsetvalue}% + \fi}% + \fi} + +\permanent\protected\def\pickupattributes + {\the\t_attr_list_pickup\relax} + +\permanent\protected\def\newattribute#1% + {\attr_basics_define_indeed\s!public[\csstring#1][]% + \expandafter\glet\expandafter#1\csname\??attributeid\csstring#1\endcsname} + +% expandable so we can \edef them for speed + +\permanent\def\dosetattribute#1#2{\csname\??attributeprefix#1\endcsname#2\relax} +\permanent\def\doresetattribute#1{\csname\??attributeprefix#1\endcsname\attributeunsetvalue} +\permanent\def\dogetattribute #1{\number\csname\??attributeprefix#1\endcsname} +\permanent\def\dogetattributeid#1{\number\csname\??attributeid #1\endcsname} + +\aliased\let\dompattribute\gobbletwoarguments + +\permanent\protected\def\resetglobalattributes{\the\t_attr_list_global\glyphdatafield\zerocount\glyphscriptfield\zerocount} +\permanent\protected\def\resetlocalattributes {\the\t_attr_list_local \glyphdatafield\zerocount\glyphscriptfield\zerocount} + +\aliased\let\resetallattributes\resetlocalattributes + +%D Rather special. + +\permanent\protected\def\savecurrentattributes #1{\clf_savecurrentattributes {#1}} +\permanent\protected\def\restorecurrentattributes#1{\clf_restorecurrentattributes{#1}} + +%D For the moment we put this here. The order of definition matters a bit because +%D performance is better when we put frequently accessed attributes at the front. +%D So, we might move more here. + +%definesystemattribute [state] % nomath +\definesystemattribute [color] [public] % global +\definesystemattribute [colormodel] [public,global] +%definesystemattribute [skip] +%definesystemattribute [penalty] +\definesystemattribute [transparency] [public] +\definesystemattribute [reference] [public] +\definesystemattribute [destination] [public] +\definesystemattribute [case] [public] +\definesystemattribute [visual] [public,global] +\definesystemattribute [viewerlayer] [public] +\definesystemattribute [background] [public] +\definesystemattribute [alignbackground] [public] +\definesystemattribute [colorintent] [public] +\definesystemattribute [negative] [public] +\definesystemattribute [effect] [public] +\definesystemattribute [layoutcomponent] [public] +\definesystemattribute [internal] [public] +\definesystemattribute [ruled] [public] +\definesystemattribute [shifted] [public] +\definesystemattribute [checkedbreak] [public] +\definesystemattribute [vboxtohboxseparator] [public] + +\permanent\protected\let\showattributes\clf_showattributes % maybe at lua end + +%D Todo: + +% \appendtoks +% \clf_cleanupattributes +% \to \everyafterpagebreak + +\protect \endinput diff --git a/tex/context/base/mkiv/back-exp.lua b/tex/context/base/mkiv/back-exp.lua index f247e4e27..314d66eeb 100644 --- a/tex/context/base/mkiv/back-exp.lua +++ b/tex/context/base/mkiv/back-exp.lua @@ -2984,7 +2984,7 @@ local collectresults do -- too many locals otherwise local kern_code = nodecodes.kern local disc_code = nodecodes.disc local whatsit_code = nodecodes.whatsit - local localpar_code = nodecodes.localpar + local par_code = nodecodes.par local userskip_code = gluecodes.userskip local rightskip_code = gluecodes.rightskip @@ -3059,7 +3059,7 @@ local collectresults do -- too many locals otherwise local function collectresults(head,list,pat,pap) -- is last used (we also have currentattribute) local p - local localparagraph + local paragraph local maybewrong local pid for n, id, subtype in nextnode, head do @@ -3077,7 +3077,7 @@ local collectresults do -- too many locals otherwise if last ~= at then local tl = taglist[at] local ap = getattr(n,a_taggedpar) or pap - if localparagraph and (not ap or ap < localparagraph) then + if paragraph and (not ap or ap < paragraph) then maybewrong = addtomaybe(maybewrong,c,1) end pushcontent() @@ -3113,7 +3113,7 @@ local collectresults do -- too many locals otherwise currentattribute = last currentparagraph = ap end - if localparagraph and (not ap or ap < localparagraph) then + if paragraph and (not ap or ap < paragraph) then maybewrong = addtomaybe(maybewrong,c,2) end if trace_export then @@ -3390,8 +3390,8 @@ end last = nil currentparagraph = nil end - elseif not localparagraph and id == localpar_code and start_of_par(n) then - localparagraph = getattr(n,a_taggedpar) + elseif not paragraph and id == par_code and start_of_par(n) then + paragraph = getattr(n,a_taggedpar) elseif id == disc_code then -- very unlikely because we stripped them local pre, post, replace = getdisc(n) diff --git a/tex/context/base/mkiv/back-exp.mkiv b/tex/context/base/mkiv/back-exp.mkiv index 05e404697..23ffdbda0 100644 --- a/tex/context/base/mkiv/back-exp.mkiv +++ b/tex/context/base/mkiv/back-exp.mkiv @@ -235,10 +235,10 @@ \to \everyenableelements \appendtoks - \let\specialfixedspace \explicitfixedspace - \let\specialobeyedspace \explicitobeyedspace - \let\specialstretchedspace\explicitstretchedspace - \let\specialcontrolspace \explicitcontrolspace + \enforced\let\specialfixedspace \explicitfixedspace + \enforced\let\specialobeyedspace \explicitobeyedspace + \enforced\let\specialstretchedspace\explicitstretchedspace + \enforced\let\specialcontrolspace \explicitcontrolspace \to \everyenableelements \appendtoks diff --git a/tex/context/base/mkiv/back-ini.mkxl b/tex/context/base/mkiv/back-ini.mkxl index 4e2fa351e..00bfeb188 100644 --- a/tex/context/base/mkiv/back-ini.mkxl +++ b/tex/context/base/mkiv/back-ini.mkxl @@ -75,7 +75,6 @@ %D \stoptext %D \stoptyping -\unexpanded\def\setupoutput[#1]% - {\clf_enabledriver{#1}} +\permanent\protected\def\setupoutput[#1]{\clf_enabledriver{#1}} \protect \endinput diff --git a/tex/context/base/mkiv/back-lua.mkxl b/tex/context/base/mkiv/back-lua.mkxl index 6c5aaf82c..0fb1bcc88 100644 --- a/tex/context/base/mkiv/back-lua.mkxl +++ b/tex/context/base/mkiv/back-lua.mkxl @@ -11,8 +11,6 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\ifcase\contextlmtxmode \else - \registerctxluafile{back-lua}{autosuffix,optimize} -\fi +\registerctxluafile{back-lua}{autosuffix,optimize} \endinput diff --git a/tex/context/base/mkiv/back-mps.mkxl b/tex/context/base/mkiv/back-mps.mkxl index 318b73848..d4d428d42 100644 --- a/tex/context/base/mkiv/back-mps.mkxl +++ b/tex/context/base/mkiv/back-mps.mkxl @@ -11,8 +11,6 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\ifcase\contextlmtxmode \else - \registerctxluafile{back-mps}{autosuffix,optimize} -\fi +\registerctxluafile{back-mps}{autosuffix,optimize} \endinput diff --git a/tex/context/base/mkiv/back-out.lmt b/tex/context/base/mkiv/back-out.lmt index acf004634..1f33da557 100644 --- a/tex/context/base/mkiv/back-out.lmt +++ b/tex/context/base/mkiv/back-out.lmt @@ -43,7 +43,7 @@ local pageliteral_code = literalvalues.page local directliteral_code = literalvalues.direct local rawliteral_code = literalvalues.raw -local immediate_code = tex.prefixcodes.immediate +local immediate_code = tex.flagcodes.immediate local nodeproperties = nodes.properties.data diff --git a/tex/context/base/mkiv/back-out.mkxl b/tex/context/base/mkiv/back-out.mkxl index 248622c54..9e499a843 100644 --- a/tex/context/base/mkiv/back-out.mkxl +++ b/tex/context/base/mkiv/back-out.mkxl @@ -13,11 +13,10 @@ \registerctxluafile{back-out}{autosuffix} -\let\normalimmediate\immediate -\let\normalopenout \openout -\let\normalwrite \write -\let\normalcloseout \closeout -\let\normallatelua \latelua -\let\normalspecial \special +\let\normalopenout \openout +\let\normalwrite \write +\let\normalcloseout\closeout +\let\normallatelua \latelua +\let\normalspecial \special \endinput diff --git a/tex/context/base/mkiv/back-pdf.mkxl b/tex/context/base/mkiv/back-pdf.mkxl index b2312bccd..c28352c92 100644 --- a/tex/context/base/mkiv/back-pdf.mkxl +++ b/tex/context/base/mkiv/back-pdf.mkxl @@ -56,33 +56,33 @@ %D \type {\pdfextension} and \type {\pdffeedback} primitives but it will probably %D have bad side effects. -\unexpanded\def\pdfextension{\clf_pdfextension} - \def\pdffeedback {\clf_pdffeedback} - \def\pdfvariable {\clf_pdfvariable} +\permanent\protected\def\pdfextension{\clf_pdfextension} +\permanent \def\pdffeedback {\clf_pdffeedback} +\permanent \def\pdfvariable {\clf_pdfvariable} %D For the moment we keep this for tikz but hopefully it will at some point use %D the proper ones. Consider them obsolete: -\unexpanded\def\pdfliteral {\clf_pdfliteral} -\unexpanded\def\pdfobj {\clf_pdfobj}% -\unexpanded\def\pdflastobj {\numexpr\clf_pdflastobj\relax} -\unexpanded\def\pdfrefobj {\clf_pdfrefobj} +\permanent\protected\def\pdfliteral {\clf_pdfliteral} +\permanent\protected\def\pdfobj {\clf_pdfobj}% +\permanent\protected\def\pdflastobj {\numexpr\clf_pdflastobj\relax} +\permanent\protected\def\pdfrefobj {\clf_pdfrefobj} -\unexpanded\def\pdfrestore {\pdfextension restore} -\unexpanded\def\pdfsave {\pdfextension save} -\unexpanded\def\pdfsetmatrix{\pdfextension setmatrix} +\permanent\protected\def\pdfrestore {\pdfextension restore} +\permanent\protected\def\pdfsave {\pdfextension save} +\permanent\protected\def\pdfsetmatrix{\pdfextension setmatrix} - \let\pdfxform \saveboxresource - \let\pdflastxform \lastsavedboxresourceindex - \let\pdfrefxform \useboxresource +\permanent\let\pdfxform \saveboxresource +\permanent\let\pdflastxform\lastsavedboxresourceindex +\permanent\let\pdfrefxform \useboxresource %D Here are quick and dirty compression flippers, mostly used when testing something %D as one can best stick to the defaults that also adapt to specific standards. -\unexpanded\def\nopdfcompression {\clf_setpdfcompression\zerocount\zerocount} -\unexpanded\def\onlypdfobjectcompression{\clf_setpdfcompression\zerocount\plusthree} -\unexpanded\def\maximumpdfcompression {\clf_setpdfcompression\plusnine \plusnine } -\unexpanded\def\normalpdfcompression {\clf_setpdfcompression\plusthree\plusthree} +\permanent\protected\def\nopdfcompression {\clf_setpdfcompression\zerocount\zerocount} +\permanent\protected\def\onlypdfobjectcompression{\clf_setpdfcompression\zerocount\plusthree} +\permanent\protected\def\maximumpdfcompression {\clf_setpdfcompression\plusnine \plusnine } +\permanent\protected\def\normalpdfcompression {\clf_setpdfcompression\plusthree\plusthree} %D PDF/X (maybe combine the two lua calls) @@ -112,26 +112,26 @@ %D These are the only official methods to add stuff to the resources. If more is %D needed for third party low level code, it can be added. -\unexpanded\def\pdfbackendsetcatalog #1#2{\clf_lpdf_addtocatalog{#1}{#2}} -\unexpanded\def\pdfbackendsetinfo #1#2{\clf_lpdf_addtoinfo{#1}{#2}} -\unexpanded\def\pdfbackendsetname #1#2{\clf_lpdf_addtonames{#1}{#2}} +\permanent\protected\def\pdfbackendsetcatalog #1#2{\clf_lpdf_addtocatalog{#1}{#2}} +\permanent\protected\def\pdfbackendsetinfo #1#2{\clf_lpdf_addtoinfo{#1}{#2}} +\permanent\protected\def\pdfbackendsetname #1#2{\clf_lpdf_addtonames{#1}{#2}} -\unexpanded\def\pdfbackendsetpageattribute #1#2{\clf_lpdf_addtopageattributes{#1}{#2}} -\unexpanded\def\pdfbackendsetpagesattribute#1#2{\clf_lpdf_addtopagesattributes{#1}{#2}} -\unexpanded\def\pdfbackendsetpageresource #1#2{\clf_lpdf_addtopageresources{#1}{#2}} +\permanent\protected\def\pdfbackendsetpageattribute #1#2{\clf_lpdf_addtopageattributes{#1}{#2}} +\permanent\protected\def\pdfbackendsetpagesattribute#1#2{\clf_lpdf_addtopagesattributes{#1}{#2}} +\permanent\protected\def\pdfbackendsetpageresource #1#2{\clf_lpdf_addtopageresources{#1}{#2}} -\unexpanded\def\pdfbackendsetextgstate #1#2{\clf_lpdf_adddocumentextgstate{#1}{#2}} -\unexpanded\def\pdfbackendsetcolorspace #1#2{\clf_lpdf_adddocumentcolorspace{#1}{#2}} -\unexpanded\def\pdfbackendsetpattern #1#2{\clf_lpdf_adddocumentpattern{#1}{#2}} -\unexpanded\def\pdfbackendsetshade #1#2{\clf_lpdf_adddocumentshade{#1}{#2}} +\permanent\protected\def\pdfbackendsetextgstate #1#2{\clf_lpdf_adddocumentextgstate{#1}{#2}} +\permanent\protected\def\pdfbackendsetcolorspace #1#2{\clf_lpdf_adddocumentcolorspace{#1}{#2}} +\permanent\protected\def\pdfbackendsetpattern #1#2{\clf_lpdf_adddocumentpattern{#1}{#2}} +\permanent\protected\def\pdfbackendsetshade #1#2{\clf_lpdf_adddocumentshade{#1}{#2}} - \def\pdfbackendcurrentresources {\clf_lpdf_collectedresources} - \def\pdfcolor #1{\clf_lpdf_color\numexpr\thecolorattribute{#1}\relax} +\permanent \def\pdfbackendcurrentresources {\clf_lpdf_collectedresources} +\permanent \def\pdfcolor #1{\clf_lpdf_color\numexpr\thecolorattribute{#1}\relax} %D This is a temporary hack mthat will be removed, improved or somehow can become %D default. -\def\TransparencyHack{\setupcolors[\c!pagecolormodel=\v!auto]} +\permanent\def\TransparencyHack{\setupcolors[\c!pagecolormodel=\v!auto]} %D Just in case one needs this \unknown: %D @@ -139,7 +139,7 @@ %D text \pdfbackendactualtext{Meier}{Müller} text %D \stoptyping -\unexpanded\def\pdfbackendactualtext#1#2% not interfaced +\permanent\protected\def\pdfbackendactualtext#1#2% not interfaced {\clf_startactualtext{#2}% #1% \clf_stopactualtext} @@ -149,9 +149,9 @@ %D Bah, this is also needed for tikz: \ifdefined\pdfsavepos\else - \let\pdfsavepos \savepos - \let\pdflastxpos\lastxpos - \let\pdflastypos\lastypos + \permanent\let\pdfsavepos \savepos + \permanent\let\pdflastxpos\lastxpos + \permanent\let\pdflastypos\lastypos \fi \protect \endinput diff --git a/tex/context/base/mkiv/bibl-tra.mkiv b/tex/context/base/mkiv/bibl-tra.mkiv index 5389400f3..eebd92d68 100644 --- a/tex/context/base/mkiv/bibl-tra.mkiv +++ b/tex/context/base/mkiv/bibl-tra.mkiv @@ -815,9 +815,6 @@ \doifelse{\publicationlistparameter\c!maybeyear}{\v!off}{\def\maybeyear##1{}}{\def\maybeyear##1{##1}}% \forgetall} -\unexpanded\def\outdented#1% move to supp-box ? - {\hskip-\hangindent#1\relax} - %D The full list of publications \unexpanded\def\completepublications diff --git a/tex/context/base/mkiv/blob-ini.mkxl b/tex/context/base/mkiv/blob-ini.mkxl index 126319b12..3443836b7 100644 --- a/tex/context/base/mkiv/blob-ini.mkxl +++ b/tex/context/base/mkiv/blob-ini.mkxl @@ -28,19 +28,19 @@ % \depthofstring % defined in lua % \heightanddepthofstring % defined in lua -\def\wdofstring#1{\dimexpr\widthofstring {#1}\relax} % assured an dimen -\def\htofstring#1{\dimexpr\heightofstring{#1}\relax} % assured an dimen -\def\dpofstring#1{\dimexpr\depthofstring {#1}\relax} % assured an dimen -\def\hdofstring#1{\dimexpr\totalofstring {#1}\relax} % assured an dimen +\permanent\def\wdofstring#1{\dimexpr\widthofstring {#1}\relax} % assured an dimen +\permanent\def\htofstring#1{\dimexpr\heightofstring{#1}\relax} % assured an dimen +\permanent\def\dpofstring#1{\dimexpr\depthofstring {#1}\relax} % assured an dimen +\permanent\def\hdofstring#1{\dimexpr\totalofstring {#1}\relax} % assured an dimen -\let\heightanddepthofstring\totalofstring -\let\htdpofstring \hdofstring +\aliased\let\heightanddepthofstring\totalofstring +\aliased\let\htdpofstring \hdofstring \let\hd\htdp % if yes then move this % This one takes anything that can be typeset -\unexpanded\def\setwidthof#1\to#2{\edef#2{\widthofstring{#1}}} +\permanent\protected\def\setwidthof#1\to#2{\edef#2{\widthofstring{#1}}} \protect \endinput diff --git a/tex/context/base/mkiv/buff-par.mkvi b/tex/context/base/mkiv/buff-par.mkvi index 0ee66dd01..a2d32c6be 100644 --- a/tex/context/base/mkiv/buff-par.mkvi +++ b/tex/context/base/mkiv/buff-par.mkvi @@ -65,8 +65,8 @@ \let\buff_parallel_define_saved\defineparallel \let\buff_parallel_setup_saved \setupparallel -\unexpanded\def\defineparallel{\dodoubleargument\buff_parallel_define} -\unexpanded\def\setupparallel {\dotripleargument\buff_parallel_setup} +\unexpanded\overloaded\def\defineparallel{\dodoubleargument\buff_parallel_define} +\unexpanded\overloaded\def\setupparallel {\dotripleargument\buff_parallel_setup} \def\buff_parallel_define[#name][#instances]% {\buff_parallel_define_saved[#name][\c!list={#instances}]% list is internal diff --git a/tex/context/base/mkiv/buff-ver.mkiv b/tex/context/base/mkiv/buff-ver.mkiv index 067ae7c39..c9a5c4525 100644 --- a/tex/context/base/mkiv/buff-ver.mkiv +++ b/tex/context/base/mkiv/buff-ver.mkiv @@ -287,10 +287,10 @@ \def\buff_verbatim_type_nop {\buff_verbatim_left_of_type - \futurelet\next\buff_verbatim_type_one} + \futurelet\nexttoken\buff_verbatim_type_one} \def\buff_verbatim_type_one - {\ifx\next\bgroup + {\ifx\nexttoken\bgroup \expandafter\buff_verbatim_type_a \else \expandafter\buff_verbatim_type_two @@ -299,10 +299,10 @@ \def\buff_verbatim_type_two {\catcode`<=\othercatcode % old precaution \catcode`>=\othercatcode % old precaution - \futurelet\next\buff_verbatim_type_three} + \futurelet\nexttoken\buff_verbatim_type_three} \def\buff_verbatim_type_three - {\if\next<% + {\if\nexttoken<% \expandafter\buff_verbatim_type_b \else \expandafter\buff_verbatim_type_c diff --git a/tex/context/base/mkiv/buff-ver.mkxl b/tex/context/base/mkiv/buff-ver.mkxl index 4dc82288a..9f8a20695 100644 --- a/tex/context/base/mkiv/buff-ver.mkxl +++ b/tex/context/base/mkiv/buff-ver.mkxl @@ -42,7 +42,7 @@ \resetbreakpoints \to \everyinitializeverbatim -\unexpanded\def\setverbatimspaceskip % to be checked: must happen after font switch +\permanent\protected\def\setverbatimspaceskip % to be checked: must happen after font switch {\spaceskip\fontcharwd\font`x\relax \xspaceskip\spaceskip} @@ -51,10 +51,10 @@ \setvalue{\??typinglines\v!yes }{\buff_verbatim_obey_breakpoints} \setvalue{\??typinglines\v!hyphenated}{\buff_verbatim_obey_hyphens} -\setvalue{\??typingspace\v!on }{\let\obeyedspace\specialcontrolspace} -\setvalue{\??typingspace\v!stretch }{\let\obeyedspace\specialstretchedspace} +\setvalue{\??typingspace\v!on }{\enforced\let\obeyedspace\specialcontrolspace} +\setvalue{\??typingspace\v!stretch }{\enforced\let\obeyedspace\specialstretchedspace} \setvalue{\??typingspace\v!normal }{} -\setvalue{\??typingspace\v!fixed }{\let\obeyedspace\specialfixedspace} +\setvalue{\??typingspace\v!fixed }{\enforced\let\obeyedspace\specialfixedspace} \setvalue{\??typingblank\v!standard }{\s_spac_whitespace_parskip} \setvalue{\??typingblank\v!small }{\smallskipamount} @@ -64,18 +64,18 @@ \setvalue{\??typingblank\v!line }{\baselineskip} \setvalue{\??typingblank\v!none }{\zeropoint} -\unexpanded\def\buff_verbatim_obey_hyphens +\protected\def\buff_verbatim_obey_hyphens {} -\unexpanded\def\buff_verbatim_obey_breakpoints +\protected\def\buff_verbatim_obey_breakpoints {\language\minusone % tricky as this affects the pagebuilder \veryraggedright} -\unexpanded\def\buff_verbatim_ignore_hyphens +\protected\def\buff_verbatim_ignore_hyphens {\language\minusone} % tricky as this affects the pagebuilder \def\buff_verbatim_initialize_type_one - {\let\obeylines\ignorelines + {\enforced\let\obeylines\ignorelines \edef\p_buff_option{\typeparameter\c!option}% \ifx\p_buff_option\v!none \usetypestyleandcolor\c!style\c!color @@ -88,15 +88,15 @@ \def\buff_verbatim_initialize_type_two {\spaceskip.5\emwidth\relax - \let\obeyedspace\specialobeyedspace - \let\controlspace\specialcontrolspace + \enforced\let\obeyedspace\specialobeyedspace + \enforced\let\controlspace\specialcontrolspace \edef\p_buff_lines{\typeparameter\c!lines}% \begincsname\??typinglines\p_buff_lines\endcsname \edef\p_buff_space{\typeparameter\c!space}% \begincsname\??typingspace\p_buff_space\endcsname \relax\the\everyinitializeverbatim\relax} -\unexpanded\def\doinitializeverbatim % for use elsewhere .. temp hack (see lxml-ini) +\protected\def\doinitializeverbatim % for use elsewhere .. temp hack (see lxml-ini) {\buff_verbatim_initialize_type_one \buff_verbatim_initialize_type_two} @@ -130,8 +130,8 @@ \def\buff_verbatim_initialize_typing_two {\spaceskip.5\emwidth\relax - \let\obeyedspace\specialobeyedspace - \let\controlspace\specialcontrolspace + \enforced\let\obeyedspace\specialobeyedspace + \enforced\let\controlspace\specialcontrolspace \edef\p_buff_lines{\typingparameter\c!lines}% \begincsname\??typinglines\p_buff_lines\endcsname \edef\p_buff_space{\typingparameter\c!space}% @@ -192,7 +192,7 @@ \def\buff_verbatim_initialize_visualizer#1% {\ifproductionrun\clf_loadvisualizer{#1}\fi} -\unexpanded\def\doifelsevisualizer#1% +\protected\def\doifelsevisualizer#1% {\clf_doifelsevisualizer{#1}} \let\doifvisualizerelse\doifelsevisualizer @@ -264,29 +264,26 @@ {\egroup \typeparameter\c!right} -\unexpanded\def\type{\buff_verbatim_type\empty} -\unexpanded\def\typ {\buff_verbatim_typ \empty} +\permanent\protected\def\type{\buff_verbatim_type\empty} +\permanent\protected\def\typ {\buff_verbatim_typ \empty} -\unexpanded\def\buff_verbatim_type#1% +\protected\def\buff_verbatim_type#1% {\dontleavehmode \bgroup \edef\currenttype{#1}% - \doifelsenextoptionalcs\buff_verbatim_type_yes\buff_verbatim_type_nop} - -\def\buff_verbatim_type_yes[#1]% - {\setupcurrenttype[#1]% - \buff_verbatim_type_nop} + \buff_verbatim_type_indeed} \def\buff_verbatim_typ#1% {\dontleavehmode \bgroup \edef\currenttype{#1}% \lettypeparameter\c!lines\v!hyphenated - \let\specialobeyedspace\specialstretchedspace - \doifelsenextoptionalcs\buff_verbatim_type_yes\buff_verbatim_type_nop} + \enforced\let\specialobeyedspace\specialstretchedspace + \buff_verbatim_type_indeed} -\def\buff_verbatim_type_nop - {\buff_verbatim_left_of_type +\tolerant\def\buff_verbatim_type_indeed[#1]% + {\ifarguments\or\setupcurrenttype[#1]\fi + \buff_verbatim_left_of_type \futureexpand\bgroup\buff_verbatim_type_a\buff_verbatim_type_one} \def\buff_verbatim_type_one @@ -369,33 +366,33 @@ %D right, but a decent hyphenation support of \type{\tt} text will be implemented %D soon. -\unexpanded\def\specialfixedspace {\kern\interwordspace\relax} -\unexpanded\def\specialobeyedspace {\hskip\interwordspace\relax} % better than spaceskip -\unexpanded\def\specialstretchedspace {\hskip.5\interwordspace\s!plus.125\interwordspace\relax} % \interwordstretch can be zero -\unexpanded\def\specialcontrolspace {\normalcontrolspace\allowbreak} % uses fallback +\permanent\protected\def\specialfixedspace {\kern\interwordspace\relax} +\permanent\protected\def\specialobeyedspace {\hskip\interwordspace\relax} % better than spaceskip +\permanent\protected\def\specialstretchedspace {\hskip.5\interwordspace\s!plus.125\interwordspace\relax} % \interwordstretch can be zero +\permanent\protected\def\specialcontrolspace {\normalcontrolspace\allowbreak} % uses fallback -\unexpanded\def\explicitfixedspace {\asciispacechar} -\unexpanded\def\explicitobeyedspace {\asciispacechar\allowbreak} -\unexpanded\def\explicitstretchedspace{\asciispacechar\hskip\zeropoint\s!plus.125\interwordspace\relax}% -\unexpanded\def\explicitcontrolspace {\optionalcontrolspace\allowbreak} % uses asciispace +\permanent\protected\def\explicitfixedspace {\asciispacechar} +\permanent\protected\def\explicitobeyedspace {\asciispacechar\allowbreak} +\permanent\protected\def\explicitstretchedspace{\asciispacechar\hskip\zeropoint\s!plus.125\interwordspace\relax}% +\permanent\protected\def\explicitcontrolspace {\optionalcontrolspace\allowbreak} % uses asciispace \appendtoks - \unexpanded\def\obeyedspace{\hskip\zeropoint\asciispacechar\hskip\zeropoint}% + \protected\def\obeyedspace{\hskip\zeropoint\asciispacechar\hskip\zeropoint}% \to \everyenableelements -\unexpanded\def\obeyhyphens - {\let\obeyedspace \specialobeyedspace % maybe \specialstretchedspace - \let\controlspace\specialcontrolspace +\permanent\protected\def\obeyhyphens + {\enforced\let\obeyedspace \specialobeyedspace % maybe \specialstretchedspace + \enforced\let\controlspace\specialcontrolspace \spaceskip.25\emwidth\relax} % hm a bit of stretch ! -\unexpanded\def\obeybreakpoints +\permanent\protected\def\obeybreakpoints {\ignorehyphens \veryraggedright} -\unexpanded\def\ignorehyphens +\permanent\protected\def\ignorehyphens {\language\minusone % extra bonus, the \null should do the job too - \let\obeyedspace \specialobeyedspace - \let\controlspace\specialcontrolspace + \enforced\let\obeyedspace \specialobeyedspace + \enforced\let\controlspace\specialcontrolspace \spaceskip.5\emwidth\relax} %D \macros @@ -427,21 +424,21 @@ \aftergroup\egroup \let\nexttoken} -\unexpanded\def\tex{\buff_verbatim_special_type\texescape \relax} -\unexpanded\def\arg{\buff_verbatim_special_type\leftargument \rightargument} -\unexpanded\def\mat{\buff_verbatim_special_type\inlinemathmarker \inlinemathmarker} -\unexpanded\def\dis{\buff_verbatim_special_type\displaymathmarker\displaymathmarker} +\protected\def\tex{\buff_verbatim_special_type\texescape \relax} +\protected\def\arg{\buff_verbatim_special_type\leftargument \rightargument} +\protected\def\mat{\buff_verbatim_special_type\inlinemathmarker \inlinemathmarker} +\protected\def\dis{\buff_verbatim_special_type\displaymathmarker\displaymathmarker} \let\normaltexttex\tex \let\normaltextarg\arg \let\normaltextmat\mat \let\normaltextdis\dis -\unexpanded\def\astype +\permanent\protected\def\astype {\dontleavehmode \bgroup\usetypestyleandcolor\c!style\c!color\let\nexttoken} -\unexpanded\def\asciistr#1% used in some old styles +\permanent\protected\def\asciistr#1% used in some old styles {\dontleavehmode\begingroup \dostarttagged\t!verbatim\empty \usetypestyleandcolor\c!style\c!color\detokenize{#1}% @@ -454,20 +451,12 @@ \let\beginofverbatimlines\relax % hooks \let\endofverbatimlines \relax % hooks -\unexpanded\def\buff_verbatim_typing_start#1% tricky non standard lookahead +\protected\def\buff_verbatim_typing_start#1% tricky non standard lookahead {\begingroup \edef\currenttyping{#1}% \obeylines \futureexpandis[\buff_verbatim_typing_start_yes\buff_verbatim_typing_start_nop} -\unexpanded\def\buff_verbatim_setup_keep_together - {\edef\p_keeptogether{\typingparameter\c!keeptogether}% - \ifx\p_keeptogether\v!yes - \settrue \c_buff_optimize_linebreaks - \else - \setfalse\c_buff_optimize_linebreaks - \fi} - \def\buff_verbatim_typing_start_nop {\typingparameter\c!before \startpacked[\v!blank]% @@ -489,7 +478,17 @@ \buff_verbatim_setup_keep_together \normalexpanded{\buff_verbatim_type_block{\e!start\currenttyping}{\e!stop\currenttyping}}} -\unexpanded\def\buff_verbatim_type_block#1#2% +% \startnamedtyping[#1] + +\protected\def\buff_verbatim_setup_keep_together + {\edef\p_keeptogether{\typingparameter\c!keeptogether}% + \ifx\p_keeptogether\v!yes + \settrue \c_buff_optimize_linebreaks + \else + \setfalse\c_buff_optimize_linebreaks + \fi} + +\protected\def\buff_verbatim_type_block#1#2% {\edef\p_strip{\typingparameter\c!strip}% \normalexpanded{\buff_pickup {_typing_}% @@ -499,7 +498,7 @@ {\buff_verbatim_type_block_verbatim_indeed{#1}{#2}}% \ifx\p_strip\v!no\zerocount\else\plusone\fi}} -\unexpanded\def\buff_verbatim_type_block_verbatim_indeed#1#2% +\protected\def\buff_verbatim_type_block_verbatim_indeed#1#2% {\buff_verbatim_initialize_typing_two \dostarttaggedchained\t!verbatimblock\currenttyping\??typing \beginofverbatimlines @@ -518,7 +517,7 @@ \dostoptagged \begincsname#2\endcsname} -\unexpanded\def\buff_verbatim_typing_stop#1% hm, currenttyping +\protected\def\buff_verbatim_typing_stop#1% hm, currenttyping {\stoppacked \typingparameter\c!after \useindentnextparameter\typingparameter @@ -578,27 +577,49 @@ % [category] [settings] {name} % for historic reasons, all filenames are {} -\unexpanded\def\typefile - {\dodoubleempty\buff_verbatim_type_file} - \appendtoks \setuevalue{\e!type\currenttyping\v!file}{\typefile[\currenttyping]}% \to \everydefinetyping -\def\buff_verbatim_type_file[#1][#2]#3% +%% \protected\def\typefile +%% {\dodoubleempty\buff_verbatim_type_file} +%% +%% \def\buff_verbatim_type_file[#1][#2]#3% +%% {\begingroup +%% \ifsecondargument +%% \setuptyping[#1][#2]% +%% \buff_verbatim_type_file_checked{#1}{#3}% +%% \orelse\iffirstargument +%% \ifcondition\validassignment{#1}% +%% \setuptyping[\v!file][#1]% +%% \buff_verbatim_type_file_checked\v!file{#3}% +%% \else +%% \buff_verbatim_type_file_checked{#1}{#3}% +%% \fi +%% \else +%% \buff_verbatim_type_file_checked\v!file{#3}% +%% \fi +%% \useindentnextparameter\typingparameter % needs checking +%% \endgroup +%% \dorechecknextindentation} % needs checking + +\permanent\tolerant\protected\def\typefile[#1]#*[#2]% + {\buff_verbatim_type_file{#1}{#2}} + +\def\buff_verbatim_type_file#1#2#3% {\begingroup - \ifsecondargument - \setuptyping[#1][#2]% - \buff_verbatim_type_file_checked{#1}{#3}% - \orelse\iffirstargument + \ifarguments + \buff_verbatim_type_file_checked\v!file{#3}% + \or \ifcondition\validassignment{#1}% \setuptyping[\v!file][#1]% \buff_verbatim_type_file_checked\v!file{#3}% \else \buff_verbatim_type_file_checked{#1}{#3}% \fi - \else - \buff_verbatim_type_file_checked\v!file{#3}% + \or + \setuptyping[#1][#2]% + \buff_verbatim_type_file_checked{#1}{#3}% \fi \useindentnextparameter\typingparameter % needs checking \endgroup @@ -609,7 +630,7 @@ {\buff_verbatim_type_file_indeed{#1}\askedtypingfile} {\showmessage\m!verbatims1{#2}}} -\unexpanded\def\doifelsetypingfile#1% +\permanent\protected\def\doifelsetypingfile#1% {\edef\askedtypingfile{\locfilename{#1}}% \ifempty\askedtypingfile \edef\askedtypingfile{\locfilename{#1.tex}}% downward compatible @@ -620,7 +641,7 @@ \expandafter\firstoftwoarguments \fi} -\let\doiftypingfileelse\doifelsetypingfile +\aliased\let\doiftypingfileelse\doifelsetypingfile \def\buff_verbatim_type_file_indeed#1#2% category name {\edef\currenttyping{#1}% @@ -651,7 +672,7 @@ \newconditional\verbatimnumberinglines -\def\beginofverbatimlinenumbering +\permanent\protected\def\beginofverbatimlinenumbering {\startlinenumbering [\currenttyping]% [\c!continue=\typingparameter\c!continue, @@ -660,7 +681,7 @@ \c!stop=\typingparameter\c!stop, % ? \c!step=\typingparameter\c!step]} -\def\endofverbatimlinenumbering +\overloaded\protected\def\endofverbatimlinenumbering {\stoplinenumbering} \def\buff_verbatim_setup_line_numbering @@ -675,8 +696,8 @@ \setfalse\verbatimnumberinglines \fi \ifconditional\verbatimnumberinglines - \let\beginofverbatimlines\beginofverbatimlinenumbering - \let\endofverbatimlines \endofverbatimlinenumbering + \enforced\let\beginofverbatimlines\beginofverbatimlinenumbering + \enforced\let\endofverbatimlines \endofverbatimlinenumbering \fi \fi} @@ -691,14 +712,14 @@ %D %D The definition is not that spectacular. -\unexpanded\def\filename#1{{\tttf\hyphenatedfilename{#1}}} +\permanent\protected\def\filename#1{{\tttf\hyphenatedfilename{#1}}} %D \macros %D {verbatim} %d %D And a bonus macro, an unexpanded detokenize: -\unexpanded\def\verbatim#1{\detokenize{#1}} +\permanent\protected\def\verbatim#1{\detokenize{#1}} %D The setups for display verbatim and file verbatim are shared. One can adapt the %D extra defined typing environments, but they also default to the values below. @@ -762,18 +783,12 @@ % [name] [settings] | [name] | [settings] -% \unexpanded\def\typebuffer -% {\dodoubleempty\buff_verbatim_type_buffer} - -\unexpanded\def\typebuffer +\permanent\protected\def\typebuffer {\begingroup \let\currenttyping\v!buffer - \dodoubleempty\buff_verbatim_type_buffer} - -\unexpanded\def\buff_verbatim_type_defined_buffer - {\dotripleempty\buff_verbatim_type_defined_buffer_indeed} + \buff_verbatim_type_buffer} -\unexpanded\def\typedefinedbuffer[#1]% +\protected\def\typedefinedbuffer[#1]% {\buff_verbatim_type_defined_buffer[\v!buffer][\thedefinedbuffer{#1}]}% \appendtoks @@ -784,32 +799,32 @@ \setuevalue{\e!type\currenttyping\v!buffer}{\buff_verbatim_type_buffer_class{\currenttyping}}% \to \everydefinetyping -\unexpanded\def\buff_verbatim_type_buffer[#1][#2]% - {\ifsecondargument - \setupcurrenttyping[#2]% - \processcommalist[#1]{\buff_verbatim_type_buffer_indeed\currenttyping}% [name] [settings] - \orelse\iffirstargument - \ifcondition\validassignment{#1}% +\tolerant\protected\def\buff_verbatim_type_buffer[#1]#*[#2]% + {\ifarguments + \buff_verbatim_type_buffer_indeed\currenttyping\empty% [] + \or + \ifhastok={#1}% \setupcurrenttyping[#1]% \buff_verbatim_type_buffer_indeed\currenttyping\empty% [settings] \else \processcommalist[#1]{\buff_verbatim_type_buffer_indeed\currenttyping}% [name] \fi - \else - \buff_verbatim_type_buffer_indeed\currenttyping\empty% [] + \or + \setupcurrenttyping[#2]% + \processcommalist[#1]{\buff_verbatim_type_buffer_indeed\currenttyping}% [name] [settings] \fi \useindentnextparameter\typingparameter \endgroup \dorechecknextindentation} -\unexpanded\def\buff_verbatim_type_buffer_class#1% +\protected\def\buff_verbatim_type_buffer_class#1% {\begingroup \edef\currenttyping{#1}% - \dodoubleempty\buff_verbatim_type_buffer} + \buff_verbatim_type_buffer} -\unexpanded\def\buff_verbatim_type_defined_buffer_indeed[#1][#2][#3]% category name settings +\tolerant\protected\def\buff_verbatim_type_defined_buffer[#1]#*[#2]#*[#3]% category name settings {\begingroup - \ifthirdargument + \ifarguments\or\or\or \setuptyping[#1][#3]% \fi \buff_verbatim_type_buffer_indeed{#1}{#2}% @@ -817,7 +832,7 @@ \endgroup \dorechecknextindentation} -\unexpanded\def\buff_verbatim_type_buffer_indeed#1#2% category name +\protected\def\buff_verbatim_type_buffer_indeed#1#2% category name {\edef\currenttyping{#1}% \typingparameter\c!before \startpacked[\v!blank] @@ -843,15 +858,15 @@ \stoppacked \typingparameter\c!after} -\unexpanded\def\typeinlinebuffer +\permanent\protected\def\typeinlinebuffer {\dontleavehmode \begingroup \let\buff_verbatim_type_buffer_indeed\buff_verbatim_type_buffer_indeed_inline \let\setupcurrenttyping\setupcurrenttype % a terrible hack but it saves code \let\currenttype\empty - \dodoubleempty\buff_verbatim_type_buffer} + \buff_verbatim_type_buffer} -\unexpanded\def\buff_verbatim_type_buffer_indeed_inline#1#2% category name +\protected\def\buff_verbatim_type_buffer_indeed_inline#1#2% category name {\edef\currenttype{#1}% \buff_verbatim_initialize_type_one \dostarttaggedchained\t!verbatim\currenttype\??type @@ -871,24 +886,22 @@ % the next one is obsolete (bad name and used nowhere) so if it stays % the name will change -\unexpanded\def\processbuffer +\permanent\tolerant\protected\def\processbuffer[#1]#*[#2]% {\writestatus{nota bene}{\string\processbuffer\space is obsolete}% - \dodoubleempty\buff_verbatim_process} - -\def\buff_verbatim_process[#1][#2]% - {\begingroup - \ifsecondargument - \setuptyping[\v!buffer][#2]% - \processcommalist[#1]{\buff_verbatim_process_indeed\v!buffer}% [name] [settings] - \orelse\iffirstargument - \ifcondition\validassignment{#1}% + \begingroup + \ifarguments + \buff_verbatim_process_indeed\v!buffer\empty% [] + \or + %\ifcondition\validassignment{#1}% + \ifhastok={#1}% \setuptyping[\v!buffer][#1]% \buff_verbatim_process_indeed\v!buffer\empty% [settings] \else \processcommalist[#1]{\buff_verbatim_process_indeed\v!buffer}% [name] \fi - \else - \buff_verbatim_process_indeed\v!buffer\empty% [] + \or + \setuptyping[\v!buffer][#2]% + \processcommalist[#1]{\buff_verbatim_process_indeed\v!buffer}% [name] [settings] \fi \endgroup} @@ -908,7 +921,7 @@ \newcount\nofverbatimlines -\unexpanded\def\buff_verbatim_begin_of_line +\protected\def\buff_verbatim_begin_of_line {\ifconditional\verbatimnumberinglines \global\advance\nofverbatimlines\plusone \c_attr_verbatimline\nofverbatimlines @@ -917,10 +930,9 @@ \buff_verbatim_set_line_margin \the\everyline % maybe also after starttagged \strut % after starttagged, else break ! - \dostarttagged\t!verbatimline\empty - } + \dostarttagged\t!verbatimline\empty} -\unexpanded\def\buff_verbatim_end_of_line +\protected\def\buff_verbatim_end_of_line {\dostoptagged \obeyedline % still needed? \par @@ -928,7 +940,7 @@ \c_attr_verbatimline\attributeunsetvalue \fi} -\unexpanded\def\buff_verbatim_empty_line +\protected\def\buff_verbatim_empty_line {\dostoptagged \ifconditional\verbatimnumberinglines \par\strut\par % this will be an option where we use a signal instead of a strut @@ -937,7 +949,7 @@ \fi \dostarttagged\t!verbatimlines\empty} -% hooks: +% hooks (todo: frozen): \newcount \c_buff_verbatim_noflines \newcount \c_buff_verbatim_current @@ -945,25 +957,25 @@ \def\doverbatimspace {\obeyedspace} -\unexpanded\def\doinlineverbatimstart {} -\unexpanded\def\doinlineverbatimstop {} -\unexpanded\def\doinlineverbatimbeginline {} -\unexpanded\def\doinlineverbatimnewline {\obeyedspace} -\unexpanded\def\doinlineverbatimemptyline {\obeyedspace} - -\unexpanded\def\dodisplayverbatimstart {\advance\c_buff_verbatim_current\plusone - \buff_verbatim_begin_of_line} -\unexpanded\def\dodisplayverbatimstop {\buff_verbatim_end_of_line} -\unexpanded\def\dodisplayverbatimbeginline{\advance\c_buff_verbatim_current\plusone - \buff_verbatim_begin_of_line} -\unexpanded\def\dodisplayverbatimnewline {\buff_verbatim_end_of_line - \par - \ifconditional\c_buff_optimize_linebreaks - \buff_verbatim_inject_breaks - \fi} -\unexpanded\def\dodisplayverbatimemptyline{\buff_verbatim_empty_line} - -\unexpanded\def\buff_verbatim_inject_breaks +\protected\def\doinlineverbatimstart {} +\protected\def\doinlineverbatimstop {} +\protected\def\doinlineverbatimbeginline {} +\protected\def\doinlineverbatimnewline {\obeyedspace} +\protected\def\doinlineverbatimemptyline {\obeyedspace} + +\protected\def\dodisplayverbatimstart {\advance\c_buff_verbatim_current\plusone + \buff_verbatim_begin_of_line} +\protected\def\dodisplayverbatimstop {\buff_verbatim_end_of_line} +\protected\def\dodisplayverbatimbeginline{\advance\c_buff_verbatim_current\plusone + \buff_verbatim_begin_of_line} +\protected\def\dodisplayverbatimnewline {\buff_verbatim_end_of_line + \par + \ifconditional\c_buff_optimize_linebreaks + \buff_verbatim_inject_breaks + \fi} +\protected\def\dodisplayverbatimemptyline{\buff_verbatim_empty_line} + +\protected\def\buff_verbatim_inject_breaks {\ifnum\c_buff_verbatim_current=\plusone \nobreak \orelse\ifnum\c_buff_verbatim_noflines=\plusthree @@ -972,7 +984,7 @@ \nobreak \fi} -\unexpanded\def\dodisplayverbatiminitialize#1% +\protected\def\dodisplayverbatiminitialize#1% {\forgetparindent % maybe more \c_buff_verbatim_noflines#1\relax \c_buff_verbatim_current\zerocount} @@ -991,22 +1003,21 @@ % \setuevalue{\currentvisualizer}{\buff_verbatim_visualize{\currentvisualizer}}% % \to \everydefinevisualizer % -% \unexpanded\def\buff_verbatim_visualize#1% +% \protected\def\buff_verbatim_visualize#1% % {\bgroup % \def\currentvisualizer{#1}% % \usevisualizerstyleandcolor\c!style\c!color % \let\next} \appendtoks - %def\type#1{\letterbackslash\checkedstrippedcsname#1}% or maybe detokenize - \def\type#1{\detokenize\expandafter{\csstring#1}}% or maybe detokenize - \def\tex #1{\letterbackslash#1}% + \enforced\def\type#1{\detokenize\expandafter{\csstring#1}}% or maybe detokenize + \enforced\def\tex #1{\letterbackslash#1}% \to \everysimplifycommands \stopcontextdefinitioncode %D This is \type {\asciimode} without the double comment hackery: -\unexpanded\def\literalmode{\setcatcodetable\txtcatcodes} +\protected\def\literalmode{\setcatcodetable\txtcatcodes} \protect \endinput diff --git a/tex/context/base/mkiv/catc-ctx.mkiv b/tex/context/base/mkiv/catc-ctx.mkiv index 3492a4bc5..c86201a78 100644 --- a/tex/context/base/mkiv/catc-ctx.mkiv +++ b/tex/context/base/mkiv/catc-ctx.mkiv @@ -125,6 +125,7 @@ \catcodetable \ctxcatcodes \let \defaultcatcodetable \ctxcatcodes +% \defaultcatcodetable \ctxcatcodes % also an option % for the moment here: diff --git a/tex/context/base/mkiv/catc-ctx.mkxl b/tex/context/base/mkiv/catc-ctx.mkxl new file mode 100644 index 000000000..fcaec65d0 --- /dev/null +++ b/tex/context/base/mkiv/catc-ctx.mkxl @@ -0,0 +1,162 @@ +%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 +\ifdefined \txtcatcodes \else \newcatcodetable \txtcatcodes \fi +%ifdefined \mthcatcodes \else \newcatcodetable \mthcatcodes \fi % math, not used, too tricky +\ifdefined \tpacatcodes \else \newcatcodetable \tpacatcodes \fi % { } +\ifdefined \tpbcatcodes \else \newcatcodetable \tpbcatcodes \fi % < > + +\setnewconstant \doublecommentsignal "10FF25 %% < 110000 (last valid range) + +\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\underscoreasciicode\othercatcode + \catcode\circumflexasciicode\othercatcode + \catcode\ampersandasciicode \othercatcode + \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 % candidate + \catcode\underscoreasciicode \lettercatcode + \catcode\ampersandasciicode \alignmentcatcode + \catcode\backslashasciicode \escapecatcode + \catcode\leftbraceasciicode \begingroupcatcode + \catcode\rightbraceasciicode \endgroupcatcode + \catcode\dollarasciicode \mathshiftcatcode + \catcode\hashasciicode \parametercatcode + \catcode\commentasciicode \commentcatcode + \catcode\atsignasciicode \lettercatcode + \catcode\exclamationmarkasciicode\lettercatcode + \catcode\questionmarkasciicode \lettercatcode + \catcode\tildeasciicode \activecatcode + \catcode\barasciicode \activecatcode +\stopcatcodetable + +\startcatcodetable \tpacatcodes + \catcode\tabasciicode \othercatcode + \catcode\endoflineasciicode \othercatcode + \catcode\formfeedasciicode \othercatcode + \catcode\spaceasciicode \othercatcode + \catcode\endoffileasciicode \othercatcode + \catcode\leftbraceasciicode \begingroupcatcode + \catcode\rightbraceasciicode\endgroupcatcode +\stopcatcodetable + +\startcatcodetable \tpbcatcodes + \catcode\tabasciicode \othercatcode + \catcode\endoflineasciicode \othercatcode + \catcode\formfeedasciicode \othercatcode + \catcode\spaceasciicode \othercatcode + \catcode\endoffileasciicode \othercatcode + \catcode\lessthanasciicode \begingroupcatcode + \catcode\morethanasciicode \endgroupcatcode +\stopcatcodetable + +\startcatcodetable \txtcatcodes + \catcode\tabasciicode \spacecatcode + \catcode\endoflineasciicode \endoflinecatcode + \catcode\formfeedasciicode \endoflinecatcode + \catcode\spaceasciicode \spacecatcode + \catcode\endoffileasciicode \ignorecatcode + \catcode\backslashasciicode \escapecatcode + \catcode\leftbraceasciicode \begingroupcatcode + \catcode\rightbraceasciicode\endgroupcatcode + \catcode\doublecommentsignal\commentcatcode +\stopcatcodetable + +\letcatcodecommand \ctxcatcodes \barasciicode \relax +\letcatcodecommand \ctxcatcodes \tildeasciicode \relax + +\pushoverloadmode + + \catcodetable \ctxcatcodes +\let \defaultcatcodetable \ctxcatcodes + +\popoverloadmode + +% for the moment here: + +\permanent\protected\def\starttexcode + {\pushcatcodetable + \catcodetable\prtcatcodes} + +\permanent\protected\def\stoptexcode + {\popcatcodetable} + +\permanent\protected\def\startcontextcode + {\pushcatcodetable + \catcodetable\ctxcatcodes} + +\permanent\protected\def\stopcontextcode + {\popcatcodetable} + +% not visible, only for special cases + +\newcatcodetable \ctdcatcodes % context definitions + +\startcatcodetable \ctdcatcodes + \catcode\tabasciicode \ignorecatcode + \catcode\endoflineasciicode \ignorecatcode + \catcode\formfeedasciicode \ignorecatcode + \catcode\spaceasciicode \ignorecatcode + \catcode\endoffileasciicode \ignorecatcode + \catcode\circumflexasciicode \superscriptcatcode % candidate + \catcode\underscoreasciicode \lettercatcode + \catcode\ampersandasciicode \alignmentcatcode +% \catcode\colonasciicode \lettercatcode % candidate + \catcode\backslashasciicode \escapecatcode + \catcode\leftbraceasciicode \begingroupcatcode + \catcode\rightbraceasciicode \endgroupcatcode + \catcode\dollarasciicode \mathshiftcatcode + \catcode\hashasciicode \parametercatcode + \catcode\commentasciicode \commentcatcode + \catcode\atsignasciicode \lettercatcode + \catcode\exclamationmarkasciicode\lettercatcode + \catcode\questionmarkasciicode \lettercatcode + \catcode\tildeasciicode \activecatcode + \catcode\barasciicode \activecatcode +\stopcatcodetable + +\permanent\protected\def\startcontextdefinitioncode + {\pushcatcodetable + \catcodetable\ctdcatcodes} + +\permanent\protected\def\stopcontextdefinitioncode + {\popcatcodetable} + +\endinput diff --git a/tex/context/base/mkiv/catc-ini.mkxl b/tex/context/base/mkiv/catc-ini.mkxl new file mode 100644 index 000000000..fb1b5b359 --- /dev/null +++ b/tex/context/base/mkiv/catc-ini.mkxl @@ -0,0 +1,329 @@ +%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. + +\registerctxluafile{catc-ini}{} + +\unprotect + +%D A long standing wish has been the availability of catcode arrays. Because +%D traditional \TEX\ does not provide this we implement a fake method in the +%D \MKII\ file. There is some overlap in code with \MKII\ but we take that +%D for granted. Also, in \MKIV\ less active characters are used. + +% \begingroup +% +% \catcode\tabasciicode \activecatcode +% \catcode\formfeedasciicode \activecatcode +% \catcode\endoflineasciicode\activecatcode +% +% \letcharcode\tabasciicode \relax +% \letcharcode\newlineasciicode \relax +% \letcharcode\formfeedasciicode \relax +% \letcharcode\endoflineasciicode\relax +% +% \xdef\activetabtoken {\Uchar\tabasciicode } % \gdef\activetabtoken {^^I} +% \xdef\outputnewlinechar {\Uchar\newlineasciicode } % \gdef\outputnewlinechar {^^J} +% \xdef\activeformfeedtoken {\Uchar\formfeedasciicode } % \gdef\activeformfeedtoken {^^L} +% \xdef\activeendoflinetoken{\Uchar\endoflineasciicode} % \gdef\activeendoflinetoken{^^M} +% +% \endgroup + +\begingroup + \letcharcode\newlineasciicode\relax \xdef\outputnewlinechar{\Uchar\newlineasciicode} +\endgroup + +% \endlinechar = \endoflineasciicode % appended to input lines +% \newlinechar = \newlineasciicode % can be used in write + +% rather special and used in writing to file: \let\par\outputnewlinechar + +% \protected\def\initializenewlinechar % operating system dependent +% {\begingroup +% \newlinechar\newlineasciicode +% \xdef\outputnewlinechar{^^J}% +% \endgroup} + +\permanent\protected\def\initializenewlinechar % operating system dependent + {\begingroup + \letcharcode\newlineasciicode\relax + \newlinechar\newlineasciicode + \xdef\outputnewlinechar{\Uchar\newlineasciicode}% + \endgroup} + +%D We predefine some prefixes ahead of syst-aux and mult-sys. + +% We reserve 8 slots for catcodes. +% +% \def\??catcodelet {1>>} % let : \let +% \def\??catcodedef {2>>} % def : \def +% \def\??catcodeued {3>>} % ued : \protected\def +% \def\??catcodeget {4>>} % \meaning +% +% \def\??catcodetablet{5>>} +% \def\??catcodetablen{6>>} + +\installsystemnamespace {catcodelet} % let : \let +\installsystemnamespace {catcodedef} % def : \def +\installsystemnamespace {catcodeued} % ued : \protected\def +\installsystemnamespace {catcodeget} % \meaning + +\installsystemnamespace {catcodetablet} +\installsystemnamespace {catcodetablen} + +\newcount\c_syst_catcodes_n \c_syst_catcodes_n\zerocount % 0 = signal, so advance before allocate +\newcount\c_syst_catcodes_a +\newcount\c_syst_catcodes_b +\newcount\c_syst_catcodes_c + +\permanent\protected\def\newcatcodetable#1% we could move the cctdefcounter to lua + {\global\advance\c_syst_catcodes_n\plusone + \expandafter\xdef\csname\??catcodetablen\number\c_syst_catcodes_n\endcsname{\string#1}% logging + %\setnewconstant#1\c_syst_catcodes_n + \overloaded\integerdef#1\c_syst_catcodes_n + \ctxcommand{registercatcodetable("\expandafter\gobbleoneargument\string#1",\number#1)}} + +\newtoks \everysetdefaultcatcodes + +\everysetdefaultcatcodes % this might get dropped + {\catcode\backslashasciicode\othercatcode + \catcode\endoflineasciicode\othercatcode + \catcode\spaceasciicode \othercatcode + \catcode\commentasciicode \othercatcode + \catcode\delasciicode \othercatcode} + +\permanent\protected\def\startcatcodetable#1#2\stopcatcodetable + {\begingroup + \catcodetable\inicatcodes + \the\everysetdefaultcatcodes + #2% + \savecatcodetable#1\relax + \endgroup} + +\permanent\let\stopcatcodetable\relax + +\permanent\protected\def\startextendcatcodetable#1#2\stopextendcatcodetable + {\begingroup + \catcodetable#1\relax + \globaldefs\plusone + #2% + \globaldefs\zerocount + \endgroup} + +\permanent\let\stopextendcatcodetable\relax + +\permanent\protected\def\permitcircumflexescape % to be used grouped + {\catcode\circumflexasciicode\superscriptcatcode} + +\let\permitcaretescape\permitcircumflexescape + +% == +% +% \protected\def\startextendcatcodetable#1#2\stopextendcatcodetable +% {\bgroup +% \scratchcounter\the\catcodetable +% \catcodetable #1 #2 +% \catcodetable\scratchcounter +% \egroup} + +%D The next command can be defined in a cleaner way in the MkIV way but we want +%D to have a fast one with a minimal chance for interference. Do we still need +%D this complex mechanism? Probably not. Future versions of \MKIV\ might only use +%D active characters for very special cases. + +\setnewconstant\c_syst_catcodes_hack\tildeasciicode + +%D Once a catcode is assigned, the next assignments will happen faster. However, +%D redefinitions probably happen seldom so it's sort of overkill. + +\permanent\def\letcatcodecommand{\afterassignment\syst_catcodes_let_a\c_syst_catcodes_a} +\permanent\def\defcatcodecommand{\afterassignment\syst_catcodes_def_a\c_syst_catcodes_a} +\permanent\def\uedcatcodecommand{\afterassignment\syst_catcodes_ued_a\c_syst_catcodes_a} + +\def\syst_catcodes_let_a{\afterassignment\syst_catcodes_let_b\c_syst_catcodes_b} +\def\syst_catcodes_def_a{\afterassignment\syst_catcodes_def_b\c_syst_catcodes_b} +\def\syst_catcodes_ued_a{\afterassignment\syst_catcodes_ued_b\c_syst_catcodes_b} + +\def\syst_catcodes_let_b % each time + {\ifcsname\??catcodelet\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname + \expandafter\lastnamedcs + \else + \expandafter\syst_catcodes_let_c + \fi} + +\def\syst_catcodes_def_b % each time + {\ifcsname\??catcodedef\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname + \expandafter\lastnamedcs + \else + \expandafter\syst_catcodes_def_c + \fi} + +\def\syst_catcodes_ued_b % each time + {\ifcsname\??catcodeued\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname + \expandafter\lastnamedcs + \else + \expandafter\syst_catcodes_ued_c + \fi} + +\def\syst_catcodes_let_c % only first time + {\frozen\enforced\global\expandafter\def\csname\??catcodelet\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname\expandafter + {\enforced\expandafter\let\csname\??catcodeget\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname}% + \syst_catcodes_reinstate_unexpanded + \csname\??catcodelet\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname} + +\def\syst_catcodes_def_c % only first time (we could use \normalexpanded here) + {\frozen\enforced\global\expandafter\def\csname\??catcodedef\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname + \expandafter##\expandafter1\expandafter + {\frozen\enforced\expandafter\def\csname\??catcodeget\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname{##1}}% + \syst_catcodes_reinstate_normal + \csname\??catcodedef\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname} + +\def\syst_catcodes_ued_c % only first time + {\frozen\enforced\global\expandafter\def\csname\??catcodeued\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\expandafter\endcsname + \expandafter##\expandafter1\expandafter + {\frozen\enforced\protected\expandafter\def\csname\??catcodeget\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname{##1}}% + \syst_catcodes_reinstate_unexpanded + \csname\??catcodeued\number\c_syst_catcodes_a:\number\c_syst_catcodes_b\endcsname} + +\permanent\def\reinstatecatcodecommand{\afterassignment\syst_catcodes_reinstate_normal\c_syst_catcodes_b} + +% \def\syst_catcodes_reinstate_normal % can be used when a direct definition has been done +% {\begingroup % and the selector has been lost +% \uccode\c_syst_catcodes_hack\c_syst_catcodes_b +% \catcode\uccode\c_syst_catcodes_hack\activecatcode +% \uppercase{\xdef~{\noexpand\catcodecommand{\number\c_syst_catcodes_b}}}% +% \endgroup} + +% \def\syst_catcodes_reinstate_unexpanded % can be used when a direct definition has been done +% {\begingroup % and the selector has been lost +% \uccode\c_syst_catcodes_hack\c_syst_catcodes_b +% \catcode\uccode\c_syst_catcodes_hack\activecatcode +% \uppercase{\protected\xdef~{\noexpand\catcodecommand{\number\c_syst_catcodes_b}}}% +% \endgroup} + +%D This can be used when a direct definition has been done and the selector has been +%D lost. + +% problem: \next needs to be unique (as it gets bound) + +\def\syst_catcodes_reinstate_normal + {\begingroup + \edef\c_syst_char_code{\noexpand\catcodecommand{\number\c_syst_catcodes_b}}% + \global\letcharcode\c_syst_catcodes_b\c_syst_char_code + \endgroup} + +\def\syst_catcodes_reinstate_unexpanded + {\begingroup + \protected\edef\c_syst_char_code{\noexpand\catcodecommand{\number\c_syst_catcodes_b}}% + \global\letcharcode\c_syst_catcodes_b\c_syst_char_code + \endgroup} + +\newconstant\defaultcatcodetable + +\permanent\def\catcodecommand#1% + {\csname\??catcodeget\number + \ifcsname\??catcodeget\number\currentcatcodetable:\number#1\endcsname + \currentcatcodetable \else \defaultcatcodetable + \fi + :\number#1\endcsname} + +%D \macros +%D {restorecatcodes,pushcatcodetable,popcatcodetable} +%D +%D We're not finished dealing \CATCODES\ yet. In \CONTEXT\ we use only one auxiliary +%D file, which deals with tables of contents, registers, two pass tracking, references +%D etc. This file, as well as files concerning graphics, is processed when needed, +%D which can be in the mid of typesetting verbatim. However, when reading in data in +%D verbatim mode, we should temporary restore the normal \CATCODES, and that's exactly +%D what the next macros do. Saving the catcodes can be disabled by saying \type +%D {\localcatcodestrue}. In \MKIV\ instead we can push and pop catcode tables and as +%D we keep track of used tables users seldom need to deal with this themselves. + +\newcount\c_syst_catcodes_level + +\permanent\protected\def\pushcatcodetable + {\advance\c_syst_catcodes_level\plusone + \syst_catcodes_trace_push + \expandafter\chardef\csname\??catcodetablet\number\c_syst_catcodes_level\endcsname\currentcatcodetable} + +\permanent\protected\def\popcatcodetable + {\ifcase\c_syst_catcodes_level + \syst_catcodes_trace_nesting_error + \else + \expandafter\catcodetable\csname\??catcodetablet\number\c_syst_catcodes_level\endcsname + \syst_catcodes_trace_pop + \advance\c_syst_catcodes_level\minusone + \fi} + +\protected\def\syst_catcodes_trace_nesting_error + {\immediate\write\statuswrite{}% + \immediate\write\statuswrite{Fatal error: catcode push/pop mismatch. Fix this! (restore level: \number\c_syst_catcodes_level)}\wait\end + \immediate\write\statuswrite{}} + +\permanent\protected\def\restorecatcodes % takes previous level + {\ifnum\c_syst_catcodes_level>\plusone + \expandafter\catcodetable\csname\??catcodetablet\number\numexpr\c_syst_catcodes_level-1\relax\endcsname + \fi} + +% \newtoks\everycatcodetable + +\permanent\protected\def\setcatcodetable#1% + {\catcodetable#1% +% \the\everycatcodetable + \syst_catcodes_trace_set} + +%D Handy for debugging: +%D +%D \starttyping +%D \tracecatcodetables +%D \stoptyping + +\permanent\protected\def\tracecatcodetables + {\def\syst_catcodes_trace_set {\syst_catcodes_trace{set \catcodetablename\space at \number\c_syst_catcodes_level}}% + \def\syst_catcodes_trace_push{\syst_catcodes_trace{push \catcodetablename\space from \syst_catcodes_prev\space at \number\c_syst_catcodes_level}}% + \def\syst_catcodes_trace_pop {\syst_catcodes_trace{pop \catcodetablename\space to \syst_catcodes_prev\space at \number\c_syst_catcodes_level}}} + +\def\syst_catcodes_trace#1{\immediate\write\statuswrite{[#1]}} + +\def\syst_catcodes_prev + {\ifnum\numexpr\c_syst_catcodes_level-1\relax>\zerocount + \csname\??catcodetablen\number\csname\??catcodetablet\number\numexpr\c_syst_catcodes_level-1\relax\endcsname\endcsname + \else + -% + \fi} + +\def\catcodetablename + {\ifnum\currentcatcodetable>\zerocount + \csname\??catcodetablen\number\currentcatcodetable\endcsname + \else + -% + \fi} + +\let\syst_catcodes_trace_set \empty +\let\syst_catcodes_trace_push\empty +\let\syst_catcodes_trace_pop \empty + +% \tracecatcodetables + +\protect + +%D We still have to define these so let's do that now: + +\newcatcodetable \inicatcodes +\initcatcodetable\inicatcodes + +\let\currentcatcodetable\catcodetable + +\endinput diff --git a/tex/context/base/mkiv/char-def.lua b/tex/context/base/mkiv/char-def.lua index 51a227cb5..70e564399 100644 --- a/tex/context/base/mkiv/char-def.lua +++ b/tex/context/base/mkiv/char-def.lua @@ -429,7 +429,7 @@ characters.data={ direction="on", linebreak="al", mathclass="binary", - mathname="ast", +--mathname="ast", mathsymbol=0x2217, synonyms={ "star" }, unicodeslot=0x2A, @@ -4893,7 +4893,7 @@ characters.data={ { adobename="Vhook", category="lu", - contextname="Uhook", + contextname="Vhook", description="LATIN CAPITAL LETTER V WITH HOOK", direction="l", lccode=0x28B, @@ -10546,7 +10546,7 @@ characters.data={ direction="l", linebreak="al", mathclass="ordinary", - mathname="varkappa", +--mathname="varkappa", specials={ "compat", 0x3BA }, uccode=0x39A, unicodeslot=0x3F0, @@ -58794,7 +58794,6 @@ characters.data={ [0x1EF6]={ adobename="Yhookabove", category="lu", - contextname="Yhook", description="LATIN CAPITAL LETTER Y WITH HOOK ABOVE", direction="l", lccode=0x1EF7, @@ -58806,7 +58805,6 @@ characters.data={ [0x1EF7]={ adobename="yhookabove", category="ll", - contextname="yhook", description="LATIN SMALL LETTER Y WITH HOOK ABOVE", direction="l", linebreak="al", @@ -60767,7 +60765,7 @@ characters.data={ }, [0x1FBB]={ category="lu", - contextname="greekAlphatonos", + comment="conflict: greekAlphatonos", description="GREEK CAPITAL LETTER ALPHA WITH OXIA", direction="l", lccode=0x1F71, @@ -60897,7 +60895,7 @@ characters.data={ }, [0x1FC9]={ category="lu", - contextname="greekEpsilontonos", + comment="conflict: greekEpsilontonos", description="GREEK CAPITAL LETTER EPSILON WITH OXIA", direction="l", lccode=0x1F73, @@ -60919,7 +60917,7 @@ characters.data={ }, [0x1FCB]={ category="lu", - contextname="greekEtatonos", + comment="conflict: greekEtatonos", description="GREEK CAPITAL LETTER ETA WITH OXIA", direction="l", lccode=0x1F75, @@ -60950,7 +60948,7 @@ characters.data={ }, [0x1FCE]={ category="sk", - contextname="greekpsilitonos", + comment="conflict: greekpsilitonos", description="GREEK PSILI AND OXIA", direction="on", linebreak="al", @@ -61000,7 +60998,7 @@ characters.data={ }, [0x1FD3]={ category="ll", - contextname="greekiotadialytikatonos", + comment="conflict: greekiotadialytikatonos", description="GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA", direction="l", linebreak="al", @@ -61063,7 +61061,7 @@ characters.data={ }, [0x1FDB]={ category="lu", - contextname="greekIotatonos", + comment="conflict: greekIotatonos", description="GREEK CAPITAL LETTER IOTA WITH OXIA", direction="l", lccode=0x1F77, @@ -61083,7 +61081,7 @@ characters.data={ }, [0x1FDE]={ category="sk", - contextname="greekdasiatonos", + comment="conflict: greekdasiatonos", description="GREEK DASIA AND OXIA", direction="on", linebreak="al", @@ -61133,7 +61131,7 @@ characters.data={ }, [0x1FE3]={ category="ll", - contextname="greekupsilondialytikatonos", + comment="conflict: greekupsilondialytikatonos", description="GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA", direction="l", linebreak="al", @@ -61217,7 +61215,7 @@ characters.data={ }, [0x1FEB]={ category="lu", - contextname="greekUpsilontonos", + comment="conflict: greekUpsilontonos", description="GREEK CAPITAL LETTER UPSILON WITH OXIA", direction="l", lccode=0x1F7B, @@ -61248,7 +61246,7 @@ characters.data={ }, [0x1FEE]={ category="sk", - contextname="greekdialytikatonos", + comment="conflict: greekdialytikatonos", description="GREEK DIALYTIKA AND OXIA", direction="on", linebreak="al", @@ -61328,7 +61326,7 @@ characters.data={ }, [0x1FF9]={ category="lu", - contextname="greekOmicrontonos", + comment="conflict: greekOmicrontonos", description="GREEK CAPITAL LETTER OMICRON WITH OXIA", direction="l", lccode=0x1F79, @@ -61350,7 +61348,7 @@ characters.data={ }, [0x1FFB]={ category="lu", - contextname="greekOmegatonos", + comment="conflict: greekOmegatonos", description="GREEK CAPITAL LETTER OMEGA WITH OXIA", direction="l", lccode=0x1F7D, @@ -63212,10 +63210,10 @@ characters.data={ direction="nsm", linebreak="cm", mathspec={ - { - class="default", - name="bigcircle", - }, +-- { +-- class="default", +-- name="bigcircle", +-- }, { class="binary", name="bigcircle", @@ -65221,7 +65219,7 @@ characters.data={ [0x21B5]={ adobename="carriagereturn", category="so", - contextname="carriagereturn", + comment="conflict: carriagereturn", description="DOWNWARDS ARROW WITH CORNER LEFTWARDS", direction="on", linebreak="al", @@ -135799,7 +135797,7 @@ characters.data={ }, [0xFDF9]={ category="lo", - contextname="arabicsalla", + comment="conflict: arabicsalla", description="ARABIC LIGATURE SALLA ISOLATED FORM", direction="al", linebreak="al", diff --git a/tex/context/base/mkiv/char-ini.lua b/tex/context/base/mkiv/char-ini.lua index 58882cd30..1f8e72af7 100644 --- a/tex/context/base/mkiv/char-ini.lua +++ b/tex/context/base/mkiv/char-ini.lua @@ -766,7 +766,7 @@ local is_mark = allocate ( tohash { } ) local is_punctuation = allocate ( tohash { - "pc","pd","ps","pe","pi","pf","po", + "pc", "pd", "ps", "pe", "pi", "pf", "po", } ) local is_symbol = allocate ( tohash { diff --git a/tex/context/base/mkiv/char-ini.mkiv b/tex/context/base/mkiv/char-ini.mkiv index 5979b8685..aa3d31ba8 100644 --- a/tex/context/base/mkiv/char-ini.mkiv +++ b/tex/context/base/mkiv/char-ini.mkiv @@ -125,6 +125,8 @@ \clf_setactivecatcodes\notcatcodes \clf_setactivecatcodes\prtcatcodes +\clf_setcharacternames\ctxcatcodes + \def\chardescription#1{\clf_chardescription#1\relax} % experiment (watch out: this is global and very font dependent when used with diff --git a/tex/context/base/mkiv/char-ini.mkxl b/tex/context/base/mkiv/char-ini.mkxl new file mode 100644 index 000000000..1df5d4b01 --- /dev/null +++ b/tex/context/base/mkiv/char-ini.mkxl @@ -0,0 +1,130 @@ +%D \module +%D [ file=char-ini, +%D version=2006.08.20, +%D title=\CONTEXT\ Character Support, +%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 Character Support / Initialization} + +\registerctxluafile{char-fio}{} +\registerctxluafile{char-map}{} % maybe we will load this someplace else +\registerctxluafile{char-tex}{} +\registerctxluafile{char-ent}{} + +\unprotect + +% ¨äëïöüÿ +% ´áćéíĺńóŕśúýź +% ˙ċėġiż +% ¯āēīōū +% ˝őű +% ˆâĉêĝĥîĵôŝûŵŷ +% `àèìòùỳ +% ¸çķļņŗşţ +% ˛ąęįų +% ˚åů +% ˘ăĕğĭŏŭ +% ˇčďěľňřšťž +% ˜ãĩñõũ + +% \def\checkedchar#1% #2% +% {\relax\iffontchar\font#1 \expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi{\char#1}} +% +% impossible in math mode so there always fallback (till we have gyre): +% +% use \normalUchar when possible .. the next one is nice for documents and it also accepts +% 0x prefixed numbers + +\permanent\def\utfchar #1{\clf_utfchar {#1}} % todo: define public at lua end +\permanent\def\safechar#1{\clf_safechar{#1}} % todo: define public at lua end + +\permanent\protected\def\Ux #1{\Uchar\numexpr"#1\relax} % used in xml (sometimes overloaded) +\permanent \def\eUx#1{\Uchar\numexpr"#1\relax} % used in xml (sometimes overloaded) + +\permanent\def\expandUx{\enforced\let\Ux\eUx} + +\permanent \def\checkedchar {\relax\ifmmode\expandafter\checkedmathchar\else\expandafter\checkedtextchar\fi} % #1#2 +\permanent \def\checkedmathchar#1#2{#2} +%permanent \def\checkedtextchar #1{\iffontchar\font#1 \expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi{\char#1}} +\permanent\protected\def\checkedtextchar #1{\clf_doifelsecharinfont\numexpr#1\relax{\char#1}} % {#2} + +\newconditional\prefermathovertextchar + +\permanent\protected\def\textormathchar#1% + {\begingroup + \scratchcounter#1\relax + \ifmmode + \char\scratchcounter + \else + \ifconditional\prefermathovertextchar + % dirty trick .. maybe let this adapt to bf too ? + \setfontid\fontid\textfont\c_font_fam_mr + \fi + \iffontchar\font\scratchcounter + \char\scratchcounter + \else + \normalstartimath\char\scratchcounter\normalstopimath + \fi + \fi + \endgroup} + +\permanent\protected\def\textormathchars#1% + {{\font_text_or_mathchars#1\relax}} + +\protected\def\font_text_or_mathchars#1#2\relax + {\relax\ifmmode + #1#2% + \orelse\iffontchar\font`#1\relax + #1#2\relax + \else + \normalstartimath#1#2\normalstopimath + \fi} + +%D The codes are stored in the format, so we don't need to reinitialize +%D them (unless of course we have adapted the table). It is on the agenda +%D to do this with \type {tex.lccode} cum suis once they're available. + +% \def\setcclcuc#1#2#3{\global\catcode#1=\lettercatcode\global\lccode#1=#2\global\uccode#1=#3\relax} +% \def\setcclcucself#1{\global\catcode#1=\lettercatcode\global\lccode#1=#1\global\uccode#1=#1\relax } + +% Is setting up vrb tpa and tpb needed? + +% move to lua side + +%clf_setcharactercodes + +\clf_setlettercatcodes\texcatcodes +\clf_setlettercatcodes\ctxcatcodes +\clf_setlettercatcodes\notcatcodes +%clf_setlettercatcodes\mthcatcodes +\clf_setlettercatcodes\vrbcatcodes +\clf_setlettercatcodes\prtcatcodes +\clf_setlettercatcodes\tpacatcodes +\clf_setlettercatcodes\tpbcatcodes +\clf_setlettercatcodes\txtcatcodes + +\clf_setactivecatcodes\ctxcatcodes +\clf_setactivecatcodes\notcatcodes +\clf_setactivecatcodes\prtcatcodes + +\clf_setcharacternames\ctxcatcodes + +\permanent\def\chardescription#1{\clf_chardescription#1\relax} + +% experiment (watch out: this is global and very font dependent when used with +% casing mechanisms) +% +% \overloaduppercase{0xDF}{0x1E9E}} +% \overloaduppercase{0xDF}{0x53,0x53} + +\permanent\protected\def\overloaduppercase{\clf_overloaduppercase} % todo: define public at lua end +\permanent\protected\def\overloadlowercase{\clf_overloadlowercase} % todo: define public at lua end + +\protect \endinput diff --git a/tex/context/base/mkiv/char-tex.lua b/tex/context/base/mkiv/char-tex.lua index b361a9a07..1e86ca171 100644 --- a/tex/context/base/mkiv/char-tex.lua +++ b/tex/context/base/mkiv/char-tex.lua @@ -573,88 +573,68 @@ if not csletters then local traditional = sfstate == "traditional" for u, chr in next, data do -- will move up - local fallback = chr.fallback - if fallback then - contextsprint("{\\catcode",u,"=13\\unexpanded\\gdef ",utfchar(u),"{\\checkedchar{",u,"}{",fallback,"}}}") - activated[#activated+1] = u - else - local contextname = chr.contextname - local category = chr.category - local isletter = is_letter[category] - if contextname then - if is_character[category] then - if chr.unicodeslot < 128 then - if isletter then - local c = utfchar(u) - texsetmacro(contextname,c) - csletters[c] = u - else - texsetchar(contextname,u) - end - else - local c = utfchar(u) - texsetmacro(contextname,c) - if isletter and u >= 32 and u <= 65536 then - csletters[c] = u - end - end - -- + local contextname = chr.contextname + local category = chr.category + local isletter = is_letter[category] + if contextname then + if is_character[category] then + if chr.unicodeslot < 128 then if isletter then - local lc = chr.lccode - local uc = chr.uccode - if not lc then - chr.lccode = u - lc = u - elseif type(lc) == "table" then - lc = u - end - if not uc then - chr.uccode = u - uc = u - elseif type(uc) == "table" then - uc = u - end - texsetlccode(u,lc,uc) - if traditional and category == "lu" then - texsetsfcode(code,999) - end + local c = utfchar(u) + csletters[c] = u end - -- - elseif is_command[category] and not forbidden[u] then - -- contextsprint("{\\catcode",u,"=13\\unexpanded\\gdef ",utfchar(u),"{\\",contextname,"}}") - -- activated[#activated+1] = u + else local c = utfchar(u) - texsetmacro(contextname,c) - elseif is_mark[category] then - texsetlccode(u,u,u) -- for hyphenation - end - -- elseif isletter and u >= 32 and u <= 65536 then - elseif isletter then - csletters[utfchar(u)] = u - -- - local lc, uc = chr.lccode, chr.uccode - if not lc then - chr.lccode = u - lc = u - elseif type(lc) == "table" then - lc = u - end - if not uc then - chr.uccode = u - uc = u - elseif type(uc) == "table" then - uc = u + if isletter and u >= 32 and u <= 65536 then + csletters[c] = u + end end - texsetlccode(u,lc,uc) - if traditional and category == "lu" then - texsetsfcode(code,999) + if isletter then + local lc = chr.lccode + local uc = chr.uccode + if not lc then + chr.lccode = u + lc = u + elseif type(lc) == "table" then + lc = u + end + if not uc then + chr.uccode = u + uc = u + elseif type(uc) == "table" then + uc = u + end + texsetlccode(u,lc,uc) + if traditional and category == "lu" then + texsetsfcode(code,999) + end end - -- + elseif is_command[category] and not forbidden[u] then + -- skip elseif is_mark[category] then - -- texsetlccode(u,u,u) -- for hyphenation - -- end + elseif isletter then + csletters[utfchar(u)] = u + local lc, uc = chr.lccode, chr.uccode + if not lc then + chr.lccode = u + lc = u + elseif type(lc) == "table" then + lc = u + end + if not uc then + chr.uccode = u + uc = u + elseif type(uc) == "table" then + uc = u + end + texsetlccode(u,lc,uc) + if traditional and category == "lu" then + texsetsfcode(code,999) + end + elseif is_mark[category] then + texsetlccode(u,u,u) -- for hyphenation end end @@ -690,6 +670,29 @@ if not csletters then storage.register("characters/csletters", csletters, "characters.csletters") end + function characters.setcharacternames(ctt) + for u, chr in next, data do -- will move up + local contextname = chr.contextname + local category = chr.category + local isletter = is_letter[category] + if contextname then + if is_character[category] then + if chr.unicodeslot < 128 then + if isletter then + texsetmacro(contextname,utfchar(u),"permanent") + else + texsetchar(contextname,u) + end + else + texsetmacro(contextname,utfchar(u),"permanent") + end + elseif is_command[category] and not forbidden[u] then + texsetmacro(contextname,utfchar(u),"permanent") + end + end + end + end + else mark(csletters) end @@ -826,9 +829,13 @@ end -- entities.gt = utfchar(characters.activeoffset + utfbyte(">")) -- end -implement { name = "setlettercatcodes", scope = "private", actions = characters.setlettercatcodes, arguments = "integer" } -implement { name = "setactivecatcodes", scope = "private", actions = characters.setactivecatcodes, arguments = "integer" } ---------- { name = "setcharactercodes", scope = "private", actions = characters.setcodes } +if characters.setcharacternames then -- only in ini mode + + implement { name = "setlettercatcodes", scope = "private", actions = characters.setlettercatcodes, arguments = "integer" } + implement { name = "setactivecatcodes", scope = "private", actions = characters.setactivecatcodes, arguments = "integer" } + implement { name = "setcharacternames", scope = "private", actions = characters.setcharacternames, arguments = "integer" } + +end -- experiment (some can move to char-ini.lua) diff --git a/tex/context/base/mkiv/chem-str.mkiv b/tex/context/base/mkiv/chem-str.mkiv index 71b104e47..17c80472e 100644 --- a/tex/context/base/mkiv/chem-str.mkiv +++ b/tex/context/base/mkiv/chem-str.mkiv @@ -449,7 +449,7 @@ \egroup} \appendtoks - \let|\chemicalbar % \SR{N|NH} + \let |\chemicalbar % \SR{N|NH} \let \+\chemicaloxidationplus \let \-\chemicaloxidationminus \let \[\chemicalforeveropen diff --git a/tex/context/base/mkiv/chem-str.mkxl b/tex/context/base/mkiv/chem-str.mkxl new file mode 100644 index 000000000..853887678 --- /dev/null +++ b/tex/context/base/mkiv/chem-str.mkxl @@ -0,0 +1,761 @@ +%D \module +%D [ file=chem-ini, +%D version=2009.05.13, +%D subtitle=Chemistry, +%D author=Hans Hagen \& Alan Braslau, +%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 original \PPCHTEX\ code was written in pure \TEX\, although later we made +%D the move from \PICTEX\ to \METAPOST\. The current implementation is a mix between +%D \TEX\, \LUA\ and \METAPOST. Although the first objective is to get a compatible +%D but better implementation, later versions might provide more, + +%D NOT YET LMTX'd + +\writestatus{loading}{ConTeXt Chemistry Macros / Structure} + +\registerctxluafile{chem-str}{} + +% We have a slightly different interface. This is unchanged: +% +% \startchemical[axis=on] +% \chemical[SIX,ROT2,B,R6,SUB1,FIVE,ROT1,B][1] +% \stopchemical +% +% Here we use chemicalformula instead, so no longer a mix: +% +% \startchemicalformula +% \chemical{2H_2}{top}{bottom} +% \chemical{PLUS}{top}{bottom} +% \chemical{O_2}{top}{bottom} +% \chemical{GIVES}{top}{bottom} +% \chemical{2H_2O}{top}{bottom} +% \stopchemicalformula +% +% \startchemicalformula +% \chemical{2H_2} +% \chemical{PLUS} +% \chemical{O_2} +% \chemical{GIVES} +% \chemical{2H_2O} +% \stopchemicalformula +% +% The inline variant has only one argument: +% +% \chemical{2H_2,PLUS,O_2,GIVES,2H_2O} + +\unprotect + +\installcorenamespace{chemical} +\installcorenamespace{chemicalsymbol} +\installcorenamespace{chemicalframed} +\installcorenamespace{chemicalsize} + +% \installsimplecommandhandler \??chemical {chemical} \??chemical % no \define... +\installcommandhandler \??chemical {chemical} \??chemical % no \define... + +\let\setupchemicals \setupchemical +\let\definechemicals\definechemical + +%D We use a dedicated framed macro instead of inheriting one. This is both +%D a historical and practical reason (like shared keys with different meaning +%D that could clash, e.g.\ align). + +\defineMPinstance % not really needed as we set in lua + [chemistry] + [\s!format=metafun, + %\s!extensions=\v!yes, % Should we add extensions and initializations? + %\s!initializations=\v!yes, % Would this give EmWidth, etc.? + \c!method=\s!double] + +\startMPdefinitions{chemistry} + loadmodule "chem" ; +\stopMPdefinitions + +\defineframed + [\??chemicalframed] + [\c!align=\v!normal, + \c!strut=\v!no] + +\unexpanded\def\setupchemicalframed + {\setupframed[\??chemicalframed]} + +\unexpanded\overloaded\def\definechemical % is global (so we don't use the commandhandler) + {\dosingleargument\chem_define} + +\def\chem_define[#1]#2% + {\startnointerference + \edef\currentdefinedchemical{#1}% + \let\chemical\chem_chemical_nested + \clf_undefinechemical{#1}% + #2% flush + \stopnointerference} + +\unexpanded\def\chem_chemical_nested + {\dodoubleempty\chem_chemical_nested_indeed} + +\def\chem_chemical_nested_indeed[#1][#2]% + {\clf_definechemical{\currentdefinedchemical}{#1}{\detokenize{#2}}} + +% chemical symbols + +\unexpanded\def\definechemicalsymbol + {\dodoubleempty\chem_symbol_define} + +\def\chem_symbol_define[#1][#2]% + {\setvalue{\??chemicalsymbol#1}{#2}} + +\unexpanded\def\chemicalsymbol[#1]% + {\csname\??chemicalsymbol\ifcsname\??chemicalsymbol#1\endcsname#1\else\s!unknown\fi\endcsname} + +\definechemicalsymbol[\s!unknown][] % \char"FFFD empty + +% size (small medium big) + +\edef\chemicaltoplocation{t} +\edef\chemicalbotlocation{b} + +\unexpanded\def\chemicaltext#1% + {\mathematics + {\usechemicalstyleandcolor\c!style\c!color + \strut + \ifcase\currentxfontsize\or\scriptstyle\or\scriptscriptstyle\fi + #1}} + +\setvalue{\??chemicalsize\v!small }{\txx} +\setvalue{\??chemicalsize\v!medium}{\tx} +\setvalue{\??chemicalsize\v!big }{} + +\newtoks \everychemical +\newtoks \everystructurechemical +\newconditional\indisplaychemical + +\newtoks \t_chem_every_box +\newbox \b_chem_result +\newconditional\c_chem_some_text +\newdimen \d_chem_width +\newdimen \d_chem_height +\newdimen \d_chem_depth + +\unexpanded\def\startchemical + {\dodoubleempty\chem_start} + +\def\chem_start[#1][#2]% + {\ifmmode\vcenter\else\vbox\fi % vpack ? + \bgroup + \synchronizestrut{\chemicalparameter\c!strut}% + \dontcomplain + \settrue\indisplaychemical + \forgetall + \ifsecondargument + \doifelseassignment{#1} + {\setupcurrentchemical[#1]}% same as \currentchemical + {\edef\currentchemical{#1}% + \setupcurrentchemical[#2]}% + \else\iffirstargument + \doifelseassignment{#1} + {\setupcurrentchemical[#1]}% same as \currentchemical + {\edef\currentchemical{#1}}% + \fi\fi + \the\everystructurechemical + \setbox\b_chem_result\hpack\bgroup + \clf_startchemical + width {\chemicalparameter\c!width}% + height {\chemicalparameter\c!height}% + left {\chemicalparameter\c!left}% + right {\chemicalparameter\c!right}% + top {\chemicalparameter\c!top}% + bottom {\chemicalparameter\c!bottom}% + scale {\chemicalparameter\c!scale}% + rotation {\chemicalparameter\c!rotation}% + symalign {\chemicalparameter\c!symalign}% + axis {\chemicalparameter\c!axis}% was \MPcolor{...} + framecolor {\chemicalparameter\c!framecolor}% + rulethickness {\number\dimexpr\chemicalparameter\c!rulethickness}% + offset {\number\dimexpr\chemicalparameter\c!offset}% + unit {\number\dimexpr\chemicalparameter\c!unit}% + factor {\number\chemicalparameter\c!factor}% + \relax + \startnointerference} + +\unexpanded\def\stopchemical + {\stopnointerference + \clf_stopchemical + \egroup + \d_chem_width \wd\b_chem_result + \d_chem_height\ht\b_chem_result + \d_chem_depth \dp\b_chem_result + \the\t_chem_every_box + \doifelsenothing{\chemicalparameter\c!frame}\chem_framed_nop\chem_framed_yes + \egroup} + +\unexpanded\def\chem_framed_yes + {\localframedwithsettings + [\??chemicalframed]% + [\c!frame=\chemicalparameter\c!frame, + \c!rulethickness=\chemicalparameter\c!rulethickness, + \c!framecolor=\chemicalparameter\c!framecolor]% + {\vpack{\box\b_chem_result\vss}}} % remove depth + +\unexpanded\def\chem_framed_nop + {\directlocalframed + [\??chemicalframed]% + {\vpack{\box\b_chem_result\vss}}} % remove depth + +\let\startstructurechemical\startchemical +\let\stopstructurechemical \stopchemical + +\unexpanded\def\structurechemical + {\dotripleempty\strc_chem_indeed} + +\appendtoks + \let\chemical\structurechemical +\to\everystructurechemical + +\def\strc_chem_indeed + {\ifthirdargument + \expandafter\strc_chem_indeed_three + \else + \expandafter\strc_chem_indeed_two + \fi} + +\def\strc_chem_indeed_three[#1][#2][#3]% + {\writestatus\m!chemicals{hyperlinked chemicals not yet supported}% todo reference, for the moment ignored + \clf_chemicalcomponent + {#2}% + {\detokenize{#3}}% + {\the\dimexpr\chemicalparameter\c!rulethickness}% todo: scaled points + {\chemicalparameter\c!rulecolor}% + \relax + \ignorespaces} + +\def\strc_chem_indeed_two[#1][#2]% + {\clf_chemicalcomponent + {#1}% + {\detokenize{#2}}% + {\the\dimexpr\chemicalparameter\c!rulethickness}% todo: scaled points + {\chemicalparameter\c!rulecolor}% + \relax + \ignorespaces} + +\appendtoks + \setbox\b_chem_result\hpack{\raise\MPlly\box\b_chem_result}% + \d_chem_width \wd\b_chem_result + \d_chem_height\ht\b_chem_result + \d_chem_depth \dp\b_chem_result +\to \t_chem_every_box + +% kind of compatible, but text sizes instead of math sizes (i.e. tx is larger than scriptsize) + +\appendtoks + \edef\chemicalbodyfont{\chemicalparameter\c!bodyfont}% public? + \ifx\chemicalbodyfont\empty + \switchtobodyfont[\chemicalbodyfont]% + \fi + \getvalue{\??chemicalsize\chemicalparameter\c!size}% +% \to \everystructurechemical +\to \everychemical + +\def\chemicaltoptext#1{\global\settrue\c_chem_some_text\gdef\m_chem_top_text{#1}\ignorespaces} +\def\chemicalbottext#1{\global\settrue\c_chem_some_text\gdef\m_chem_bot_text{#1}\ignorespaces} +\def\chemicalmidtext#1{\global\settrue\c_chem_some_text\gdef\m_chem_mid_text{#1}\ignorespaces} + +\appendtoks + \let\toptext\chemicaltoptext \glet\m_chem_top_text\empty + \let\bottext\chemicalbottext \glet\m_chem_bot_text\empty + \let\midtext\chemicalmidtext \glet\m_chem_mid_text\empty + \global\setfalse\c_chem_some_text +\to \everystructurechemical + +\def\chem_add_texts + {\setbox2\hpack to \d_chem_width{\strut\hss\hbox{\strut\m_chem_mid_text}\hss}% + \setbox4\hpack to \d_chem_width{\strut\hss\hbox{\strut\m_chem_top_text}\hss}% + \setbox6\hpack to \d_chem_width{\strut\hss\hbox{\strut\m_chem_bot_text}\hss}% + \setbox\b_chem_result\hpack \bgroup + \box\b_chem_result + \hskip-\d_chem_width + \raise\d_chem_height\hpack{\lower\ht4\box4}% + \hskip-\d_chem_width + \lower.5\dimexpr\ht2-\dp2\relax\box2% + \hskip-\d_chem_width + \lower\d_chem_depth \hpack{\raise\dp6\box6}% + \hss + \egroup} % text on top of chemicals + +\appendtoks + \ifconditional\c_chem_some_text + \chem_add_texts + \d_chem_width \wd\b_chem_result + \d_chem_height\ht\b_chem_result + \d_chem_depth \dp\b_chem_result + \fi +\to \t_chem_every_box + +% todo: enspace or emspace + +\definechemicalsymbol[space] [\enspace\quad\enspace] +\definechemicalsymbol[plus] [\enspace+\enspace] +\definechemicalsymbol[minus] [\enspace-\enspace] +\definechemicalsymbol[gives] [\chem_arrow_construct\xrightarrow] +\definechemicalsymbol[equilibrium] [\chem_arrow_construct\xrightoverleftarrow] +\definechemicalsymbol[mesomeric] [\chem_arrow_construct\xleftrightarrow] +\definechemicalsymbol[opencomplex] [\mathematics{\Bigg[}] % not yet ok +\definechemicalsymbol[closecomplex][\mathematics{\Bigg]}] % not yet ok + +\definechemicalsymbol[SPACE] [{\chemicalsymbol[space]}] +\definechemicalsymbol[PLUS] [{\chemicalsymbol[plus]}] +\definechemicalsymbol[MINUS] [{\chemicalsymbol[minus]}] +\definechemicalsymbol[GIVES] [{\chemicalsymbol[gives]}] +\definechemicalsymbol[EQUILIBRIUM] [{\chemicalsymbol[equilibrium]}] +\definechemicalsymbol[MESOMERIC] [{\chemicalsymbol[mesomeric]}] +\definechemicalsymbol[OPENCOMPLEX] [{\chemicalsymbol[opencomplex]}] +\definechemicalsymbol[CLOSECOMPLEX][{\chemicalsymbol[closecomplex]}] + +\def\chem_arrow_construct#1#2#3% + {\enspace + \mathematics{#1% + {\strut\hbox \s!spread 2\emwidth{\hss\clf_inlinechemical{#3}\hss}}% {\strut\hbox \s!spread 2em{\hss#3\hss}}}% + {\strut\hbox \s!spread 2\emwidth{\hss\clf_inlinechemical{#2}\hss}}}% {\strut\hbox \s!spread 2em{\hss#2\hss}}% + \enspace} + +% special macros (probably needs some more work) + +\let\chem_box_normal_yes\hbox +\let\chem_box_visual_yes\hbox +\let\chem_box_visual_nop\relax + +\installtextracker + {chemistry.boxes} + {\let\chem_box_visual_yes\ruledhbox \let\chem_box_visual_nop\ruledhbox} + {\let\chem_box_visual_yes\hbox \let\chem_box_visual_nop\relax } + +\def\chem_top_construct#1#2#3#4% + {\hpack\bgroup + \setstrut + \setbox\scratchboxone\chem_box_visual_yes{\strut#3}% + \setbox\scratchboxtwo\chem_box_visual_yes{\strut\molecule{#4}}% + \setbox\scratchboxone\chem_box_normal_yes{\raise\dimexpr\dp\scratchboxone+\ht\scratchboxtwo\relax\hbox to \wd\scratchboxtwo{#1\box\scratchboxone#2}}% + \smashbox\scratchboxone + \box\scratchboxone + \box\scratchboxtwo + \egroup} + +\def\chem_bottom_construct#1#2#3#4% + {\hpack\bgroup + \setstrut + \setbox\scratchboxone\chem_box_visual_yes{\strut#3}% + \setbox\scratchboxtwo\chem_box_visual_yes{\strut\molecule{#4}}% + \setbox\scratchboxone\chem_box_normal_yes{\lower\dimexpr\dp\scratchboxtwo+\ht\scratchboxone\relax\hbox to \wd\scratchboxtwo{#1\box\scratchboxone#2}}% + \smashbox\scratchboxone + \box\scratchboxone + \box\scratchboxtwo + \egroup} + +\unexpanded\def\chemicalleft#1#2% redundant boxes thanks to visual + {\hbox\bgroup % hpack ? + \setstrut + \llap{\chem_box_visual_nop{\strut#1}}% + \chem_box_visual_nop{\strut#2}% + \egroup} + +\unexpanded\def\chemicalright#1#2% redundant boxes thanks to visual + {\hbox\bgroup % hpack ? + \setstrut + \chem_box_visual_yes{\strut#2}% + \rlap{\chem_box_visual_nop{\strut#1}}% + \egroup} + +\unexpanded\def\chemicaltop {\chem_top_construct \hss \hss } +\unexpanded\def\chemicallefttop {\chem_top_construct \relax \hss } +\unexpanded\def\chemicalrighttop {\chem_top_construct \hss \relax} +\unexpanded\def\chemicalbottom {\chem_bottom_construct \hss \hss } +\unexpanded\def\chemicalleftbottom {\chem_bottom_construct \relax \hss } +\unexpanded\def\chemicalrightbottom {\chem_bottom_construct \hss \relax} + +\unexpanded\def\chemicaltopleft #1{\chemicalleft {\chemicalrighttop {#1}{}}} +\unexpanded\def\chemicalbottomleft #1{\chemicalleft {\chemicalrightbottom{#1}{}}} +\unexpanded\def\chemicaltopright #1{\chemicalright{\chemicallefttop {#1}{}}} +\unexpanded\def\chemicalbottomright #1{\chemicalright{\chemicalleftbottom {#1}{}}} + +% \unexpanded\def\chemicalcentered #1{\hbox to \fontcharwd\font`C{\setstrut\strut\hss#1\hss}} +% \unexpanded\def\chemicalleftcentered #1{\hbox to \fontcharwd\font`C{\setstrut\strut #1\hss}} +% \unexpanded\def\chemicalrightcentered#1{\hbox to \fontcharwd\font`C{\setstrut\strut\hss#1}} + +% \let\chemicalsmashedmiddle\chemicalcentered +% \let\chemicalsmashedleft \chemicalleftcentered +% \let\chemicalsmashedright \chemicalrightcentered + +\unexpanded\def\chemicalalignedtext + {\ifmmode + \expandafter\chem_aligned_text_math + \else + \expandafter\chem_aligned_text_text + \fi} + +\let\chemicaltighttext\relax % maybe smaller strut + +\def\chem_aligned_text_text#1#2#3% + {\dontleavehmode + \begingroup + \usechemicalstyleandcolor\c!style\c!color + \chem_box_visual_yes to \fontcharwd\font`C\bgroup + \setstrut\strut + #1\molecule{#3}#2% + \egroup + \endgroup} + +\def\chem_aligned_text_math#1#2#3% + {\dontleavehmode + \begingroup + \scratchcounter\normalmathstyle + \usechemicalstyleandcolor\c!style\c!color + \chem_box_visual_yes to \fontcharwd\font`C\bgroup + \setstrut\strut + #1\mathematics{\tf\triggermathstyle\scratchcounter\molecule{#3}}#2% + \egroup + \endgroup} + +\unexpanded\def\chemicalcentered {\chemicalalignedtext\hss \hss } +\unexpanded\def\chemicalleftcentered {\chemicalalignedtext\relax\hss } +\unexpanded\def\chemicalrightcentered{\chemicalalignedtext\hss \relax} + +\let\chemicalsmashedmiddle\chemicalcentered +\let\chemicalsmashedleft \chemicalleftcentered +\let\chemicalsmashedright \chemicalrightcentered + +\unexpanded\def\chemicaloxidation#1#2#3% + {\chemicaltop{\txx\ifcase#2\relax0\else#1\convertnumber{I}{#2}\fi}{#3}} + +\unexpanded\def\chemicaloxidationplus {\dotriplegroupempty\chemicaloxidation{\textplus }} % {} needed! +\unexpanded\def\chemicaloxidationminus{\dotriplegroupempty\chemicaloxidation{\textminus}} % {} needed! +\unexpanded\def\chemicalforeveropen {\dotriplegroupempty\chemicalleft {$\big[$}} % {} needed! +\unexpanded\def\chemicalforeverclose {\dotriplegroupempty\chemicalright {$\big]$}} % {} needed! +\unexpanded\def\chemicaloxidationone {\chemicaloxidation\relax1} +\unexpanded\def\chemicaloxidationtwo {\chemicaloxidation\relax2} +\unexpanded\def\chemicaloxidationthree{\chemicaloxidation\relax3} +\unexpanded\def\chemicaloxidationfour {\chemicaloxidation\relax4} +\unexpanded\def\chemicaloxidationfive {\chemicaloxidation\relax5} +\unexpanded\def\chemicaloxidationsix {\chemicaloxidation\relax6} +\unexpanded\def\chemicaloxidationseven{\chemicaloxidation\relax7} + +\unexpanded\def\chemicalbar + {\hpack \s!spread .5\emwidth \bgroup + \hss + \vrule \s!height .9\strutht \s!depth .65\strutdp \s!width .1\exheight + \hss + \egroup} + +\appendtoks + \enforced\let |\chemicalbar % \SR{N|NH} + \enforced\let \+\chemicaloxidationplus + \enforced\let \-\chemicaloxidationminus + \enforced\let \[\chemicalforeveropen + \enforced\let \]\chemicalforeverclose + \enforced\let \1\chemicaloxidationone + \enforced\let \2\chemicaloxidationtwo + \enforced\let \3\chemicaloxidationthree + \enforced\let \4\chemicaloxidationfour + \enforced\let \5\chemicaloxidationfive + \enforced\let \6\chemicaloxidationsix + \enforced\let \7\chemicaloxidationseven + \enforced\let \X\chemicaltighttext + \enforced\let \T\chemicaltop + \enforced\let \B\chemicalbottom + \enforced\let \L\chemicalleft + \enforced\let\LC\chemicalleftcentered + \enforced\let \R\chemicalright + \enforced\let\RC\chemicalrightcentered + \enforced\let\TL\chemicaltopleft + \enforced\let\BL\chemicalbottomleft + \enforced\let\TR\chemicaltopright + \enforced\let\BR\chemicalbottomright + \enforced\let\LT\chemicallefttop + \enforced\let\LB\chemicalleftbottom + \enforced\let\RT\chemicalrighttop + \enforced\let\RB\chemicalrightbottom + \enforced\let\SL\chemicalsmashedleft + \enforced\let\SM\chemicalsmashedmiddle + \enforced\let\SR\chemicalsmashedright +\to \everychemical + +% Should these also be defined in lower case, so as to be case independent? + +\appendtoks + \the\everychemical +\to \everystructurechemical + +% inline + +% \unexpanded\def\chemical +% {\ifinformula +% \expandafter\displaychemical +% \else +% \expandafter\inlinechemical +% \fi} + +\unexpanded\def\chemical + {\ifinformula + \expandafter\indisplaychemical + \else + \expandafter\inlinechemical + \fi} + +\unexpanded\def\indisplaychemical + {\mathstylecommand\displaychemical\inlinechemical\inlinechemical} + +\unexpanded\def\inlinechemical#1% + {\dontleavehmode + \begingroup + \scratchcounter\normalmathstyle + \usechemicalstyleandcolor\c!style\c!color + \hbox{\mathematics{\tf\triggermathstyle\scratchcounter\clf_inlinechemical{#1}}}% + \endgroup} + +\unexpanded\def\displaychemical + {\dotriplegroupempty\chem_display} + +\def\chem_display#1#2#3% + {\the\everychemical + \everychemical\emptytoks + \quad + \vcenter\bgroup + \usechemicalstyleandcolor\c!style\c!color + \ifthirdargument + \ifsecondargument + \halign{\aligntab\hss\alignmark\alignmark\hss\cr#2\cr\molecule{#1}\cr#3\cr}% + \else + \halign{\aligntab\hss\alignmark\alignmark\hss \cr\molecule{#1}\cr#2\cr}% + \fi + \else + \hbox{\molecule{#1}}% + \fi + \egroup + \quad} + +\unexpanded\def\inlinechemical#1% + {\dontleavehmode + \hbox{\usechemicalstyleandcolor\c!style\c!color\clf_inlinechemical{#1}}} + +\unexpanded\def\chemicalbondrule + {\hpack{\vrule\s!height.75\exheight\s!depth-\dimexpr.75\exheight-\linewidth\relax\s!width\emwidth\relax}} + +\definechemicalsymbol[i:space] [\enspace\quad\enspace] +\definechemicalsymbol[i:plus] [\enspace\mathematics{+}\enspace] +\definechemicalsymbol[i:minus] [\enspace\mathematics{-}\enspace] +\definechemicalsymbol[i:equals] [\enspace\mathematics{=}\enspace] +\definechemicalsymbol[i:gives] [\enspace\mathematics{\xrightarrow{}{}}\enspace] +\definechemicalsymbol[i:equilibrium] [\enspace\mathematics{\xrightoverleftarrow{}{}}\enspace] +\definechemicalsymbol[i:mesomeric] [\enspace\mathematics{\xleftrightarrow{}{}}\enspace] +\definechemicalsymbol[i:single] [\chemicalbondrule] +\definechemicalsymbol[i:double] [\hpack{\lower.5ex\chemicalbondrule\hskip-1em\raise.5ex\chemicalbondrule}] +\definechemicalsymbol[i:triple] [\hpack{\chemicalbondrule\hskip-1em\lower.5ex\chemicalbondrule\hskip-1em\raise.5ex\chemicalbondrule}] + +\unexpanded\def\chemicalsinglebond {\chemicalsymbol[i:single]} +\unexpanded\def\chemicaldoublebond {\chemicalsymbol[i:double]} +\unexpanded\def\chemicaltriplebond {\chemicalsymbol[i:triple]} +\unexpanded\def\chemicalgives {\chemicalsymbol[i:gives]} +\unexpanded\def\chemicalmesomeric {\chemicalsymbol[i:mesomeric]} +\unexpanded\def\chemicalequilibrium{\chemicalsymbol[i:equilibrium]} +\unexpanded\def\chemicalplus {\chemicalsymbol[i:plus]} +\unexpanded\def\chemicalminus {\chemicalsymbol[i:minus]} +\unexpanded\def\chemicalequals {\chemicalsymbol[i:equals]} +\unexpanded\def\chemicalspace {\chemicalsymbol[i:space]} +\unexpanded\def\chemicalinline #1{#1} + +% display + +\newconditional\c_chem_has_top +\newconditional\c_chem_has_bot + +\newtoks\t_chem_top +\newtoks\t_chem_mid +\newtoks\t_chem_bot + +\newif\ifinchemicalformula + +\unexpanded\def\startchemicalformula + {\mathortext\vcenter\vbox\bgroup + \forgetall + \inchemicalformulatrue + \the\everychemical + \everychemical\emptytoks + \t_chem_top\emptytoks % not needed + \t_chem_mid\emptytoks % not needed + \t_chem_bot\emptytoks % not needed + \let\chemical\formulachemical + \setfalse\c_chem_has_top + \setfalse\c_chem_has_bot} + +\unexpanded\def\stopchemicalformula + {\tabskip\emwidth\relax + \nointerlineskip + \ifconditional\c_chem_has_top + \ifconditional\c_chem_has_bot + \halign{\aligntab\hss\usechemicalstyleandcolor\c!style\c!color\alignmark\alignmark\hss\cr\the\t_chem_top\cr\the\t_chem_mid\cr\the\t_chem_bot\cr}% + \else + \halign{\aligntab\hss\usechemicalstyleandcolor\c!style\c!color\alignmark\alignmark\hss\cr\the\t_chem_top\cr\the\t_chem_mid\cr}% + \fi + \else + \ifconditional\c_chem_has_bot + \halign{\aligntab\hss\usechemicalstyleandcolor\c!style\c!color\alignmark\alignmark\hss\cr\the\t_chem_mid\cr\the\t_chem_bot\cr}% + \else + \halign{\aligntab\hss\usechemicalstyleandcolor\c!style\c!color\alignmark\alignmark\hss\cr\the\t_chem_mid\cr}% + \fi + \fi + \egroup} + +% for the moment we have a special set + +\definechemicalsymbol[d:space] [\enspace\quad\enspace] +\definechemicalsymbol[d:plus] [\enspace+\enspace] +\definechemicalsymbol[d:minus] [\enspace-\enspace] +\definechemicalsymbol[d:equals] [\enspace=\enspace] +\definechemicalsymbol[d:gives] [\rightarrowfill] % \chem_arrow_construct\xrightarrow +\definechemicalsymbol[d:equilibrium] [\rightoverleftarrowfill] % \chem_arrow_construct\xrightoverleftarrow +\definechemicalsymbol[d:mesomeric] [\leftarrowfill] % \chem_arrow_construct\xleftrightarrow +\definechemicalsymbol[d:single] [\chemicalbondrule] +\definechemicalsymbol[d:double] [\hpack{\lower.5ex\chemicalbondrule\hskip-1em\raise.5ex\chemicalbondrule}] +\definechemicalsymbol[d:triple] [\hpack{\chemicalbondrule\hskip-1em\lower.5ex\chemicalbondrule\hskip-1em\raise.5ex\chemicalbondrule}] +\definechemicalsymbol[d:opencomplex] [\mathematics{\Bigg[}] % not yet ok +\definechemicalsymbol[d:closecomplex][\mathematics{\Bigg]}] % not yet ok + +\definechemicalsymbol[d:SPACE] [{\chemicalsymbol[d:space]}] +\definechemicalsymbol[d:PLUS] [{\chemicalsymbol[d:plus]}] +\definechemicalsymbol[d:MINUS] [{\chemicalsymbol[d:minus]}] +\definechemicalsymbol[d:EQUALS] [{\chemicalsymbol[d:equals]}] +\definechemicalsymbol[d:GIVES] [{\chemicalsymbol[d:gives]}] +\definechemicalsymbol[d:EQUILIBRIUM] [{\chemicalsymbol[d:equilibrium]}] +\definechemicalsymbol[d:MESOMERIC] [{\chemicalsymbol[d:mesomeric]}] +\definechemicalsymbol[d:SINGLE] [{\chemicalsymbol[d:single]}] +\definechemicalsymbol[d:DOUBLE] [{\chemicalsymbol[d:double]}] +\definechemicalsymbol[d:TRIPLE] [{\chemicalsymbol[d:triple]}] +\definechemicalsymbol[d:OPENCOMPLEX] [{\chemicalsymbol[d:opencomplex]}] +\definechemicalsymbol[d:CLOSECOMPLEX][{\chemicalsymbol[d:closecomplex]}] + +\unexpanded\def\formulachemical + {\relax\dotriplegroupempty\chem_formula} + +\def\chem_formula#1#2#3% we could do hboxes and measure + {\ifthirdargument + \doifelsenothing{#2}\chem_formula_top_nop{\chem_formula_top_yes{#2}}% + \doifelsenothing{#3}\chem_formula_bot_nop{\chem_formula_bot_yes{#3}}% + \else\ifsecondargument + \chem_formula_top_nop + \doifelsenothing{#2}\chem_formula_bot_nop{\chem_formula_bot_yes{#2}}% + \else + \chem_formula_top_nop + \chem_formula_bot_nop + \fi\fi + \ifcsname\??chemicalsymbol d:\detokenize{#1}\endcsname + \toksapp\t_chem_mid{\chemicalsymbol[d:#1]\aligntab}% + \else + \toksapp\t_chem_mid{\molecule{#1}\aligntab}% + \fi} + +\def\chem_formula_mid#1% + {\csname\??chemicalsymbol\detokenize{#1}\endcsname} + +\def\chem_formula_top_nop {\toksapp\t_chem_top{\aligntab}} +\def\chem_formula_bot_nop {\toksapp\t_chem_bot{\aligntab}} +\def\chem_formula_top_yes#1{\toksapp\t_chem_top{\chem_formula_top_indeed{#1}\aligntab}\settrue\c_chem_has_top} +\def\chem_formula_bot_yes#1{\toksapp\t_chem_bot{\chem_formula_bot_indeed{#1}\aligntab}\settrue\c_chem_has_bot} + +\def\chem_formula_top_indeed#1{\strut#1} +\def\chem_formula_bot_indeed#1{\strut#1} + +% Experimental: defaults might change. + +\definefloat + [\v!chemical] + [\v!chemicals] + +\setuplabeltext + [\v!chemical=] + +\setupfloat + [\v!chemical] + [\c!location=\v!here, + \c!inner=\hsize.8\textwidth\dontleavehmode, % brr + \c!align={\v!flushleft,\v!lohi}] + +\setupcaption + [\v!chemical] + [\c!location=\v!right, + \c!distance=\zeropoint, + \c!width=.2\textwidth, + \c!align=\v!flushright] + +% Can be used as for displayed math: \startplaceformula... to display a chemical formula +% or a chemical structure: +% +% \startplacechemical +% \startchemicalformula +% \chemical{2H_2} +% \chemical{PLUS} +% \chemical{O_2} +% \chemical{GIVES} +% \chemical{2H_2O} +% \stopchemicalformula +% \stopplacechemical + +% gone: state option resolution offset (now frame offset) alternative + +\setupchemicalframed + [\c!align=\v!normal, + \c!strut=\v!no, + \c!offset=\v!overlay, + \c!frame=\v!off] + +\definecolor % private color + [chemicalframecolor] + [r=.75,g=.85,b=.95] + +\setupchemical + [\c!frame=, + \c!width=\v!fit, % or unitless number, multiplies scale*unit + \c!height=\v!fit, % or unitless number, multiplies scale*unit + \c!left=\v!fit, % or unitless number, multiplies scale*unit + \c!right=\v!fit, % or unitless number, multiplies scale*unit + \c!top=\v!fit, % or unitless number, multiplies scale*unit + \c!bottom=\v!fit, % or unitless number, multiplies scale*unit + \c!bodyfont=, + \c!scale=\v!normal, % small, normal or medium, big, or unitless number (multiplies unit) + \c!size=\v!medium, + \c!textsize=\v!big, % how is textsize used?? + \c!axis=\v!off, + \c!style=\rm, + \c!rotation=0, % unitless number (interpreted as degrees) + \c!symalign=\v!auto, + \c!location=, % not yet used (was interaction related in mkii) + \c!offset=.25\emwidth, + \c!unit=\emwidth, + \c!factor=3, + \c!color=, + \c!strut=\v!yes, + \c!framecolor=chemicalframecolor, + \c!rulethickness=0.6pt, %1.5\linewidth, + \c!rulecolor=] + +%D Compatibility: + +\definechemical[+R] {\chemical[RR]} +\definechemical[-R] {\chemical[LR]} + +\definechemical[CARBON:CB] {\chemical[NEWMANSTAGGER,C,SB]} +\definechemical[NEWMANSTAGGER:CB] {\chemical[NEWMANSTAGGER,C,SB]} +\definechemical[NEWMANECLIPSED:CB]{\chemical[NEWMANECLIPSED,C,SB]} +\definechemical[CARBON:CB1] {\chemical[CARBON,C,SB,Z234,1.5MOV1,MIR0,C,SB,Z234]} + +\definechemical[NEWMAN] {\chemical[]} +\definechemical[STAGGER] {\chemical[NEWMANSTAGGER]} +\definechemical[ECLIPSE] {\chemical[NEWMANECLIPSED]} +\definechemical[ECLIPSED] {\chemical[NEWMANECLIPSED]} +\definechemical[SIX:FRONT] {\chemical[SIXFRONT]} +\definechemical[FIVE:FRONT] {\chemical[FIVEFRONT]} + +\protect \endinput diff --git a/tex/context/base/mkiv/cldf-ini.lua b/tex/context/base/mkiv/cldf-ini.lua index 24092d852..77391580f 100644 --- a/tex/context/base/mkiv/cldf-ini.lua +++ b/tex/context/base/mkiv/cldf-ini.lua @@ -97,7 +97,6 @@ local tex = tex local texsprint = tex.sprint -- just appended (no space,eol treatment) local texprint = tex.print -- each arg a separate line (not last in directlua) ----- texwrite = tex.write -- all 'space' and 'character' -local texgetcount = tex.getcount local isnode = node.is_node local writenode = node.write @@ -114,6 +113,15 @@ local isprintable = tex.isprintable or function(n) return n and (type(n) == "string" or isnode(n) or istoken(n)) end +if tex.runlocal then + -- obselete names + tex.runtoks = tex.runlocal + tex.quittoks = tex.quitlocal +else + tex.runlocal = tex.runtoks + tex.quitlocal = tex.quittoks +end + local catcodenumbers = catcodes.numbers local ctxcatcodes = catcodenumbers.ctxcatcodes @@ -133,13 +141,15 @@ local report_cld = logs.reporter("cld","stack") local processlines = true -- experiments.register("context.processlines", function(v) processlines = v end) -local trialtypesettingstate = createtoken("trialtypesettingstate").index +local trialtypesetting = function() return false end -function context.trialtypesetting() - return texgetcount(trialtypesettingstate) ~= 0 - -- return texgetcount("trialtypesettingstate") ~= 0 +function context.settrialtypesettingmethod(f) + trialtypesetting = f + context.trialtypesetting = f end +context.trialtypesetting = function() return trialtypesetting() end -- can be aliased ! + local knownfunctions = (lua.getfunctionstable or lua.get_functions_table)(true) local showstackusage = false @@ -154,14 +164,12 @@ local usedstack = function() end local flushfunction = function(slot,arg) - if arg() then + if arg() or trialtypesetting() then -- keep - elseif texgetcount(trialtypesettingstate) == 0 then + else noffreed = noffreed + 1 freed[noffreed] = slot knownfunctions[slot] = false - else - -- keep end end @@ -181,13 +189,13 @@ local storefunction = function(arg) end local flushnode = function(slot,arg) - if texgetcount(trialtypesettingstate) == 0 then + if trialtypesetting() then + writenode(copynodelist(arg)) + else writenode(arg) noffreed = noffreed + 1 freed[noffreed] = slot knownfunctions[slot] = false - else - writenode(copynodelist(arg)) end end @@ -378,15 +386,61 @@ interfaces.namesofscanners = namesofscanners storage.register("interfaces/storedscanners", storedscanners, "interfaces.storedscanners") -local function registerscanner(name,action,protected,public,usage) -- todo: combine value and condition - rawset(interfacescanners,name,action) - local n = storedscanners[name] - n = registerfunction("interfaces.scanners."..name,true,n) - storedscanners[name] = n - namesofscanners[n] = name - name = public and name or (privatenamespace .. name) - -- print(">>",name,protected and "protected" or "",usage or "macro") - setluatoken(name,n,"global",protected and "protected" or "",usage or "macro") +-- local function registerscanner(name,action,protected,public,usage) -- todo: combine value and condition +-- rawset(interfacescanners,name,action) +-- local n = storedscanners[name] +-- n = registerfunction("interfaces.scanners."..name,true,n) +-- storedscanners[name] = n +-- namesofscanners[n] = name +-- name = public and name or (privatenamespace .. name) +-- -- print(">>",name,protected and "protected" or "",usage or "macro") +-- setluatoken(name,n,"global",protected and "protected" or "",usage or "macro") +-- end + +-- todo: bitmap + +local registerscanner if CONTEXTLMTXMODE > 0 then + + -- always permanent but we can consider to obey permanent==false + + local function toflags(specification) + local protected = specification.protected and "protected" -- or "" + local usage = specification.usage + if usage == "value" then + return "global", "value", "permanent", protected + elseif usage == "condition" then + return "global", "conditional", "permanent", protected + elseif specification.frozen then + return "global", "frozen", protected + elseif specification.permanent == false or specification.onlyonce then -- for now onlyonce here + return "global", protected + else + return "global", "permanent", protected + end + end + + + registerscanner = function(name,action,specification) + rawset(interfacescanners,name,action) + local n = registerfunction("interfaces.scanners."..name,true,storedscanners[name]) + storedscanners[name] = n + namesofscanners[n] = name + name = specification.public and name or (privatenamespace .. name) + setluatoken(name,n,toflags(specification)) + end + +else + + registerscanner = function(name,action,specification) + rawset(interfacescanners,name,action) + local n = storedscanners[name] + n = registerfunction("interfaces.scanners."..name,true,n) + storedscanners[name] = n + namesofscanners[n] = name + name = specification.public and name or (privatenamespace .. name) + setluatoken(name,n,"global",specification.protected and "protected" or "") + end + end interfaces.registerscanner = registerscanner @@ -696,7 +750,7 @@ end local containseol = patterns.containseol -local lua_expandable_call_code = tokens.commands.lua_expandable_call +local lua_call_code = tokens.commands.lua_expandable_call or tokens.commands.lua_call local sortedhashindeed = false @@ -793,7 +847,7 @@ local function writer(parent,command,...) -- already optimized before call local tj = ti[1] if type(tj) == "function" then tj = storefunction(tj) - flush(currentcatcodes,"[",newtoken(tj,lua_expandable_call_code),"]") + flush(currentcatcodes,"[",newtoken(tj,lua_call_code),"]") else flush(currentcatcodes,"[",tj,"]") end @@ -803,7 +857,7 @@ local function writer(parent,command,...) -- already optimized before call local tj = ti[j] if type(tj) == "function" then tj = storefunction(tj) - flush(currentcatcodes,"[",newtoken(tj,lua_expandable_call_code),j == tn and "]" or ",") + flush(currentcatcodes,"[",newtoken(tj,lua_call_code),j == tn and "]" or ",") else if j == tn then flush(currentcatcodes,tj,"]") @@ -816,7 +870,7 @@ local function writer(parent,command,...) -- already optimized before call elseif typ == "function" then -- todo: ctx|prt|texcatcodes ti = storefunction(ti) - flush(currentcatcodes,"{",newtoken(ti,lua_expandable_call_code),"}") + flush(currentcatcodes,"{",newtoken(ti,lua_call_code),"}") elseif typ == "boolean" then if ti then flushdirect(currentcatcodes,"\r") @@ -972,7 +1026,7 @@ local caller = function(parent,f,a,...) elseif typ == "function" then -- ignored: a ... f = storefunction(f) - flush(currentcatcodes,"{",newtoken(f,lua_expandable_call_code),"}") + flush(currentcatcodes,"{",newtoken(f,lua_call_code),"}") elseif typ == "boolean" then if f then if a ~= nil then @@ -1083,6 +1137,14 @@ statistics.register("traced context", function() end end) +-- The cmd names were synchronized with the normal call cmd names. + +local luacalls = { -- luatex luametatex + lua_expandable_call = true, -- normal + lua_call = true, -- protected normal + lua_protected_call = true, -- protected +} + local function userdata(argument) if isnode(argument) then return formatters["<< %s node %i>>"](nodes.nodecodes[argument.id],tonut(argument)) @@ -1092,8 +1154,7 @@ local function userdata(argument) -- return formatters["<<\\%s>>"](csname) return formatters["\\%s"](csname) end - local cmdname = argument.cmdname - if cmdname == "lua_expandable_call" or cmdname == "lua_call" then + if luacall[argument.cmdname] then return "<>" -- argument.mode end return "<>" @@ -1735,8 +1796,10 @@ do if CONTEXTLMTXMODE > 0 then - local prefixcodes = tex.getprefixvalues() - tex.prefixcodes = table.swapped(prefixcodes,prefixcodes) -- utilities.storage.allocate() + -- also elsewhere + + local flagcodes = tex.getflagvalues() + tex.flagcodes = table.swapped(flagcodes,flagcodes) -- utilities.storage.allocate() end diff --git a/tex/context/base/mkiv/cldf-ini.mkiv b/tex/context/base/mkiv/cldf-ini.mkiv index 0ec2d408b..70c9c12e3 100644 --- a/tex/context/base/mkiv/cldf-ini.mkiv +++ b/tex/context/base/mkiv/cldf-ini.mkiv @@ -1,8 +1,8 @@ %D \module -%D [ file=cldf-ini, -%D version=2010.10.19,, -%D title=\CONTEXT\ \LUA\ Document Functions, -%D subtitle=Initialization, +%D [ file=cldf-int, +%D version=2019.01.01, +%D title=\CONTEXT\ Data Macros, +%D subtitle=Integer, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] diff --git a/tex/context/base/mkiv/cldf-int.mkxl b/tex/context/base/mkiv/cldf-int.mkxl index 603c22afc..a564afc80 100644 --- a/tex/context/base/mkiv/cldf-int.mkxl +++ b/tex/context/base/mkiv/cldf-int.mkxl @@ -1,8 +1,8 @@ %D \module -%D [ file=mult-ini, -%D version=2008.10.22, % 1996.06.01, -%D title=\CONTEXT\ Multilingual Macros, -%D subtitle=Initialization, +%D [ file=cldf-int, +%D version=2019.01.01, +%D title=\CONTEXT\ Data Macros, +%D subtitle=Integer, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] @@ -15,17 +15,20 @@ \registerctxluafile{cldf-int}{autosuffix} +%D These are user commands so we don't add any protection against overloading +%D here. + \unprotect -\unexpanded\def\newluatable#1{\clf_newluatable#1\atendofgrouped{\disposeluatable#1}} -\unexpanded\def\useluatable#1{\clf_useluatable#1\atendofgrouped{\disposeluatable#1}} +\permanent\protected\def\newluatable#1{\clf_newluatable#1\atendofgrouped{\disposeluatable#1}} +\permanent\protected\def\useluatable#1{\clf_useluatable#1\atendofgrouped{\disposeluatable#1}} \installcorenamespace{datavalue} -\unexpanded\def\setdatavalue#1#2% #2 is a number (expression) - {\expandafter\letdatacode\csname\??datavalue#1\endcsname\numexpr#2\relax} +\permanent\protected\def\setdatavalue#1#2% #2 is a number (expression) + {\expandafter\integerdef\csname\??datavalue#1\endcsname\numexpr#2\relax} -\def\getdatavalue#1{\begincsname\??datavalue#1\endcsname} -\def\thedatavalue#1{\the\begincsname\??datavalue#1\endcsname} +\permanent\def\getdatavalue#1{\begincsname\??datavalue#1\endcsname} +\permanent\def\thedatavalue#1{\the\begincsname\??datavalue#1\endcsname} \protect \endinput diff --git a/tex/context/base/mkiv/cldf-lmt.lmt b/tex/context/base/mkiv/cldf-lmt.lmt index 9889131a5..f3121eadc 100644 --- a/tex/context/base/mkiv/cldf-lmt.lmt +++ b/tex/context/base/mkiv/cldf-lmt.lmt @@ -57,7 +57,7 @@ local skip_code = values.skip local boolean_code = values.boolean local float_code = values.float -local global_code = tex.prefixcodes.global +local global_code = tex.flagcodes.global local context = context @@ -428,8 +428,8 @@ local slots = { } local nofslots = 0 local nofgrouped = 0 -local getdata = tokens.getdata -local setdata = tokens.setdata +local getinteger = tokens.getinteger +local setinteger = tokens.setinteger local report = logs.reporter("lua table") @@ -448,7 +448,7 @@ local function newluatable(name,mt,dispose) t = nofgrouped end if mt then - mt = getdata(name) + mt = getinteger(name) if mt then mt = grouped[mt] if mt then @@ -457,7 +457,7 @@ local function newluatable(name,mt,dispose) end end grouped[t] = g - setdata(name,t) + setinteger(name,t) -- This is the slow part. Doing this at the TeX end saved 10% runtime. I'll -- think of something that we can set it at the Lua end. if dispose then @@ -466,7 +466,7 @@ local function newluatable(name,mt,dispose) end local function disposeluatable(name) - local t = getdata(name) + local t = getinteger(name) local g = grouped[t] if g then grouped[t] = false @@ -476,7 +476,7 @@ local function disposeluatable(name) end local function setluatable(name,kv) - local t = getdata(name) + local t = getinteger(name) local g = grouped[t] if g and kv then for k, v in next, kv do @@ -486,7 +486,7 @@ local function setluatable(name,kv) end local function getfromluatable(name,k) - local t = getdata(name) + local t = getinteger(name) local g = grouped[t] if g then local v = g[k] @@ -505,7 +505,7 @@ local function getfromluatable(name,k) end local function idxfromluatable(name,k) - local t = getdata(name) + local t = getinteger(name) local g = grouped[t] if g then local v = g[k] @@ -516,7 +516,7 @@ local function idxfromluatable(name,k) end local function getluatable(name,k) - local t = getdata(name) + local t = getinteger(name) local g = grouped[t] if g then return g @@ -524,7 +524,7 @@ local function getluatable(name,k) end local function inspectluatable(name) - local t = getdata(name) + local t = getinteger(name) local g = grouped[t] if g then report("%s", serialize(g,'[grouped slot ' .. t .. ']')) diff --git a/tex/context/base/mkiv/cldf-scn.lua b/tex/context/base/mkiv/cldf-scn.lua index fa7ff042c..84b2957ab 100644 --- a/tex/context/base/mkiv/cldf-scn.lua +++ b/tex/context/base/mkiv/cldf-scn.lua @@ -77,7 +77,8 @@ function interfaces.implement(specification) if knownscanner(name) and not specification.overload then report("warning: interface scanner %a is overloaded",name) end - register(name,scanner,specification.protected,specification.public,specification.usage) + -- register(name,scanner,specification.protected,specification.public,specification.usage) + register(name,scanner,specification) if private then return end diff --git a/tex/context/base/mkiv/colo-ini.mkiv b/tex/context/base/mkiv/colo-ini.mkiv index 46931d886..7faaa5c5a 100644 --- a/tex/context/base/mkiv/colo-ini.mkiv +++ b/tex/context/base/mkiv/colo-ini.mkiv @@ -1107,9 +1107,8 @@ %D \stopregistercolor %D \stoptyping -\let\maintextcolor \empty -\def\defaulttextcolor {black} -\def\s!themaintextcolor{themaintextcolor} +\let\maintextcolor \empty +\def\defaulttextcolor{black} \unexpanded\def\inheritmaintextcolor {\ifx\maintextcolor\empty\else\colo_helpers_activate\maintextcolor\fi} diff --git a/tex/context/base/mkiv/colo-ini.mkxl b/tex/context/base/mkiv/colo-ini.mkxl index 72ee3db32..e8ea71b8d 100644 --- a/tex/context/base/mkiv/colo-ini.mkxl +++ b/tex/context/base/mkiv/colo-ini.mkxl @@ -11,9 +11,6 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -%D We need to clean this up further but first we have to make sure that mkiv -%D code works ok. - \writestatus{loading}{ConTeXt Color Macros / Initialization} %D Todo: move color space in color attribute (last two bits) @@ -98,16 +95,7 @@ %D \stopcombination %D \stoptyping -\unexpanded\def\definecolor {\dodoubleargument\colo_basics_define} -\unexpanded\def\defineglobalcolor {\dodoubleargument\colo_basics_define_global} -\unexpanded\def\defineprocesscolor {\dotripleargument\colo_basics_define_process} -\unexpanded\def\definenamedcolor {\dodoubleargument\colo_basics_define_named} -\unexpanded\def\definespotcolor {\dotripleargument\colo_basics_define_spot} -\unexpanded\def\definemultitonecolor {\doquadrupleempty\colo_basics_define_multitone} -\unexpanded\def\definetransparency {\dodoubleargument\colo_basics_define_transpancy} -\unexpanded\def\defineglobaltransparency{\dodoubleargument\colo_basics_define_transpancy_global} - -\unexpanded\def\loadfoundcolorsetfile#1#2% name foundname / not a user command +\permanent\protected\def\loadfoundcolorsetfile#1#2% name foundname / not a user command {\startreadingfile \startcolorset[#1]% \input{#2}% @@ -135,11 +123,11 @@ \let\g_color\empty \let\g_style\empty -\unexpanded\def\switchtocolor[#1]{\begincsname#1\endcsname} +\protected\def\switchtocolor[#1]{\begincsname#1\endcsname} % transparency -\unexpanded\def\transparent[#1]% +\permanent\protected\def\transparent[#1]% {\bgroup \edef\currenttransparencyname{#1}% % the \relax catches a non existent csname @@ -150,7 +138,7 @@ \fi \let\nexttoken} -\unexpanded\def\starttransparent[#1]%$ +\permanent\protected\def\starttransparent[#1]%$ {\begingroup \edef\currenttransparencyname{#1}% \ifx\currenttransparencyname\v!reset @@ -159,12 +147,12 @@ \begincsname\??transparencysetter\currenttransparencyname\endcsname\relax \fi} -\unexpanded\def\stoptransparent +\permanent\protected\def\stoptransparent {\endgroup} % color -\unexpanded\def\coloronly[#1]% +\permanent\protected\def\coloronly[#1]% {\bgroup \edef\currentcolorname{#1}% \ifempty\currentcolorprefix @@ -174,7 +162,7 @@ \fi \let\nexttoken} -\unexpanded\def\startcoloronly[#1]%$ +\permanent\protected\def\startcoloronly[#1]%$ {\begingroup \edef\currentcolorname{#1}% \ifempty\currentcolorprefix @@ -183,12 +171,12 @@ \colo_helpers_activate_yes_only \fi} -\unexpanded\def\stopcoloronly +\permanent\protected\def\stopcoloronly {\endgroup} % color + transparency -\unexpanded\def\color[#1]% +\permanent\protected\def\color[#1]% {\bgroup \edef\currentcolorname{#1}% \ifempty\currentcolorprefix @@ -198,12 +186,12 @@ \fi \let\nexttoken} -\unexpanded\def\graycolor[#1]% +\permanent\protected\def\graycolor[#1]% {\bgroup \colo_helpers_set_model\s!gray\colo_helpers_activate{#1}% \let\nexttoken} -\unexpanded\def\startcolor[#1]%$ +\permanent\protected\def\startcolor[#1]%$ {\begingroup \edef\currentcolorname{#1}% \ifempty\currentcolorprefix @@ -212,24 +200,24 @@ \colo_helpers_activate_yes \fi} -\unexpanded\def\stopcolor +\permanent\protected\def\stopcolor {\endgroup} -\unexpanded\def\colored[#1]% +\permanent\protected\def\colored[#1]% {\bgroup \colo_basics_defined_and_activated{#1}% \let\nexttoken} -\unexpanded\def\fastcolored[#1]#2% +\permanent\protected\def\fastcolored[#1]#2% {\begingroup % is this command still needed? \colo_basics_defined_and_activated{#1}% #2% \endgroup} -\unexpanded\def\directcolored[#1]% +\permanent\protected\def\directcolored[#1]% {\colo_basics_defined_and_activated{#1}} -\unexpanded\def\fastcolor[#1]#2% +\permanent\protected\def\fastcolor[#1]#2% {\begingroup % is this command still needed? \edef\currentcolorname{#1}% \ifempty\currentcolorprefix @@ -240,7 +228,7 @@ #2% \endgroup} -\unexpanded\def\directcolor[#1]% +\permanent\protected\def\directcolor[#1]% {\edef\currentcolorname{#1}% \ifempty\currentcolorprefix \colo_helpers_activate_nop @@ -250,10 +238,10 @@ %D The following command is obsolete: -\unexpanded\def\startcolorpage{\startcolor[\ifempty\maintextcolor\defaulttextcolor\else\maintextcolor\fi]} -\unexpanded\def\stopcolorpage {\stopcolor} +\permanent\protected\def\startcolorpage{\startcolor[\ifempty\maintextcolor\defaulttextcolor\else\maintextcolor\fi]} +\permanent\protected\def\stopcolorpage {\stopcolor} -\unexpanded\def\getcolorattributevalue#1#2% obsolete, use \thecolorattribute instead ... +\permanent\protected\def\getcolorattributevalue#1#2% obsolete, use \thecolorattribute instead ... {\begingroup \colo_helpers_activate{#1}% \normalexpanded{\endgroup\edef\noexpand#2% @@ -264,8 +252,8 @@ %D \macros %D {startcurrentcolor,stopcurrentcolor} -\unexpanded\def\startcurrentcolor{\startcolor[\outercolorname]} -\unexpanded\def\stopcurrentcolor {\stopcolor} +\permanent\protected\def\startcurrentcolor{\startcolor[\outercolorname]} +\permanent\protected\def\stopcurrentcolor {\stopcolor} %D \macros %D {setupcolor} @@ -290,9 +278,9 @@ %D \usecolors[dem] %D \stoptyping -\unexpanded\def\startcolorset[#1]{\clf_startcolorset{#1}} -\unexpanded\def\stopcolorset {\clf_stopcolorset} -\unexpanded\def\usecolors [#1]{\clf_usecolors{#1}} +\permanent\protected\def\startcolorset[#1]{\clf_startcolorset{#1}} +\permanent\protected\def\stopcolorset {\clf_stopcolorset} +\permanent\protected\def\usecolors [#1]{\clf_usecolors{#1}} \let\setupcolor\usecolors @@ -351,7 +339,7 @@ \newcount\c_colo_nesting -\unexpanded\def\pushcolor[#1]% +\permanent\protected\def\pushcolor[#1]% {\global\advance\c_colo_nesting\plusone \expandafter\edef\csname\??colorstack\number\c_colo_nesting\endcsname {\c_attr_colormodel \the\c_attr_colormodel @@ -360,7 +348,7 @@ \relax}% stack \colo_helpers_activate{#1}} -\unexpanded\def\popcolor +\permanent\protected\def\popcolor {\csname\??colorstack\number\c_colo_nesting\endcsname \global\advance\c_colo_nesting\minusone} @@ -369,11 +357,11 @@ \newcount\c_colo_saved_attribute_color \newcount\c_colo_saved_attribute_transparency -\unexpanded\def\savecolor +\permanent\protected\def\savecolor {\c_colo_saved_attribute_color \c_attr_color \c_colo_saved_attribute_transparency\c_attr_transparency} -\unexpanded\def\restorecolor +\permanent\protected\def\restorecolor {\c_attr_color \c_colo_saved_attribute_color \c_attr_transparency\c_colo_saved_attribute_transparency} @@ -443,8 +431,10 @@ \let\c_colo_palet\relax \def\colo_palet_allocate#1% - {\expandafter\let \csname\??paletlist#1\endcsname\empty - \expandafter\newcount\csname\??paletsize#1\endcsname} + {\expandafter\let\csname\??paletlist#1\endcsname\empty + \ifcsname\??paletsize#1\endcsname\else + \expandafter\newcount\csname\??paletsize#1\endcsname + \fi} \def\colo_palet_prepare#1% {\edef\colo_palet_name{#1}% @@ -453,15 +443,16 @@ \else \colo_palet_allocate\colo_palet_name \fi - \edef\m_colo_palet{\begincsname\??paletlist\colo_palet_name\endcsname}% - \expandafter\let\expandafter\c_colo_palet\csname\??paletsize\colo_palet_name\endcsname} + \enforced\expandafter\let\expandafter\c_colo_palet\csname\??paletsize\colo_palet_name\endcsname + \edef\m_colo_palet{\begincsname\??paletlist\colo_palet_name\endcsname}} \def\colo_palet_extend#1% {\addtocommalist{#1}\m_colo_palet \expandafter\let\csname\??paletlist\colo_palet_name\endcsname\m_colo_palet + %\advance\csname\??paletsize\colo_palet_name\endcsname\plusone \advance\c_colo_palet\plusone} -\unexpanded\def\doifelsecolorpalet#1% +\permanent\protected\def\doifelsecolorpalet#1% {\ifcsname\??paletlist#1\endcsname \expandafter\firstoftwoarguments \else @@ -471,41 +462,75 @@ \let\paletlist\empty \let\paletsize\!!zerocount -\unexpanded\def\getpaletlist[#1]% +\permanent\protected\def\getpaletlist[#1]% {\edef\paletlist{\begincsname\??paletlist#1\endcsname}} -\unexpanded\def\getpaletsize[#1]% +\permanent\protected\def\getpaletsize[#1]% {\ifcsname\??paletsize#1\endcsname \edef\paletsize{\the\lastnamedcs}% \else \let\paletsize\!!zerocount \fi} -\unexpanded\def\definepalet - {\dotripleempty\colo_palets_define} - -\def\colo_palets_define - {\ifthirdargument - \expandafter\colo_palets_define_b - \else +%% \protected\def\definepalet +%% {\dotripleempty\colo_palets_define} +%% +%% \def\colo_palets_define +%% {\ifthirdargument +%% \expandafter\colo_palets_define_b +%% \else +%% \expandafter\colo_palets_define_a +%% \fi} +%% +%% \protected\def\colo_palets_define_a[#1][#2][#3]% +%% \protected\def\colo_palets_define_b[#1][#2][#3]% + +\permanent\tolerant\protected\def\definepalet[#1]#*[#2]#*[#3]% + {\ifarguments + \expandafter\gobblethreearguments + \or + \expandafter\gobblethreearguments + \or \expandafter\colo_palets_define_a - \fi} + \or + \expandafter\colo_palets_define_b + \fi{#1}{#2}{#3}} -\unexpanded\def\colo_palets_define_a[#1][#2][#3]% +\protected\def\colo_palets_define_a#1#2#3% {\colo_palet_prepare{#1}% \ifcondition\validassignment{#2}% \setevalue{\??colorpaletspecification#1}{#2}% \processcommalist[#2]{\colo_palets_define_one{#1}}% \orelse\ifcsname\??colorpaletspecification#2\endcsname - \normalexpanded{\colo_palets_define[#1][\lastnamedcs]}% + \normalexpanded{\colo_palets_define_b{#1}{\lastnamedcs}\empty}% \fi} -\unexpanded\def\colo_palets_define_b[#1][#2][#3]% +\protected\def\colo_palets_define_b#1#2#3% {\colo_palet_prepare{#1}% \setevalue{\??colorpaletspecification#1}{#2}% \colo_palet_extend{#2}% \colo_palets_define_assign{#1}{#2}{#3}} +% % or, it being not that critital, just this +% +% \permanent\tolerant\protected\def\definepalet[#1]#*[#2]#*[#3]% +% {\ifarguments +% \or +% \or +% \colo_palet_prepare{#1}% +% \ifcondition\validassignment{#2}% +% \setevalue{\??colorpaletspecification#1}{#2}% +% \processcommalist[#2]{\colo_palets_define_one{#1}}% +% \orelse\ifcsname\??colorpaletspecification#2\endcsname +% \normalexpanded{\colo_palets_define_b{#1}{\lastnamedcs}{}}% +% \fi +% \or +% \colo_palet_prepare{#1}% +% \setevalue{\??colorpaletspecification#1}{#2}% +% \colo_palet_extend{#2}% +% \colo_palets_define_assign{#1}{#2}{#3}% +% \fi} + \def\colo_palets_define_one#1#2% get rid of { } {\ifcondition\validassignment{#2}% catch empty entries \colo_palets_define_two{#1}[#2]% @@ -539,12 +564,9 @@ \newtoks\everysetuppalet -\unexpanded\def\setuppalet - {\dosingleempty\colo_palets_setup} - % \newtoks\t_colo_prefix % used in mp interface -\def\colo_palets_setup[#1]% +\permanent\tolerant\protected\def\setuppalet[#1]% {\edef\currentcolorpalet{#1}% \ifempty\currentcolorpalet % seems to be a reset @@ -631,10 +653,10 @@ %D %D These speak for themselves. See \type {colo-ext} for usage. -\unexpanded\def\negatecolorcomponent#1% #1 = \macro +\permanent\protected\def\negatecolorcomponent#1% #1 = \macro {\edef#1{\clf_negatecolorcomponent{#1}}} -\def\negatedcolorcomponent#1% +\permanent\def\negatedcolorcomponent#1% {\clf_negatecolorcomponent{#1}} %D \macros @@ -670,7 +692,7 @@ % draw btex test etex withprescript \mptexcolor{blue} ; % \stopMPpage -\unexpanded\def\setcolormodel[#1]% % beware, \setupcolors will overload this, so this one is +\permanent\protected\def\setcolormodel[#1]% % beware, \setupcolors will overload this, so this one is {\colo_helpers_set_model{#1}} % only for local usage \def\colo_helpers_set_model#1% direct @@ -790,12 +812,12 @@ \let\dousecolorparameter\colo_helpers_activate -\unexpanded\def\dousecolorhashparameter#1#2% +\permanent\protected\def\dousecolorhashparameter#1#2% {\ifcsname#1#2\endcsname \expandafter\dousecolorparameter\csname#1#2\endcsname \fi} -\unexpanded\def\dousecurrentcolorparameter +\permanent\protected\def\dousecurrentcolorparameter {\let\currentcolorname\currentcolorparameter % maybe only when success \ifcsname\??colorsetter\currentcolorprefix\currentcolorparameter\endcsname \lastnamedcs @@ -807,7 +829,7 @@ \let\dosetcolorattribute\dousecolorhashparameter % for a while -\unexpanded\def\deactivatecolor % sort of public but a bad name +\permanent\protected\def\deactivatecolor % sort of public but a bad name {\let\currentcolorname\s!black \c_attr_color \attributeunsetvalue \c_attr_transparency\attributeunsetvalue} @@ -833,99 +855,78 @@ \newcount\c_colo_protection -\unexpanded\def\startprotectedcolors - {\advance\c_colo_protection\plusone} - -\unexpanded\def\stopprotectedcolors - {\advance\c_colo_protection\minusone} +\permanent\protected\def\startprotectedcolors{\advance\c_colo_protection\plusone } +\permanent\protected\def\stopprotectedcolors {\advance\c_colo_protection\minusone} -\def\colo_basics_define[#1][#2]% -% {\edef\m_colo_old{#1}% -% \edef\m_colo_new{#2}% -% \ifx\m_colo_old\m_colo_new +\permanent\tolerant\protected\def\definecolor[#1]#*[#2]% {\iftok{#1}{#2}% % maybe a warning \else \clf_defineprocesscolorlocal{#1}{#2}\v_colo_freeze_state\relax \colo_basics_synchronize{#1}% \ifcase\c_colo_protection - \unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}% + \protected\setvalue{#1}{\colo_helpers_activate{#1}}% \fi \fi} -\def\colo_basics_define_global[#1][#2]% -% {\edef\m_colo_old{#1}% -% \edef\m_colo_new{#2}% -% \ifx\m_colo_old\m_colo_new +\permanent\tolerant\protected\def\defineglobalcolor[#1]#*[#2]% {\iftok{#1}{#2}% % maybe a warning \else \clf_defineprocesscolorglobal{#1}{#2}\v_colo_freeze_state\relax \colo_basics_synchronize{#1}% \ifcase\c_colo_protection - \unexpanded\setgvalue{#1}{\colo_helpers_activate{#1}}% + \protected\setgvalue{#1}{\colo_helpers_activate{#1}}% \fi \fi} -\let\colo_basics_define_named\colo_basics_define - -\def\dodefinefastcolor[#1][#2]% still not fast but ok (might change) - {\clf_defineprocesscolorlocal{#1}{#2}\v_colo_freeze_state\relax - \colo_basics_synchronize{#1}% - \ifcase\c_colo_protection - \unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}% - \fi} +\let\definenamedcolor\definecolor \def\colo_basics_defined_and_activated#1% {\clf_defineprocesscolordummy{#1}% we could pass dummy here too \colo_basics_synchronize{\v_colo_dummy_name}% \colo_helpers_activate_dummy} -\def\colo_basics_define_process - {\ifthirdargument - \expandafter\colo_basics_define_process_yes - \else - \expandafter\colo_basics_define_process_nop - \fi} - -\def\colo_basics_define_process_yes[#1][#2][#3]% - {\clf_defineprocesscolorlocal{#1}{\processcolorcomponents{#2},#3}\v_colo_freeze_state\relax - \colo_basics_synchronize{#1}% - \ifcase\c_colo_protection - \unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}% +\permanent\tolerant\protected\def\defineprocesscolor[#1]#*[#2]#*[#3]% + {\ifarguments\or + \colo_basics_define_process_wrapup{#1}\empty + \or + \colo_basics_define_process_wrapup{#1}{#2}% + \or % we could just pass #3 to clf_... also when it's empty ... todo after split + \colo_basics_define_process_wrapup{#1}{\processcolorcomponents{#2},#3}% \fi} -\def\colo_basics_define_process_nop[#1][#2][#3]% +\def\colo_basics_define_process_wrapup#1#2% {\clf_defineprocesscolorlocal{#1}{#2}\v_colo_freeze_state\relax \colo_basics_synchronize{#1}% \ifcase\c_colo_protection - \unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}% + \protected\setvalue{#1}{\colo_helpers_activate{#1}}% \fi} %D Spotcolors used setxvalue but that messes up currentcolor and probably no global %D is needed either but they are global at the lua end (true argument) so we keep %D that if only because spot colors often are a document wide property -\def\colo_basics_define_spot[#1][#2][#3]% +\permanent\tolerant\protected\def\definespotcolor[#1]#*[#2]#*[#3]% {\clf_definespotcolorglobal{#1}{#2}{#3}% \colo_basics_synchronize{#1}% \ifcase\c_colo_protection - \unexpanded\setgvalue{#1}{\colo_helpers_activate{#1}}% + \protected\setgvalue{#1}{\colo_helpers_activate{#1}}% \fi} -\def\colo_basics_define_multitone[#1][#2][#3][#4]% +\permanent\tolerant\protected\def\definemultitonecolor[#1]#*[#2]#*[#3]#*[#4]% {\clf_definemultitonecolorglobal{#1}{#2}{#3}{#4}% \colo_basics_synchronize{#1}% \ifcase\c_colo_protection - \unexpanded\setgvalue{#1}{\colo_helpers_activate{#1}}% + \protected\setgvalue{#1}{\colo_helpers_activate{#1}}% \fi} %D Transparencies (only): -\def\colo_basics_define_transpancy[#1][#2]% +\permanent\tolerant\protected\def\definetransparency[#1]#*[#2]% {\clf_definetransparency{#1}{#2}} -\def\colo_basics_define_transpancy_global[#1][#2]% +\permanent\tolerant\protected\def\defineglobaltransparency[#1]#*[#2]% {\clf_definetransparencyglobal{#1}{#2}} % A goodie that replaces the startMPcolor hackery @@ -971,10 +972,7 @@ % % because the fractional definition results in a new definition. -\unexpanded\def\defineintermediatecolor - {\dotripleempty\colo_basics_define_intermediate} - -\def\colo_basics_define_intermediate[#1][#2][#3]% \dotripleempty adds {} inside [] +\permanent\tolerant\protected\def\defineintermediatecolor[#1]#*[#2]#*[#3] {\colo_basics_define_intermediate_indeed[#1][#2][#3]} \def\colo_basics_define_intermediate_indeed[#1][#2,#3,#4][#5]% @@ -989,7 +987,7 @@ \v_colo_freeze_state \relax \colo_basics_synchronize{#1}% - \unexpanded\setvalue{#1}{\colo_helpers_activate{#1}}} + \protected\setvalue{#1}{\colo_helpers_activate{#1}}} %D Here is a more efficient helper for pgf: %D @@ -1044,7 +1042,7 @@ %D Switching to a color is done by means of the following command. Later on we will %D explain the use of palets. We define ourselves a color conditional first. -\def\doifelsecolor#1% +\permanent\def\doifelsecolor#1% {\ifcsname\??colorattribute\currentcolorprefix#1\endcsname \expandafter\firstoftwoarguments \orelse\ifcsname\??colorattribute#1\endcsname @@ -1055,7 +1053,7 @@ \let\doifcolorelse\doifelsecolor -\def\doifcolor#1% +\permanent\def\doifcolor#1% {\ifcsname\??colorattribute\currentcolorprefix#1\endcsname \expandafter\firstofoneargument \orelse\ifcsname\??colorattribute#1\endcsname @@ -1088,14 +1086,13 @@ %D \stopregistercolor %D \stoptyping -\let\maintextcolor \empty -\def\defaulttextcolor {black} -\def\s!themaintextcolor{themaintextcolor} +\let\maintextcolor \empty +\def\defaulttextcolor{black} -\unexpanded\def\inheritmaintextcolor +\permanent\protected\def\inheritmaintextcolor {\ifempty\maintextcolor\else\colo_helpers_activate\maintextcolor\fi} -\unexpanded\def\onlyinheritmaintextcolor +\permanent\protected\def\onlyinheritmaintextcolor {\ifempty\maintextcolor \deactivatecolor \else @@ -1113,9 +1110,8 @@ \colo_helpers_activate\maintextcolor \clf_registermaintextcolor\thecolorattribute\maintextcolor\relax} -\unexpanded\def\starttextcolor[#1]% - {\doifsomething{#1} - {\colo_helpers_switch_to_maintextcolor{#1}}} +\permanent\protected\def\starttextcolor[#1]% + {\doifsomething{#1}{\colo_helpers_switch_to_maintextcolor{#1}}} \let\stoptextcolor\relax @@ -1140,16 +1136,6 @@ \def\colo_helpers_inherited_direct_ts#1{\ifcsname\??transparencysetter #1\endcsname\lastnamedcs\fi} \def\colo_helpers_inherited_direct_ta#1{\ifcsname\??transparencyattribute#1\endcsname\lastnamedcs\else\!!zerocount\fi} -% %def\colo_helpers_inherited_palet_cs#1#2{\csname\??colorsetter \ifcsname\??colorsetter \??colorpalet#1:#2\endcsname\??colorpalet#1:#2\fi\endcsname} -% %def\colo_helpers_inherited_palet_ca#1#2{\csname\??colorattribute \ifcsname\??colorattribute \??colorpalet#1:#2\endcsname\??colorpalet#1:#2\fi\endcsname} -% %def\colo_helpers_inherited_palet_ts#1#2{\csname\??transparencysetter \ifcsname\??transparencysetter \??colorpalet#1:#2\endcsname\??colorpalet#1:#2\fi\endcsname} -% %def\colo_helpers_inherited_palet_ta#1#2{\csname\??transparencyattribute\ifcsname\??transparencyattribute\??colorpalet#1:#2\endcsname\??colorpalet#1:#2\fi\endcsname} -% -% \def\colo_helpers_inherited_palet_cs#1#2{\ifcsname\??colorsetter \??colorpalet#1:#2\endcsname\lastnamedcs\fi} -% \def\colo_helpers_inherited_palet_ca#1#2{\ifcsname\??colorattribute \??colorpalet#1:#2\endcsname\lastnamedcs\else\!!zerocount\fi} -% \def\colo_helpers_inherited_palet_ts#1#2{\ifcsname\??transparencysetter \??colorpalet#1:#2\endcsname\lastnamedcs} -% \def\colo_helpers_inherited_palet_ta#1#2{\ifcsname\??transparencyattribute\??colorpalet#1:#2\endcsname\lastnamedcs\else\!!zerocount\fi} - \let\colo_helpers_set_value\setvalue \appendtoks @@ -1202,20 +1188,20 @@ %D Low level defs: -\unexpanded\def\colordefalc#1#2{\setevalue{\??colorattribute #1}{#2}\setvalue {\??colorsetter #1}{\c_attr_color #2 }} -\unexpanded\def\colordefagc#1#2{\setxvalue{\??colorattribute #1}{#2}\setgvalue{\??colorsetter #1}{\c_attr_color #2 }} % was not g -\unexpanded\def\colordefalt#1#2{\setevalue{\??transparencyattribute#1}{#2}\setvalue {\??transparencysetter#1}{\c_attr_transparency#2 }} -\unexpanded\def\colordefagt#1#2{\setxvalue{\??transparencyattribute#1}{#2}\setgvalue{\??transparencysetter#1}{\c_attr_transparency#2 }} +\permanent\protected\def\colordefalc#1#2{\setevalue{\??colorattribute #1}{#2}\setvalue {\??colorsetter #1}{\c_attr_color #2 }} +\permanent\protected\def\colordefagc#1#2{\setxvalue{\??colorattribute #1}{#2}\setgvalue{\??colorsetter #1}{\c_attr_color #2 }} % was not g +\permanent\protected\def\colordefalt#1#2{\setevalue{\??transparencyattribute#1}{#2}\setvalue {\??transparencysetter#1}{\c_attr_transparency#2 }} +\permanent\protected\def\colordefagt#1#2{\setxvalue{\??transparencyattribute#1}{#2}\setgvalue{\??transparencysetter#1}{\c_attr_transparency#2 }} -\unexpanded\def\colordefflc#1#2{\setvalue {\??colorattribute #1}{\colo_helpers_inherited_current_ca{#2}}\setvalue {\??colorsetter #1}{\colo_helpers_inherited_current_cs{#2}}} -\unexpanded\def\colordeffgc#1#2{\setgvalue{\??colorattribute #1}{\colo_helpers_inherited_current_ca{#2}}\setvalue {\??colorsetter #1}{\colo_helpers_inherited_current_cs{#2}}} -\unexpanded\def\colordefflt#1#2{\setvalue {\??transparencyattribute#1}{\colo_helpers_inherited_current_ta{#2}}\setvalue {\??transparencysetter#1}{\colo_helpers_inherited_current_ts{#2}}} -\unexpanded\def\colordeffgt#1#2{\setgvalue{\??transparencyattribute#1}{\colo_helpers_inherited_current_ta{#2}}\setgvalue{\??transparencysetter#1}{\colo_helpers_inherited_current_ts{#2}}} +\permanent\protected\def\colordefflc#1#2{\setvalue {\??colorattribute #1}{\colo_helpers_inherited_current_ca{#2}}\setvalue {\??colorsetter #1}{\colo_helpers_inherited_current_cs{#2}}} +\permanent\protected\def\colordeffgc#1#2{\setgvalue{\??colorattribute #1}{\colo_helpers_inherited_current_ca{#2}}\setvalue {\??colorsetter #1}{\colo_helpers_inherited_current_cs{#2}}} +\permanent\protected\def\colordefflt#1#2{\setvalue {\??transparencyattribute#1}{\colo_helpers_inherited_current_ta{#2}}\setvalue {\??transparencysetter#1}{\colo_helpers_inherited_current_ts{#2}}} +\permanent\protected\def\colordeffgt#1#2{\setgvalue{\??transparencyattribute#1}{\colo_helpers_inherited_current_ta{#2}}\setgvalue{\??transparencysetter#1}{\colo_helpers_inherited_current_ts{#2}}} -\unexpanded\def\colordefrlc #1{\localundefine {\??colorattribute #1}\localundefine {\??colorsetter #1}} -\unexpanded\def\colordefrgc #1{\globalundefine{\??colorattribute #1}\globalundefine{\??colorsetter #1}} -\unexpanded\def\colordefrlt #1{\localundefine {\??transparencyattribute#1}\localundefine {\??transparencysetter#1}} -\unexpanded\def\colordefrgt #1{\globalundefine{\??transparencyattribute#1}\globalundefine{\??transparencysetter#1}} +\permanent\protected\def\colordefrlc #1{\localundefine {\??colorattribute #1}\localundefine {\??colorsetter #1}} +\permanent\protected\def\colordefrgc #1{\globalundefine{\??colorattribute #1}\globalundefine{\??colorsetter #1}} +\permanent\protected\def\colordefrlt #1{\localundefine {\??transparencyattribute#1}\localundefine {\??transparencysetter#1}} +\permanent\protected\def\colordefrgt #1{\globalundefine{\??transparencyattribute#1}\globalundefine{\??transparencysetter#1}} %D \macros %D {colorvalue, grayvalue} @@ -1241,71 +1227,54 @@ \let\colorformatseparator\space -\def\MPcolor#1% +\permanent\def\MPcolor#1% {\clf_mpcolor \c_attr_colormodel \colo_helpers_inherited_current_ca{#1} % \colo_helpers_inherited_current_ta{#1} } -\def\MPcoloronly#1% +\permanent\def\MPcoloronly#1% {\clf_mpcolor \c_attr_colormodel \colo_helpers_inherited_current_ca{#1} % \zerocount} -\def\MPtransparency#1% +\permanent\def\MPtransparency#1% {\clf_mpcolor \zerocount \zerocount \colo_helpers_inherited_current_ta{#1} } -\def\MPoptions#1% +\permanent\def\MPoptions#1% {\clf_mpoptions \c_attr_colormodel \colo_helpers_inherited_current_ca{#1} % \colo_helpers_inherited_current_ta{#1} } -\def\thecolormodelattribute {\the\c_attr_colormodel} +\permanent\def\thecolormodelattribute {\the\c_attr_colormodel} -\def\rawcolorattribute #1{\ifcsname\??colorattribute \currentcolorprefix#1\endcsname\lastnamedcs\orelse\ifcsname\??colorattribute #1\endcsname\lastnamedcs\else\zerocount\fi} -\def\rawtransparencyattribute#1{\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\lastnamedcs\orelse\ifcsname\??transparencyattribute#1\endcsname\lastnamedcs\else\zerocount\fi} +\permanent\def\rawcolorattribute #1{\ifcsname\??colorattribute \currentcolorprefix#1\endcsname\lastnamedcs\orelse\ifcsname\??colorattribute #1\endcsname\lastnamedcs\else\zerocount\fi} +\permanent\def\rawtransparencyattribute#1{\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\lastnamedcs\orelse\ifcsname\??transparencyattribute#1\endcsname\lastnamedcs\else\zerocount\fi} -\def\thecolorattribute #1{\number\ifcsname\??colorattribute \currentcolorprefix#1\endcsname\lastnamedcs\orelse\ifcsname\??colorattribute #1\endcsname\lastnamedcs\else\zerocount\fi} -\def\thetransparencyattribute#1{\number\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\lastnamedcs\orelse\ifcsname\??transparencyattribute#1\endcsname\lastnamedcs\else\zerocount\fi} - -% \def\internalspotcolorname #1{\clf_spotcolorname \thecolorattribute{#1} } -% \def\internalspotcolorparent #1{\clf_spotcolorparent\thecolorattribute{#1} } -% \def\internalspotcolorsize #1{\clf_spotcolorvalue \thecolorattribute{#1} } -% -% \def\colorcomponents #1{\clf_colorcomponents \thecolorattribute {#1} } -% \def\transparencycomponents #1{\clf_transparencycomponents\thetransparencyattribute{#1} } -% \def\processcolorcomponents #1{\clf_processcolorcomponents\thecolorattribute {#1} } -% -% \def\colorvalue #1{\clf_formatcolor\thecolorattribute{#1}{\colorformatseparator}} -% \def\grayvalue #1{\clf_formatgray \thecolorattribute{#1}{\colorformatseparator}} -% -% \def\doifelseblack #1{\clf_doifelseblack\thecolorattribute{#1} } -% \def\doifelsedrawingblack {\clf_doifelsedrawingblack} -% -% \let\doifblackelse \doifelseblack -% \let\doifdrawingblackelse \doifelsedrawingblack +\permanent\def\thecolorattribute #1{\number\ifcsname\??colorattribute \currentcolorprefix#1\endcsname\lastnamedcs\orelse\ifcsname\??colorattribute #1\endcsname\lastnamedcs\else\zerocount\fi} +\permanent\def\thetransparencyattribute#1{\number\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\lastnamedcs\orelse\ifcsname\??transparencyattribute#1\endcsname\lastnamedcs\else\zerocount\fi} -\def\internalspotcolorname #1{\clf_spotcolorname \rawcolorattribute{#1}} -\def\internalspotcolorparent #1{\clf_spotcolorparent\rawcolorattribute{#1}} -\def\internalspotcolorsize #1{\clf_spotcolorvalue \rawcolorattribute{#1}} +\permanent\def\internalspotcolorname #1{\clf_spotcolorname \rawcolorattribute{#1}} +\permanent\def\internalspotcolorparent #1{\clf_spotcolorparent\rawcolorattribute{#1}} +\permanent\def\internalspotcolorsize #1{\clf_spotcolorvalue \rawcolorattribute{#1}} -\def\colorcomponents #1{\clf_colorcomponents \rawcolorattribute {#1}} -\def\transparencycomponents #1{\clf_transparencycomponents\rawtransparencyattribute{#1}} -\def\processcolorcomponents #1{\clf_processcolorcomponents\rawcolorattribute {#1}} +\permanent\def\colorcomponents #1{\clf_colorcomponents \rawcolorattribute {#1}} +\permanent\def\transparencycomponents #1{\clf_transparencycomponents\rawtransparencyattribute{#1}} +\permanent\def\processcolorcomponents #1{\clf_processcolorcomponents\rawcolorattribute {#1}} -\def\colorvalue #1{\clf_formatcolor\rawcolorattribute{#1}{\colorformatseparator}} -\def\grayvalue #1{\clf_formatgray \rawcolorattribute{#1}{\colorformatseparator}} +\permanent\def\colorvalue #1{\clf_formatcolor\rawcolorattribute{#1}{\colorformatseparator}} +\permanent\def\grayvalue #1{\clf_formatgray \rawcolorattribute{#1}{\colorformatseparator}} -\def\doifelseblack #1{\clf_doifelseblack\rawcolorattribute{#1}} -\def\doifelsedrawingblack {\clf_doifelsedrawingblack} +\permanent\def\doifelseblack #1{\clf_doifelseblack\rawcolorattribute{#1}} +\permanent\def\doifelsedrawingblack {\clf_doifelsedrawingblack} -\let\doifblackelse \doifelseblack -\let\doifdrawingblackelse \doifelsedrawingblack +\aliased\let\doifblackelse \doifelseblack +\aliased\let\doifdrawingblackelse \doifelsedrawingblack %D \macros %D {forcecolorhack} @@ -1327,15 +1296,14 @@ % \normal added else fails in metafun manual (leaders do a hard scan) -% \unexpanded\def\forcecolorhack{\leaders\hrule\hskip\zeropoint\relax} % relax is needed ! +% \protected\def\forcecolorhack{\leaders\hrule\hskip\zeropoint\relax} % relax is needed ! % % I really need to sort this out! -\unexpanded\def\forcecolorhack{\leaders\hrule\s!height\zeropoint\s!depth\zeropoint\hskip\zeropoint\relax} % relax is needed ! +\permanent\protected\def\forcecolorhack{\leaders\hrule\s!height\zeropoint\s!depth\zeropoint\hskip\zeropoint\relax} % relax is needed ! -%D We default to the colors defined in \type {colo-imp-rgb} and -%D support both \RGB\ and \CMYK\ output. Transparencies are defined -%D here: +%D We default to the colors defined in \type {colo-imp-rgb} and support both \RGB\ +%D and \CMYK\ output. Transparencies are defined here: \definecolor[black][s=0] \definecolor[white][s=1] diff --git a/tex/context/base/mkiv/cont-log.mkiv b/tex/context/base/mkiv/cont-log.mkiv index 42de5b434..3dbfdc604 100644 --- a/tex/context/base/mkiv/cont-log.mkiv +++ b/tex/context/base/mkiv/cont-log.mkiv @@ -302,7 +302,7 @@ \def\LuaTeX {LuaTeX}% \def\LuajitTeX {LuajitTeX}% \def\LuaMetaTeX{LuaMetaTeX}% - \let\wordboundary\empty + %\let\wordboundary\empty % primitive so we need to promote it to frozen (orjust preroll) \to \everysimplifycommands \protect \endinput diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index ca98de02e..d14c6b9c7 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2020.09.20 22:59} +\newcontextversion{2020.10.30 22:24} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc @@ -35,10 +35,16 @@ \ifdefined\w \else \unexpanded\def\w{\mathortext\word\mathword} \fi \appendtoks - \let\t\mathtext - \let\w\mathword + \overloaded\let\t\mathtext + \overloaded\let\w\mathword \to \everymathematics +\pushoverloadmode + % charts needs these + \overloaded\unletfrozen\name % for now + \overloaded\frozen\let\type\type +\popoverloadmode + %D We're done. \protect \endinput diff --git a/tex/context/base/mkiv/cont-run.lua b/tex/context/base/mkiv/cont-run.lua index 3fef61672..eb0e143d5 100644 --- a/tex/context/base/mkiv/cont-run.lua +++ b/tex/context/base/mkiv/cont-run.lua @@ -190,9 +190,15 @@ else end -local preparejob preparejob = function() -- tricky: we need a hook for this +local function processjob() + + tokens.setters.macro("processjob","") -- make a + + environment.initializefilenames() -- todo: check if we really need to pre-prep the filename local arguments = environment.arguments + local suffix = environment.suffix + local filename = environment.filename -- hm, not inputfilename ! environment.lmtxmode = CONTEXTLMTXMODE @@ -207,25 +213,21 @@ local preparejob preparejob = function() -- tricky: we need a hook for this } end - preparejob = function() end - - job.prepare = preparejob + if CONTEXTLMTXMODE then -end + local overloadmode = arguments.overloadmode -job.prepare = preparejob - -local function processjob() - - tokens.setters.macro("processjob","") -- make a - - environment.initializefilenames() -- todo: check if we really need to pre-prep the filename + if overloadmode == "warning" then + overloadmode = 3 -- 5 + elseif overloadmode == "error" then + overloadmode = 4 -- 6 + else + overloadmode = tonumber(overloadmode) or 0 + end - local arguments = environment.arguments - local suffix = environment.suffix - local filename = environment.filename -- hm, not inputfilename ! + tex.set("overloadmode",overloadmode) - preparejob() + end if not filename or filename == "" then -- skip diff --git a/tex/context/base/mkiv/cont-run.mkiv b/tex/context/base/mkiv/cont-run.mkiv index f841ce530..fba9cfaa9 100644 --- a/tex/context/base/mkiv/cont-run.mkiv +++ b/tex/context/base/mkiv/cont-run.mkiv @@ -53,4 +53,16 @@ \unexpanded\def\blocksynctexfile[#1]% {\processcommacommand{#1}\synctexblockfilename} +\ifcase\contextlmtxmode + \def\continuewhenlmtxmode + {\starttext + \startTEXpage[\c!offset=2ex,\c!foregroundstyle=\tttf]% + This file needs \LuaMetaTeX\ and \ConTeXt\ \LMTX.% + \stopTEXpage + \stoptext + \endinput} +\else + \let\continuewhenlmtxmode\relax +\fi + \protect \endinput diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index 45f52a9c5..d22459a4b 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -45,7 +45,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2020.09.20 22:59} +\edef\contextversion{2020.10.30 22:24} %D Kind of special: diff --git a/tex/context/base/mkiv/context.mkxl b/tex/context/base/mkiv/context.mkxl index dcf733d2e..793fc4d14 100644 --- a/tex/context/base/mkiv/context.mkxl +++ b/tex/context/base/mkiv/context.mkxl @@ -29,7 +29,12 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2020.09.20 22:59} +\edef\contextversion{2020.10.30 22:24} + +%overloadmode 1 % check frozen / warning +%overloadmode 2 % check frozen / error +%overloadmode 3 % check frozen, primitive, permanent / warning +\overloadmode 4 % check frozen, primitive, permanent / error %D Kind of special: @@ -89,10 +94,10 @@ \loadmarkfile{luat-lib} \loadmarkfile{luat-soc} -\loadmarkfile{catc-ini} +\loadmkxlfile{catc-ini} \loadmarkfile{catc-act} \loadmarkfile{catc-def} -\loadmarkfile{catc-ctx} +\loadmkxlfile{catc-ctx} \loadmarkfile{catc-sym} \loadmarkfile{toks-ini} @@ -129,12 +134,12 @@ \loadmarkfile{supp-dir} -\loadmarkfile{char-utf} % generic code (i.e. not much tex) ... could become unic-ini -\loadmarkfile{char-ini} % tex / context specific -\loadmarkfile{char-act} % even more specific +\loadmarkfile{char-utf} +\loadmkxlfile{char-ini} +\loadmarkfile{char-act} -\loadmarkfile{mult-ini} -\loadmarkfile{mult-sys} +\loadmkxlfile{mult-ini} +\loadmkxlfile{mult-sys} \loadmkxlfile{mult-aux} % LMTX \loadmarkfile{mult-def} \loadmarkfile{mult-chk} @@ -146,10 +151,10 @@ \loadmarkfile{toks-aux} -\loadmarkfile{attr-ini} +\loadmkxlfile{attr-ini} \loadmarkfile{core-ini} -\loadmarkfile{core-env} +\loadmkxlfile{core-env} \loadmarkfile{layo-ini} @@ -171,7 +176,7 @@ \loadmarkfile{attr-col} \loadmarkfile{attr-lay} \loadmarkfile{attr-neg} -\loadmarkfile{attr-eff} +\loadmkxlfile{attr-eff} \loadmarkfile{attr-mkr} \loadmarkfile{trac-tex} @@ -193,16 +198,16 @@ \loadmarkfile{typo-inj} -\loadmkvifile{file-syn} +\loadmklxfile{file-syn} \loadmkvifile{file-mod} \loadmarkfile{core-sys} -\loadmarkfile{core-con} +\loadmkxlfile{core-con} \loadmarkfile{cont-fil} \loadmarkfile{regi-ini} -\loadmarkfile{enco-ini} +\loadmkxlfile{enco-ini} \loadmkxlfile{hand-ini} \loadmkxlfile{lang-ini} % LMTX @@ -240,7 +245,7 @@ \loadmkvifile{pack-bck} \loadmarkfile{pack-fen} -\loadmarkfile{lxml-ini} +\loadmkxlfile{lxml-ini} \loadmarkfile{lxml-sor} \loadmkvifile{typo-prc} @@ -253,9 +258,9 @@ \loadmarkfile{strc-doc} \loadmarkfile{strc-num} \loadmarkfile{strc-mar} -\loadmarkfile{strc-sbe} +\loadmkxlfile{strc-sbe} \loadmkvifile{strc-lst} -\loadmarkfile{strc-sec} +\loadmkxlfile{strc-sec} \loadmarkfile{strc-pag} % hm, depends on core-num \loadmarkfile{strc-ren} \loadmarkfile{strc-xml} @@ -284,29 +289,29 @@ \loadmklxfile{strc-itm} % LMTX -\loadmkvifile{strc-con} -\loadmkvifile{strc-des} -\loadmkvifile{strc-enu} +\loadmklxfile{strc-con} +\loadmklxfile{strc-des} +\loadmklxfile{strc-enu} \loadmarkfile{strc-ind} -\loadmarkfile{strc-lab} -\loadmarkfile{strc-syn} +\loadmkxlfile{strc-lab} +\loadmkxlfile{strc-syn} % \loadmarkfile{core-sys} \loadmarkfile{page-var} \loadmkvifile{page-otr} -\loadmarkfile{page-ini} +\loadmkxlfile{page-ini} \loadmarkfile{page-ins} \loadmarkfile{page-fac} \loadmarkfile{page-brk} \loadmarkfile{page-col} \loadmarkfile{page-inf} \loadmarkfile{page-flt} -\loadmarkfile{page-bck} +\loadmkxlfile{page-bck} \loadmarkfile{page-not} \loadmarkfile{page-one} -\loadmarkfile{page-lay} +\loadmkxlfile{page-lay} \loadmkvifile{page-box} \loadmklxfile{page-txt} % LMTX \loadmarkfile{page-sid} % when @@ -371,7 +376,7 @@ \loadmkvifile{font-lib} % way too late but after language \loadmklxfile{font-fil} % LMTX \loadmkvifile{font-var} -\loadmkvifile{font-fea} +\loadmklxfile{font-fea} \loadmklxfile{font-mat} % LMTX \loadmklxfile{font-ini} % LMTX \loadmklxfile{font-sym} % LMTX @@ -391,18 +396,18 @@ \loadmarkfile{typo-tal} \loadmarkfile{typo-par} % par builders (uses fonts) -\loadmarkfile{tabl-com} +\loadmkxlfile{tabl-com} \loadmarkfile{tabl-pln} -\loadmarkfile{tabl-tab} % thrd-tab stripped and merged +\loadmkxlfile{tabl-tab} % thrd-tab stripped and merged \loadmkxlfile{tabl-tbl} % LMTX \loadmkxlfile{tabl-ntb} % LMTX -\loadmarkfile{tabl-nte} -\loadmarkfile{tabl-ltb} -\loadmarkfile{tabl-frm} +\loadmkxlfile{tabl-nte} +\loadmkxlfile{tabl-ltb} +\loadmkxlfile{tabl-frm} \loadmarkfile{tabl-tsp} -\loadmkvifile{tabl-xtb} +\loadmklxfile{tabl-xtb} \loadmarkfile{tabl-mis} \loadmarkfile{typo-lan} @@ -413,7 +418,7 @@ \loadmkxlfile{blob-ini} -\loadmarkfile{trac-vis} +\loadmkxlfile{trac-vis} \loadmarkfile{trac-jus} \loadmarkfile{typo-cln} @@ -430,7 +435,7 @@ \loadmarkfile{typo-drp} \loadmarkfile{typo-fln} \loadmarkfile{typo-sus} -\loadmarkfile{typo-lig} +\loadmkxlfile{typo-lig} \loadmarkfile{typo-chr} \loadmarkfile{typo-rub} \loadmkivfile{typo-fkr} @@ -463,7 +468,7 @@ \loadmarkfile{page-mrk} % depends on mp \loadmarkfile{page-flw} -\loadmarkfile{page-spr} +\loadmkxlfile{page-spr} \loadmarkfile{page-plg} \loadmarkfile{page-str} @@ -474,13 +479,13 @@ %loadmarkfile{anch-snc} % when needed this one will be redone \loadmkxlfile{math-ini} % way after font-pre ! -\loadmarkfile{math-pln} +\loadmkxlfile{math-pln} \loadmarkfile{math-for} \loadmarkfile{math-def} % also saves some meanings -\loadmarkfile{math-ali} +\loadmkxlfile{math-ali} %loadmarkfile{math-arr} \loadmkvifile{math-stc} -\loadmarkfile{math-frc} +\loadmkxlfile{math-frc} \loadmarkfile{math-mis} \loadmarkfile{math-scr} \loadmarkfile{math-int} @@ -498,7 +503,7 @@ \loadmarkfile{strc-mat} \loadmarkfile{chem-ini} -\loadmarkfile{chem-str} +\loadmkxlfile{chem-str} \loadmarkfile{typo-scr} \loadmarkfile{phys-dim} @@ -506,12 +511,12 @@ \loadmarkfile{node-rul} % beware, defined \underbar so after math \loadmkvifile{font-sol} % font solutions -\loadmkvifile{strc-not} +\loadmklxfile{strc-not} \loadmkvifile{strc-lnt} \loadmkivfile{strc-tnt} \loadmkivfile{strc-usr} -\loadmarkfile{pack-com} +\loadmkxlfile{pack-com} \loadmarkfile{typo-del} \loadmarkfile{grph-trf} @@ -519,9 +524,9 @@ \loadmarkfile{grph-fig} \loadmarkfile{grph-raw} \loadmarkfile{grph-rul} -\loadmarkfile{grph-pat} +\loadmkxlfile{grph-pat} -\loadmarkfile{pack-box} +\loadmkxlfile{pack-box} \loadmarkfile{pack-bar} \loadmarkfile{page-app} \loadmarkfile{meta-fig} @@ -611,4 +616,12 @@ \ctxlua{statistics.savefmtstatus("\jobname","\contextversion","context.mkxl","\contextbanner")}% can become automatic \to \everydump +% some day: +% +% \prependtoks +% \overloadmode 255 +% \to \everyjob + +\overloadmode 0 % for now + \errorstopmode \dump \endinput diff --git a/tex/context/base/mkiv/core-con.mkiv b/tex/context/base/mkiv/core-con.mkiv index fd45aed6c..da2648e87 100644 --- a/tex/context/base/mkiv/core-con.mkiv +++ b/tex/context/base/mkiv/core-con.mkiv @@ -223,8 +223,12 @@ %D \showsetup{month} %D \showsetup{MONTH} +\pushoverloadmode + \let\month\monthlong +\popoverloadmode + \unexpanded\def\MONTH #1{\WORD{\clf_monthname\numexpr#1\relax}} \unexpanded\def\MONTHLONG #1{\WORD{\clf_monthname\numexpr#1\relax}} \unexpanded\def\MONTHSHORT#1{\WORD{\clf_monthmnem\numexpr#1\relax}} diff --git a/tex/context/base/mkiv/core-con.mkxl b/tex/context/base/mkiv/core-con.mkxl new file mode 100644 index 000000000..0f836f0cc --- /dev/null +++ b/tex/context/base/mkiv/core-con.mkxl @@ -0,0 +1,1013 @@ +%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} + +\registerctxluafile{core-con}{} + +% todo: iso date ranges (from/to) + +\unprotect + +\ifdefined\currentlanguage \else \let\currentlanguage\empty \fi +\ifdefined\labeltext \else \let\labeltext \firstofoneargument \fi + +%D This module deals with all kind of conversions from numbers and dates. I +%D considered splitting this module in a support one and a core one, but to keep +%D things simple as well as preserve the overview, I decided against splitting. + +\let\spr\firstofoneargument % separator +\let\stp\firstofoneargument % stopper + +% needed for arab: + +\permanent\protected\def\isolateseparators % even works with list separator overloading + {\def\spr##1{{##1}}% % we can probably best mess around with zwj + \def\stp##1{{##1}}} % and friends + +%D \macros +%D {numbers} +%D +%D First we deal with the dummy conversion of numbers using the \TEX\ primitive +%D \type{\number}. The uppercase alternative is only there for compatibility with +%D the other conversion macros. We could do without \type{#1} but this way we get +%D rid of unwanted braces. For the savety we also define a non||sence uppercase +%D 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 disappear, +%D unless we use: + +\permanent\def\numbers#1{\purenumber{#1}} +\permanent\def\Numbers#1{\purenumber{#1}} + +%D \macros +%D {romannumerals,Romannumerals} +%D +%D \TEX\ the program uses a rather tricky conversion from numbers to their roman +%D counterparts. This conversion could of course be programmed in \TEX\ itself, but +%D I guess Knuth found the programming trick worth presenting. +%D +%D \showsetup{romannumerals} +%D \showsetup{Romannumerals} + +\permanent\def\romannumerals#1{\clf_romannumerals\numexpr#1\relax} +\permanent\def\Romannumerals#1{\clf_Romannumerals\numexpr#1\relax} + +%D Arabic etc: + +\permanent\def\abjadnumerals #1{\clf_abjadnumerals \numexpr#1\relax} +\permanent\def\abjadnodotnumerals#1{\clf_abjadnodotnumerals\numexpr#1\relax} +\permanent\def\abjadnaivenumerals#1{\clf_alphabetic \numexpr#1\relax{arabic}} % okay? + +\permanent\def\hebrewnumerals #1{\clf_hebrewnumerals\numexpr#1\relax} +\aliased \let\yiddishnumerals \hebrewnumerals + +\permanent\def\languagecharacters#1{\clf_alphabetic\numexpr#1\relax{\currentlanguage}} % new +\permanent\def\languageCharacters#1{\clf_Alphabetic\numexpr#1\relax{\currentlanguage}} % new + +\permanent\def\alphabeticnumerals#1{\clf_alphabetic\numexpr#1\relax{}} +\permanent\def\Alphabeticnumerals#1{\clf_Alphabetic\numexpr#1\relax{}} + +\permanent\def\thainumerals #1{\clf_alphabetic\numexpr#1\relax{thai}} +\permanent\def\devanagarinumerals#1{\clf_alphabetic\numexpr#1\relax{devanagari}} +\permanent\def\gurmurkhinumerals #1{\clf_alphabetic\numexpr#1\relax{gurmurkhi}} +\permanent\def\gujaratinumerals #1{\clf_alphabetic\numexpr#1\relax{gujarati}} +\permanent\def\tibetannumerals #1{\clf_alphabetic\numexpr#1\relax{tibetan}} +\permanent\def\greeknumerals #1{\clf_alphabetic\numexpr#1\relax{greek}} +\permanent\def\Greeknumerals #1{\clf_Alphabetic\numexpr#1\relax{greek}} +\permanent\def\arabicnumerals #1{\clf_alphabetic\numexpr#1\relax{arabic}} +\permanent\def\persiannumerals #1{\clf_alphabetic\numexpr#1\relax{persian}} +\permanent\def\arabicdecimals #1{\clf_decimals \numexpr#1\relax{arabic}} +\permanent\def\persiandecimals #1{\clf_decimals \numexpr#1\relax{persian}} + +\aliased \let\arabicexnumerals \persiannumerals + +\permanent\def\koreannumerals #1{\clf_alphabetic\numexpr#1\relax{korean}} +\permanent\def\koreannumeralsp #1{\clf_alphabetic\numexpr#1\relax{korean-parenthesis}} +\permanent\def\koreannumeralsc #1{\clf_alphabetic\numexpr#1\relax{korean-circle}} + +\aliased \let\koreanparentnumerals \koreannumeralsp +\aliased \let\koreanparenthesisnumerals\koreannumeralsp +\aliased \let\koreancirclenumerals \koreannumeralsc + +\permanent\def\chinesenumerals #1{\clf_chinesenumerals\numexpr#1\relax{normal}} +\permanent\def\chinesecapnumerals#1{\clf_chinesenumerals\numexpr#1\relax{cap}} +\permanent\def\chineseallnumerals#1{\clf_chinesenumerals\numexpr#1\relax{all}} + +%D \macros +%D {character,Character} +%D +%D Converting a number into a character can of course only be done with numbers +%D less or equal to~26. At the cost of much more macros a faster conversion is +%D 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 + +\permanent\def\character#1{\clf_character\numexpr#1\relax} +\permanent\def\Character#1{\clf_Character\numexpr#1\relax} + +%D \macros +%D {characters,Characters} +%D +%D Converting large numbers is supported by the next two macros. This time we +%D just count on: $\cdots$~x, y, z, aa, ab, ac~$\cdots$. +%D +%D \showsetup{characters} +%D \showsetup{Characters} + +\permanent\def\characters#1{\clf_characters\numexpr#1\relax} +\permanent\def\Characters#1{\clf_Characters\numexpr#1\relax} + +%D \macros +%D {greeknumerals,Greeknumerals} +%D +%D Why should we only honour the romans, and not the greek? + +% \let\greeknumerals\gobbleoneargument +% \let\Greeknumerals\gobbleoneargument + +%D \macros +%D {oldstylenumerals,oldstyleromannumerals} +%D +%D These conversions are dedicated to Frans Goddijn. + +\permanent\protected\def\oldstylenumerals#1% + {\begingroup + \os\number#1% + \endgroup} + +\permanent\protected\def\oldstyleromannumerals#1% will become obsolete + {\dontleavehmode + \hbox\bgroup + \ss\txx + \setbox\scratchbox\hbox \s!spread .15\emwidth{\hss\uppercased{\romannumerals{#1}}\hss}% + \scratchwidth \wd\scratchbox + \scratchheight\ht\scratchbox + \scratchdimen .1\exheight + \vrule\s!width\scratchwidth\s!height\dimexpr\scratchheight+\scratchdimen\relax\s!depth-\dimexpr\scratchheight-+\scratchdimen\relax + \hskip-\scratchwidth + \vrule\s!width\scratchwidth\s!height\scratchdimen\s!depth\scratchdimen + \hskip-\scratchwidth + \box\scratchbox + \egroup} + +%D \macros +%D {protectconversion} +%D +%D The previous two commands are not robust enough to be passed to \type +%D {\write} en \type{\message}. That's why we introduce: + +\permanent\protected\def\protectconversion + {\let\doconvertcharacters\firstofoneargument} + +%D \macros +%D {normaltime,normalyear,normalmonth,normalday} +%D +%D The last part of this module is dedicated to converting dates. Because we want to +%D use as meaningful commands as possible, and because \TEX\ already uses up some of +%D those, 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 using a case statement, +%D abstact values and the label mechanism. This way users can easily redefine a +%D label from for instance german into austrian. +%D +%D \starttyping +%D \setuplabeltext [de] [january=J\"anner] +%D \stoptyping +%D +%D Anyhow, the conversion looks like: + +\permanent\protected\def\monthlong #1{\clf_monthname\numexpr#1\relax} +\permanent\protected\def\monthshort#1{\clf_monthmnem\numexpr#1\relax} +\permanent\protected\def\daylong #1{\clf_dayname\numexpr#1\relax} +\permanent\protected\def\dayshort #1{\clf_daymnem\numexpr#1\relax} +\aliased \let\convertmonth\monthlong % for old times sake + +%D We redefine the \TEX\ primitive \type{\month} as: +%D +%D \showsetup{month} +%D \showsetup{MONTH} + +\pushoverloadmode + +\aliased\let\month\monthlong + +\popoverloadmode + +\permanent\protected\def\MONTH #1{\WORD{\clf_monthname\numexpr#1\relax}} +\permanent\protected\def\MONTHLONG #1{\WORD{\clf_monthname\numexpr#1\relax}} +\permanent\protected\def\MONTHSHORT#1{\WORD{\clf_monthmnem\numexpr#1\relax}} + +%D We never explicitly needed this, but Tobias Burnus pointed out that it would be +%D handy to convert to the day of the week. In doing so, we have to calculate the +%D total number of days, taking leapyears into account. For those who are 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 \macros +%D {weekday,WEEKDAY} +%D +%D The first one is sort of redundant. It takes the day number argument. +%D +%D \showsetup{weekday} +%D \showsetup{WEEKDAY} + +\permanent\protected\def\weekday #1{\clf_dayname\numexpr#1\relax} +\permanent\protected\def\WEEKDAY #1{\WORD{\clf_dayname\numexpr#1\relax}} +\permanent\protected\def\DAYLONG #1{\WORD{\clf_dayname\numexpr#1\relax}} +\permanent\protected\def\DAYSHORT#1{\WORD{\clf_daymnem\numexpr#1\relax}} + +%D \macros +%D {getdayoftheweek, dayoftheweek} + +\newcount\normalweekday + +\permanent \def\dayoftheweek #1#2#3{\clf_weekdayname\numexpr#1\relax\numexpr#2\relax\numexpr#3\relax} % name +\permanent\protected\def\getdayoftheweek#1#2#3{\normalweekday\clf_weekday\numexpr#1\relax\numexpr#2\relax\numexpr#3\relax\relax} % number + +%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 \startlines +%D \getbuffer +%D \stoplines +%D +%D The macro \type {\getdayoftheweek} can be used to calculate the number \type +%D {\normalweekday}. + +%D \macros +%D {doifleapyearelse, +%D getdayspermonth} +%D +%D Sometimes we need to know if we're dealing with a leapyear, so here is a +%D 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 {\numberofdays}. + +\permanent\def\doifelseleapyear#1% expandable check + {\clf_doifelseleapyear\numexpr#1\relax} + +\aliased\let\doifleapyearelse\doifelseleapyear + +\permanent\protected\def\getdayspermonth#1#2% + {\edef\numberofdays{\clf_nofdays\numexpr#1\relax\numexpr#2\relax}} + +\permanent\def\dayspermonth#1#2% + {\clf_nofdays\numexpr#1\relax\numexpr#2\relax} + +% \dayoftheweek{2006}{9}{15} +% \doifleapyearelse{2000}{OK}{NOT OK} +% \doifleapyearelse{2100}{NOT OK}{OK} +% \doifleapyearelse{2004}{OK}{NOT OK} +% \doifleapyearelse{2003}{NOT OK}{OK} +% \dayspermonth{2000}{2} +% [\the\normaltime=\the\time] + +%D \macros +%D {currentdate, rawdate, date} +%D +%D We use these conversion macros in the date formatting macro: +%D +%D \showsetup{currentdate} +%D +%D This macro takes care of proper spacing and delivers for instance: +%D +%D \startbuffer +%D \currentdate[weekday,day,month,year] +%D \currentdate[WEEKDAY,day,MONTH,year] +%D \stopbuffer +%D +%D \startlines +%D \getbuffer +%D \stoplines +%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 specified per +%D 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 is given, we get the +%D current date. +%D +%D \startlines +%D \getbuffer +%D \stoplines + +%D \starttabulate[|l|l|] +%D \HL +%D \NC year \NC (\currentdate[year]) \NC\NR +%D \NC yy \NC (\currentdate[yy]) \NC\NR +%D \NC y \NC (\currentdate[y]) \NC\NR +%D \NC Y \NC (\currentdate[Y]) \NC\NR +%D \HL +%D \NC month \NC (\currentdate[month]) \NC\NR +%D \NC mm \NC (\currentdate[mm]) \NC\NR +%D \NC m \NC (\currentdate[m]) \NC\NR +%D \NC M \NC (\currentdate[M]) \NC\NR +%D \HL +%D \NC day \NC (\currentdate[day]) \NC\NR +%D \NC dd \NC (\currentdate[dd]) \NC\NR +%D \NC d \NC (\currentdate[d]) \NC\NR +%D \NC D \NC (\currentdate[D]) \NC\NR +%D \HL +%D \NC weekday \NC (\currentdate[weekday]) \NC\NR +%D \NC w \NC (\currentdate[w]) \NC\NR +%D \NC W \NC (\currentdate[W]) \NC\NR +%D \HL +%D \NC referral \NC (\currentdate[referral]) \NC\NR +%D \HL +%D \NC day:mnem \NC (\currentdate[day:mnem]) \NC\NR +%D \NC dd:mnem \NC (\currentdate[dd:mnem]) \NC\NR +%D \NC d:mnem \NC (\currentdate[d:mnem]) \NC\NR +%D \NC D:mnem \NC (\currentdate[D:mnem]) \NC\NR +%D \HL +%D \stoptabulate +%D +%D \startbuffer +%D (\currentdate[D,.,M,.,Y]) +%D (\currentdate[day,month,year]) +%D (\currentdate[day,+,month,+,year]) +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D Some indirectness and abstraction: +%D +%D \starttyping +%D \definedate[crap][year] +%D \currentdate[crap] +%D \stoptyping + +\installcorenamespace{date} + +\permanent\tolerant\protected\def\definedate[#1]#*[#2]% + {\ifarguments\else\setvalue{\??date#1}{#2}\fi} + +\def\syst_converters_check_date_specification#1% + {\ifcsname\??date#1\endcsname + \edef#1{\lastnamedcs}% + \fi} + +\newtoks\everycurrentdate + +\permanent\tolerant\protected\def\currentdate[#1]% + {\dontleavehmode + \begingroup + \the\everycurrentdate + \edef\forceddatespecification{#1}% + \syst_converters_check_date_specification\forceddatespecification + \syst_converters_check_date_specification\currentdatespecification + \clf_currentdate + {\forceddatespecification}{\currentdatespecification}{\labellanguage}% + \normalyear\normalmonth\normalday + \endgroup} + +\permanent\tolerant\protected\def\date[#1][#2]% sets the date ! + {\dontleavehmode + \ifparameter#1\or + \begingroup + \letdummyparameter\c!d\normalday + \letdummyparameter\c!m\normalmonth + \letdummyparameter\c!y\normalyear + \getdummyparameters[#1]% + \normalexpanded + {\endgroup + \normalday \number\directdummyparameter\c!d\relax + \normalmonth\number\directdummyparameter\c!m\relax + \normalyear \number\directdummyparameter\c!y\relax}% + \fi + \begingroup + \the\everycurrentdate + \edef\forceddatespecification{#2}% + \syst_converters_check_date_specification\forceddatespecification + \syst_converters_check_date_specification\currentdatespecification + \clf_currentdate + {\forceddatespecification}{\currentdatespecification}{\labellanguage}% + \normalyear\normalmonth\normalday + \endgroup} + +\permanent\def\rawdate[#1]% expandable and no labels + {\clf_currentdate + {#1}{\currentdatespecification}{}% + \normalyear\normalmonth\normalday} + +%D \macros +%D {currenttime} +%D +%D The currenttime is actually the jobtime. You can specify a pattern similar +%D to the previous date macro using the keys \type {h}, \type {m} and a separator. + +\permanent\protected\def\calculatecurrenttime + {\edef\currenthour {\clf_hour }% + \edef\currentminute{\clf_minute}% + \edef\currentsecond{\clf_second}} + +\let\currenthour \!!plusone +\let\currentminute\!!plusone +\let\currentsecond\!!plusone + +% \def\currenttimespecification{h,:,m} + +\permanent\protected\def\currenttime + {\doifelsenextoptional\syst_converters_current_time_yes\syst_converters_current_time_nop} + +\protected\def\syst_converters_current_time_yes[#1]% + {\calculatecurrenttime + \processallactionsinset[#1][h=>\currenthour,m=>\currentminute,\s!unknown=>\commalistelement]} + +\protected\def\syst_converters_current_time_nop + {\normalexpanded{\syst_converters_current_time_yes[\currenttimespecification]}} + +%D Because we're dealing with dates, we also introduce a few 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 \type {\normalday} +%D can be used for for date manipulations. + +\permanent\protected\def\processmonth#1#2#3% year month command + {\begingroup + \getdayspermonth{#1}{#2}% + \dostepwiserecurse\plusone\numberofdays\plusone + {\normalyear #1\relax + \normalmonth#2\relax + \normalday \recurselevel\relax + #3}% + \endgroup} + +\def\lastmonth{12} % can be set to e.g. 1 when testing + +\permanent\protected\def\processyear#1#2#3#4% year command before after + {\begingroup + \dorecurse\lastmonth + {\normalyear #1\relax + \normalmonth\recurselevel\relax + #3\processmonth\normalyear\normalmonth{#2}#4}% + \endgroup} + +%D \macros +%D {defineconversion, convertnumber} +%D +%D Conversion involves the macros that we implemented earlier in this module. +%D +%D \showsetup{defineconversion} +%D \showsetup{convertnumber} +%D +%D We can feed this command with conversion macros as well as a set of conversion +%D symbols. Both need a bit different 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 + +\installcorenamespace {conversion} +\installcorenamespace {conversionarguments} +\installcorenamespace {conversionwords} + +%D It might be better to move more to \LUA\ as we also need conversion there and +%D doublicating logic doesn't make things cleaner. It means that all conversions +%D will get a language argument too. However, we permit definitions at the \TEX\ end +%D so we have to provide some hybrid method. + +% checkedconversion(method,n,language) + +\protected\def\defineconversion + {\dotripleempty\syst_converters_define_conversion} + +\def\syst_converters_define_conversion[#1][#2][#3]% from now on global (maybe local again some day) + {\ifthirdargument + \syst_converters_define_conversion_indeed{#1#2}{#1:#2}{#3}% + \else + \syst_converters_define_conversion_indeed{#1}{#1}{#2}% + \fi} + +\def\syst_converters_define_conversion_indeed#1#2#3% + {\doifelseinstring{,}{\detokenize{#3}} + {\clf_defineconversion{#2}{\detokenize{#3}}% a set e.g. of symbols + \setgvalue{\??conversion#1}{\syst_converters_checked_conversion{#2}}} + {\setgvalue{\??conversion#1}{#3}}} + +\def\syst_converters_checked_conversion#1#2% + {\clf_checkedconversion{#1}\numexpr#2\relax} + +%D If a conversion is just a font switch then we need to make sure that the number +%D is indeed ends up as number in the input, so we need to handle the second +%D argument. + +\permanent\def\convertnumber#1#2% expandable + {\csname\??conversionarguments + \ifcsname\??conversion\currentlanguage#1\endcsname1\else + \ifcsname\??conversion #1\endcsname2\else + 3\fi\fi + \endcsname{#1}{\number#2}} + +\protected\def\uconvertnumber % unexpandable + {\convertnumber} + +\setvalue{\??conversionarguments1}#1{\csname\??conversion\currentlanguage#1\endcsname} +\setvalue{\??conversionarguments2}#1{\csname\??conversion #1\endcsname} +\letvalue{\??conversionarguments3}\syst_converters_checked_conversion + +% we can also add a \ctxcommand{doifelseconversion("#1","\currentlanguage")} to check +% if we have definitions that are not matched at the lua end .. eventually we might do +% that when more shows up + +\permanent\def\doifelseconversiondefined#1% expandable + {\ifcsname\??conversion\currentlanguage#1\endcsname + \expandafter\firstoftwoarguments + \orelse\ifcsname\??conversion#1\endcsname + \expandafter\firstoftwoarguments + \else + \expandafter\secondoftwoarguments + \fi} + +\permanent\def\doifelseconversionnumber#1#2% expandable + {\ifnum#2>\numexpr\clf_nofconversions{#1}\relax + \expandafter\secondoftwoarguments + \else + \expandafter\firstoftwoarguments + \fi} + +\aliased\let\doifconversiondefinedelse\doifelseconversiondefined +\aliased\let\doifconversionnumberelse \doifelseconversionnumber + +%D Handy. + +\setvalue{\??conversionwords\v!one }{1} +\setvalue{\??conversionwords\v!two }{2} +\setvalue{\??conversionwords\v!three}{3} +\setvalue{\??conversionwords\v!four }{4} +\setvalue{\??conversionwords\v!five }{5} + +%permanent\def\wordtonumber#1#2{\ifcsname\??conversionwords#1\endcsname\csname\??conversionwords#1\endcsname\else#2\fi} +\permanent\def\wordtonumber#1#2{\ifcsname\??conversionwords#1\endcsname\lastnamedcs\else#2\fi} + +% \defineconversion[ctx][c,o,n,t,e,x,t] +% +% \doloop{\doifelseconversionnumber{ctx}{\recurselevel}{[\recurselevel]}{\exitloop}} + +%D \macros +%D {ordinalnumber, highordinalstr, ordinalstr} +%D +%D Efficient general ordinal number converters are sometimes difficult to +%D implement. Fortunately dates never exceed the number~31. + +\permanent\def\highordinalstr#1{\high{\notsmallcapped{#1}}} +\permanent\def\ordinalstr #1{\notsmallcapped{#1}} +\permanent\def\ordinalnumber #1{\clf_ordinal\numexpr#1\relax{\currentlanguage}} +\permanent\def\Ordinalnumber #1{\Words{\clf_ordinal\numexpr#1\relax{\currentlanguage}}} + +\permanent\def\verbosenumber#1{\clf_verbose\numexpr#1\relax{\currentlanguage}} +\permanent\def\VerboseNumber#1{\Words{\clf_verbose\numexpr#1\relax{\currentlanguage}}} + +%D As longs as symbols are linked to levels or numbers, we can also use the +%D conversion mechanism, but in for instance the itemization macros, we prefer +%D symbols because they can more easier be (partially) redefined. Symbols are +%D implemented in another module. + +\permanent\def\smallcappedromannumerals#1{\smallcapped{\romannumerals{#1}}} +\permanent\def\smallcappedcharacters #1{\smallcapped{\characters {#1}}} + +\defineconversion [] [\numbers] % the default conversion +\defineconversion [\v!empty] [\gobbleoneargument] +\defineconversion [\v!none] [\numbers] +\defineconversion [\s!default] [\numbers] + +\defineconversion [month] [\monthlong] +\defineconversion [month:mnem] [\monthshort] + +\defineconversion [\v!character] [\character] +\defineconversion [\v!Character] [\Character] + +\defineconversion [\v!characters] [\characters] +\defineconversion [\v!Characters] [\Characters] + +\defineconversion [a] [\alphabeticnumerals] +\defineconversion [A] [\Alphabeticnumerals] +\defineconversion [AK] [\smallcappedcharacters] +\defineconversion [KA] [\smallcappedcharacters] + +\defineconversion [\v!alphabetic] [\alphabeticnumerals] +\defineconversion [\v!Alphabetic] [\Alphabeticnumerals] + +\defineconversion [\v!number] [\numbers] +\defineconversion [\v!numbers] [\numbers] +\defineconversion [\v!Numbers] [\Numbers] +\defineconversion [\v!mediaeval] [\mediaeval] + +\defineconversion [\v!word] [\verbosenumber] +\defineconversion [\v!words] [\verbosenumber] + +\defineconversion [\v!Word] [\VerboseNumber] +\defineconversion [\v!Words] [\VerboseNumber] + +\defineconversion[\v!ordinal] [\ordinalnumber] +\defineconversion[\v!Ordinal] [\Ordinalnumber] + +\defineconversion [n] [\numbers] +\defineconversion [N] [\Numbers] +\defineconversion [m] [\mediaeval] +\defineconversion [o] [\oldstylenumerals] +\defineconversion [O] [\oldstylenumerals] +\defineconversion [or] [\oldstyleromannumerals] + +\defineconversion [\v!romannumerals] [\romannumerals] +\defineconversion [\v!Romannumerals] [\Romannumerals] + +\defineconversion [i] [\romannumerals] +\defineconversion [I] [\Romannumerals] +\defineconversion [r] [\romannumerals] +\defineconversion [R] [\Romannumerals] + +\defineconversion [KR] [\smallcappedromannumerals] +\defineconversion [RK] [\smallcappedromannumerals] + +\defineconversion [\v!greek] [\greeknumerals] +\defineconversion [\v!Greek] [\Greeknumerals] + +\defineconversion [g] [\greeknumerals] +\defineconversion [G] [\Greeknumerals] + +%defineconversion [ñ] [\spanishnumerals] +%defineconversion [Ñ] [\Spanishnumerals] + +\defineconversion [abjadnumerals] [\abjadnumerals] +\defineconversion [abjadnodotnumerals] [\abjadnodotnumerals] +\defineconversion [abjadnaivenumerals] [\abjadnaivenumerals] + +\defineconversion [hebrewnumerals] [\hebrewnumerals] +\defineconversion [yiddishnumerals] [\yiddishnumerals] + +% users can do: \defineconversion [he] [\hebrewnumerals] +% users can do: \defineconversion [yi] [\hebrewnumerals] + +\defineconversion [thainumerals] [\thainumerals] +\defineconversion [devanagarinumerals] [\devanagarinumerals] +\defineconversion [gurmurkhinumerals] [\gurmurkhinumerals] +\defineconversion [gujaratinumerals] [\gujaratinumerals] +\defineconversion [tibetannumerals] [\tibetannumerals] +\defineconversion [greeknumerals] [\greeknumerals] +\defineconversion [Greeknumerals] [\Greeknumerals] +\defineconversion [arabicnumerals] [\arabicnumerals] +\defineconversion [persiannumerals] [\persiannumerals] +\defineconversion [arabicexnumerals] [\arabicexnumerals] +\defineconversion [arabicdecimals] [\arabicdecimals] +\defineconversion [persiandecimals] [\persiandecimals] + +\defineconversion [koreannumerals] [\koreannumerals] +\defineconversion [koreanparennumerals] [\koreanparenthesisnumerals] % for old times sake (for a while) +\defineconversion [koreanparenthesisnumerals] + [\koreanparenthesisnumerals] +\defineconversion [koreancirclenumerals] [\koreancirclenumerals] + +\defineconversion [kr] [\koreannumerals] +\defineconversion [kr-p] [\koreanparentnumerals] +\defineconversion [kr-c] [\koreancirclenumerals] + +\defineconversion [chinesenumerals] [\chinesenumerals] +\defineconversion [chinesecapnumerals] [\chinesecapnumerals] +\defineconversion [chineseallnumerals] [\chineseallnumerals] + +\defineconversion [cn] [\chinesenumerals] +\defineconversion [cn-c] [\chinesecapnumerals] +\defineconversion [cn-a] [\chineseallnumerals] + +%D Moved from lang-def.mkiv: +%D +%D Define these as the general character enumeration when language is Slovenian. If +%D you feel uncomfortable with this, mail Mojca, since she promised to to take the +%D heat. Pablo was next to request this. We changed characters to numerals for this +%D feature. We do need these definitions for mechanisms like itemize that check +%D for converters. + +\permanent\def\sloveniannumerals#1{\clf_alphabetic\numexpr#1\relax{sl}} +\permanent\def\slovenianNumerals#1{\clf_Alphabetic\numexpr#1\relax{sl}} + +\permanent\def\spanishnumerals #1{\clf_alphabetic\numexpr#1\relax{es}} +\permanent\def\spanishNumerals #1{\clf_Alphabetic\numexpr#1\relax{es}} + +\permanent\def\russiannumerals #1{\clf_alphabetic\numexpr#1\relax{ru}} +\permanent\def\russianNumerals #1{\clf_Alphabetic\numexpr#1\relax{ru}} + +%defineconversion [\s!sl] [character] [\sloveniannumerals] +%defineconversion [\s!sl] [Character] [\slovenianNumerals] +%defineconversion [\s!sl] [characters] [\sloveniannumerals] +%defineconversion [\s!sl] [Characters] [\slovenianNumerals] + +\defineconversion [\s!sl] [alphabetic] [\sloveniannumerals] +\defineconversion [\s!sl] [Alphabetic] [\slovenianNumerals] + +\defineconversion [\s!sl] [a] [\sloveniannumerals] +\defineconversion [\s!sl] [A] [\slovenianNumerals] +\defineconversion [\s!sl] [AK] [\smallcapped\sloveniannumerals] +\defineconversion [\s!sl] [KA] [\smallcapped\sloveniannumerals] + +%defineconversion [\s!es] [character] [\spanishnumerals] +%defineconversion [\s!es] [Character] [\spanishNumerals] +%defineconversion [\s!es] [characters] [\spanishnumerals] +%defineconversion [\s!es] [Characters] [\spanishNumerals] + +\defineconversion [\s!es] [alphabetic] [\spanishnumerals] +\defineconversion [\s!es] [Alphabetic] [\spanishNumerals] + +\defineconversion [\s!es] [a] [\spanishnumerals] +\defineconversion [\s!es] [A] [\spanishNumerals] +\defineconversion [\s!es] [AK] [\smallcapped\spanishnumerals] +\defineconversion [\s!es] [KA] [\smallcapped\spanishnumerals] + +%defineconversion [\s!ru] [character] [\russiannumerals] +%defineconversion [\s!ru] [Character] [\russianNumerals] +%defineconversion [\s!ru] [characters] [\russiannumerals] +%defineconversion [\s!ru] [Characters] [\russianNumerals] + +\defineconversion [\s!ru] [alphabetic] [\russiannumerals] +\defineconversion [\s!ru] [Alphabetic] [\russianNumerals] + +\defineconversion [\s!ru] [a] [\russiannumerals] +\defineconversion [\s!ru] [A] [\russianNumerals] +\defineconversion [\s!ru] [AK] [\smallcapped\russiannumerals] +\defineconversion [\s!ru] [KA] [\smallcapped\russiannumerals] + +\defineconversion [sloveniannumerals] [\sloveniannumerals] +\defineconversion [slovenianNumerals] [\slovenianNumerals] + +\defineconversion [spanishnumerals] [\spanishnumerals] +\defineconversion [spanishNumerals] [\spanishNumerals] + +\defineconversion [russiannumerals] [\russiannumerals] +\defineconversion [russianNumerals] [\russianNumerals] + +%D In case a font has no greek (WS): + +\defineconversion [mathgreek] + [\m{α},\m{β},\m{γ},\m{δ},\m{ε},\m{ζ}, + \m{η},\m{θ},\m{ι},\m{κ},\m{λ},\m{μ}, + \m{ν},\m{ξ},\m{ο},\m{π},\m{ρ},\m{σ}, + \m{τ},\m{υ},\m{φ},\m{χ},\m{ψ},\m{ω}] + +%D Handy too (expanded!): + +\permanent\def\unihex#1{\clf_unihex\numexpr#1\relax} + +%D Symbol sets: + +\ifdefined\symbol \else \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]}, +% {\symbol[checkmark]}] + +% \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{\ast}, +% \mathematics{\dag}, +% \mathematics{\ddag}, +% \mathematics{\ast\ast}, +% \mathematics{\dag\dag}, +% \mathematics{\ddag\ddag}, +% \mathematics{\ast\ast\ast}, +% \mathematics{\dag\dag\dag}, +% \mathematics{\ddag\ddag\ddag}, +% \mathematics{\ast\ast\ast\ast}, +% \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}] + +\defineconversion + [set 0] + [\symbol{bullet}, + \symbol{dash}, + \symbol{star}, + \symbol{triangle}, + \symbol{circle}, + \symbol{medcircle}, + \symbol{bigcircle}, + \symbol{square}, + \symbol{checkmark}] + +\defineconversion + [set 1] + [\textormathchars{⋆}, + \textormathchars{⋆⋆}, + \textormathchars{⋆⋆⋆}, + \textormathchars{‡}, + \textormathchars{‡‡}, + \textormathchars{‡‡‡}, + \textormathchars{∗}, + \textormathchars{∗∗}, + \textormathchars{∗∗∗}] + +\defineconversion + [set 2] + [\textormathchars{∗}, + \textormathchars{†}, + \textormathchars{‡}, + \textormathchars{∗∗}, + \textormathchars{††}, + \textormathchars{‡‡}, + \textormathchars{∗∗∗}, + \textormathchars{†††}, + \textormathchars{‡‡‡}, + \textormathchars{∗∗∗∗}, + \textormathchars{††††}, + \textormathchars{‡‡‡‡}] + +\defineconversion + [set 3] + [\textormathchars{⋆}, + \textormathchars{⋆⋆}, + \textormathchars{⋆⋆⋆}, + \textormathchars{‡}, + \textormathchars{‡‡}, + \textormathchars{‡‡‡}, + \textormathchars{¶}, + \textormathchars{¶¶}, + \textormathchars{¶¶¶}, + \textormathchars{§}, + \textormathchars{§§}, + \textormathchars{§§§}, + \textormathchars{∗}, + \textormathchars{∗∗}, + \textormathchars{∗∗∗}] + +%D Iteration of suggestion by WS on mailinglist 2010.12.22: +%D +%D \starttyping +%D \setupfloatsplitting[conversion=continued] +%D \stoptyping + +\permanent\protected\def\continuednumber#1% + {\labeltext{\ifcase#1\or\else\v!continued\fi}} + +\defineconversion + [\v!continued] + [\continuednumber] + +%D Taken from x-asciimath (see digits-001.tex for an example): + +\let\spaceddigitsmethod \empty % alternative methods : 1 default, 2 and 3 only when > 4 +\let\spaceddigitssymbol \empty % extra splitter symbol : {,} +\let\spaceddigitsseparator\empty % separator symbol : {\Uchar{"2008}} + +\permanent\protected\def\spaceddigits#1% + {\clf_spaceddigits + method {\spaceddigitsmethod}% + symbol {\spaceddigitssymbol}% + separator {\spaceddigitsseparator}% + data {#1}% + \relax} + +%D For those who sart counting at zero: +%D +%D \starttyping +%D \defineconversionset [zero] [n,zero] [n] +%D +%D \setuphead [sectionconversionset=zero] +%D +%D \starttext +%D \startchapter [title=Introduction] +%D \startsection [title=First topic] \stopsection +%D \startsection [title=Second topic] \stopsection +%D \stopchapter +%D \stoptext +%D \stoptyping + +\permanent\def\zeronumberconversion#1{\number\numexpr#1-\plusone\relax} + +\defineconversion [zero] [\zeronumberconversion] + +\protect \endinput diff --git a/tex/context/base/mkiv/core-dat.mkiv b/tex/context/base/mkiv/core-dat.mkiv index 9f4344b99..41a84c3e6 100644 --- a/tex/context/base/mkiv/core-dat.mkiv +++ b/tex/context/base/mkiv/core-dat.mkiv @@ -77,9 +77,12 @@ \installcommandhandler \??pagestate {pagestate} \??pagestate +% \def\syst_pagestates_allocate +% {\expandafter\newcount\csname\??pagestatecounter\currentpagestate\endcsname +% \expandafter\let\expandafter\c_syst_pagestate\csname\??pagestatecounter\currentpagestate\endcsname} + \def\syst_pagestates_allocate - {\expandafter\newcount\csname\??pagestatecounter\currentpagestate\endcsname - \expandafter\let\expandafter\c_syst_pagestate\csname\??pagestatecounter\currentpagestate\endcsname} + {\expandafter\newcount\csname\??pagestatecounter\currentpagestate\endcsname} \appendtoks \syst_pagestates_allocate @@ -91,19 +94,37 @@ \unexpanded\def\setpagestate {\dodoubleempty\syst_pagestates_set} +% \def\syst_pagestates_set[#1][#2]% +% {\begingroup +% \edef\currentpagestate{#1}% +% \ifcsname\??pagestatecounter\currentpagestate\endcsname +% \let\c_syst_pagestate\lastnamedcs +% \else +% \syst_pagestates_allocate +% \fi +% \global\advance\c_syst_pagestate\plusone +% \scratchcounter\lastnamedcs +% \clf_setpagestate +% name {\currentpagestate}% +% tag {\ifsecondargument#2\else\number\c_syst_pagestate\fi}% +% delay {\pagestateparameter\c!delay}% +% \relax +% \endgroup} + \def\syst_pagestates_set[#1][#2]% {\begingroup \edef\currentpagestate{#1}% \ifcsname\??pagestatecounter\currentpagestate\endcsname - \let\c_syst_pagestate\lastnamedcs + \scratchcounter\lastnamedcs + \advance\scratchcounter\plusone \else + \scratchcounter\plusone \syst_pagestates_allocate \fi - \global\advance\c_syst_pagestate\plusone - \scratchcounter\lastnamedcs + \global\csname\??pagestatecounter\currentpagestate\endcsname\scratchcounter \clf_setpagestate name {\currentpagestate}% - tag {\ifsecondargument#2\else\number\c_syst_pagestate\fi}% + tag {\ifsecondargument#2\else\number\scratchcounter\fi}% delay {\pagestateparameter\c!delay}% \relax \endgroup} diff --git a/tex/context/base/mkiv/core-def.mkiv b/tex/context/base/mkiv/core-def.mkiv index bb209a8ff..b1300d493 100644 --- a/tex/context/base/mkiv/core-def.mkiv +++ b/tex/context/base/mkiv/core-def.mkiv @@ -179,6 +179,6 @@ %D Till we fixed all styles: -\let\\=\crlf +\enforced\let\\\crlf % frozen or permanent? \protect \endinput diff --git a/tex/context/base/mkiv/core-env.lmt b/tex/context/base/mkiv/core-env.lmt new file mode 100644 index 000000000..194600c0a --- /dev/null +++ b/tex/context/base/mkiv/core-env.lmt @@ -0,0 +1,193 @@ +if not modules then modules = { } end modules ['core-env'] = { + version = 1.001, + comment = "companion to core-env.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- maybe this will move to the context name space although the +-- plurals are unlikely to clash with future tex primitives +-- +-- if tex.modes['xxxx'] then .... else .... end + +local rawset = rawset + +local P, C, S, lpegmatch, patterns = lpeg.P, lpeg.C, lpeg.S, lpeg.match, lpeg.patterns + +local context = context +local ctxcore = context.core + +local texgetcount = tex.getcount +local texgetintegervalue = token.get_integer -- todo: in tex namespace + +local allocate = utilities.storage.allocate +local setmetatableindex = table.setmetatableindex +local setmetatablenewindex = table.setmetatablenewindex +local setmetatablecall = table.setmetatablecall + +local createtoken = token.create +local isdefined = tokens.isdefined + +texmodes = allocate { } tex.modes = texmodes +texsystemmodes = allocate { } tex.systemmodes = texsystemmodes +texconstants = allocate { } tex.constants = texconstants +texconditionals = allocate { } tex.conditionals = texconditionals +texifs = allocate { } tex.ifs = texifs +texisdefined = allocate { } tex.isdefined = texisdefined + +local modes = { } +local systemmodes = { } + +-- we could use the built-in tex.is[count|dimen|skip|toks] here but caching +-- at the lua end is not that bad (and we need more anyway) + +local cache = tokens.cache + +-- we can have a modes cache too + +local iftrue = cache["iftrue"].index + +local dimencode = cache["scratchdimen"] .command -- tokens.commands.register_dimen +local countcode = cache["scratchcounter"].command -- tokens.commands.register_int +local tokencode = cache["scratchtoks"] .command -- tokens.commands.register_toks +local skipcode = cache["scratchskip"] .command -- tokens.commands.register_glue +local muskipcode = cache["scratchmuskip"] .command -- tokens.commands.register_mu_glue +local conditioncode = cache["iftrue"] .command -- tokens.commands.if_test + +local types = { + [dimencode] = "dimen", + [countcode] = "count", + [tokencode] = "token", + [skipcode] = "skip", + [muskipcode] = "muskip", + -- [attributecode] = "attribute", + [conditioncode] = "condition" +} + +setmetatableindex(texmodes, function(t,k) + local m = systemmodes[k] + if not m then + local n = "mode>" .. k + m = function() return texgetintegervalue(n) == 1 end + rawset(modes,k,m) + end + return m() +end) + +setmetatableindex(texsystemmodes, function(t,k) + local m = systemmodes[k] + if not m then + local n = "mode>*" .. k + m = function() return texgetintegervalue(n) == 1 end + rawset(modes,k,m) + end + return m() +end) + +-- also a call method + +context.settrialtypesettingmethod(function() return texsystemmodes.trialtypesetting end) + +setmetatablenewindex(texmodes, function(t,k) report_mode("you cannot set the %s named %a this way","mode", k) end) +setmetatablenewindex(texsystemmodes, function(t,k) report_mode("you cannot set the %s named %a this way","systemmode", k) end) +setmetatablenewindex(texconstants, function(t,k) report_mode("you cannot set the %s named %a this way","constant", k) end) +setmetatablenewindex(texconditionals, function(t,k) report_mode("you cannot set the %s named %a this way","conditional",k) end) +setmetatablenewindex(texifs, function(t,k) end) + +-- if we really need performance we can have a dedicated cache for each +-- kind of variable + +setmetatableindex(texconstants, function(t,k) + return cache[k].command == countcode and texgetcount(k) or 0 +end) + +setmetatableindex(texconditionals, function(t,k) -- 0 == true + return cache[k].command == countcode and texgetcount(k) == 0 +end) + +setmetatableindex(texifs, function(t,k) + local c = cache[k] + print(k) + inspect(c) + return c.command == conditioncode and c.index == iftrue +end) + +tex.isdefined = isdefined + +function tex.isdimen(name) + local hit = cache[name] + return hit.command == dimencode and hit.index or true +end + +function tex.iscount(name) + local hit = cache[name] + return hit.command == countcode and hit.index or true +end + +function tex.istoken(name) + local hit = cache[name] + return hit.command == tokencode and hit.index or true +end + +function tex.isskip(name) + local hit = cache[name] + return hit.command == skipcode and hit.index or true +end + +function tex.ismuskip(name) + local hit = cache[name] + return hit.command == muskipcode and hit.index or true +end + +function tex.type(name) + return types[cache[name].command] or "macro" +end + +function context.setconditional(name,value) + if value then + ctxcore.settruevalue(name) + else + ctxcore.setfalsevalue(name) + end +end + +function context.setmode(name,value) + if value then + ctxcore.setmode(name) + else + ctxcore.resetmode(name) + end +end + +function context.setsystemmode(name,value) + if value then + ctxcore.setsystemmode(name) + else + ctxcore.resetsystemmode(name) + end +end + +context.modes = texmodes +context.systemmodes = texsystemmodes +context.conditionals = texconditionals +-------.constants = texconstants +-------.ifs = texifs + +local sep = S("), ") +local str = C((1-sep)^1) +local tag = P("(") * C((1-S(")" ))^1) * P(")") +local arg = P("(") * C((1-S("){"))^1) * P("{") * C((1-P("}"))^0) * P("}") * P(")") + +local pattern = ( + P("lua") * tag / ctxcore.luasetup + + P("xml") * arg / ctxcore.setupwithargument -- or xmlw as xmlsetup has swapped arguments + + (P("tex") * tag + str) / ctxcore.texsetup + + sep^1 +)^1 + +interfaces.implement { + name = "autosetups", + actions = function(str) lpegmatch(pattern,str) end, + arguments = "string" +} diff --git a/tex/context/base/mkiv/core-env.lua b/tex/context/base/mkiv/core-env.lua index da10c26f5..1c5165ac8 100644 --- a/tex/context/base/mkiv/core-env.lua +++ b/tex/context/base/mkiv/core-env.lua @@ -47,13 +47,12 @@ local cache = tokens.cache local iftrue = cache["iftrue"].mode -local dimencode = cache["scratchdimen"] .command -- tokens.commands.assign_dimen -local countcode = cache["scratchcounter"] .command -- tokens.commands.assign_int -local tokencode = cache["scratchtoken"] .command -- tokens.commands.assign_toks -local skipcode = cache["scratchskip"] .command -- tokens.commands.assign_glue -local muskipcode = cache["scratchmuskip"] .command -- tokens.commands.assign_mu_glue ------ attributecode = cache["scratchattribute"].command -- tokens.commands.assign_attr -local conditioncode = cache["iftrue"] .command -- tokens.commands.if_test +local dimencode = cache["scratchdimen"] .command -- tokens.commands.register_dimen +local countcode = cache["scratchcounter"].command -- tokens.commands.register_int +local tokencode = cache["scratchtoks"] .command -- tokens.commands.register_toks +local skipcode = cache["scratchskip"] .command -- tokens.commands.register_glue +local muskipcode = cache["scratchmuskip"] .command -- tokens.commands.register_mu_glue +local conditioncode = cache["iftrue"] .command -- tokens.commands.if_test local types = { [dimencode] = "dimen", @@ -82,10 +81,6 @@ setmetatableindex(texmodes, function(t,k) end end) -setmetatablenewindex(texmodes, function(t,k) - report_mode("you cannot set the %s named %a this way","mode",k) -end) - setmetatableindex(texsystemmodes, function(t,k) local m = systemmodes[k] if m then @@ -101,59 +96,38 @@ setmetatableindex(texsystemmodes, function(t,k) end end) -setmetatablenewindex(texsystemmodes, function(t,k) - report_mode("you cannot set the %s named %a this way","systemmode",k) -end) - -setmetatablenewindex(texconstants, function(t,k) - report_mode("you cannot set the %s named %a this way","constant",k) -end) - -setmetatablenewindex(texconditionals, function(t,k) - report_mode("you cannot set the %s named %a this way","conditional",k) -end) - -setmetatablenewindex(texifs, function(t,k) - -- just ignore -end) +do -- we could do the same as in lmtx (use the mode) -if CONTEXTLMTXMODE > 0 then + local trialtypesettingstate = createtoken("trialtypesettingstate").index + local texgetcount = tex.getcount - iftrue = cache["iftrue"].index - - -- if we really need performance we can have a dedicated cache for each - -- kind of variable - - setmetatableindex(texconstants, function(t,k) - return cache[k].command == countcode and texgetcount(k) or 0 + context.settrialtypesettingmethod(function() + return texgetcount(trialtypesettingstate) ~= 0 end) - setmetatableindex(texconditionals, function(t,k) -- 0 == true - return cache[k].command == countcode and texgetcount(k) == 0 - end) - - setmetatableindex(texifs, function(t,k) - local c = cache[k] - print(k) - inspect(c) - return c.command == conditioncode and c.index == iftrue - end) +end -else +setmetatablenewindex(texmodes, function(t,k) report_mode("you cannot set the %s named %a this way","mode", k) end) +setmetatablenewindex(texsystemmodes, function(t,k) report_mode("you cannot set the %s named %a this way","systemmode", k) end) +setmetatablenewindex(texconstants, function(t,k) report_mode("you cannot set the %s named %a this way","constant", k) end) +setmetatablenewindex(texconditionals, function(t,k) report_mode("you cannot set the %s named %a this way","conditional",k) end) +setmetatablenewindex(texifs, function(t,k) end) - setmetatableindex(texconstants, function(t,k) - return cache[k].mode ~= 0 and texgetcount(k) or 0 - end) +setmetatablenewindex(texifs, function(t,k) + -- just ignore +end) - setmetatableindex(texconditionals, function(t,k) -- 0 == true - return cache[k].mode ~= 0 and texgetcount(k) == 0 - end) +setmetatableindex(texconstants, function(t,k) + return cache[k].mode ~= 0 and texgetcount(k) or 0 +end) - setmetatableindex(texifs, function(t,k) - return cache[k].mode == iftrue - end) +setmetatableindex(texconditionals, function(t,k) -- 0 == true + return cache[k].mode ~= 0 and texgetcount(k) == 0 +end) -end +setmetatableindex(texifs, function(t,k) + return cache[k].mode == iftrue +end) tex.isdefined = isdefined diff --git a/tex/context/base/mkiv/core-env.mkiv b/tex/context/base/mkiv/core-env.mkiv index 09de435e7..0f042f815 100644 --- a/tex/context/base/mkiv/core-env.mkiv +++ b/tex/context/base/mkiv/core-env.mkiv @@ -17,7 +17,7 @@ \unprotect -\def\wildcardsymbol{*} +\ifdefined\wildcardsymbol \else \def\wildcardsymbol{*} \fi %D Modes: %D @@ -104,10 +104,14 @@ % demo: trialtypesetting is a systemmode as well as an if +\pushoverloadmode + \newsystemmode{trialtypesetting} \expandafter\let\csname\??mode\systemmodeprefix trialtypesetting\endcsname\trialtypesettingstate +\popoverloadmode + \appendtoks \trialtypesettingstate\enabledmode \luacopyinputnodes\plusone @@ -588,13 +592,15 @@ \def\syst_setups_start_loc{\ifsecondargument\expandafter\syst_setups_start_loc_c\else\expandafter\syst_setups_start_loc_d\fi} \def\syst_setups_start_tex{\ifsecondargument\expandafter\syst_setups_start_tex_c\else\expandafter\syst_setups_start_tex_d\fi} +% no need for \the\t_syst_setups_lua in the next, now too often + \def\syst_setups_start_lua_a{\the\t_syst_setups_lua\dodoubleempty\syst_setups_start_lua} % [ ] delimited \def\syst_setups_start_xml_a{\the\t_syst_setups_xml\dodoubleempty\syst_setups_start_xml} % [ ] delimited \def\syst_setups_start_raw_a{\the\t_syst_setups_raw\dodoubleempty\syst_setups_start_raw} % [ ] delimited \def\syst_setups_start_loc_a{\the\t_syst_setups_loc\dodoubleempty\syst_setups_start_loc} % [ ] delimited \def\syst_setups_start_tex_a{\the\t_syst_setups_tex\dodoubleempty\syst_setups_start_tex} % [ ] delimited -% empty preserves inner {} (is removed by the \expandafter{#3}) +% empty preserves inner {} (is removed by the \expandafter{#3}) .. hm, looks old \def\syst_setups_start_lua_b#1 {\the\t_syst_setups_lua\syst_setups_start_lua_indeed\empty{#1}\empty} % space delimited \def\syst_setups_start_xml_b#1 {\the\t_syst_setups_xml\syst_setups_start_xml_indeed\empty{#1}\empty} % space delimited diff --git a/tex/context/base/mkiv/core-env.mkxl b/tex/context/base/mkiv/core-env.mkxl new file mode 100644 index 000000000..2d7c22afd --- /dev/null +++ b/tex/context/base/mkiv/core-env.mkxl @@ -0,0 +1,819 @@ +%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} + +\registerctxluafile{core-env}{autosuffix} + +\unprotect + +%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 of situations where a +%D style enables a mode, but an outer level style does not want that. Preventing can +%D be considered a permanent disabling on forehand. + +\aliased\let\systemmodeprefix\wildcardsymbol + +% we will have \installcorenamespace{mode} but need some hackery at the lua end then + +% TODO: make them mutable, also at the lua end + +\installcorenamespace{modestack} + +\immutable\def\??mode{mode>} % special namespace, also used at lua end + +\permanent\protected\def\newmode #1{\ifcsname \??mode#1\endcsname\else\setmode{#1}\fi} +\permanent\protected\def\setmode #1{\expandafter \integerdef\csname\??mode#1\endcsname\plusone} +\permanent\protected\def\resetmode #1{\expandafter \integerdef\csname\??mode#1\endcsname\zerocount} +\permanent\protected\def\globalsetmode #1{\global\expandafter\integerdef\csname\??mode#1\endcsname\plusone} +\permanent\protected\def\globalresetmode #1{\global\expandafter\integerdef\csname\??mode#1\endcsname\zerocount} + +\permanent\protected\def\newsystemmode #1{\ifcsname \??mode\systemmodeprefix#1\endcsname\else\setsystemmode{#1}\fi} +\permanent\protected\def\setsystemmode #1{\expandafter \integerdef\csname\??mode\systemmodeprefix#1\endcsname\plusone} +\permanent\protected\def\resetsystemmode #1{\expandafter \integerdef\csname\??mode\systemmodeprefix#1\endcsname\zerocount} +\permanent\protected\def\globalsetsystemmode #1{\global\expandafter\integerdef\csname\??mode\systemmodeprefix#1\endcsname\plusone} +\permanent\protected\def\globalresetsystemmode#1{\global\expandafter\integerdef\csname\??mode\systemmodeprefix#1\endcsname\zerocount} + +\expandafter \appendtoks + \expandafter\integerdef\csname\??mode\systemmodeprefix trialtypesetting\endcsname\plusone + \luacopyinputnodes\plusone +\to \everysettrialtypesetting + +\expandafter \appendtoks + \expandafter\integerdef\csname\??mode\systemmodeprefix trialtypesetting\endcsname\zerocount + \luacopyinputnodes\zerocount +\to \everyresettrialtypesetting + +\pushoverloadmode \newsystemmode{trialtypesetting} \popoverloadmode + +\the\everyresettrialtypesetting + +% user ones + +\mutable\let\syst_mode_prefix\relax + +\protected\def\preventmode{\unprotect\syst_modes_prevent} +\protected\def\enablemode {\unprotect\syst_modes_enable } +\protected\def\disablemode{\unprotect\syst_modes_disable} + +\protected\def\globalpreventmode{\let\syst_mode_prefix\global\unprotect\syst_modes_prevent} +\protected\def\globalenablemode {\let\syst_mode_prefix\global\unprotect\syst_modes_enable } +\protected\def\globaldisablemode{\let\syst_mode_prefix\global\unprotect\syst_modes_disable} + +\def\syst_modes_prevent[#1]{\protect\fastprocesscommacommand[#1]\syst_modes_prevent_indeed\let\syst_mode_prefix\relax} +\def\syst_modes_enable [#1]{\protect\fastprocesscommacommand[#1]\syst_modes_enable_indeed \let\syst_mode_prefix\relax} +\def\syst_modes_disable[#1]{\protect\fastprocesscommacommand[#1]\syst_modes_disable_indeed\let\syst_mode_prefix\relax} + +\def\syst_modes_prevent_indeed#1% + {\ifcsname\??mode#1\endcsname\else\setmode{#1}\fi + \syst_mode_prefix\expandafter\integerdef\lastnamedcs\plustwo} + +\def\syst_modes_enable_indeed#1% we can speed it up by moving the new outside + {\ifcsname\??mode#1\endcsname\else\setmode{#1}\fi + \ifnum\lastnamedcs=\plustwo\else + \syst_mode_prefix\expandafter\integerdef\lastnamedcs\plusone + \fi} + +\def\syst_modes_disable_indeed#1% + {\ifcsname\??mode#1\endcsname\else\setmode{#1}\fi + \ifnum\lastnamedcs=\plustwo\else + \syst_mode_prefix\expandafter\integerdef\lastnamedcs\zerocount + \fi} + +%D If you do a lot of mode testing, it makes sense to define modes (or disable them +%D explicitly if unset. This makes testing twice as fast. Often one enables modes +%D beforehand, in which case \type {\definemode} would reset the mode. The optional +%D second argument \type {keep} will prevent changing the already set mode but defines +%D it when undefined. + +\permanent\protected\def\definemode + {\unprotect + \syst_modes_define} + +\tolerant\def\syst_modes_define[#1]#*[#2]% + {\protect + \edef\m_modes_asked{#2}% + \fastprocesscommacommand[#1]\syst_modes_define_indeed} + +\def\syst_modes_define_indeed#1% + {\ifcsname\??mode#1\endcsname + % already set + \else + \newmode{#1}% + \fi + \ifx\m_modes_asked\v!keep + % not changes, disabled when undefined + \else + \expandafter\integerdef\lastnamedcs\ifx\m_modes_asked\v!yes\plusone\else\zerocount\fi + \fi} + +% handy for mp + +\def\booleanmodevalue#1% + {\ifcsname\??mode#1\endcsname + \ifcase\lastnamedcs + \s!false + \or + \s!true + \else + \s!false + \fi + \else + \s!false + \fi} + +% check macros + +\newconditional\c_checked_mode + +% one + +\def\syst_modes_check_indeed#1% + {\ifcsname\??mode#1\endcsname + \ifcase\lastnamedcs\else + \let\syst_modes_check_step\gobbleoneargument + \fi + \fi} + +\def\syst_modes_check_nop#1#2#3% + {\let\syst_modes_check_step\syst_modes_check_indeed + \fastprocesscommacommand[#3]\syst_modes_check_step + \ifx\syst_modes_check_step\gobbleoneargument + \expandafter#1% + \else + \expandafter#2% + \fi} + +\def\syst_modes_check_yes#1#2#3% + {\ifcase\lastnamedcs + \expandafter#2% + \or + \expandafter#1% + \else + \expandafter#2% + \fi} + +\def\syst_modes_check_lr#1#2#3% + {\ifcsname\??mode#3\endcsname + \expandafter\syst_modes_check_yes + \else + \expandafter\syst_modes_check_nop + \fi#1#2{#3}} + +\def\syst_modes_check_ss#1#2[#3]% + {\ifcsname\??mode#3\endcsname + \expandafter\syst_modes_check_yes + \else + \expandafter\syst_modes_check_nop + \fi#1#2{#3}} + +% all + +\def\syst_modes_check_all_indeed#1% + {\ifcsname\??mode#1\endcsname + \ifcase\lastnamedcs + \let\syst_modes_check_all_step\gobbleoneargument + \or + % enabled + \else + \let\syst_modes_check_all_step\gobbleoneargument + \fi + \else + \let\syst_modes_check_all_step\gobbleoneargument + \fi} + +\def\syst_modes_check_all_lr#1#2#3% + {\let\syst_modes_check_all_step\syst_modes_check_all_indeed + \fastprocesscommacommand[#3]\syst_modes_check_all_step + \ifx\syst_modes_check_all_step\gobbleoneargument + \expandafter#2% + \else + \expandafter#1% + \fi} + +\def\syst_modes_check_all_ss#1#2[#3]% + {\let\syst_modes_check_all_step\syst_modes_check_all_indeed + \fastprocesscommacommand[#3]\syst_modes_check_all_step + \ifx\syst_modes_check_all_step\gobbleoneargument + \expandafter#2% + \else + \expandafter#1% + \fi} + +\permanent\protected\def\doifelsemode {\syst_modes_check_lr \firstoftwoarguments \secondoftwoarguments} +\permanent\protected\def\doifmode {\syst_modes_check_lr \firstofoneargument \gobbleoneargument} +\permanent\protected\def\doifnotmode {\syst_modes_check_lr \gobbleoneargument \firstofoneargument} +\permanent\protected\def\startmode {\syst_modes_check_ss \donothing \syst_modes_stop_yes} +\permanent\protected\def\startnotmode {\syst_modes_check_ss \syst_modes_stop_nop \donothing} +\permanent\protected\def\doifelseallmodes{\syst_modes_check_all_lr\firstoftwoarguments \secondoftwoarguments} +\permanent\protected\def\doifallmodes {\syst_modes_check_all_lr\firstofoneargument \gobbleoneargument} +\permanent\protected\def\doifnotallmodes {\syst_modes_check_all_lr\gobbleoneargument \firstofoneargument} +\permanent\protected\def\startallmodes {\syst_modes_check_all_ss\donothing \syst_modes_stop_all_yes} +\permanent\protected\def\startnotallmodes{\syst_modes_check_all_ss\syst_modes_stop_all_nop\donothing} + +\aliased\let\doifmodeelse \doifelsemode +\aliased\let\doifallmodeselse\doifelseallmodes + +\permanent\protected\def\stopmode {} % no relax +\permanent\protected\def\stopnotmode {} % no relax +\permanent\protected\def\stopallmodes {} % no relax +\permanent\protected\def\stopnotallmodes{} % no relax + +\def\syst_modes_stop_yes #1\stopmode {} +\def\syst_modes_stop_nop #1\stopnotmode {} +\def\syst_modes_stop_all_yes#1\stopallmodes {} +\def\syst_modes_stop_all_nop#1\stopnotallmodes{} + +%D Pushing/popping: + +\permanent\protected\def\pushmode[#1]{\expandafter\pushmacro\csname\??mode#1\endcsname} +\permanent\protected\def\popmode [#1]{\expandafter\popmacro \csname\??mode#1\endcsname} + +\permanent\protected\def\pushsystemmode#1{\expandafter\pushmacro\csname\??mode\systemmodeprefix#1\endcsname} +\permanent\protected\def\popsystemmode #1{\expandafter\popmacro \csname\??mode\systemmodeprefix#1\endcsname} + +%D Here is a relatively new variant of mode checking: +%D +%D \starttyping +%D \enablemode[two] +%D +%D \startmodeset +%D [one] {1} +%D [two] {2} +%D [two] {2} +%D [three] {3} +%D [default] {?} +%D \stopmodeset +%D +%D \startmodeset +%D [one] {1} +%D [three] {3} +%D [default] {?} +%D \stopmodeset +%D +%D \startmodeset +%D [one] { +%D \input tufte +%D } +%D [two] { +%D \startmodeset +%D [one] {1} +%D [two] {2} +%D [two] {2} +%D [three] {3} +%D [default] {?} +%D \stopmodeset +%D } +%D [three] { +%D \input zapf +%D } +%D [default] { +%D \input ward +%D } +%D \stopmodeset +%D \stoptyping + +\newconditional\c_syst_modes_set_done % conditionals can be pushed/popped + +\permanent\protected\def\startmodeset + {\pushmacro\c_syst_modes_set_done + \setfalse\c_syst_modes_set_done + \doifelsenextoptionalcs\syst_modes_set_start\syst_modes_set_quit} + +\aliased\let\stopmodeset\relax + +\def\syst_modes_set_start[#1]% + {\edef\m_mode_case{#1}% + \unless\ifx\m_mode_case\s!default + \expandafter\syst_modes_set_check + \orelse\ifconditional\c_syst_modes_set_done + \expandafter\syst_modes_set_quit + \else + \expandafter\syst_modes_set_yes + \fi} + +\def\syst_modes_set_check + {\syst_modes_check_lr\syst_modes_set_yes\syst_modes_set_nop\m_mode_case} + +\def\syst_modes_set_yes#1% + {\settrue\c_syst_modes_set_done + #1% + \doifelsenextoptionalcs\syst_modes_set_start\syst_modes_set_quit} + +\def\syst_modes_set_nop#1% + {\doifelsenextoptionalcs\syst_modes_set_start\syst_modes_set_quit} + +\def\syst_modes_set_quit#-\stopmodeset + {\popmacro\c_syst_modes_set_done} + +%D Lets now set a mode: + +\enablemode[mkiv] \newsystemmode{mkiv} \setsystemmode{mkiv} + +%D Setups: + +\installcorenamespace{setup} % we can probably get rid of some :'s later on + +% \protected\def\startsetups{} % to please dep checker +% \protected\def\stopsetups {} % to please dep checker +% +% \protected\def\setups{\doifelsenextbgroup\syst_setups_a\syst_setups_b} % {..} or [..] +% \protected\def\setup {\doifelsenextbgroup\syst_setups \syst_setups_c} % {..} or [..] +% +% \def\syst_setups_a #1{\processcommacommand[#1]\syst_setups} % {..} +% \def\syst_setups_b[#1]{\processcommacommand[#1]\syst_setups} % [..] +% \def\syst_setups_c[#1]{\syst_setups{#1}} % [..] + +\permanent\protected\tolerant\def\setups[#1]#;#2{\processcommacommand[#1#2]\syst_setups} % {..} or [..] +\permanent\protected\tolerant\def\setup [#1]#;#2{\syst_setups{#1#2}} % {..} or [..] + +\letvalue{\??setup:\??empty}\gobbleoneargument + +\def\syst_setups#1% the grid option will be extended to other main modes + {\csname\??setup + \ifgridsnapping + \ifcsname\??setup\v!grid:#1\endcsname\v!grid:#1\else:\ifcsname\??setup:#1\endcsname#1\else\??empty\fi\fi + \else + :\ifcsname\??setup:#1\endcsname#1\else\??empty\fi + \fi + \endcsname\empty} % takes one argument + +% no checking and we assume it being defined: + +\def\fastsetup #1{\csname\??setup:#1\endcsname\empty} +\def\fastsetupwithargument #1{\csname\??setup:#1\endcsname} % swapped per 2015-08-30 +\def\fastsetupwithargumentswapped#1#2{\csname\??setup:#2\endcsname{#1}}% swapped per 2015-09-05 + +% the next one is meant for \c!setups situations, hence the check for +% a shortcut + +\let\m_syst_setups_asked\empty + +\def\doprocesslocalsetups#1% sort of public, fast local variant + {\edef\m_syst_setups_asked{#1}% + \ifx\m_syst_setups_asked\empty\else + \expandafter\syst_setups_process_local + \fi} + +\protected\def\usesetupsparameter#1% + {\edef\m_syst_setups_asked{#1\c!setups}% + \ifx\m_syst_setups_asked\empty\else + \expandafter\syst_setups_process_local + \fi} + +% setups=S1 +% setups=lua(S2) +% setups=S3 +% setups={S1,lua(S2),xml(test{123}),S3} + +\def\syst_setups_process_local + {\clf_autosetups{\m_syst_setups_asked}% + \relax} % let's prevent lookahead + +\def\autosetups#1% + {\clf_autosetups{#1}} + +\edef\setupwithargument#1% saves a few expansions + {\noexpand\csname\??setup:\noexpand\ifcsname\??setup:#1\endcsname#1\noexpand\else\??empty\noexpand\fi\endcsname} + +\edef\setupwithargumentswapped#1#2% saves a few expansions (can be \let) + {\noexpand\csname\??setup:\noexpand\ifcsname\??setup:#2\endcsname#2\noexpand\else\??empty\noexpand\fi\endcsname{#1}} + +\let\directsetup\syst_setups +\let\texsetup \syst_setups % nicer than \directsetup and more en par with xmlsetup and luasetup + +\protected\def\doifelsesetups#1% to be done: grid + {\ifcsname\??setup:#1\endcsname + \expandafter\firstoftwoarguments + \else + \expandafter\secondoftwoarguments + \fi} + +\let\doifsetupselse\doifelsesetups + +\protected\def\doifsetups#1% to be done: grid + {\ifcsname\??setup:#1\endcsname + \expandafter\firstofoneargument + \else + \expandafter\gobbleoneargument + \fi} + +\protected\def\doifnotsetups#1% to be done: grid + {\ifcsname\??setup:#1\endcsname + \expandafter\gobbleoneargument + \else + \expandafter\firstofoneargument + \fi} + +% maybe some day: +% +% \protected\def\fastsetupfallback#1#2% +% {\ifcsname\??setup:#1\endcsname +% \expandafter\lastnamedcs +% \else +% \csname\??setup:#2\expandafter\endcsname +% \fi} +% +% or +% +% \protected\def\fastsetupfallback#1#2#3% prefix preferred fallback +% {\ifcsname\??setup:#1#2\endcsname +% \expandafter\lastnamedcs +% \else +% \csname\??setup:#1#3\expandafter\endcsname +% \fi} + +% \startluasetups oeps +% context("DONE") +% a = 1 +% b = 1 +% \stopluasetups +% +% \luasetup{oeps} +% +% \startsetups xxx +% ziezo +% \stopsetups +% +% \directsetup{xxx} +% +% \startxmlsetups zzz +% [[#1]] +% \stopxmlsetups +% +% \xmlsetup{123}{zzz} +% +% \startbuffer[what] +% context("DONE") +% \stopbuffer +% +% \startbuffer +% context("MORE") +% \stopbuffer +% +% \ctxluabuffer[what] +% +% \ctxluabuffer + +\newtoks\t_syst_setups_tex \appendtoks + \catcode\endoflineasciicode \ignorecatcode +\to \t_syst_setups_tex + +\newtoks\t_syst_setups_loc \appendtoks + \catcode\endoflineasciicode \ignorecatcode +\to \t_syst_setups_loc + +\newtoks\t_syst_setups_raw \appendtoks + % nothing +\to \t_syst_setups_raw + +\newtoks\t_syst_setups_xml \appendtoks + \catcode\endoflineasciicode\ignorecatcode + \catcode\barasciicode \othercatcode +\to \t_syst_setups_xml + +\newtoks\t_syst_setups_lua \appendtoks + \obeylualines + \obeyluatokens +\to \t_syst_setups_lua + +% Is doglobal still relevant? Maybe always global? Or never? Anyway, it will become obsolete. + +% \protected\def\startluasetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_lua_a\syst_setups_start_lua_b} \let\stopluasetups \relax +% \protected\def\startxmlsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_xml_a\syst_setups_start_xml_b} \let\stopxmlsetups \relax +% \protected\def\startrawsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_raw_a\syst_setups_start_raw_b} \let\stoprawsetups \relax +% \protected\def\startlocalsetups{\begingroup\doifelsenextoptionalcs\syst_setups_start_loc_a\syst_setups_start_loc_b} \let\stoplocalsetups\relax +% \protected\def\startsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_tex_a\syst_setups_start_tex_b} \let\stopsetups \relax +% +% \def\syst_setups_start_lua_indeed#1#2#3\stopluasetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}} +% \def\syst_setups_start_xml_indeed#1#2#3\stopxmlsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}} +% \def\syst_setups_start_raw_indeed#1#2#3\stoprawsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}} +% \def\syst_setups_start_loc_indeed#1#2#3\stoplocalsetups{\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}} +% \def\syst_setups_start_tex_indeed#1#2#3\stopsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}} +% +% \def\syst_setups_start_lua{\ifsecondargument\expandafter\syst_setups_start_lua_c\else\expandafter\syst_setups_start_lua_d\fi} +% \def\syst_setups_start_xml{\ifsecondargument\expandafter\syst_setups_start_xml_c\else\expandafter\syst_setups_start_xml_d\fi} +% \def\syst_setups_start_raw{\ifsecondargument\expandafter\syst_setups_start_raw_c\else\expandafter\syst_setups_start_raw_d\fi} +% \def\syst_setups_start_loc{\ifsecondargument\expandafter\syst_setups_start_loc_c\else\expandafter\syst_setups_start_loc_d\fi} +% \def\syst_setups_start_tex{\ifsecondargument\expandafter\syst_setups_start_tex_c\else\expandafter\syst_setups_start_tex_d\fi} +% +% % no need for \the\t_syst_setups_lua in the next, now too often +% +% \def\syst_setups_start_lua_a{\the\t_syst_setups_lua\dodoubleempty\syst_setups_start_lua} % [ ] delimited +% \def\syst_setups_start_xml_a{\the\t_syst_setups_xml\dodoubleempty\syst_setups_start_xml} % [ ] delimited +% \def\syst_setups_start_raw_a{\the\t_syst_setups_raw\dodoubleempty\syst_setups_start_raw} % [ ] delimited +% \def\syst_setups_start_loc_a{\the\t_syst_setups_loc\dodoubleempty\syst_setups_start_loc} % [ ] delimited +% \def\syst_setups_start_tex_a{\the\t_syst_setups_tex\dodoubleempty\syst_setups_start_tex} % [ ] delimited +% +% % empty preserves inner {} (is removed by the \expandafter{#3}) +% +% \def\syst_setups_start_lua_b#1 {\the\t_syst_setups_lua\syst_setups_start_lua_indeed\empty{#1}\empty} % space delimited +% \def\syst_setups_start_xml_b#1 {\the\t_syst_setups_xml\syst_setups_start_xml_indeed\empty{#1}\empty} % space delimited +% \def\syst_setups_start_raw_b#1 {\the\t_syst_setups_raw\syst_setups_start_raw_indeed\empty{#1}\empty} % space delimited +% \def\syst_setups_start_loc_b#1 {\the\t_syst_setups_loc\syst_setups_start_loc_indeed\empty{#1}\empty} % space delimited +% \def\syst_setups_start_tex_b#1 {\the\t_syst_setups_tex\syst_setups_start_tex_indeed\empty{#1}\empty} % space delimited +% +% \def\syst_setups_start_lua_c[#1][#2]{\the\t_syst_setups_lua\syst_setups_start_lua_indeed{#1}{#2}\empty} % [..] [..] +% \def\syst_setups_start_xml_c[#1][#2]{\the\t_syst_setups_xml\syst_setups_start_xml_indeed{#1}{#2}\empty} % [..] [..] +% \def\syst_setups_start_raw_c[#1][#2]{\the\t_syst_setups_raw\syst_setups_start_raw_indeed{#1}{#2}\empty} % [..] [..] +% \def\syst_setups_start_loc_c[#1][#2]{\the\t_syst_setups_loc\syst_setups_start_loc_indeed{#1}{#2}\empty} % [..] [..] +% \def\syst_setups_start_tex_c[#1][#2]{\the\t_syst_setups_tex\syst_setups_start_tex_indeed{#1}{#2}\empty} % [..] [..] +% +% \def\syst_setups_start_lua_d[#1][#2]{\the\t_syst_setups_lua\syst_setups_start_lua_indeed\empty{#1}\empty} % [..] +% \def\syst_setups_start_xml_d[#1][#2]{\the\t_syst_setups_xml\syst_setups_start_xml_indeed\empty{#1}\empty} % [..] +% \def\syst_setups_start_raw_d[#1][#2]{\the\t_syst_setups_raw\syst_setups_start_raw_indeed\empty{#1}\empty} % [..] +% \def\syst_setups_start_loc_d[#1][#2]{\the\t_syst_setups_loc\syst_setups_start_loc_indeed\empty{#1}\empty} % [..] +% \def\syst_setups_start_tex_d[#1][#2]{\the\t_syst_setups_tex\syst_setups_start_tex_indeed\empty{#1}\empty} % [..] + +\permanent\protected\def\startluasetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_lua_yes\syst_setups_start_lua_nop} \aliased\let\stopluasetups \relax +\permanent\protected\def\startxmlsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_xml_yes\syst_setups_start_xml_nop} \aliased\let\stopxmlsetups \relax +\permanent\protected\def\startrawsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_raw_yes\syst_setups_start_raw_nop} \aliased\let\stoprawsetups \relax +\permanent\protected\def\startlocalsetups{\begingroup\doifelsenextoptionalcs\syst_setups_start_loc_yes\syst_setups_start_loc_nop} \aliased\let\stoplocalsetups\relax +\permanent\protected\def\startsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_tex_yes\syst_setups_start_tex_nop} \aliased\let\stopsetups \relax + +\def\syst_setups_start_lua_two#1#2#+\stopluasetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\endcsname##1{#3}} +\def\syst_setups_start_xml_two#1#2#+\stopxmlsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\endcsname##1{#3}} +\def\syst_setups_start_raw_two#1#2#+\stoprawsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\endcsname##1{#3}} +\def\syst_setups_start_loc_two#1#2#+\stoplocalsetups{\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\endcsname##1{#3}} +\def\syst_setups_start_tex_two#1#2#+\stopsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\endcsname##1{#3}} + +\tolerant\def\syst_setups_start_lua_yes[#1]#*[#2]% + {\the\t_syst_setups_lua + \ifarguments\expandafter\syst_setups_start_lua_one + \or \expandafter\syst_setups_start_lua_one + \else \expandafter\syst_setups_start_lua_two + \fi{#1}{#2}} + +\tolerant\def\syst_setups_start_xml_yes[#1]#*[#2]% + {\the\t_syst_setups_xml + \ifarguments\expandafter\syst_setups_start_xml_one + \or \expandafter\syst_setups_start_xml_one + \else \expandafter\syst_setups_start_xml_two + \fi{#1}{#2}} + +\tolerant\def\syst_setups_start_raw_yes[#1]#*[#2]% + {\the\t_syst_setups_raw + \ifarguments\expandafter\syst_setups_start_raw_one + \or \expandafter\syst_setups_start_raw_one + \else \expandafter\syst_setups_start_raw_two + \fi{#1}{#2}} + +\tolerant\def\syst_setups_start_loc_yes[#1]#*[#2]% + {\the\t_syst_setups_loc + \ifarguments\expandafter\syst_setups_start_loc_one + \or \expandafter\syst_setups_start_loc_one + \else \expandafter\syst_setups_start_loc_two + \fi{#1}{#2}} + +\tolerant\def\syst_setups_start_tex_yes[#1]#*[#2]% + {\the\t_syst_setups_tex + \ifarguments\expandafter\syst_setups_start_tex_one + \or \expandafter\syst_setups_start_tex_one + \else \expandafter\syst_setups_start_tex_two + \fi{#1}{#2}} + +\def\syst_setups_start_lua_nop#1 {\the\t_syst_setups_lua\syst_setups_start_lua_two{}{#1}} % space delimited +\def\syst_setups_start_xml_nop#1 {\the\t_syst_setups_xml\syst_setups_start_xml_two{}{#1}} % space delimited +\def\syst_setups_start_raw_nop#1 {\the\t_syst_setups_raw\syst_setups_start_raw_two{}{#1}} % space delimited +\def\syst_setups_start_loc_nop#1 {\the\t_syst_setups_loc\syst_setups_start_loc_two{}{#1}} % space delimited +\def\syst_setups_start_tex_nop#1 {\the\t_syst_setups_tex\syst_setups_start_tex_two{}{#1}} % space delimited + +\def\syst_setups_start_lua_one#1#2{\syst_setups_start_lua_two{}{#1}} % [..] +\def\syst_setups_start_xml_one#1#2{\syst_setups_start_xml_two{}{#1}} % [..] +\def\syst_setups_start_raw_one#1#2{\syst_setups_start_raw_two{}{#1}} % [..] +\def\syst_setups_start_loc_one#1#2{\syst_setups_start_loc_two{}{#1}} % [..] +\def\syst_setups_start_tex_one#1#2{\syst_setups_start_tex_two{}{#1}} % [..] + +\def\luasetup#1{\ctxlua{\syst_setups{#1}}} + +%D System setups: + +\let\systemsetupsprefix\wildcardsymbol + +\def\systemsetups#1{\syst_setups{\systemsetupsprefix#1}} + +\protected\def\resetsetups[#1]% see x-fo for usage + {\ifcsname\??setup\ifgridsnapping\v!grid\fi:#1\endcsname + \dodoglobal\undefinevalue{\??setup\ifgridsnapping\v!grid\fi:#1}% + \else + \dodoglobal\undefinevalue{\??setup:#1}% + \fi} + +\protected\def\copysetups + {\dodoubleargument\syst_setups_copy} + +\def\syst_setups_copy[#1][#2]% + {\ifcsname\??setup:#2\endcsname + \expandafter\let\csname\??setup:#1\expandafter\endcsname\lastnamedcs + \fi} + +\protected\def\showsetupsdefinition[#1]% + {\showvalue{\??setup:#1}} % temp hack for debugging + +%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 + +\installcorenamespace{variables} + +\permanent\protected\def\setvariables {\syst_variables_set[\getrawparameters ]} +\permanent\protected\def\setevariables{\syst_variables_set[\getraweparameters]} +\permanent\protected\def\setgvariables{\syst_variables_set[\getrawgparameters]} +\permanent\protected\def\setxvariables{\syst_variables_set[\getrawxparameters]} + +% \protected\def\globalsetvariables % obsolete +% {\dotripleargument\syst_variables_set[\globalgetrawparameters]} + +\tolerant\def\syst_variables_set[#1]#*[#2]#*[#3]% tricky, test on s-pre-60 + {\doifelse{#2}\currentvariableclass + {#1[\??variables#2:][#3]}% + {\pushmacro\currentvariableclass + \def\currentvariableclass{#2}% + \getvariable{#2}\s!reset + #1[\??variables#2:][#3]% + \getvariable{#2}\s!set + \popmacro\currentvariableclass}} + +\permanent\protected\def\setvariable #1#2#3{\expandafter\def \csname\??variables#1:#2\endcsname{#3}} +\permanent\protected\def\setevariable#1#2#3{\expandafter\edef\csname\??variables#1:#2\endcsname{#3}} +\permanent\protected\def\setgvariable#1#2#3{\expandafter\gdef\csname\??variables#1:#2\endcsname{#3}} +\permanent\protected\def\setxvariable#1#2#3{\expandafter\xdef\csname\??variables#1:#2\endcsname{#3}} + +\permanent \def\getvariable #1#2{\begincsname\??variables#1:#2\endcsname} +\permanent\protected\def\showvariable#1#2{\showvalue{\begincsname\??variables#1:#2\endcsname}} + +\let\currentvariableclass\empty + +%D \macros +%D {checkvariables} +%D +%D I'll probably forget that this on exists. + +\let\m_syst_variables_temp\empty + +\permanent\tolerant\def\checkvariables[#1]#*[#2]% + {\dogetparameters\syst_variables_check_value[#1][#2]} + +\def\syst_variables_check_value#1#2#3% + {\ifcsname\??variables#1:#2\endcsname + \edef\m_syst_variables_temp{\lastnamedcs}% + \ifx\m_syst_variables_temp\empty + \expandafter\def\csname\??variables#1:#2\endcsname{#3}% + \fi + \else + \expandafter\def\csname\??variables#1:#2\endcsname{#3}% + \fi} + +%D \macros +%D {doifelsevariable,doifvariable,doifnotvariable} +%D +%D A few trivial macros: + +\permanent\protected\def\doifelsevariable#1#2% + {\ifcsname\??variables#1:#2\endcsname + \expandafter\firstoftwoarguments + \else + \expandafter\secondoftwoarguments + \fi} + +\aliased\let\doifvariableelse\doifelsevariable + +\permanent\protected\def\doifvariable#1#2% + {\ifcsname\??variables#1:#2\endcsname + \expandafter\firstofoneargument + \else + \expandafter\gobbleoneargument + \fi} + +\permanent\protected\def\doifnotvariable#1#2% + {\ifcsname\??variables#1:#2\endcsname + \expandafter\gobbleoneargument + \else + \expandafter\firstofoneargument + \fi} + +%D A few more (we could use a public test variable so that we only need to expand +%D once, assuming expandable variables): + +\letvalue{\??variables:}\empty + +\permanent\protected\def\doifelseemptyvariable#1#2% + {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}% + \ifx\m_syst_string_one\empty + \expandafter\firstoftwoarguments + \else + \expandafter\secondoftwoarguments + \fi} + +\aliased\let\doifemptyvariableelse\doifelseemptyvariable + +\permanent\protected\def\doifemptyvariable#1#2% + {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}% + \ifx\m_syst_string_one\empty + \expandafter\firstofoneargument + \else + \expandafter\gobbleoneargument + \fi} + +\permanent\protected\def\doifnotemptyvariable#1#2% + {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}% + \ifx\m_syst_string_one\empty + \expandafter\gobbleoneargument + \else + \expandafter\firstofoneargument + \fi} + +\permanent\def\getvariabledefault#1#2% #3% can be command + {\ifcsname\??variables#1:#2\endcsname + \expandafter\expandafter\expandafter\lastnamedcs\expandafter\gobbleoneargument + \else + \expandafter\firstofoneargument + \fi} + +\permanent\tolerant\protected\def\setupenv[#1]% + {\syst_variables_set[\getrawparameters][\s!environment][#1]} + +\permanent\protected\def\doifelseenv{\doifelsevariable \s!environment} +\permanent\protected\def\doifenv {\doifvariable \s!environment} +\permanent\protected\def\doifnotenv {\doifnotvariable \s!environment} +\permanent \def\env {\getvariable \s!environment} +\permanent \def\envvar {\getvariabledefault\s!environment} + +\aliased\let\doifenvelse\doifelseenv + +%D \macros +%D {defineselector,setupselector,select,directselect} +%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 + +\installcorenamespace{selector} + +\permanent\tolerant\protected\def\defineselector[#1]#*[#2]{\getparameters[\??selector#1][\c!max=\plusone,\c!n=\plusone,#2]} +\permanent\tolerant\protected\def\setupselector [#1]#*[#2]{\getparameters[\??selector#1][#2]} + +\permanent\protected\let\select\directselect % we promote to protected + +% \def\directselect#1% expandable +% {\filterfromnext % maybe add an \expanded +% {\csname\??selector\ifcsname\??selector#1\c!max\endcsname#1\fi\c!max\endcsname}% +% {\csname\??selector\ifcsname\??selector#1\c!n \endcsname#1\fi\c!n \endcsname}} +% +% this is more efficient when the arguments are used a few times (or passed along): + +\permanent\def\directselect#1% expandable + {\expandafter\filterfromnext + \csname\??selector\ifcsname\??selector#1\c!max\endcsname#1\fi\c!max\expandafter\endcsname + \csname\??selector\ifcsname\??selector#1\c!n \endcsname#1\fi\c!n \endcsname} + +\letvalue{\??selector\c!max}\plusone % \aliased ? +\letvalue{\??selector\c!n }\plusone % \aliased ? + +\protect \endinput diff --git a/tex/context/base/mkiv/core-ini.mkiv b/tex/context/base/mkiv/core-ini.mkiv index c4ab298bf..31ef501d9 100644 --- a/tex/context/base/mkiv/core-ini.mkiv +++ b/tex/context/base/mkiv/core-ini.mkiv @@ -191,7 +191,7 @@ %D %D This boolean can be used to bypass certain initializations. -\newif\ifproductionrun +% \newif\ifproductionrun % already defined \appendtoks \productionruntrue diff --git a/tex/context/base/mkiv/driv-shp.lmt b/tex/context/base/mkiv/driv-shp.lmt index c117405ba..0d3bddda4 100644 --- a/tex/context/base/mkiv/driv-shp.lmt +++ b/tex/context/base/mkiv/driv-shp.lmt @@ -44,6 +44,7 @@ local getdata = nuts.getdata local getreplace = nuts.getreplace local setreplace = nuts.setreplace local getfont = nuts.getfont +local getkerndimension = nuts.getkerndimension local setdirection = nuts.setdirection local setfield = nuts.setfield @@ -68,7 +69,6 @@ local parameters = fonthashes.parameters local nodecodes = nodes.nodecodes local whatsitcodes = nodes.whatsitcodes -local leadercodes = nodes.leadercodes local gluecodes = nodes.gluecodes local dircodes = nodes.dircodes local dirvalues = nodes.dirvalues @@ -92,10 +92,10 @@ local whatsit_code = nodecodes.whatsit ----- penalty_code = nodecodes.penalty ----- boundary_code = nodecodes.boundary -local leaders_code = leadercodes.leaders -local cleaders_code = leadercodes.cleaders -local xleaders_code = leadercodes.xleaders -local gleaders_code = leadercodes.gleaders +local leaders_code = gluecodes.leaders +local cleaders_code = gluecodes.cleaders +local xleaders_code = gluecodes.xleaders +local gleaders_code = gluecodes.gleaders local spaceskip_code = gluecodes.spaceskip @@ -586,7 +586,7 @@ local hlist_out, vlist_out do -- current = getlist(this_box) -- end - -- we can encounter localpar, boundary and penalty nodes but a special + -- we can encounter par, boundary and penalty nodes but a special -- iterator over content nodes won't save much for current, id, subtype in nextnode, current do if id == glyph_code then @@ -775,6 +775,8 @@ local hlist_out, vlist_out do end cur_h = cur_h + width elseif id == kern_code then + -- we can use getkerndimension(current) but then we get rounded values so for + -- now we calculate ourselves local kern, factor = getkern(current,true) if kern ~= 0 then if factor ~= 0 then @@ -893,7 +895,7 @@ local hlist_out, vlist_out do setlink(current,replace) setreplace(current) end - -- elseif id == localpar_code and start_of_par(current) then + -- elseif id == par_code and start_of_par(current) then -- local pardir = getdirection(current) or lefttoright_code -- if pardir == righttoleft_code then -- end diff --git a/tex/context/base/mkiv/enco-ini.mkiv b/tex/context/base/mkiv/enco-ini.mkiv index f78643975..e4343ba2d 100644 --- a/tex/context/base/mkiv/enco-ini.mkiv +++ b/tex/context/base/mkiv/enco-ini.mkiv @@ -314,7 +314,7 @@ % left-overs (some day in private unicode space, so that we can roundtrip) \unexpanded\def\textblacksquare {\dontleavehmode\hbox{\vrule\s!width.3\s!em\s!height.4\s!em\s!depth-.1\s!em}} -\unexpanded\def\schwa {\hbox{\rotate[\c!rotation=180,\c!location=\v!high]{\hbox{e}}}} +%unexpanded\def\schwa {\hbox{\rotate[\c!rotation=180,\c!location=\v!high]{\hbox{e}}}} \unexpanded\def\schwagrave {\buildtextgrave\schwa} \chardef\textcontrolspace"2423 diff --git a/tex/context/base/mkiv/enco-ini.mkxl b/tex/context/base/mkiv/enco-ini.mkxl new file mode 100644 index 000000000..609aa28da --- /dev/null +++ b/tex/context/base/mkiv/enco-ini.mkxl @@ -0,0 +1,570 @@ +%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 This is stripped down version of th eoriginal enco-ini.tex file. For more details +%D you might want to study the \MKII\ file but since \LUATEX\ is unicode inside we +%D need less code. + +%D Much in here will disappear in \LMTX\ because we assume proper \UNICODE\ usage. + +% When dealing with characters we have four cases to take into account when moving +% from mkii to mkiv: + +% 1. => ref to slot 200 in current font +% 2. \char 200 => ref to slot 200 in current font +% 3. => can (e.g.) map to another slot in current font +% 4. \namedglyph => can map to some slot in some font + +% Using case 2 for special characters is doomed to fail because we are not going +% to intercept these on the fly as happens automatically with traditional font +% encoding handling. We could do that in a node pass but it's not worth the effort +% because we seldom use this case in a document source. + +% We can consider using utf as internal format for mkii. The main reason for not +% doing this before was that it was slow. On the other hand, it would make dealing +% with utility files easier. However, we've now kind of frozen mkii. + +\writestatus{loading}{ConTeXt Encoding Macros / Initialization} + +\unprotect + +%D Obsolete (but sometimes used in styles) + +\let\defaultencoding\s!default + +%D \macros +%D {defineaccent, definecharacter, definecommand} +%D +%D Some of these are used at the \LUA\ end! + +\installcorenamespace{accents} + +\permanent\protected\def\defineaccent#1 #2 #3 % + {\dodefineaccentcommand{#1}% + \dodefineaccent{#1}{#2}{#3}} + +\permanent\protected\def\dodefineaccentcommand#1% + {\setevalue{\string#1}{\noexpand\dohandleaccent{\string#1}}} + +\permanent\protected\def\dodefineaccent#1#2#3% no spaces, used low level + {\setvalue{\??accents\string#1\string#2\empty}{#3}} + +% the following dirty trick is needed to catch \asciimath{\^{1/5}log}: + +\permanent\protected\def\dohandleaccent#1#2% expandable because we want them in the tuc file + {\csname\??accents + \ifcsname\??accents\string#1#2\empty\endcsname + \string#1#2\empty + \orelse\ifcsname\??accents\string#1\string#2\empty\endcsname + \string#1\string#2\empty + \else + \endcsname#2\csname\??accents % very dirty trick: ignore accent but keep char + \fi + \endcsname} + +\immutable\letvalue{\??accents}\empty + +\permanent\protected\def\dodefinecommand#1#2% + {\frozen\setuvalue{\string#1}{#2}} % not permanent as these are kind of obsolete + +\permanent\protected\def\definecharacter#1 #2 % + {\doifelsenumber{\string#2} + {\setevalue{\string#1}{\utfchar{#2}}} % or {\expandafter\chardef\csname#1\endcsname#2\relax} + {\setuvalue{\string#1}{#2}}} + +\permanent\protected\def\definecommand#1 #2 % + {\setuvalue{\string#1}{#2}} + +%D \macros +%D {everyuppercase, everylowercase, everysanitize} + +\newtoks \everyuppercase +\newtoks \everylowercase +\newtoks \everysanitize + +%D Accent handling (try to avoid this): + +% \buildtextaccent\greekdasia\greekalphamacron +% \buildtextaccent\textacute q + +%D We can use offsets in \LMTX\ but even that makes n o sense because we have +%D a virtual feature already in \MKIV. + +%D We define them frozen so that we can overload them. + +\newbox\b_enco_accent + +\permanent\protected\def\buildmathaccent#1% + {\mathaccent#1 } + +\permanent\protected\def\buildtextaccent#1#2% we could do all at the lua end + {\dontleavehmode\begingroup % but that's no fun (yet) + \setbox\scratchboxone\hbox{#1}% accent + \setbox\scratchboxtwo\hbox{#2}% character + \scratchheight\dimexpr\ht\scratchboxtwo-\ht\scratchboxone\relax + \scratchdepth \dimexpr\dp\scratchboxtwo-\dp\scratchboxone\relax + \scratchwidth \wd\scratchboxtwo + \hbox to \wd\ifdim\wd\scratchboxone>\wd\scratchboxtwo\scratchboxone\else\scratchboxtwo\fi\bgroup + \hss\box\scratchboxtwo\hss + \hskip-\scratchwidth + \hss + \ifdim\ht\scratchboxone>\exheight + % top accent + \raise\dimexpr\scratchheight+\exheight/3\relax + \else + \lower-\dimexpr\scratchdepth+\exheight/3\relax + \fi + \box\scratchboxone + \hss + \egroup + \endgroup} + +\permanent\protected\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 + \vpack to .2\exheight{\box0\vss}\hidewidth + \crcr}}} + +\permanent\protected\def\buildtextmacron {\bottomaccent{.25ex}{0}{15}{\textmacron}} +\permanent\protected\def\buildtextbottomdot {\bottomaccent{.25ex}{0}{5}{\textbottomdot}} +\permanent\protected\def\buildtextcedilla {\bottomaccent{0ex}{0}{5}{\textcedilla}} +\permanent\protected\def\buildtextogonek {\bottomaccent{-.1ex}{.5}{0}{\textogonek}} +\permanent\protected\def\buildtextbottomcomma{\bottomaccent{.15ex}{0}{5}{\tx,}} + +\aliased\let\d\buildtextbottomdot + +\permanent\protected\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} + +\permanent\protected\def\buildtextgrave + {\topaccent{0pt}{0}{15}{\textgrave}} % e.g. + +\permanent\protected\def\definemathaccent#1 #2% + {\setvalue{#1}{\mathaccent#2 }} + +%D Math (will move): + +\definemathaccent acute \mathacute +\definemathaccent grave \mathgrave +\definemathaccent ddot \mathddot +\definemathaccent tilde \mathtilde +\definemathaccent bar \mathbar +\definemathaccent breve \mathbreve +\definemathaccent check \mathcheck +\definemathaccent hat \mathhat +\definemathaccent vec \mathvec +\definemathaccent dot \mathdot +%definemathaccent widetilde \mathwidetilde +%definemathaccent widehat \mathwidehat + +% from enco-def: + +% \aliased\let\i\dotlessi +% \aliased\let\j\dotlessj + +% \aliased\let\P\paragraphmark \aliased\let\textP\paragraphmark % obsolete (surfaced in bibliographic files) +% \aliased\let\S\sectionmark \aliased\let\textS\sectionmark % obsolete (surfaced in bibliographic files) + +\permanent\def\eszett {ß} \permanent\def\Eszett {SS} \permanent\def\Ssharp{SS} +\permanent\def\lslash {ł} \permanent\def\Lslash {Ł} +\permanent\def\dslash {đ} \permanent\def\Dslash {Đ} +%permanent\def\oslash {ø} %permanent\def\Oslash {Ø} % clashes with math: use \Ostroke +\permanent\def\dcroat {đ} \permanent\def\Dcroat {Đ} +\permanent\def\kcedilla{ķ} \permanent\def\Kcedilla{Ķ} +\permanent\def\lcedilla{ļ} \permanent\def\Lcedilla{Ļ} +\permanent\def\ncedilla{ņ} \permanent\def\Ncedilla{Ņ} +\permanent\def\rcedilla{ŗ} \permanent\def\Rcedilla{Ŗ} +\permanent\def\aumlaut {ä} \permanent\def\Aumlaut {Ä} +\permanent\def\eumlaut {ë} \permanent\def\Eumlaut {Ë} +\permanent\def\iumlaut {ï} \permanent\def\Iumlaut {Ï} +\permanent\def\oumlaut {ö} \permanent\def\Oumlaut {Ö} +\permanent\def\uumlaut {ü} \permanent\def\Uumlaut {Ü} + +% from enco-com: + +% \aliased\let\AE\AEligature \aliased\let\ae\aeligature +% \aliased\let\OE\OEligature \aliased\let\oe\oeligature +% \aliased\let\IJ\IJligature \aliased\let\ij\ijligature +% \aliased\let\AA\textAngstrom \aliased\let\aa\aring +% \aliased\let\CC\Ccedilla \aliased\let\cc\ccedilla +% \aliased\let\L \Lslash \aliased\let\l \lslash +% \aliased\let\O \Oslash \aliased\let\o \oslash +% \aliased\let\SZ\Eszett \aliased\let\sz\eszett % \aliased\let\SS\Ssharp + +% for old times sake (obsolete) + +\def\textflorin{ƒ} \def\florin {ƒ} +\def\pound {£} \def\sterling{£} +\def\promille {‰} \def\permille{‰} + +% tex specific + +\pushoverloadmode + +%D Was missing: + +\permanent\protected\def\ampersand{\mathortext\mathampersand\textampersand} + + +\ifdefined\textpercent + \permanent\let\percent \textpercent + \permanent\let\procent \textpercent + %\permanent\let\ampersand \textampersand + \permanent\let\dollar \textdollar + \permanent\let\hash \texthash +\else + \permanent\def\percent {\textpercent} + \permanent\def\procent {\textpercent} + %\permanent\def\ampersand {\textampersand} + \permanent\def\dollar {\textdollar} + \permanent\def\hash {\texthash} +\fi + +\popoverloadmode + +% from enco-mis: + +\permanent\protected\def\fakepercent + {\mathematics{\normalsuperscript{\scriptscriptstyle0}\kern-.25\emwidth/\kern-.2\emwidth\normalsubscript{\scriptscriptstyle0}}} + +\permanent\protected\def\fakeperthousand + {\mathematics{\normalsuperscript{\scriptscriptstyle0}\kern-.25\emwidth/\kern-.2\emwidth\normalsubscript{\scriptscriptstyle00}}} + +\permanent\protected\def\fakepermine + {\dontleavehmode + \bgroup + \setbox\scratchbox\hbox + {\mathematics{+}}% + \hbox to \wd\scratchbox + {\hss + \mathematics{\normalsuperscript{\scriptscriptstyle-}\kern-.4\emwidth/\kern-.3\emwidth\normalsubscript{\scriptscriptstyle-}}% + \hss}% + \egroup} + +\def\permine{\fakepermine} + +% some more: what with freezing here? + +\ifdefined\softhyphen \else + \aliased\let\softhyphen\explicitdiscretionary +\fi + +\def\hyphen {\softhyphen} +\def\compoundwordmark {\hyphen} +\def\cwm {\hyphen} +\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} + +% left-overs (some day in private unicode space, so that we can roundtrip) + +\permanent\protected\def\textblacksquare{\dontleavehmode\hbox{\vrule\s!width.3\s!em\s!height.4\s!em\s!depth-.1\s!em}} +%permanent\protected\def\schwa {\hbox{\rotate[\c!rotation=180,\c!location=\v!high]{\hbox{e}}}} +\permanent\protected\def\schwagrave {\buildtextgrave\schwa} + +\chardef\textcontrolspace"2423 + +\installcorenamespace{controlspace} + +% \protected\def\fallbackcontrolspace % beware: non-matching widths +% {\hbox to \interwordspace{\hss\getglyph{LMTypewriter-Regular}\textcontrolspace\hss}% + +\permanent\protected\def\fallbackcontrolspace % beware, current font, we also need to honor color + {\hbox to \interwordspace \bgroup + \hss + \ifcsname\??controlspace\number\interwordspace\endcsname + \csname\??controlspace\number\interwordspace\endcsname + \else + \enco_fast_control_space_define % only regular + \fi + \textcontrolspace + \hss + \egroup} + +\protected\def\enco_fast_control_space_define + {\scratchdimen\interwordspace + \definedfont[LMTypewriter-Regular at \the\dimexpr\currentfontbodyscale\dimexpr\fontbody]% see font-sym.mkiv + \expandafter\glet\csname\??controlspace\number\scratchdimen\endcsname\lastrawfontcall} + +\permanent\protected\def\normalcontrolspace + {\iffontchar\font\textcontrolspace + \textcontrolspace + \else + \fallbackcontrolspace + \fi} + +\let\textvisiblespace\normalcontrolspace + +\permanent\protected\def\optionalcontrolspace + {\iffontchar\font\textcontrolspace + \textcontrolspace + \else + \asciispacechar % used for export ! + \fi} + +% \protected\def\fastcontrolspace % no glyph resolving after first (use grouped) +% {\enco_fast_control_space} +% +% \def\enco_fast_control_space +% {\iffontchar\font\textcontrolspace +% \enco_fast_control_space_nop +% \else +% \enco_fast_control_space_yes +% \fi +% \enco_fast_control_space} +% +% \newbox\b_enco_control_space +% +% \def\enco_fast_control_space_nop +% {\let\enco_fast_control_space\textcontrolspace} +% +% \def\enco_fast_control_space_yes +% {\setbox\b_enco_control_space\fallbackcontrolspace +% \let\enco_fast_control_space\flushcontrolspacebox} +% +% \def\flushcontrolspacebox +% {\copy\b_enco_control_space} + +% a few defaults (\{}), we really need the verbose \empty as it will be +% stringified .. anyhow, we define this at the lua end now but keep it here as a +% reference +% +% \defineaccent ^ {\empty} {\textcircumflex} +% \defineaccent ` {\empty} {\textgrave} +% \defineaccent ~ {\empty} {\texttilde} +% \defineaccent " {\empty} {\textdiaeresis} +% \defineaccent ' {\empty} {\textacute} +% \defineaccent . {\empty} {\textdotaccent} +% \defineaccent = {\empty} {\textmacron} +% \defineaccent c {\empty} {\textcedilla} +% \defineaccent H {\empty} {\texthungarumlaut} +% \defineaccent k {\empty} {\textogonek} +% \defineaccent r {\empty} {\textring} +% \defineaccent u {\empty} {\textbreve} +% \defineaccent v {\empty} {\textcaron} + +\clf_defineaccents % one time + +%D A smaller and bolder variant, more like the math and monospaced ones. + +\permanent\protected\def\fakeunderscore + {\relax\ifmmode + \vrule\s!depth .12\fontexheight\mathstylefont\normalmathstyle\s!width \fontinterwordspace\mathstylefont\normalmathstyle\s!height\zeropoint\relax + \else + \dontleavehmode\hbox{\vrule\s!depth .12\fontexheight\font\s!width \fontinterwordspace\font\s!height\zeropoint}% + \fi} + +\permanent\protected\def\fakeunderscores{\let\_\fakeunderscore} +\permanent\protected\def\textunderscores{\let\_\textunderscore} + +\textunderscores + +\ifdefined\mathunderscore \else \aliased\let\mathunderscore\fakeunderscore \fi +\ifdefined\textunderscore \else \aliased\let\textunderscore\fakeunderscore \fi + +\permanent\protected\def\normalunderscore{\ifmmode\mathunderscore\else\textunderscore\fi} + +\let\_\normalunderscore + +%D To be sorted out: + +\pushoverloadmode + +\permanent\protected\def\textminus + {\char \iffontchar\font"2012 "2012 % figuredash + \else\iffontchar\font"2013 "2013 % endash + \else\iffontchar\font"2212 "2212 % math minus + "002D % hyphen + \fi\fi\fi} + +\permanent\protected\def\textplus + {\char"002B } % plus + +\popoverloadmode + +%D Moved from core-mis: + +\permanent\protected\def\celsius #1{#1\mathematics{^\circ}C} +\permanent\protected\def\inch {\mathematics{\prime\prime}} % was: \hbox{\rm\char125\relax} +\permanent\protected\def\fraction#1#2{\mathematics{#1\over#2}} + +% \def\periodswidth {.5em} +% \def\periodsdefault{3} % was 5, but now it's like \unknown +% +% \protected\def\periods +% {\dosingleempty\enco_periods} +% +% \def\doperiods[#1]% todo: also n=,width= or maybe just #1,#2 +% {\dontleavehmode +% \begingroup +% \scratchdimen\periodswidth +% \hbox to \iffirstargument#1\else\periodsdefault\fi \scratchdimen +% {\leaders\hbox to \scratchdimen{\hss\periodsymbol\hss}\hss}% +% \endgroup} +% +% better for export: +% +% \protected\def\enco_periods[#1]% todo: also n=,width= or maybe just #1,#2 +% {\dontleavehmode +% \hbox\bgroup +% \setbox\scratchbox\hbox to \periodswidth{\hss\periodsymbol\hss}% +% \dorecurse{\iffirstargument#1\else\periodsdefault\fi}{\copy\scratchbox}% +% \egroup} +% +% \protected\def\unknown +% {\periods\relax} % relax prevents lookahead for [] +% +% per request: + +%D \startbuffer +%D \startlines +%D x\periods x +%D x\periods[10]x +%D x\periods[n=10,symbol={,}]x +%D x\periods[n=4,symbol={!!},width=1em]x +%D x\periods[n=4,symbol={!!},width=fit]x +%D x\periods[n=4,symbol={!!},width=fit,distance=1em]x +%D x\unknown x +%D \stoplines +%D \stopbuffer +%D +%D \typbuffer \getbuffer + +\def\periodswidth {.5\emwidth} % downward compatible +\def\periodsdefault{3} % downward compatible + +\installcorenamespace {periods} + +\installsetuponlycommandhandler \??periods {periods} + +\setupperiods + [\c!n=\periodsdefault, + \c!width=\periodswidth, % can also be \v!fit + \c!distance=.25\emwidth, + \c!symbol=.] + +\permanent\protected\def\periods + {\dontleavehmode + \hbox\bgroup + \doifelsenextoptional\enco_periods_yes\enco_periods_nop} + +\protected\def\enco_periods_yes[#1]% + {\doifelseassignment{#1} + {\setupcurrentperiods[#1]% + \scratchcounter\periodsparameter\c!n} + {\doifelsenothing{#1} + {\scratchcounter\periodsparameter\c!n}% + {\scratchcounter#1}}% + \enco_periods_finish} + +\protected\def\enco_periods_nop + {\scratchcounter\periodsparameter\c!n + \enco_periods_finish} + +\protected\def\enco_periods_finish + {\edef\p_width{\periodsparameter\c!width}% + \ifx\p_width\v!fit + \enco_periods_finish_fit + \else + \enco_periods_finish_width + \fi + \egroup} + +\protected\def\enco_periods_finish_width + {\setbox\scratchbox\hbox to \p_width + {\hss\periodsparameter\c!symbol\hss}% + \dorecurse\scratchcounter{\copy\scratchbox}} + +\protected\def\enco_periods_finish_fit + {\edef\p_symbol{\periodsparameter\c!symbol}% + \scratchdistance\periodsparameter\c!distance + \hskip\scratchdistance + \dorecurse\scratchcounter{\p_symbol\hskip\scratchdistance}} + +\permanent\protected\def\unknown + {\dontleavehmode + \hbox\bgroup + \enco_periods_nop} + +%D Left-overs: + +\appendtoks + \enforced\let\buildtextaccent\secondoftwoarguments +\to \everysimplifycommands + +%D A plain one: + +% \protected\def\t#1{% +% \dontleavehmode +% \begingroup +% \setbox\scratchboxone\hpack{#1}% +% \setbox\scratchboxtwo\hpack\bgroup +% \iffontchar\font"0361\relax +% \char"0361\relax +% \else +% \iffontchar\font"2040\relax\else +% \the\textfont0 +% \fi +% \char"2040 +% \fi +% \egroup +% \scratchdimenone\wd\ifdim\wd\scratchboxone>\wd\scratchboxtwo\scratchboxone\else\scratchboxtwo\fi +% \scratchdimentwo\dimexpr-\ht\scratchboxtwo+\ht\scratchboxone+.45\exheight\relax +% \hpack to \scratchdimenone\bgroup +% \hpack to \scratchdimenone{\hss\box\scratchboxone\hss}% +% \hskip -\scratchdimenone +% \hpack to \scratchdimenone{\hss\raise\scratchdimentwo\box\scratchboxtwo\hss}% +% \egroup +% \endgroup} + +\protect \endinput diff --git a/tex/context/base/mkiv/file-ini.mkvi b/tex/context/base/mkiv/file-ini.mkvi index 5341cc07b..5fa5aa560 100644 --- a/tex/context/base/mkiv/file-ini.mkvi +++ b/tex/context/base/mkiv/file-ini.mkvi @@ -115,7 +115,7 @@ %D lines). So, instead of fixing that, we go for a redefinition of \type {\input}. %D Of course it's better to use \type {\readfile} or \type {\processfile}. -\unexpanded\def\input{\normalinput} +% \unexpanded\def\input{\normalinput} \def\inputgivenfile#name{\normalinput{#name}} diff --git a/tex/context/base/mkiv/file-job.mkvi b/tex/context/base/mkiv/file-job.mkvi index db5ac4db1..1f8da6b0c 100644 --- a/tex/context/base/mkiv/file-job.mkvi +++ b/tex/context/base/mkiv/file-job.mkvi @@ -133,10 +133,15 @@ \unexpanded\def\starttext {\clf_starttext} \unexpanded\def\stoptext {\clf_stoptext} \unexpanded\def\forcequitjob {\clf_forcequitjob} -\unexpanded\def\end {\clf_forceendjob} \unexpanded\def\autostarttext{\clf_autostarttext} \unexpanded\def\autostoptext {\clf_autostoptext} +\pushoverloadmode + +\unexpanded\def\end {\clf_forceendjob} + +\popoverloadmode + \unexpanded\def\finishjob{\stoptext} % nicer in luatex call commandline \newtoks\everystartnotext diff --git a/tex/context/base/mkiv/file-syn.mklx b/tex/context/base/mkiv/file-syn.mklx new file mode 100644 index 000000000..25f36f742 --- /dev/null +++ b/tex/context/base/mkiv/file-syn.mklx @@ -0,0 +1,61 @@ +%D \module +%D [ file=file-syn, % was core-fil, +%D version=20110701, % 1997.11.15, +%D title=\CONTEXT\ File Macros, +%D subtitle=Module 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 File Macros / Synonyms} + +\unprotect + +\registerctxluafile{file-syn}{} + +%D \macros +%D {definefilesynonym,definefilefallback} +%D +%D One of the problems with loading files is that their names can depend on the +%D interface language. We therefore need a method to define filesynonyms. The actual +%D synonyms are 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 + +\permanent\tolerant\def\definefilesynonym [#name]#spacer[#realname]{\clf_definefilesynonym {#name}{#realname}} +\permanent\tolerant\def\definefilefallback[#name]#spacer[#alternatives]{\clf_definefilefallback{#name}{#alternatives}} + +%D \macros +%D {truefilename} +%D +%D At the system level such a filename can be called upon by saying: +%D +%D \starttyping +%D \truefilename{filename/filesynonym} +%D \stoptyping +%D +%D The implementation shows that nesting is supported. + +\permanent\def\truefilename#1{\clf_truefilename{#1}} + +\protect \endinput diff --git a/tex/context/base/mkiv/font-ctx.lua b/tex/context/base/mkiv/font-ctx.lua index eec967c1c..6c21bc0cc 100644 --- a/tex/context/base/mkiv/font-ctx.lua +++ b/tex/context/base/mkiv/font-ctx.lua @@ -334,9 +334,10 @@ end -- Watch out: in lmtx the font dimen array is no longer resized automatically. implement { - name = "resetnullfont", - onlyonce = true, - actions = function() + name = "resetnullfont", + onlyonce = true, + permanent = false, + actions = function() for i=1,7 do if CONTEXTLMTXMODE > 0 then font.setfontdimen(0,i,0) @@ -1020,7 +1021,8 @@ end local function splitcontext(features) -- presetcontext creates dummy here local n, sf - if find(features,",") then + -- We can have: "a=yes,b=yes" "a,b" "a" "a=yes" etc. + if find(features,"[,=]") then -- -- from elsewhere (!) -- diff --git a/tex/context/base/mkiv/font-emp.mklx b/tex/context/base/mkiv/font-emp.mklx index 8ceee2723..5656c168c 100644 --- a/tex/context/base/mkiv/font-emp.mklx +++ b/tex/context/base/mkiv/font-emp.mklx @@ -32,8 +32,8 @@ %D But we prefer: %D %D \starttyping -%D \unexpanded\def\emphasistypeface{\sl} -%D \unexpanded\def\emphasisboldface{\bs} +%D \protected\def\emphasistypeface{\sl} +%D \protected\def\emphasisboldface{\bs} %D \stoptyping %D %D or even better: @@ -52,33 +52,33 @@ \csname\m_font_emphasized_typeface\endcsname \fi} -\unexpanded\def\emphasistypeface{\font_emphasis_checked_typeface\sl\it} -\unexpanded\def\emphasisboldface{\font_emphasis_checked_typeface\bs\bi} +\permanent\protected\def\emphasistypeface{\font_emphasis_checked_typeface\sl\it} +\permanent\protected\def\emphasisboldface{\font_emphasis_checked_typeface\bs\bi} -\unexpanded\def\normalboldface % public +\permanent\protected\def\normalboldface % public {\relax \ifx\fontalternative\s!it\bi\orelse \ifx\fontalternative\s!sl\bs\else \bf\fi} -\unexpanded\def\normalitalicface % public +\permanent\protected\def\normalitalicface % public {\relax \ifx\fontalternative\s!tf\it\orelse \ifx\fontalternative\s!bf\bi\else \tf\fi} -\unexpanded\def\normalslantedface % public +\permanent\protected\def\normalslantedface % public {\relax \ifx\fontalternative\s!tf\sl \orelse\ifx\fontalternative\s!bf\bs \else \tf\fi} -\unexpanded\def\normaltypeface % public +\permanent\protected\def\normaltypeface % public {\relax \ifx\fontalternative\s!bi \it \orelse \ifx\fontalternative\s!bs \sl \else \tf \fi} -\unexpanded\def\swaptypeface % public +\permanent\protected\def\swaptypeface % public {\relax \ifx\fontalternative\s!it \tf \orelse \ifx\fontalternative\s!sl \tf \orelse @@ -93,14 +93,14 @@ \let\italicface \normalitalicface % public \let\swapface \swaptypeface % public -%D To be set with the default body font environment: \type -%D {em} being \type {slanted} or \type {italic}. +%D To be set with the default body font environment: \type {em} being \type +%D {slanted} or \type {italic}. % maybe a \csname...\fontalternative\endcsname \newconditional\c_font_emphasis_needed -\unexpanded\def\em +\permanent\protected\def\em {\relax \ifdim\slantperpoint>\zeropoint \settrue\c_font_emphasis_needed @@ -109,15 +109,15 @@ \fi \font_emphasis_set_emphasis_boldface % new \ifx\fontalternative\s!it - \unexpanded\def\emphasistypeface{\it}\tf + \enforced\permanent\protected\def\emphasistypeface{\it}\tf \orelse\ifx\fontalternative\s!sl - \unexpanded\def\emphasistypeface{\sl}\tf + \enforced\permanent\protected\def\emphasistypeface{\sl}\tf \orelse\ifx\fontalternative\s!bf \emphasisboldface \orelse\ifx\fontalternative\s!bs - \unexpanded\def\emphasisboldface{\bs}\bf + \enforced\permanent\protected\def\emphasisboldface{\bs}\bf \orelse\ifx\fontalternative\s!bi - \unexpanded\def\emphasisboldface{\bi}\bf + \enforced\permanent\protected\def\emphasisboldface{\bi}\bf \else \emphasistypeface \fi @@ -126,8 +126,8 @@ \fi \emphasiscorrection} -%D The next feature was not present in previous versions. It -%D takes care of \type {\em \bf ...} situations. +%D The next feature was not present in previous versions. It takes care of \type +%D {\em \bf ...} situations. \let\font_emphasis_saved_emphasis_boldface\relax @@ -136,7 +136,7 @@ \let\font_emphasis_set_emphasis_boldface\relax \let\bf\font_emphasis_bold_bold} -\unexpanded\def\font_emphasis_bold_bold +\protected\def\font_emphasis_bold_bold {%\relax \let\bf\relax % new \ifx\fontalternative\s!it @@ -154,7 +154,7 @@ \let\italiccorrection=\/ % tex primitive -\def\emphasiscorrection % public, not in raw alignment groups, else omit problem +\permanent\protected\def\emphasiscorrection % public, not in raw alignment groups, else omit problem {\ifhmode\ifnum\currentgrouptype=\aligngroupcode\else \expandafter\expandafter\expandafter\font_emphasis_look \fi\fi} @@ -224,24 +224,24 @@ %D The next emphasis alternatives are for \THANH. They adapt their style as good as %D possible. These macros are obsolete in \MKIV. -% \unexpanded\def\emphbf{\groupedcommand{\bf\def\emphit{\bi}\def\emphsl{\bs}}{}} -% \unexpanded\def\emphit{\groupedcommand{\it\def\emphbf{\bi}\def\emphsl{\sl}}{}} -% \unexpanded\def\emphsl{\groupedcommand{\sl\def\emphbf{\bs}\def\emphit{\it}}{}} -% \unexpanded\def\emphtf{\groupedcommand{\tf\def\emphbf{\bf}\def\emphit{\it}\def\emphsl{\sl}}{}} -% \unexpanded\def\emph {\groupedcommand{\em}{}} +% \protected\def\emphbf{\groupedcommand{\bf\def\emphit{\bi}\def\emphsl{\bs}}{}} +% \protected\def\emphit{\groupedcommand{\it\def\emphbf{\bi}\def\emphsl{\sl}}{}} +% \protected\def\emphsl{\groupedcommand{\sl\def\emphbf{\bs}\def\emphit{\it}}{}} +% \protected\def\emphtf{\groupedcommand{\tf\def\emphbf{\bf}\def\emphit{\it}\def\emphsl{\sl}}{}} +% \protected\def\emph {\groupedcommand{\em}{}} -\unexpanded\def\font_emphasis_bf{\bf\def\emphit{\bi}\def\emphsl{\bs}} -\unexpanded\def\font_emphasis_it{\it\def\emphbf{\bi}\def\emphsl{\sl}} -\unexpanded\def\font_emphasis_sl{\sl\def\emphbf{\bs}\def\emphit{\it}} -\unexpanded\def\font_emphasis_tf{\tf\def\emphbf{\bf}\def\emphit{\it}\def\emphsl{\sl}} +\protected\def\font_emphasis_bf{\bf\def\emphit{\bi}\def\emphsl{\bs}} +\protected\def\font_emphasis_it{\it\def\emphbf{\bi}\def\emphsl{\sl}} +\protected\def\font_emphasis_sl{\sl\def\emphbf{\bs}\def\emphit{\it}} +\protected\def\font_emphasis_tf{\tf\def\emphbf{\bf}\def\emphit{\it}\def\emphsl{\sl}} -\unexpanded\def\emphbf{\triggergroupedcommandcs\font_emphasis_bf} -\unexpanded\def\emphit{\triggergroupedcommandcs\font_emphasis_it} -\unexpanded\def\emphsl{\triggergroupedcommandcs\font_emphasis_sl} -\unexpanded\def\emphtf{\triggergroupedcommandcs\font_emphasis_tf} -\unexpanded\def\emph {\triggergroupedcommandcs\em} +\permanent\protected\def\emphbf{\triggergroupedcommandcs\font_emphasis_bf} +\permanent\protected\def\emphit{\triggergroupedcommandcs\font_emphasis_it} +\permanent\protected\def\emphsl{\triggergroupedcommandcs\font_emphasis_sl} +\permanent\protected\def\emphtf{\triggergroupedcommandcs\font_emphasis_tf} +\permanent\protected\def\emph {\triggergroupedcommandcs\em} -\unexpanded\def\emphasized{\bgroup\em\let\nexttoken} +\permanent\protected\def\emphasized{\bgroup\em\let\nexttoken} %D \startbuffer %D TEXT {\emphbf text \emphit text \emphtf text \emphsl text} TEXT diff --git a/tex/context/base/mkiv/font-fea.mklx b/tex/context/base/mkiv/font-fea.mklx new file mode 100644 index 000000000..010f95500 --- /dev/null +++ b/tex/context/base/mkiv/font-fea.mklx @@ -0,0 +1,380 @@ +%D \module +%D [ file=font-sty, +%D version=2011.01.13, % (copied fron font-ini) +%D title=\CONTEXT\ Font Macros, +%D subtitle=features, +%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 / Features} + +\unprotect + +%D Feature management. +%D +%D \starttyping +%D \definefontfeature[smallcaps][smcp=yes,script=latn] +%D \definefontfeature[smallcaps][SmallCapitals=yes,script=latn] +%D \definefontfeature[smallcaps][Small Capitals=yes,script=latn] +%D \definefontfeature[smallcaps][small capitals=yes,script=latn] +%D \definefontfeature[smallcaps][smallcapitals=yes,script=latn] +%D +%D \definedfont[cambria*smallcaps] test +%D +%D \starttext +%D \definefontfeature[basekerned][default][mode=base] +%D \definefontfeature[nodekerned][default][mode=node] +%D \definefontfeature[nonekerned][default][mode=base,kern=no] +%D \setupcolors[state=start] +%D \startoverlay +%D {\vbox{\red \definedfont[Serif*nonekerned at 12pt]\input tufte }} +%D {\vbox{\blue \definedfont[Serif*basekerned at 12pt]\input tufte }} +%D {\vbox{\green\definedfont[Serif*nodekerned at 12pt]\input tufte }} +%D \stopoverlay +%D \stoptext +%D +%D \enabletrackers[otf.kerns] +%D +%D \definefontfeature[withkern][default][mode=node] +%D \definefontfeature[nokern] [default][mode=node,kern=no] +%D \definefontfeature[single] [default][mode=node,cpsp=yes] +%D \definefontfeature[simple] [default][mode=node,cpsp=yes,kern=no] +%D +%D {\definedfont[Serif*default] [FGFGFGFGFGFGFGFGFGFGFGFGFG ABCDEFGHIJKLMNOPQRSTUVWXYZ] \par} +%D {\definedfont[Serif*nokern] [FGFGFGFGFGFGFGFGFGFGFGFGFG ABCDEFGHIJKLMNOPQRSTUVWXYZ] \par} +%D {\definedfont[Serif*single] [FGFGFGFGFGFGFGFGFGFGFGFGFG ABCDEFGHIJKLMNOPQRSTUVWXYZ] \par} +%D {\definedfont[Serif*simple] [FGFGFGFGFGFGFGFGFGFGFGFGFG ABCDEFGHIJKLMNOPQRSTUVWXYZ] \par} +%D \stoptyping + +% \definefontfeature[slanted] [default][slant=.25] +% \definefontfeature[stretched][default][stretch=2] +% +% \start \definedfont[SerifBold*slanted at 20pt] \ruledhbox{Test!} \stop +% \start \definedfont[SerifBold*stretched at 20pt] \ruledhbox{Test!} \stop +% +% \definefontfeature[default] [liga=yes,texligatures=yes,texquotes=yes] +% \definefontfeature[default-caps][liga=yes,texligatures=yes,texquotes=yes,smcp=yes,script=latn] +% +% \starttypescript [serif] [palatino-nova-regular] [name] +% \definefontsynonym[Serif] [palatinonova-regular][features=default] +% \definefontsynonym[SerifCaps][palatinonova-regular][features=default-caps] % also sets Serif +% \stoptypescript +% +% \starttypescript [serif] [palatino-nova-regular] [name] +% \definefontsynonym[Serif] [palatinonova-regular*default] +% \definefontsynonym[SerifCaps] [palatinonova-regular*default-caps] +% \stoptypescript +% +% \definetypeface[mainface][rm][serif][palatino-nova-regular][default] \setupbodyfont[mainface] +% +% \starttext +% ``Test'' -- --- ff fi fl \sc ``Test'' -- --- ff fi fl +% \stoptext +% +% \definefontfeature +% [default-base] +% [script=latn,language=dflt,liga=yes,kern=yes,tlig=yes,trep=yes] +% \definefontfeature +% [default-node] +% [script=latn,language=dflt,liga=yes,kern=yes,tlig=yes,trep=yes,mode=node] +% \definefontfeature +% [default-none] +% [script=latn,language=dflt,liga=yes,kern=no, tlig=yes,trep=yes] +% +% \startoverlay +% {\vtop{\color[red] {\font\test=name:lmroman12regular*default-node \test \input ward \input zapf \input linden }}} +% {\vtop{\color[green]{\font\test=name:lmroman12regular*default-base \test \input ward \input zapf \input linden }}} +% {\vtop{\color[blue] {\font\test=name:lmroman12regular*default-none \test \input ward \input zapf \input linden }}} +% \stopoverlay +% +% \blank +% +% \startoverlay +% {\vtop{\color[red] {\font\test=name:texgyrepagella*default-node \test \input ward \input zapf \input linden }}} +% {\vtop{\color[green]{\font\test=name:texgyrepagella*default-base \test \input ward \input zapf \input linden }}} +% {\vtop{\color[blue] {\font\test=name:texgyrepagella*default-none \test \input ward \input zapf \input linden }}} +% \stopoverlay +% +% \blank +% +% \startoverlay +% {\vtop{\color[red] {\font\test=name:palatinonovaregular*default-node \test \input ward \input zapf \input linden }}} +% {\vtop{\color[green]{\font\test=name:palatinonovaregular*default-base \test \input ward \input zapf \input linden }}} +% {\vtop{\color[blue] {\font\test=name:palatinonovaregular*default-none \test \input ward \input zapf \input linden }}} +% \stopoverlay +% +% \startoverlay +% {\vtop{\color[red] {\font\test=name:OfficinaSerifBookITC*default-node \test \input ward \input zapf \input linden }}} +% {\vtop{\color[green]{\font\test=name:OfficinaSerifBookITC*default-base \test \input ward \input zapf \input linden }}} +% {\vtop{\color[blue] {\font\test=name:OfficinaSerifBookITC*default-none \test \input ward \input zapf \input linden }}} +% \stopoverlay +% +% \definefontfeature[superdefault][default][compose=yes] +% +% {\font\oeps=name:lmroman10regular*default at 30pt \oeps test \char7683} +% {\font\oeps=name:lmroman10regular*superdefault at 30pt \oeps test \char7683} + +\permanent\tolerant\protected\def\definefontfeature[#featureset]#spacer[#parent]#spacer[#settings]% + {\clf_definefontfeature{#featureset}{#parent}{#settings}} + +\permanent\tolerant\protected\def\adaptfontfeature[#pattern]#spacer[#settings]% + {\clf_adaptfontfeature{#pattern}{#settings}} + +\permanent\protected\def\fontfeatureslist[#name]#spacer[#separator]% todo: arg voor type + {\clf_featurelist{#name}{\detokenize{#separator}}} + +\attribute\zerocount\attributeunsetvalue + +\glyphdatafield\zerocount + +\let\font_dynamic_value\glyphdatafield + +% beware: these are global features on top of existing font features + +\let\currentfeature \s!current +\let\m_font_feature_list \s!current +\let\m_font_feature_asked\empty + +\newconstant\c_font_feature_state + +% hashing at this end is slower + +\permanent\tolerant\protected\def\addfeature [#1]#;#2{\edef\m_font_feature_asked{#1#2}\font_feature_add} +\permanent\tolerant\protected\def\subtractfeature [#1]#;#2{\edef\m_font_feature_asked{#1#2}\font_feature_subtract} +\permanent\tolerant\protected\def\replacefeature [#1]#;#2{\edef\m_font_feature_asked{#1#2}\font_feature_replace} +\permanent\tolerant\protected\def\resetandaddfeature[#1]#;#2{\edef\m_font_feature_asked{#1#2}\font_feature_reset_add} +\permanent\tolerant\protected\def\feature [#1]#;#2{\begincsname\??featureshortcut##1#2\endcsname{#1#2}} + +% for old times sake + +\permanent\protected\def\doaddfeature #1{\edef\m_font_feature_asked{#1}\font_feature_add} +\permanent\protected\def\dosubtractfeature #1{\edef\m_font_feature_asked{#1}\font_feature_subtract} +\permanent\protected\def\doreplacefeature #1{\edef\m_font_feature_asked{#1}\font_feature_replace} +\permanent\protected\def\doresetandaddfeature#1{\edef\m_font_feature_asked{#1}\font_feature_reset_add} + +\protected\def\font_feature_add + {\ifnum\c_font_feature_state=\plusone + \ifx\m_font_feature_asked\currentfeature\else + \font_feature_add_indeed + \fi + \else + \font_feature_add_indeed + \fi} + +\protected\def\font_feature_add_indeed + {\clf_addfeature{\m_font_feature_list}{\m_font_feature_asked}% + \edef\m_font_feature_list{\m_font_feature_list+\m_font_feature_asked}% also + at the lua end + \c_font_feature_state\plusone + \let\currentfeature\m_font_feature_asked} + +\protected\def\font_feature_subtract + {\ifnum\c_font_feature_state=\minusone + \ifx\m_font_feature_asked\currentfeature\else + \font_feature_subtract_indeed + \fi + \else + \font_feature_subtract_indeed + \fi} + +\protected\def\font_feature_subtract_indeed + {\clf_subtractfeature{\m_font_feature_list}{\m_font_feature_asked}% + \edef\m_font_feature_list{\m_font_feature_list-\m_font_feature_asked}% also - at the lua end + \c_font_feature_state\minusone + \let\currentfeature\m_font_feature_asked} + +\protected\def\font_feature_replace + {\ifnum\c_font_feature_state=\zerocount + \ifx\m_font_feature_asked\currentfeature\else + \font_feature_replace_indeed + \fi + \else + \font_feature_replace_indeed + \fi} + +\protected\def\font_feature_replace_indeed + {\clf_replacefeature{\m_font_feature_list}{\m_font_feature_asked}% + \edef\m_font_feature_list{\m_font_feature_list=\m_font_feature_asked}% also = at the lua end + \c_font_feature_state\zerocount + \let\currentfeature\m_font_feature_asked} + +\protected\def\resetfeature + {\ifx\currentfeature\s!current \else + \font_feature_reset_indeed + \fi} + +\protected\def\font_feature_reset_indeed + {\let\m_font_feature_asked\empty + \let\currentfeature \s!current + \let\m_font_feature_list \s!current + \clf_resetfeature} + +\protected\def\revivefeature + {\ifx\currentfeature\s!current \else + \font_feature_revive_indeed + \fi} + +\protected\def\font_feature_revive_indeed + {\clf_revivefeature{\m_font_feature_list}} + +\protected\def\font_feature_reset_add + {\ifnum\c_font_feature_state=\plusone + \ifx\m_font_feature_asked\currentfeature\else + \font_feature_reset_add_indeed + \fi + \else + \font_feature_reset_add_indeed + \fi} + +\protected\def\font_feature_reset_add_indeed + {\clf_addfeature{\s!current}{\m_font_feature_asked}% + \edef\m_font_feature_list{\s!current+\m_font_feature_asked}% also + at the lua end + \c_font_feature_state\plusone + \let\currentfeature\m_font_feature_asked} + +\installcorenamespace{featureshortcut} + +\letvalue{\??featureshortcut +}\addfeature +\letvalue{\??featureshortcut -}\subtractfeature +\letvalue{\??featureshortcut =}\replacefeature +\letvalue{\??featureshortcut !}\resetandaddfeature +\letvalue{\??featureshortcut >}\revivefeature +\letvalue{\??featureshortcut <}\resetfeature + +\letvalue{\??featureshortcut\v!more }\addfeature % add set to previous set and combine with font set +\letvalue{\??featureshortcut\v!less }\subtractfeature % subtract set from previous set and combine with font set +\letvalue{\??featureshortcut\v!new }\replacefeature % replace font set +\letvalue{\??featureshortcut\v!reset }\resetfeature % forget sets and revert to font set +\letvalue{\??featureshortcut\v!default}\revivefeature % make sure the current set is used on top of the font set +\letvalue{\??featureshortcut\v!old }\revivefeature +\letvalue{\??featureshortcut\v!local }\resetandaddfeature +\letvalue{\??featureshortcut\s!unknown}\empty + +% experimental bonus: + +% \protected\def\addfflanguage +% {\ifnum\c_font_feature_state=\plusone +% \ifx\currentlanguage\currentfeature\else +% \font_feature_add_language_indeed +% \fi +% \else +% \font_feature_add_language_indeed +% \fi} +% +% \protected\def\font_feature_add_language_indeed +% {\clf_addfeature{\m_font_feature_list}{\currentlanguage}% +% \edef\m_font_feature_list{\m_font_feature_list+\currentlanguage}% also + at the lua end +% \c_font_feature_state\plusone +% \let\currentfeature\currentlanguage} +% +% some 3% slower: + +% \protected\def\addfflanguage +% {\let\m_font_feature_asked\currentlanguage +% \font_feature_add} + +\let\m_font_feature_language\currentlanguage + +\permanent\protected\def\addfflanguage + {\ifx\currentlanguage\m_font_feature_language\else + \let\m_font_feature_language\currentlanguage + \let\m_font_feature_asked \currentlanguage + \font_feature_add + \fi} + +% just for old times sake: + +\permanent\protected\def\featureattribute#feature% + {\clf_featureattribute{#feature}} + +\permanent\protected\def\setfontfeature#feature% + {\edef\currentfeature{#feature}% + \let\m_font_feature_list\currentfeature + \clf_setfontfeature{\currentfeature}} + +\let\resetfontfeature\resetfeature + +% these are obsolete (don't use them any longer) + +% \let\addfontfeaturetoset \font_feature_add_nop +% \let\subtractfontfeaturefromset \font_feature_subtract_nop +% \let\addfontfeaturetofont \font_feature_add_nop +% \let\subtractfontfeaturefromfont\font_feature_subtract_nop + +% also old, maybe some day a comptability module + +\let\setff\setfontfeature +\let\addfs\doaddfeature +\let\subfs\dosubtractfeature +\let\addff\doaddfeature +\let\subff\dosubtractfeature + +%D \macros +%D {os} +%D +%D In good old \TEX, the old style numerals were often taken +%D from the math fonts. No longer. + +\definefontfeature + [just-os] + [mode=node,onum=yes] + +%frozen\protected\def\sc{\setfontfeature{smallcaps}} +\permanent\protected\def\os{\setfontfeature{just-os}} + +% \doifelsecurrentfonthasfeature{smcp}{YES}{NO} +% \doifelsecurrentfonthasfeature{crap}{YES}{NO} +% \doifelsecurrentfonthasfeature{kern}{YES}{NO} + +\permanent\def\doifelsecurrentfonthasfeature#feature{\clf_doifelsecurrentfonthasfeature{#feature}} % expandable +\permanent\def\doifelsefontfeature #feature{\clf_doifelsefontfeature {#feature}} % expandable +\permanent\def\doifunknownfontfeature #feature{\clf_doifunknownfontfeature {#feature}} % expandable + +\let\doifcurrentfonthasfeatureelse\doifelsecurrentfonthasfeature +\let\doiffontfeatureelse \doifelsefontfeature + +% new: + +\clf_registerlanguagefeatures + +% also new + +\permanent\protected\def\useaddfontfeatureparameter#namespace% faster local variant + {\edef\m_font_feature_asked{#namespace\c!features}% + \ifx\m_font_feature_asked\empty\else + \font_feature_add + \fi} + +% let's put this here: + +\permanent\protected\def\slashedzero + {\dontleavehmode + \begingroup + %\addff{zero} + \doaddfeature{zero}% + 0% + \endgroup} + +% not nice but maybe handy + +% \starttyping +% \blockligatures[fi,ff] \blockligatures[fl] +% +% \definefontfeature[default:b][default][blockligatures=yes] +% +% \setupbodyfont[pagella] \showfontkerns +% +% \definedfont[Serif*default:b] +% +% \startTEXpage[offset=1em] +% fi ff fl +% \stopTEXpage +% \stoptyping + +\permanent\protected\def\blockligatures[#1]{\clf_blockligatures{#1}} + +\protect \endinput diff --git a/tex/context/base/mkiv/font-fil.mklx b/tex/context/base/mkiv/font-fil.mklx index 3bc5d8c26..7f08a9348 100644 --- a/tex/context/base/mkiv/font-fil.mklx +++ b/tex/context/base/mkiv/font-fil.mklx @@ -41,26 +41,22 @@ % % \setupbodyfont[palatino] -\unexpanded\def\startfontclass - {\dosingleempty\font_basics_start_font_class} - -\def\font_basics_start_font_class[#class]% +\permanent\protected\tolerant\protected\def\startfontclass[#class]% {\push_macro_fontclass \doifelse{#class}\v!each {\let\fontclass\empty} {\doifsomething{#class}{\def\fontclass{#class}}}} -\unexpanded\def\stopfontclass +\permanent\protected\def\stopfontclass {\pop_macro_fontclass} -\def\classfont#class#name{#class#name} % \definefont[whatever][\classfont{xx}{yy} at 10pt] +\permanent\def\classfont#class#name{#class#name} % \definefont[whatever][\classfont{xx}{yy} at 10pt] %D \macros %D {definefontsynonym, doifelsefontsynonym, %D expandfontsynonym, truefontname, truefontdata} %D -%D While looking for fonts, fontsynonyms are used for accessing -%D the files! +%D While looking for fonts, fontsynonyms are used for accessing the files! %D %D \starttyping %D \definefontsynonym[Serif][Lucida-Bright] @@ -75,7 +71,7 @@ \def \defaultfontfile{\truefontname{Normal}} % was cmtt10, but that one is gone \edef\nullfontname {\fontname\nullfont} -\unexpanded\def\definefontsynonym[#name]#crap[#file]% +\permanent\protected\def\definefontsynonym[#name]#spacer[#file]% {\edef\m_font_name{#name}% \edef\m_font_file{#file}% \ifempty\fontclass @@ -84,15 +80,15 @@ \expandafter\font_basics_define_font_synonym_yes \fi} -\unexpanded\def\font_basics_define_font_synonym_nop +\protected\def\font_basics_define_font_synonym_nop {\expandafter\let\csname\??fontfile\m_font_name\endcsname\m_font_file \doifelsenextoptionalcs\font_basics_define_font_synonym_nop_opt\font_basics_define_font_synonym_nop_nil} -\unexpanded\def\font_basics_define_font_synonym_yes +\protected\def\font_basics_define_font_synonym_yes {\expandafter\let\csname\??fontfile\fontclass\m_font_name\endcsname\m_font_file \doifelsenextoptionalcs\font_basics_define_font_synonym_yes_opt\font_basics_define_font_synonym_yes_nil} -\unexpanded\def\edefinefontsynonym[#name]#ignore[#file]% +\protected\def\edefinefontsynonym[#name]#spacer[#file]% {\edef\m_font_name{#name}% \edef\m_font_file{#file}% \ifempty\fontclass @@ -101,55 +97,22 @@ \expandafter\font_basics_define_font_synonym_yes_expanded \fi} -\unexpanded\def\font_basics_define_font_synonym_nop_expanded#ignore[#spec]% +\protected\def\font_basics_define_font_synonym_nop_expanded#ignore[#spec]% {\expandafter\let\csname\??fontfile\m_font_name\endcsname\m_font_file \normalexpanded{\font_basics_define_font_synonym_nop_opt[#spec]}} -\unexpanded\def\font_basics_define_font_synonym_yes_expanded#ignore[#spec]% +\protected\def\font_basics_define_font_synonym_yes_expanded#ignore[#spec]% {\expandafter\let\csname\??fontfile\fontclass\m_font_name\endcsname\m_font_file \normalexpanded{\font_basics_define_font_synonym_yes_opt[#spec]}} -% \unexpanded\def\font_basics_define_font_synonym_nop_opt[#specification]% -% {\let\p_features \undefined -% \let\p_fallbacks \undefined -% \let\p_goodies \undefined -% \let\p_designsize\undefined -% \expandafter\font_basics_get_font_parameter_nop#specification,]=,} -% -% \unexpanded\def\font_basics_define_font_synonym_yes_opt[#specification]% -% {\let\p_features \undefined -% \let\p_fallbacks \undefined -% \let\p_goodies \undefined -% \let\p_designsize\undefined -% \expandafter\font_basics_get_font_parameter_yes#specification,]=,} -% -% % todo: check if we can use \edef but then we need to protect \mathsizesuffix .. in fact that -% % can be default then: \let\mathsizesuffix\relax .. i need to play with it first -% -% \def\font_basics_get_font_parameter_nop#key=#value,% -% {\if]#key% -% \font_basics_get_font_parameter_nop_finish -% \else -% \expandafter\normaldef\csname p_#key\endcsname{#value}% % no edef as we need to keep \mathsizesuffix -% \expandafter\font_basics_get_font_parameter_nop -% \fi} -% -% \def\font_basics_get_font_parameter_yes#key=#value,% -% {\if]#key% -% \font_basics_get_font_parameter_yes_finish -% \else -% \expandafter\normaldef\csname p_#key\endcsname{#value}% % no edef as we need to keep \mathsizesuffix -% \expandafter\font_basics_get_font_parameter_yes -% \fi} - -\unexpanded\def\font_basics_define_font_synonym_nop_opt[#specification]% +\protected\def\font_basics_define_font_synonym_nop_opt[#specification]% {\let\p_features \undefined \let\p_fallbacks \undefined \let\p_goodies \undefined \let\p_designsize\undefined \expandafter\font_basics_get_font_parameter_nop#specification,\ignorearguments} -\unexpanded\def\font_basics_define_font_synonym_yes_opt[#specification]% +\protected\def\font_basics_define_font_synonym_yes_opt[#specification]% {\let\p_features \undefined \let\p_fallbacks \undefined \let\p_goodies \undefined @@ -213,73 +176,23 @@ \expandafter\glet\csname\??fontfile\fontclass\m_font_name\s!designsize\endcsname\p_designsize} %\definefontsynonym [KopFont] [\fontclassname{officina}{SerifBold}] -% %\defineclassfontsynonym [KopFont] [officina] [SerifBold] - -\unexpanded\def\defineclassfontsynonym - {\dotripleargument\font_basics_define_class_font_synonym} - %\definefontsynonym[#tag][\fontclassname{#class}{#fileortag}]} -\def\font_basics_define_class_font_synonym[#tag][#class][#fileortag]% needs testing +\permanent\tolerant\protected\def\defineclassfontsynonym[#tag]#spacer[#class]#spacer[#fileortag]% needs testing {\expandafter\normaldef\csname\??fontfile\fontclass#tag\endcsname{\fontclassname{#class}{#fileortag}}% \font_basics_define_font_synonym_yes_nil} -\let\definefontfile\definefontsynonym % dedicated to Taco Hoekwater - -\unexpanded\def\setupfontsynonym - {\dodoubleempty\dosetupfontsynonym} +\aliased\let\definefontfile\definefontsynonym % dedicated to Taco Hoekwater -\def\dosetupfontsynonym[#name][#settings]% not yet supported, will do when needed +\permanent\tolerant\protected\def\setupfontsynonym[#name]#spacer[#settings]% not yet supported, will do when needed {} % todo: replace * by ... less messy with features -% % no \ifempty here as #1 can be empty -% -% \def\truefontname#name% -% {\expandafter\font_helpers_true_fontname#name*\empty*\relax} -% -% \def\font_helpers_true_fontname#name*#first#rest*#crap\relax -% {\ifcsname\??fontfile\fontclass#name\endcsname -% \ifx#first\empty -% \expandafter\truefontname\lastnamedcs -% \else -% \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest% -% \fi -% \orelse\ifcsname\??fontfile\defaultfontclass#name\endcsname -% \ifx#first\empty -% \expandafter\truefontname\lastnamedcs -% \else -% \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest% -% \fi -% \orelse\ifcsname\??fontfile#name\endcsname -% \ifx#first\empty -% \expandafter\truefontname\lastnamedcs -% \else -% \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest% -% \fi -% \else -% #name\ifempty#first\else*#first#rest\fi -% \fi} -% -% \def\font_helpers_true_fontname_check#name% -% {\expandafter\font_helpers_true_fontname_check_indeed#name*\relax} -% -% \def\font_helpers_true_fontname_check_indeed#name*#crap\relax -% {\ifcsname\??fontfile\fontclass#name\endcsname -% \expandafter\font_helpers_true_fontname_check\lastnamedcs -% \orelse\ifcsname\??fontfile\defaultfontclass#name\endcsname -% \expandafter\font_helpers_true_fontname_check\lastnamedcs -% \orelse\ifcsname\??fontfile#name\endcsname -% \expandafter\font_helpers_true_fontname_check\lastnamedcs -% \else -% #name% -% \fi} - % no \ifempty here as #1 can be empty -\def\truefontname#name% +\permanent\def\truefontname#name% {\expandafter\font_helpers_true_fontname#name*\empty*\relax} \def\font_helpers_true_fontname#name*#first#rest*#ignore\relax @@ -320,31 +233,15 @@ \fi} % ok when the last lookup is not stripped .. we need to be able to define synonyms for symbols -% -% \def\truefontname#name% -% %{\normalexpanded{\noexpand\font_helpers_true_fontname{\clf_truefontname{#name}}}} -% {\expandafter\expandafter\expandafter\font_helpers_true_fontname\expandafter\expandafter\expandafter{\clf_truefontname{#name}}} -% -% \def\font_helpers_true_fontname#name% -% {\ifcsname\??fontfile\fontclass#name\endcsname -% \expandafter\font_helpers_true_fontname\expandafter{\lastnamedcs}% -% \orelse\ifcsname\??fontfile\defaultfontclass#name\endcsname -% \expandafter\font_helpers_true_fontname\expandafter{\lastnamedcs}% -% \orelse\ifcsname\??fontfile#name\endcsname -% \expandafter\font_helpers_true_fontname\expandafter{\lastnamedcs}% -% \else -% % \clf_truefontname{#name}% -% #name% so the last one can have features ! -% \fi} - -\def\expandfontsynonym#command#name% one level expansion + +\permanent\def\expandfontsynonym#command#name% one level expansion {\ifcsname\??fontfile\fontclass#name\endcsname \expandafter\normaldef\expandafter#command\expandafter{\lastnamedcs}% \orelse\ifcsname\??fontfile\defaultfontclass#2\endcsname \expandafter\normaldef\expandafter#command\expandafter{\lastnamedcs}% \fi} -\def\doifelsefontsynonym#name% +\permanent\def\doifelsefontsynonym#name% {\ifcsname\??fontfile\fontclass#name\endcsname \expandafter\firstoftwoarguments \orelse\ifcsname\??fontfile\defaultfontclass#name\endcsname @@ -353,14 +250,14 @@ \expandafter\secondoftwoarguments \fi} -\let\doiffontsynonymelse\doifelsefontsynonym +\aliased\let\doiffontsynonymelse\doifelsefontsynonym %D \macros %D {tracedfontname} %D %D A goody: -\def\tracedfontname#name% +\permanent\def\tracedfontname#name% {#name\ifcsname\??fontfile\fontclass#name\endcsname %\expandafter\tracedfontname\csname\??fontfile\fontclass#name\endcsname \expandafter\tracedfontname\lastnamedcs @@ -379,7 +276,7 @@ \let\fontclass \empty \let\defaultfontclass\empty -\def\fontclassname#class#name% tricky ... no lastnamedcs here due to nesting +\permanent\def\fontclassname#class#name% tricky ... no lastnamedcs here due to nesting {\ifcsname\??fontfile#class#name\endcsname \fontclassname{#class}{\csname\??fontfile#class#name\endcsname}% \orelse\ifcsname\??fontfile#name\endcsname @@ -394,8 +291,8 @@ %D They can inherit them. % Why these expanded and rscale not ... maybe not worth the trouble (delayed -% expansion actually would be better i.e. macros in feature specs). Test -% without pre-expansion. +% expansion actually would be better i.e. macros in feature specs). Test without +% pre-expansion. \def\font_helpers_update_font_class_parameters {\edef\m_font_class_direction {\begincsname\??fontclass\fontclass\fontstyle\s!direction \endcsname}% @@ -473,7 +370,7 @@ % we can pack them (don't use \setxvalue!) -\unexpanded\def\savefontclassparameters#style#rscale#features#fallbacks#goodies#designsize#direction% +\permanent\protected\def\savefontclassparameters#style#rscale#features#fallbacks#goodies#designsize#direction% {\letgvalue{\??fontclass\fontclass#style\s!rscale }#rscale% \letgvalue{\??fontclass\fontclass#style\s!features }#features% \letgvalue{\??fontclass\fontclass#style\s!fallbacks }#fallbacks% diff --git a/tex/context/base/mkiv/font-ini.mklx b/tex/context/base/mkiv/font-ini.mklx index 882f879a2..a9e01e7ec 100644 --- a/tex/context/base/mkiv/font-ini.mklx +++ b/tex/context/base/mkiv/font-ini.mklx @@ -12,6 +12,8 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. +% todo: frozen tolerant iftok etc + % todo: < 3 pt => 3pt % todo: check where more class usage % todo: split font-nam (style/alternative/size) @@ -326,12 +328,12 @@ \newtoks\t_font_tracers_definitions -\unexpanded\def\tracefontdefinitions +\permanent\protected\def\tracefontdefinitions {\the\t_font_tracers_definitions} %D Some housekeeping macros: -\unexpanded\def\setfontparameters +\permanent\protected\def\setfontparameters {\setfalse\c_font_synchronize \the\everybodyfont \settrue\c_font_synchronize} @@ -340,16 +342,22 @@ \installmacrostack\savedfont -\unexpanded\def\savefont - {\edef\savedfont{\the\font}% gives \csname +% \fontname\font : string +% \fontid \font : integer +% \the \font : token (reference to font) +% \fontspecifiedname : string +% \the \fontspecifiedsize : dimension + +\permanent\protected\def\savefont + {\edef\savedfont{\the\font}% \push_macro_savedfont} -\unexpanded\def\restorefont +\permanent\protected\def\restorefont {\pop_macro_savedfont \savedfont} -\unexpanded\def\pushcurrentfont - {\edef\popcurrentfont +\permanent\protected\def\pushcurrentfont + {\enforced\permanent\protected\edef\popcurrentfont {\def\noexpand\fontbody {\fontbody}% \def\noexpand\fontstyle {\fontstyle}% \def\noexpand\fontalternative{\fontalternative}% @@ -361,24 +369,20 @@ \let\thedefinedfont\relax % not to be confused with \everydefinefont -\unexpanded\def\definedfont - {\doifelsenextoptionalcs\font_basics_defined_font_yes\font_basics_defined_font_nop} - -\def\font_basics_defined_font_yes[#specification]% - {\c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly - \font_basics_define_font_without_parameters{thedefinedfont}{#specification}% - \thedefinedfont - \the\everydefinedfont} - -\def\font_basics_defined_font_nop - {\c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly +\permanent\tolerant\protected\def\definedfont[#specification]% + {\ifarguments + \c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly + \or + \c_font_feature_inheritance_mode\c_font_feature_inheritance_fontonly + \font_basics_define_font_without_parameters{thedefinedfont}{#specification}% + \fi \thedefinedfont \the\everydefinedfont} %D \macros{startfont} -\unexpanded\def\startfont{\begingroup\definedfont} -\unexpanded\def\stopfont {\endgroup} +\permanent\protected\def\startfont{\begingroup\definedfont} +\permanent\protected\def\stopfont {\endgroup} %D \macros %D {everybodyfont,everyglobalbodyfont} @@ -411,7 +415,7 @@ \installcorenamespace{fontnormalizedbody} -\def\normalizebodyfontsize#macro#body% +\protected\def\normalizebodyfontsize#macro#body% {\expandafter\let\expandafter#macro\csname\??fontnormalizedbody\number\dimexpr#body\endcsname \ifx#macro\relax \normalizebodyfontsize_indeed#macro{#body}% @@ -424,9 +428,9 @@ \def\thenormalizedbodyfontsize#body% {\clf_nbfs\dimexpr#body\relax} -\edef\normalizedglobalbodyfontsize{\thenormalizedbodyfontsize\bodyfontsize} -\edef\normalizedlocalbodyfontsize {\thenormalizedbodyfontsize\bodyfontsize} -\edef\normalizedbodyfontsize {\thenormalizedbodyfontsize\bodyfontsize} +\protected\edef\normalizedglobalbodyfontsize{\thenormalizedbodyfontsize\bodyfontsize} +\protected\edef\normalizedlocalbodyfontsize {\thenormalizedbodyfontsize\bodyfontsize} +\protected\edef\normalizedbodyfontsize {\thenormalizedbodyfontsize\bodyfontsize} %D \macros %D {mapfontsize} @@ -457,11 +461,8 @@ \installcorenamespace{mappedfontsize} -\unexpanded\def\mapfontsize - {\dodoubleargument\font_basics_map_fontsize} - -\def\font_basics_map_fontsize[#from][#to]% - {\setvalue{\??mappedfontsize\the\dimexpr#from\relax}{#to}} +\permanent\tolerant\protected\def\mapfontsize[#from]#spacer[#to]% + {\ifarguments\or\or\setvalue{\??mappedfontsize\the\dimexpr#from\relax}{#to}\fi} \def\font_basics_set_mapped_fontsize#from% {\ifcsname\??mappedfontsize\the\dimexpr#from\relax\endcsname @@ -555,10 +556,7 @@ \def\font_helpers_register_size #size{\expandafter\let\csname\??fontsizeknown #size\endcsname\empty} \def\font_helpers_register_alternative#alternative{\expandafter\let\csname\??fontalternativeknown#alternative\endcsname\empty} -\unexpanded\def\definefontstyle - {\dodoubleargument\font_basics_define_fontstyle} - -\def\font_basics_define_fontstyle[#commands][#style]% style: rm ss tt ... +\permanent\protected\def\definefontstyle[#commands]#spacer[#style]% style: rm ss tt ... {\ifcsname\??fontstyleknown#style\endcsname \else % can be delayed till used (cg, hw) \font_helpers_register_style{#style}% \toksapp\t_font_style_commands{\m_font_style_command{#style}}% @@ -569,21 +567,21 @@ {\setvalue{\??fontshortstyle#command}{#style}% \setvalue{\??fontstyle #command}{\csname#style\endcsname}} -\unexpanded\def\definefontsize[#size]% +\permanent\protected\def\definefontsize[#size]% {\ifcsname\??fontsizeknown#size\endcsname \else \font_helpers_register_size{#size}% \toksapp\t_font_size_commands{\m_font_size_command{#size}}% \fi \font_helpers_check_fontname_combinations} -\unexpanded\def\definefontalternative[#alternative]% +\permanent\protected\def\definefontalternative[#alternative]% {\ifcsname\??fontalternativeknown#alternative\endcsname \else \font_helpers_register_alternative{#alternative}% \toksapp\t_font_alternative_commands{\m_font_alternative_command{#alternative}}% \fi \font_helpers_check_fontname_combinations} -\unexpanded\def\font_helpers_check_fontname_combinations % we need to split math and text here ... todo (math only has mr and mb) +\protected\def\font_helpers_check_fontname_combinations % we need to split math and text here ... todo (math only has mr and mb) {\font_helpers_process_style_list\font_helpers_check_fontname_combinations_s} \def\font_helpers_check_fontname_combinations_s#style% @@ -692,7 +690,7 @@ \newconditional\c_font_body_scale \newfraction \f_font_body_scale -\unexpanded\def\font_helpers_low_level_define#specification#csname% +\protected\def\font_helpers_low_level_define#specification#csname% {% we can now set more at the lua end \glet\somefontname\defaultfontfile \let\somefontsize\empty @@ -895,7 +893,7 @@ %D %D The implementation looks as follows: -\unexpanded\def\definefont % [name][spec][1.6 | line=10pt | setup_id] +\protected\def\definefont % [name][spec][1.6 | line=10pt | setup_id] {\dotripleempty\font_basics_define_font} \def\font_basics_define_font @@ -925,22 +923,15 @@ %D Beware, in the frozen variants no settings are supported yet, but that might happen %D some day. -\unexpanded\def\definefrozenfont - {\dotripleempty\font_basics_define_frozen_font} - -% \def\font_basics_define_frozen_font[#name][#specification][#settings]% -% {\begingroup -% \font_basics_define_font[#name][#specification][#settings]% -% \csname#name\endcsname -% \expandafter\expandafter\expandafter\endgroup\expandafter\let\csname#name\endcsname\lastrawfontcall} - -\def\font_basics_define_frozen_font[#name][#specification][#settings]% - {\begingroup - \font_basics_define_font[#name][#specification][#settings]% - \csname#name\endcsname - \glet\lastglobalrawfontcall\lastrawfontcall - \endgroup - \expandafter\let\csname#name\endcsname\lastglobalrawfontcall} +\permanent\tolerant\protected\def\definefrozenfont[#name]#spacer[#specification]#spacer[#settings]% + {\ifparameter#name\or + \begingroup + \font_basics_define_font[#name][#specification][#settings]% + \csname#name\endcsname + \glet\lastglobalrawfontcall\lastrawfontcall + \endgroup + \expandafter\let\csname#name\endcsname\lastglobalrawfontcall + \fi} %D The instance namespace protection makes the switch local so that we can redefine a %D logical name and/or change the size in between. @@ -976,7 +967,7 @@ \the\everyfontswitch \let\v_font_identifier_basic\v_font_identifier_basic_saved} -\unexpanded\def\font_helpers_trigger#identifier% make a traced variant +\protected\def\font_helpers_trigger#identifier% make a traced variant {\edef\lastfontidentifier{#identifier}% \ifcsname\v_font_identifier_class\endcsname % \writestatus{fonts}{trigger: reusing \v_font_identifier_class}% @@ -1192,11 +1183,6 @@ \lastnamedcs\dimexpr#body\relax\fi % factor \relax} -\unexpanded\def\definebodyfontenvironment - {\dotripleempty\font_basics_define_body_font_environment} - -\let\setupbodyfontenvironment\definebodyfontenvironment - \installcorenamespace{fontenvironmentknown} \def\font_helpers_register_environment#class#body% @@ -1205,6 +1191,9 @@ \newmacro\m_font_body \newmacro\m_font_body_normalized +\permanent\protected\def\definebodyfontenvironment % todo + {\dotripleempty\font_basics_define_body_font_environment} + \def\font_basics_define_body_font_environment {\ifthirdargument \singleexpandafter\font_basics_define_body_font_environment_class @@ -1214,11 +1203,13 @@ \expandafter\font_basics_define_body_font_environment_unset \fi} +\let\setupbodyfontenvironment\definebodyfontenvironment + %D First we handle the class specific case. Beware: you can change values before %D a bodyfont is loaded but changing them afterwards can be sort of tricky as %D values are not consulted afterwards. -\def\processbodyfontenvironmentlist#1% no \unexpanded as then we cannot use it in alignments +\def\processbodyfontenvironmentlist#1% no \protected as then we cannot use it in alignments (still?) {\clf_processbodyfontsizes{\strippedcsname#1}} \def\bodyfontenvironmentlist @@ -1371,17 +1362,22 @@ % [class] [10pt,11pt] [settings] == [name] [rm] [settings] % [class] [10pt,11pt] [name] == [10pt,11pt] [rm] [name] -\unexpanded\def\definebodyfont - {\doquadrupleempty\font_basics_define_body_font} - -\def\font_basics_define_body_font[#1][#2][#3][#4]% - {\iffourthargument +\permanent\tolerant\protected\def\definebodyfont[#1]#*[#2]#*[#3]#*[#4]% + {\ifarguments + \or + \font_basics_define_body_font[#1][\s!rm][]% + \or + \font_basics_define_body_font[#1][\s!rm][#2]% + \or + \font_basics_define_body_font[#1][#2][#3]% + \or \processcommacommand[#1]{\font_basics_define_body_font_class_given[#2][#3][#4]}% - \else - \font_basics_define_body_font_class_known[#1][#2][#3]% \fi} -\def\font_basics_define_body_font_class_given[#1][#2][#3]#4% +\protected\def\font_basics_define_body_font[#whatever]% + {\doifelsenumber{#whatever}\font_basics_define_body_font_body\font_basics_define_body_font_name[#whatever]} + +\protected\def\font_basics_define_body_font_class_given[#1][#2][#3]#4% {\push_macro_fontclass \doifelse{#4}\s!default {\let\fontclass\empty} @@ -1389,28 +1385,7 @@ \definebodyfont[#1][#2][#3]% \pop_macro_fontclass} -\def\font_basics_define_body_font_class_known - {\ifthirdargument - \singleexpandafter\font_basics_define_body_font_a - \orelse\ifsecondargument - \expandafter\font_basics_define_body_font_b - \else - \expandafter\font_basics_define_body_font_c - \fi} - -\unexpanded\def\font_basics_define_body_font_b[#whatever][#specification][#dummy]% body|identifier defs|identifier - {\font_basics_define_body_font_a[#whatever][\s!rm][#specification]} - -\unexpanded\def\font_basics_define_body_font_c[#whatever][#dummya][#dummyb]% body|identifier - {\font_basics_define_body_font_a[#whatever][\s!rm][]} - -\unexpanded\def\font_basics_define_body_font_a[#whatever]% - {\doifelsenumber{#whatever}% - \font_basics_define_body_font_body - \font_basics_define_body_font_name - [#whatever]} - -\unexpanded\def\font_basics_define_body_font_body[#body][#style][#specification]% +\protected\def\font_basics_define_body_font_body[#body][#style][#specification]% {\ifcondition\validassignment{#specification}% \expandafter\font_basics_define_body_font_body_assignment \else @@ -1418,7 +1393,7 @@ \fi [#body][#style][#specification]}% -\unexpanded\def\font_basics_define_body_font_name[#name][#style][#specification]% +\protected\def\font_basics_define_body_font_name[#name][#style][#specification]% {\ifcondition\validassignment{#specification}% \expandafter\font_basics_define_body_font_name_assignment \else @@ -1426,41 +1401,41 @@ \fi [#name][#style][#specification]}% -\unexpanded\def\font_basics_define_body_font_body_assignment[#bodylist][#stylelist][#assignments]% +\protected\def\font_basics_define_body_font_body_assignment[#bodylist][#stylelist][#assignments]% {\processcommalist[#bodylist]{\font_basics_define_body_font_body_assignment_a{#stylelist}{#assignments}}} -\unexpanded\def\font_basics_define_body_font_body_assignment_a#stylelist#assignments#body% +\protected\def\font_basics_define_body_font_body_assignment_a#stylelist#assignments#body% {\normalizebodyfontsize\m_font_asked_body{#body}% % normally we define quite a lot in advance, i.e global defs \font_helpers_check_bodyfont_environment\m_font_asked_body\m_font_asked_body % !! \processcommalist[#stylelist]{\font_basics_define_body_font_body_assignment_b{#assignments}}} -\unexpanded\def\font_basics_define_body_font_body_assignment_b#assignments#style% +\protected\def\font_basics_define_body_font_body_assignment_b#assignments#style% {\edef\m_font_asked_style{#style}% \processcommalist[#assignments]\font_basics_define_body_font_defs} -\unexpanded\def\font_basics_define_body_font_defs +\protected\def\font_basics_define_body_font_defs {\ifempty\fontclass \expandafter\font_basics_define_body_font_defs_nop \else \expandafter\font_basics_define_body_font_defs_yes \fi} -\unexpanded\def\font_basics_define_body_font_defs_yes_normal#assignment% +\protected\def\font_basics_define_body_font_defs_yes_normal#assignment% {\ifx\m_font_asked_style\s!mm \expandafter\font_basics_define_body_font_yes_mm \else \expandafter\font_basics_define_body_font_yes_xx \fi[#assignment]} -\unexpanded\def\font_basics_define_body_font_defs_nop_normal#assignment% +\protected\def\font_basics_define_body_font_defs_nop_normal#assignment% {\ifx\m_font_asked_style\s!mm \expandafter\font_basics_define_body_font_nop_mm \else \expandafter\font_basics_define_body_font_nop_xx \fi[#assignment]} -\unexpanded\def\font_basics_define_body_font_defs_yes_traced#assignment% +\protected\def\font_basics_define_body_font_defs_yes_traced#assignment% {\writestatus\m!fonts{[\fontclass] [\m_font_asked_body] [\m_font_asked_style] [#assignment]}% \ifx\m_font_asked_style\s!mm \expandafter\font_basics_define_body_font_yes_mm @@ -1468,7 +1443,7 @@ \expandafter\font_basics_define_body_font_yes_xx \fi[#assignment]} -\unexpanded\def\font_basics_define_body_font_defs_nop_traced#assignment% +\protected\def\font_basics_define_body_font_defs_nop_traced#assignment% {\writestatus\m!fonts{[\fontclass] [\m_font_asked_body] [\m_font_asked_style] [#assignment]}% \ifx\m_font_asked_style\s!mm \expandafter\font_basics_define_body_font_nop_mm @@ -1488,29 +1463,29 @@ %D the style and the rest is a size, although in practice one will seldom define the %D size directly. We might even drop that as it gives faster code. -\unexpanded\def\font_basics_define_body_font_nop_xx[#one#two#rest=#value]% local +\protected\def\font_basics_define_body_font_nop_xx[#one#two#rest=#value]% local {\ifcsname\m_font_asked_style#one#two#rest\endcsname\else\font_basics_check_fontname_combination\m_font_asked_style{#one#two}{#rest}\fi \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\m_font_asked_style-#one#two-#rest-0\endcsname\undefined - \unexpanded\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-0\endcsname + \protected\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-0\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest}{\noexpand\font_rscale_xx{\m_font_asked_style}}{\m_font_asked_body}{\normalunexpanded{#value}}}% \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\m_font_asked_style-#one#two-#rest-4\endcsname\undefined - \unexpanded\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-4\endcsname + \protected\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-4\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest}{\noexpand\font_rscale_xx{\m_font_asked_style}}{\m_font_asked_body}{\normalunexpanded{#value}}}% \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\m_font_asked_style-#one#two-#rest-5\endcsname\undefined - \unexpanded\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-5\endcsname + \protected\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\m_font_asked_style-#one#two-#rest-5\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest}{\noexpand\font_rscale_xx{\m_font_asked_style}}{\m_font_asked_body}{\normalunexpanded{#value}}}% } -\unexpanded\def\font_basics_define_body_font_yes_xx[#one#two#rest=#value]% global +\protected\def\font_basics_define_body_font_yes_xx[#one#two#rest=#value]% global {\ifcsname\m_font_asked_style#one#two#rest\endcsname\else\font_basics_check_fontname_combination\m_font_asked_style{#one#two}{#rest}\fi \expandafter\glet\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-1\endcsname\undefined - \unexpanded\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-0\endcsname + \protected\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-0\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest-0}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}% \expandafter\glet\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-2\endcsname\undefined - \unexpanded\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-4\endcsname + \protected\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-4\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest-4}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}% \expandafter\glet\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-3\endcsname\undefined - \unexpanded\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-5\endcsname + \protected\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\m_font_asked_style-#one#two-#rest-5\endcsname {\font_helpers_trigger{\m_font_asked_body-\m_font_asked_style-#one#two#rest-5}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}% } @@ -1519,52 +1494,52 @@ %D Here the rest concerns rl or lr so in this case it is not a size specifier but %D a directional one. -\unexpanded\def\font_basics_define_body_font_nop_mm[#one#two#rest=#value]% local +\protected\def\font_basics_define_body_font_nop_mm[#one#two#rest=#value]% local {%\ifcsname\s!mm\endcsname\else\font_basics_check_fontname_combination\s!mm{#one#two}{#rest}\fi \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\s!mm-#one#two#rest-1\endcsname\undefined % \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\s!mm-#one#two#rest-2\endcsname\undefined % \expandafter\let\csname\??fontinstanceclass\m_font_asked_body-\s!mm-#one#two#rest-3\endcsname\undefined - \unexpanded\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\s!mm-#one#two#rest\endcsname + \protected\expandafter\normaledef\csname\??fontinstanceready\m_font_asked_body-\s!mm-#one#two#rest\endcsname {\font_helpers_trigger{\m_font_asked_body-\s!mm-#one#two#rest}{\noexpand\font_rscale_mm}{\m_font_asked_body}{\normalunexpanded{#value}}}% } % \writestatus{fonts}{define \m_asked_style\space nop: \expandafter\meaning\csname\m_font_asked_body\m_font_asked_style#one#two#rest\endcsname}% -\unexpanded\def\font_basics_define_body_font_yes_mm[#one#two#rest=#value]% global +\protected\def\font_basics_define_body_font_yes_mm[#one#two#rest=#value]% global {%\ifcsname\s!mm\endcsname\else\font_basics_check_fontname_combination\s!mm{#one#two}{#rest}\fi \expandafter\glet\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\s!mm-#one#two#rest-1\endcsname\undefined % \expandafter\glet\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\s!mm-#one#two#rest-2\endcsname\undefined % \expandafter\glet\csname\??fontinstanceclass\fontclass-\m_font_asked_body-\s!mm-#one#two#rest-3\endcsname\undefined - \unexpanded\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\s!mm-#one#two#rest\endcsname + \protected\expandafter\normalxdef\csname\??fontinstanceready\fontclass-\m_font_asked_body-\s!mm-#one#two#rest\endcsname {\font_helpers_trigger{\m_font_asked_body-\s!mm-#one#two#rest}{\number\p_font_rscale}{\m_font_asked_body}{\normalunexpanded{#value}}}% } % \writestatus{fonts}{define \m_asked_style\space yes: \expandafter\meaning\csname\fontclass\m_font_asked_body\m_font_asked_style#one#two#rest\endcsname}% -\unexpanded\def\font_basics_define_body_font_body_identifier[#bodylist][#stylelist][#name]% +\protected\def\font_basics_define_body_font_body_identifier[#bodylist][#stylelist][#name]% {\processcommalist[#bodylist]{\font_basics_define_body_font_body_identifier_a{#stylelist}{#name}}} -\unexpanded\def\font_basics_define_body_font_body_identifier_a#stylelist#name#body% +\protected\def\font_basics_define_body_font_body_identifier_a#stylelist#name#body% {\normalizebodyfontsize\m_font_asked_body{#body}% \font_helpers_check_bodyfont_environment\m_font_asked_body\m_font_asked_body % !! \processcommalist[#stylelist]{\font_basics_define_body_font_body_identifier_b{#name}}} -\unexpanded\def\font_basics_define_body_font_body_identifier_b#name#style% +\protected\def\font_basics_define_body_font_body_identifier_b#name#style% {\edef\m_font_asked_style{#style}% %\writestatus\m!fonts{[\fontclass] [\m_font_asked_body] [\m_font_asked_style] => [#name]}% \csname\??fontdefinitions#name:\m_font_asked_style\endcsname} % no checking -\unexpanded\def\font_basics_define_body_font_name_assignment[#name][#stylelist][#assignments]% +\protected\def\font_basics_define_body_font_name_assignment[#name][#stylelist][#assignments]% {\processcommalist[#stylelist]{\font_basics_define_body_font_name_assignment_a{#name}{#assignments}}} -\unexpanded\def\font_basics_define_body_font_name_assignment_a#name#assignments#style% +\protected\def\font_basics_define_body_font_name_assignment_a#name#assignments#style% {%\writestatus\m!fonts{[#name:#style] => [#assignments]}% \setevalue{\??fontdefinitions#name:#style}{\font_basics_define_body_font_default{#assignments}}} -\unexpanded\def\font_basics_define_body_font_name_identifier[#name][#stylelist][#identifier]% +\protected\def\font_basics_define_body_font_name_identifier[#name][#stylelist][#identifier]% {\processcommalist[#stylelist]{\font_basics_define_body_font_name_identifier_a{#name}{#identifier}}} -\unexpanded\def\font_basics_define_body_font_name_identifier_a#name#identifier#style% +\protected\def\font_basics_define_body_font_name_identifier_a#name#identifier#style% {%\writestatus\m!fonts{[#name:#style] => [##identifier:#style]}% \ifcsname\??fontdefinitions#name:#style\endcsname \expandafter\let\csname\??fontdefinitions#name:#style\expandafter\endcsname\csname\??fontdefinitions#identifier:#style\endcsname @@ -1577,7 +1552,7 @@ \newconditional\c_font_defining_unknown \newconditional\c_font_defining_state -\unexpanded\def\font_helpers_define_unknown_font#body% one level only +\protected\def\font_helpers_define_unknown_font#body% one level only {\font_helpers_register_fontbody{#body}% prevents loop, can go \setfalse\c_font_defining_state \font_helpers_process_relative_size_list{\font_helpers_define_unknown_check_sizes{#body}}% @@ -1615,20 +1590,13 @@ \settrue\c_font_defining_state \fi} -% \def\font_helpers_define_unknown_check_relatives#body#relativesize% -% {\ifcsname\??fontbodyknown\csname\??fontenvironments#body#relativesize\endcsname\endcsname \else -% % how \lastnamedcs here -% \expandafter\font_helpers_define_unknown_font\csname\??fontenvironments#body#relativesize\endcsname -% \settrue\c_font_defining_state -% \fi} - \def\font_helpers_define_unknown_check_relatives#body#relativesize% {\ifcsname\??fontbodyknown\csname\??fontenvironments#body#relativesize\endcsname\endcsname \else \expandafter\font_helpers_define_unknown_font\csname\??fontenvironments#body#relativesize\endcsname \settrue\c_font_defining_state \fi} -\unexpanded\def\font_basics_define_body_font_default#assignments% +\protected\def\font_basics_define_body_font_default#assignments% {\font_helpers_check_relative_font_size\m_font_asked_style % still needed here? \ifcsname\m_font_asked_style\endcsname\else \normalexpanded{\definefontstyle[\m_font_asked_style][\m_font_asked_style]}% @@ -1639,7 +1607,7 @@ %D These macros show that quite some definitions take place. Fonts are not loaded %D yet! This means that at format generation time, no font files are present. -\unexpanded\def\font_basics_switch_points#body% +\protected\def\font_basics_switch_points#body% {\ifcsname\??fontbodyknown#body\endcsname \else % we need to check the relative sizes for this body \font_helpers_define_unknown_font{#body}% @@ -1653,7 +1621,7 @@ \showmessage\m!fonts4{#body}% \fi} -\unexpanded\def\font_basics_switch_style#style% +\protected\def\font_basics_switch_style#style% {\ifcsname\??fontstyle#style\endcsname \lastnamedcs \edef\fontstyle{#style}% @@ -1702,7 +1670,7 @@ \newmacro\m_font_keyword -\unexpanded\def\font_helpers_set_font_set_font_option_keyword#method#keyword#message% +\protected\def\font_helpers_set_font_set_font_option_keyword#method#keyword#message% {\edef\m_font_keyword{#keyword}% \ifcsname\??fontenvironments\normalizedbodyfontsize\m_font_keyword\endcsname \edef\m_font_step{\font_bodyfontvariable\m_font_keyword}% @@ -1725,7 +1693,7 @@ \def\font_helpers_set_fontstyle_of_fontclass % will be overloaded later {\let\fontstyle\s!rm} -\unexpanded\def\font_helpers_set_font_set_font_option_body#method#body#message% +\protected\def\font_helpers_set_font_set_font_option_body#method#body#message% {\normalizebodyfontsize\normalizedsetfont{#body}% redundant for some calls \ifcsname\??fontbodyknown\normalizedsetfont\endcsname \else \font_helpers_define_unknown_font\normalizedsetfont @@ -1754,7 +1722,7 @@ \ifdefined\trycurrentfontclass \else - \unexpanded\def\trycurrentfontclass#typeface% + \protected\def\trycurrentfontclass#typeface% {\letvalueempty{\??fontclassnop#typeface}} \fi @@ -1766,7 +1734,7 @@ %D So far for synchronisation. (We can inline the following macros.) -\unexpanded\def\setcurrentfont#body#style#alternative#size% not used +\protected\def\setcurrentfont#body#style#alternative#size% not used {\edef\fontbody {#body}% \edef\fontstyle {#style}% \edef\fontalternative{#alternative}% @@ -1774,7 +1742,7 @@ \font_helpers_check_big_math_synchronization \font_helpers_synchronize_font} -\unexpanded\def\setcurrentfontbody#body% % not used +\protected\def\setcurrentfontbody#body% % not used {\edef\fontbody{#body}% \font_helpers_synchronize_font} @@ -1784,51 +1752,51 @@ \let\font_typescripts_inherit_check\gobbleoneargument % implemented in type-ini \fi -\unexpanded\def\font_helpers_set_current_font_style#style% +\protected\def\font_helpers_set_current_font_style#style% {\edef\fontstyle{#style}% \font_typescripts_inherit_check\fontstyle \ifmmode\mr\fi % otherwise \rm not downward compatible ... not adapted yet \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_set_current_xsize_alternative#xsize#alternative% +\protected\def\font_helpers_set_current_xsize_alternative#xsize#alternative% {\edef\fontface{#xsize}% \edef\fontalternative{#alternative}% \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_set_current_font_alternative#alternative% +\protected\def\font_helpers_set_current_font_alternative#alternative% {\edef\fontalternative{#alternative}% \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_set_current_font_size#size% +\protected\def\font_helpers_set_current_font_size#size% {\edef\fontsize{#size}% \font_helpers_check_big_math_synchronization % double? better in everymath? \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_set_current_font_style_alternative#style#alternative% \rmsl +\protected\def\font_helpers_set_current_font_style_alternative#style#alternative% \rmsl {\edef\fontstyle {#style}% \edef\fontalternative{#alternative}% \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_set_current_font_style_size#style#size% \rma +\protected\def\font_helpers_set_current_font_style_size#style#size% \rma {\edef\fontstyle{#style}% \edef\fontsize {#size}% \font_helpers_check_big_math_synchronization % double? better in everymath? \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_set_current_font_alternative_size#alternative#size% \sla +\protected\def\font_helpers_set_current_font_alternative_size#alternative#size% \sla {\edef\fontalternative{#alternative}% \edef\fontsize {#size}% \font_helpers_check_big_math_synchronization % double? better in everymath? \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_set_current_font_style_alternative_size#style#alternative#size% \rmsla +\protected\def\font_helpers_set_current_font_style_alternative_size#style#alternative#size% \rmsla {\edef\fontstyle {#style}% \edef\fontalternative{#alternative}% \edef\fontsize {#size}% \font_helpers_check_big_math_synchronization % double? better in everymath? \font_helpers_synchronize_font} -\unexpanded\def\font_helpers_synchronize_font % we can have dups i.e. no need to let fontstrategy +\protected\def\font_helpers_synchronize_font % we can have dups i.e. no need to let fontstrategy {\ifempty\fontclass \applyfontstrategies \else @@ -2071,7 +2039,9 @@ \let\fontalternative\fontalternative \font_helpers_synchronize_font} -\unexpanded\def\tx +% to freeze or not ... + +\protected\def\tx {\currentxfontsize\plusone \ifmmode \scriptstyle @@ -2082,7 +2052,7 @@ \fi \let\tx\txx} -\unexpanded\def\txx +\protected\def\txx {\currentxfontsize\plustwo \ifmmode \scriptscriptstyle @@ -2094,7 +2064,7 @@ \let\tx \empty \let\txx\empty} -\unexpanded\def\sx +\protected\def\sx {\currentxfontsize\plusone \ifmmode \scriptstyle @@ -2104,7 +2074,7 @@ \let\tx\txx \let\sx\sxx} -\unexpanded\def\sxx +\protected\def\sxx {\currentxfontsize\plustwo \ifmmode \scriptscriptstyle @@ -2116,8 +2086,8 @@ \let\sx \empty \let\sxx\empty} -\unexpanded\def\useinheritxsizes{\settrue \c_font_inherit_scale} % not yet public, playground for WS and me -\unexpanded\def\usedefinedxsizes{\setfalse\c_font_inherit_scale} % not yet public, playground for WS and me +\permanent\protected\def\useinheritxsizes{\settrue \c_font_inherit_scale} % not yet public, playground for WS and me +\permanent\protected\def\usedefinedxsizes{\setfalse\c_font_inherit_scale} % not yet public, playground for WS and me \let\normaltx \tx \let\normaltxx\txx @@ -2139,7 +2109,7 @@ \installcorenamespace{fontbodyfaces} -\unexpanded\def\font_basics_complete_switch#size% +\protected\def\font_basics_complete_switch#size% {\bodyfontsize#size\relax \normalizebodyfontsize\normalizedbodyfontsize\bodyfontsize \expandafter\let\expandafter\font_basics_set_faces\csname\??fontbodyfaces\fontbody\endcsname @@ -2205,7 +2175,7 @@ % \newtoks \everysetupbodyfont % \newtoks \everyswitchtobodyfont -\unexpanded\def\setupbodyfont +\permanent\protected\def\setupbodyfont {\doifelsenextoptionalcs\font_basics_setupbodyfont_yes\font_basics_setupbodyfont_nop} \def\font_basics_setupbodyfont_nop @@ -2225,7 +2195,7 @@ \fi \the\everysetupbodyfont}} -\unexpanded\def\font_basics_switchtobodyfont#specification% +\protected\def\font_basics_switchtobodyfont#specification% {\edef\m_font_step{\font_bodyfontvariable{#specification}}% \ifempty\m_font_step \font_helpers_set_font\zerocount{#specification}% @@ -2235,10 +2205,10 @@ \the\everybodyfont \the\everyswitchtobodyfont} -\unexpanded\def\switchtobodyfont[#specification]% could become an ifx +\permanent\protected\def\switchtobodyfont[#specification]% could become an ifx {\doifsomething{#specification}{\font_basics_switchtobodyfont{#specification}}} -\unexpanded\def\usebodyfontparameter#1% +\permanent\protected\def\usebodyfontparameter#1% {\edef\m_font_bodyfont_asked{#1\c!bodyfont}% \ifempty\m_font_bodyfont_asked\else \font_basics_switchtobodyfont\m_font_bodyfont_asked @@ -2251,7 +2221,7 @@ %D The following alternative is meant for math||to||text switching and will be %D optimized. -\unexpanded\def\fastswitchtobodyfont#name% +\permanent\protected\def\fastswitchtobodyfont#name% {\ifcsname\??fontenvironments\normalizedbodyfontsize#name\endcsname %\edef\futurebodyfontsize{\csname\??fontenvironments\normalizedbodyfontsize#name\endcsname}% \edef\futurebodyfontsize{\lastnamedcs}% @@ -2284,7 +2254,7 @@ %D \stoptext %D \stoptyping -\unexpanded\def\usebodyfont[#1]% +\permanent\protected\def\usebodyfont[#1]% {\ifempty\fontclass \setupbodyfont[#1]% \else @@ -2292,7 +2262,7 @@ \fullrestoreglobalbodyfont \fi} -\unexpanded\def\showbodyfontstate +\permanent\protected\def\showbodyfontstate {\dontleavehmode \start \infofont @@ -2320,9 +2290,9 @@ %D %D This is an expandable command! -\unexpanded\def\fontchar #character{\clf_fontchar{#character}} -\unexpanded\def\fontcharbyindex #index{\clf_fontcharbyindex#index\relax} - \def\tochar #specifications{\clf_tochar{#specifications}} % expanded (also used in edef) +\permanent\protected\def\fontchar #character{\clf_fontchar{#character}} +\permanent\protected\def\fontcharbyindex #index{\clf_fontcharbyindex#index\relax} +\permanent \def\tochar #specifications{\clf_tochar{#specifications}} % expanded (also used in edef) %D The next auxilliary macro is an alternative to \type {\fontname}. @@ -2340,7 +2310,7 @@ %D {\sl text \switchstyleonly[sansserif]text} %D \stoptyping -\unexpanded\def\switchstyleonly +\permanent\protected\def\switchstyleonly {\doifelsenextoptionalcs\font_basics_switch_style_only_opt\font_basics_switch_style_only_arg} \def\font_basics_switch_style_only_arg#name% stupid version @@ -2363,10 +2333,7 @@ %D %D We don't support language specific synonyms here. -\unexpanded\def\definebodyfontswitch - {\dodoubleargument\font_basics_define_bodyfont_switch} - -\def\font_basics_define_bodyfont_switch[#command][#specification]% no longer a commalist (not useful) +\permanent\tolerant\protected\def\definebodyfontswitch[#command]#spacer[#specification]% no longer a commalist (not useful) {\setvalue{#command}{\switchtobodyfont[#specification]}}% %D \macros @@ -2384,10 +2351,10 @@ \font_basics_switch_points\m_font_step \font_basics_switch_style \fontstyle} -\unexpanded\def\setsmallbodyfont{\font_helpers_set_bodyfont_step\v!small\the\everybodyfont} -\unexpanded\def\setbigbodyfont {\font_helpers_set_bodyfont_step\v!big \the\everybodyfont} +\permanent\protected\def\setsmallbodyfont{\font_helpers_set_bodyfont_step\v!small\the\everybodyfont} +\permanent\protected\def\setbigbodyfont {\font_helpers_set_bodyfont_step\v!big \the\everybodyfont} -\unexpanded\def\setmainbodyfont +\permanent\protected\def\setmainbodyfont {\font_basics_switch_points\normalizedbodyfontsize \font_basics_switch_style\fontstyle \the\everybodyfont @@ -2409,7 +2376,7 @@ \let\globalfontstyle\s!rm -\unexpanded\def\fullrestoreglobalbodyfont +\permanent\protected\def\fullrestoreglobalbodyfont {\let\fontsize\defaultfontsize \let\fontbody\defaultfontbody \let\fontface\defaultfontface @@ -2423,7 +2390,7 @@ \the\everyglobalbodyfont \saveinterlinespace} -\unexpanded\def\partialrestoreglobalbodyfont +\permanent\protected\def\partialrestoreglobalbodyfont {\let\fontsize\defaultfontsize \let\fontbody\defaultfontbody \let\fontface\defaultfontface @@ -2434,7 +2401,7 @@ \the\everyglobalbodyfont % indeed needed \saveinterlinespace} -\unexpanded\def\restoreglobalbodyfont % ook style etc +\permanent\protected\def\restoreglobalbodyfont % ook style etc {\ifx\fontclass\globalfontclass \ifx\fontstyle\globalfontstyle \ifx\normalizedbodyfontsize\normalizedglobalbodyfontsize @@ -2466,26 +2433,26 @@ \installcorenamespace{predefinedfont} -\unexpanded\def\predefinefont[#1]#2[#3]% global ! - {\setugvalue{#1}{\font_basics_predefine{#1}{#3}}} +\permanent\protected\def\predefinefont[#1]#*[#2]% global ! + {\setugvalue{#1}{\font_basics_predefine{#1}{#2}}} -\unexpanded\def\predefinedfont[#1]% global ! +\permanent\protected\def\predefinedfont[#1]% global ! {\ifcsname\??predefinedfont#1\endcsname \lastnamedcs \else \font_basics_predefined{#1}% \fi} -\unexpanded\def\font_basics_predefine#1#2% +\protected\def\font_basics_predefine#1#2% {\font_basics_defined_font_yes[#2]% \expandafter\glet\csname#1\expandafter\endcsname\csname\v_font_identifier_basic\endcsname} -\unexpanded\def\font_basics_predefined#1% +\protected\def\font_basics_predefined#1% {\font_basics_predefine{\??predefinedfont#1}{#1}} %D Handy helper: -\unexpanded\def\savedefinedfont[#1]% +\permanent\protected\def\savedefinedfont[#1]% {\bgroup \definedfont[#1]% \xdef\saveddefinedfontid {\number\fontid\font}% @@ -2497,8 +2464,8 @@ %D Ugly helper: -\unexpanded\def\saverunningstyleandcolor - {\unexpanded\edef\restorerunningstyleandcolor +\permanent\protected\def\saverunningstyleandcolor + {\enforced\permanent\protected\edef\restorerunningstyleandcolor {\setfontid \number\fontid\font \c_attr_colormodel \the\c_attr_colormodel \c_attr_color \the\c_attr_color @@ -2515,10 +2482,10 @@ \let\getprivatemathchar \clf_getprivatemathchar % gives back a utf ! \let\getprivateslot \clf_getprivateslot % companion to fonts.helpers.addprivate -% \unexpanded\def\getprivatemathchar#1% +% \protected\def\getprivatemathchar#1% % {\begingroup\the\textfont\zerocount\getprivatechar{#1}\endgroup} -\def\privatechar % the text variant gets expanded to utf +\permanent\protected\def\privatechar % the text variant gets expanded to utf {\ifmmode \expandafter\getprivatemathchar \else @@ -2546,10 +2513,7 @@ %D \stopTEXpage %D \stoptyping -\unexpanded\def\definefontcolorpalette - {\dodoubleargument\font_define_color_palette} - -\def\font_define_color_palette[#1][#2]% +\permanent\tolerant\protected\def\definefontcolorpalette[#1]#*[#2]% {\clf_definefontcolorpalette{#1}{#2}} %D \macros @@ -2557,7 +2521,7 @@ %D %D A way to add a path at runtime (no need to generate database): -\unexpanded\def\usefontpath[#1]% +\permanent\protected\def\usefontpath[#1]% {\clf_addfontpath{#1}} \protect \endinput diff --git a/tex/context/base/mkiv/font-mat.mklx b/tex/context/base/mkiv/font-mat.mklx index c37b36ed6..8ee5f4043 100644 --- a/tex/context/base/mkiv/font-mat.mklx +++ b/tex/context/base/mkiv/font-mat.mklx @@ -40,10 +40,10 @@ \newtoks \t_font_math_strategies \newconditional\c_font_synchronize_math_fonts \settrue\c_font_synchronize_math_fonts -\unexpanded\def\font_helpers_synchronize_math % math stuff in mmode +\protected\def\font_helpers_synchronize_math % math stuff in mmode {\ifconditional\c_font_synchronize_math_fonts\the\t_font_math_strategies\fi} -\unexpanded\def\textonly{\setfalse\c_font_synchronize_math_fonts} % document this +\permanent\protected\def\textonly{\setfalse\c_font_synchronize_math_fonts} % document this %D The main math font definer. We have removed some optimized code simply because we %D now always have a fontclass. We could check for fontclass being default or empty @@ -67,6 +67,8 @@ \newconditional\c_font_bidirectional_mathstrategy % can be default, not that much overhead: \settrue\c_font_bidirectional_mathstrategy \newconditional\c_font_complete_bold_mathstrategy \settrue\c_font_complete_bold_mathstrategy +% \frozen ... + \def\mathtextsuffix {-text} \def\mathscriptsuffix {-script} \def\mathscriptscriptsuffix{-scriptscript} @@ -343,7 +345,7 @@ \fam\defaultmathfamily % all characters and symbols are in this family \to \everymathematics -\unexpanded\def\font_helpers_synchronize_math_family_mr +\protected\def\font_helpers_synchronize_math_family_mr {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy \ifconditional\c_math_right_to_left \plustwo @@ -354,7 +356,7 @@ \zerocount \fi} -\unexpanded\def\font_helpers_synchronize_math_family_mb +\protected\def\font_helpers_synchronize_math_family_mb {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy \ifconditional\c_math_right_to_left \ifconditional\c_font_pseudo_bold_math_state\pluseight\else\plusfive\fi @@ -415,7 +417,7 @@ \newconditional\c_math_bold -\unexpanded\def\mr % math regular +\protected\def\mr % math regular {\ifmmode \font_helpers_synchronize_math_family_mr \else @@ -424,7 +426,7 @@ \mathdefault \setfalse\c_math_bold} -\unexpanded\def\mb % math bold +\protected\def\mb % math bold {\ifmmode \font_helpers_synchronize_math_family_mb \else @@ -462,13 +464,13 @@ \fi \to \everymathematics -\unexpanded\def\nobigmath {\synchronizebigmathflag\zerocount} -\unexpanded\def\autobigmath{\synchronizebigmathflag\plusone\synchronizebigmath} -\unexpanded\def\bigmath {\synchronizebigmathflag\plustwo\synchronizebigmath} +\protected\def\nobigmath {\synchronizebigmathflag\zerocount} +\protected\def\autobigmath{\synchronizebigmathflag\plusone\synchronizebigmath} +\protected\def\bigmath {\synchronizebigmathflag\plustwo\synchronizebigmath} \let\bigmathfontsize\empty -\unexpanded\def\synchronizebigmath +\protected\def\synchronizebigmath {\ifx\bigmathfontsize\fontsize % already in sync \else @@ -476,7 +478,7 @@ \font_helpers_synchronize_math \fi} -\unexpanded\def\font_helpers_check_big_math_synchronization +\protected\def\font_helpers_check_big_math_synchronization {\ifcase\synchronizebigmathflag % never \or diff --git a/tex/context/base/mkiv/font-nod.lua b/tex/context/base/mkiv/font-nod.lua index bf0aa3ba0..f3cd37f17 100644 --- a/tex/context/base/mkiv/font-nod.lua +++ b/tex/context/base/mkiv/font-nod.lua @@ -55,7 +55,7 @@ local disc_code = nodecodes.disc local glue_code = nodecodes.glue local kern_code = nodecodes.kern local dir_code = nodecodes.dir -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local getnext = nuts.getnext local getprev = nuts.getprev @@ -396,7 +396,7 @@ function step_tracers.codes(i,command,space) local char, id = isglyph(c) if char then showchar(char,id) - elseif id == dir_code or (id == localpar_code and start_of_par(c)) then + elseif id == dir_code or (id == par_code and start_of_par(c)) then context("[%s]",getdirection(c) or "?") elseif id == disc_code then local pre, post, replace = getdisc(c) diff --git a/tex/context/base/mkiv/font-ocm.lua b/tex/context/base/mkiv/font-ocm.lua index 131b0ed13..2f6c29e65 100644 --- a/tex/context/base/mkiv/font-ocm.lua +++ b/tex/context/base/mkiv/font-ocm.lua @@ -188,7 +188,7 @@ local initializeoverlay do n = n + 1 ; t[n] = "}" end token.set_macro("typethreemacro",concat(t)) - tex.runtoks("typethreetoks") + tex.runlocal("typethreetoks") registertypethreeresource(specification,c,tex.saveboxresource(0,nil,lpdf.collectedresources(),true)) -- registertypethreefont(specification,mainid,lpdf.reference(lpdf.getfontobjnumber(mainid))) return 0, 0 diff --git a/tex/context/base/mkiv/font-ots.lua b/tex/context/base/mkiv/font-ots.lua index 490f28de6..bb13a4801 100644 --- a/tex/context/base/mkiv/font-ots.lua +++ b/tex/context/base/mkiv/font-ots.lua @@ -251,7 +251,7 @@ local glue_code = nodecodes.glue local disc_code = nodecodes.disc local math_code = nodecodes.math local dir_code = nodecodes.dir -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local lefttoright_code = nodes.dirvalues.lefttoright local righttoleft_code = nodes.dirvalues.righttoleft @@ -500,9 +500,23 @@ end -- in the not discfound branch then. We now have skiphash too so we can be more -- selective if needed (todo). +-- we can have more granularity here but for now we only do a simple check + +local no_left_ligature_code = 1 +local no_right_ligature_code = 2 +local no_left_kern_code = 4 +local no_right_kern_code = 8 + +local has_glyph_option = node.direct.has_glyph_option or function(n,c) + if c == no_left_ligature_code or c == no_right_ligature_code then + return getattr(n,a_noligature) == 1 + else + return false + end +end + local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfound,hasmarks) -- brr head - if getattr(start,a_noligature) == 1 then - -- so we can do: e\noligature{ff}e e\noligature{f}fie (we only look at the first) + if has_glyph_option(start,no_right_ligature_code) then return head, start end if start == stop and getchar(start) == char then @@ -902,81 +916,89 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip end function handlers.gpos_single(head,start,dataset,sequence,kerns,rlmode,skiphash,step,injection) - local startchar = getchar(start) - local format = step.format - if format == "single" or type(kerns) == "table" then -- the table check can go - local dx, dy, w, h = setposition(0,start,factor,rlmode,kerns,injection) - if trace_kerns then - logprocess("%s: shifting single %s by %s xy (%p,%p) and wh (%p,%p)",pref(dataset,sequence),gref(startchar),format,dx,dy,w,h) - end + if has_glyph_option(start,no_right_kern_code) then + return head, start, false else - local k = (format == "move" and setmove or setkern)(start,factor,rlmode,kerns,injection) - if trace_kerns then - logprocess("%s: shifting single %s by %s %p",pref(dataset,sequence),gref(startchar),format,k) + local startchar = getchar(start) + local format = step.format + if format == "single" or type(kerns) == "table" then -- the table check can go + local dx, dy, w, h = setposition(0,start,factor,rlmode,kerns,injection) + if trace_kerns then + logprocess("%s: shifting single %s by %s xy (%p,%p) and wh (%p,%p)",pref(dataset,sequence),gref(startchar),format,dx,dy,w,h) + end + else + local k = (format == "move" and setmove or setkern)(start,factor,rlmode,kerns,injection) + if trace_kerns then + logprocess("%s: shifting single %s by %s %p",pref(dataset,sequence),gref(startchar),format,k) + end end + return head, start, true end - return head, start, true end function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,skiphash,step,injection) - local snext = getnext(start) - if not snext then + if has_glyph_option(start,no_right_kern_code) then return head, start, false else - local prev = start - while snext do - local nextchar = ischar(snext,currentfont) - if nextchar then - if skiphash and skiphash[nextchar] then -- includes marks too when flag - prev = snext - snext = getnext(snext) - else - local krn = kerns[nextchar] - if not krn then - break - end - local format = step.format - if format == "pair" then - local a = krn[1] - local b = krn[2] - if a == true then - -- zero - elseif a then -- #a > 0 - local x, y, w, h = setposition(1,start,factor,rlmode,a,injection) - if trace_kerns then - local startchar = getchar(start) - logprocess("%s: shifting first of pair %s and %s by xy (%p,%p) and wh (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections") - end + local snext = getnext(start) + if not snext then + return head, start, false + else + local prev = start + while snext do + local nextchar = ischar(snext,currentfont) + if nextchar then + if skiphash and skiphash[nextchar] then -- includes marks too when flag + prev = snext + snext = getnext(snext) + else + local krn = kerns[nextchar] + if not krn then + break end - if b == true then - -- zero - start = snext -- cf spec - elseif b then -- #b > 0 - local x, y, w, h = setposition(2,snext,factor,rlmode,b,injection) + local format = step.format + if format == "pair" then + local a = krn[1] + local b = krn[2] + if a == true then + -- zero + elseif a then -- #a > 0 + local x, y, w, h = setposition(1,start,factor,rlmode,a,injection) + if trace_kerns then + local startchar = getchar(start) + logprocess("%s: shifting first of pair %s and %s by xy (%p,%p) and wh (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections") + end + end + if b == true then + -- zero + start = snext -- cf spec + elseif b then -- #b > 0 + local x, y, w, h = setposition(2,snext,factor,rlmode,b,injection) + if trace_kerns then + local startchar = getchar(start) + logprocess("%s: shifting second of pair %s and %s by xy (%p,%p) and wh (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections") + end + start = snext -- cf spec + elseif forcepairadvance then + start = snext -- for testing, not cf spec + end + return head, start, true + elseif krn ~= 0 then + local k = (format == "move" and setmove or setkern)(snext,factor,rlmode,krn,injection) if trace_kerns then - local startchar = getchar(start) - logprocess("%s: shifting second of pair %s and %s by xy (%p,%p) and wh (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections") + logprocess("%s: inserting %s %p between %s and %s as %s",pref(dataset,sequence),format,k,gref(getchar(prev)),gref(nextchar),injection or "injections") end - start = snext -- cf spec - elseif forcepairadvance then - start = snext -- for testing, not cf spec - end - return head, start, true - elseif krn ~= 0 then - local k = (format == "move" and setmove or setkern)(snext,factor,rlmode,krn,injection) - if trace_kerns then - logprocess("%s: inserting %s %p between %s and %s as %s",pref(dataset,sequence),format,k,gref(getchar(prev)),gref(nextchar),injection or "injections") + return head, start, true + else -- can't happen + break end - return head, start, true - else -- can't happen - break end + else + break end - else - break end + return head, start, false end - return head, start, false end end @@ -1505,92 +1527,96 @@ function chainprocs.gsub_ligature(head,start,stop,dataset,sequence,currentlookup end function chainprocs.gpos_single(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex) - local mapping = currentlookup.mapping - if mapping == nil then - mapping = getmapping(dataset,sequence,currentlookup) - end - if mapping then - local startchar = getchar(start) - local kerns = mapping[startchar] - if kerns then - local format = currentlookup.format - if format == "single" then - local dx, dy, w, h = setposition(0,start,factor,rlmode,kerns) -- currentlookup.flags ? - if trace_kerns then - logprocess("%s: shifting single %s by %s (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),format,dx,dy,w,h) - end - else -- needs checking .. maybe no kerns format for single - local k = (format == "move" and setmove or setkern)(start,factor,rlmode,kerns,injection) - if trace_kerns then - logprocess("%s: shifting single %s by %s %p",cref(dataset,sequence),gref(startchar),format,k) + if has_glyph_option(start,no_right_kern_code) then + local mapping = currentlookup.mapping + if mapping == nil then + mapping = getmapping(dataset,sequence,currentlookup) + end + if mapping then + local startchar = getchar(start) + local kerns = mapping[startchar] + if kerns then + local format = currentlookup.format + if format == "single" then + local dx, dy, w, h = setposition(0,start,factor,rlmode,kerns) -- currentlookup.flags ? + if trace_kerns then + logprocess("%s: shifting single %s by %s (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),format,dx,dy,w,h) + end + else -- needs checking .. maybe no kerns format for single + local k = (format == "move" and setmove or setkern)(start,factor,rlmode,kerns,injection) + if trace_kerns then + logprocess("%s: shifting single %s by %s %p",cref(dataset,sequence),gref(startchar),format,k) + end end + return head, start, true end - return head, start, true end end return head, start, false end function chainprocs.gpos_pair(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex) -- todo: injections ? - local mapping = currentlookup.mapping - if mapping == nil then - mapping = getmapping(dataset,sequence,currentlookup) - end - if mapping then - local snext = getnext(start) - if snext then - local startchar = getchar(start) - local kerns = mapping[startchar] -- always 1 step - if kerns then - local prev = start - while snext do - local nextchar = ischar(snext,currentfont) - if not nextchar then - break - end - if skiphash and skiphash[nextchar] then - prev = snext - snext = getnext(snext) - else - local krn = kerns[nextchar] - if not krn then + if has_glyph_option(start,no_right_kern_code) then + local mapping = currentlookup.mapping + if mapping == nil then + mapping = getmapping(dataset,sequence,currentlookup) + end + if mapping then + local snext = getnext(start) + if snext then + local startchar = getchar(start) + local kerns = mapping[startchar] -- always 1 step + if kerns then + local prev = start + while snext do + local nextchar = ischar(snext,currentfont) + if not nextchar then break end - local format = currentlookup.format - if format == "pair" then - local a = krn[1] - local b = krn[2] - if a == true then - -- zero - elseif a then - local x, y, w, h = setposition(1,start,factor,rlmode,a,"injections") -- currentlookups flags? - if trace_kerns then - local startchar = getchar(start) - logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h) - end + if skiphash and skiphash[nextchar] then + prev = snext + snext = getnext(snext) + else + local krn = kerns[nextchar] + if not krn then + break end - if b == true then - -- zero - start = snext -- cf spec - elseif b then -- #b > 0 - local x, y, w, h = setposition(2,snext,factor,rlmode,b,"injections") + local format = currentlookup.format + if format == "pair" then + local a = krn[1] + local b = krn[2] + if a == true then + -- zero + elseif a then + local x, y, w, h = setposition(1,start,factor,rlmode,a,"injections") -- currentlookups flags? + if trace_kerns then + local startchar = getchar(start) + logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h) + end + end + if b == true then + -- zero + start = snext -- cf spec + elseif b then -- #b > 0 + local x, y, w, h = setposition(2,snext,factor,rlmode,b,"injections") + if trace_kerns then + local startchar = getchar(start) + logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h) + end + start = snext -- cf spec + elseif forcepairadvance then + start = snext -- for testing, not cf spec + end + return head, start, true + elseif krn ~= 0 then + local k = (format == "move" and setmove or setkern)(snext,factor,rlmode,krn) if trace_kerns then - local startchar = getchar(start) - logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h) + logprocess("%s: inserting %s %p between %s and %s",cref(dataset,sequence),format,k,gref(getchar(prev)),gref(nextchar)) end - start = snext -- cf spec - elseif forcepairadvance then - start = snext -- for testing, not cf spec - end - return head, start, true - elseif krn ~= 0 then - local k = (format == "move" and setmove or setkern)(snext,factor,rlmode,krn) - if trace_kerns then - logprocess("%s: inserting %s %p between %s and %s",cref(dataset,sequence),format,k,gref(getchar(prev)),gref(nextchar)) + return head, start, true + else + break end - return head, start, true - else - break end end end @@ -3759,7 +3785,7 @@ do local initialrl = 0 - if getid(head) == localpar_code and start_of_par(head) then + if getid(head) == par_code and start_of_par(head) then initialrl = pardirstate(head) elseif direction == righttoleft_code then initialrl = -1 @@ -3913,7 +3939,7 @@ do elseif id == dir_code then topstack, rlmode = txtdirstate(start,dirstack,topstack,rlparmode) start = getnext(start) - -- elseif id == localpar_code and start_of_par(start) then + -- elseif id == par_code and start_of_par(start) then -- rlparmode, rlmode = pardirstate(start) -- start = getnext(start) else @@ -3997,7 +4023,7 @@ do elseif id == dir_code then topstack, rlmode = txtdirstate(start,dirstack,topstack,rlparmode) start = getnext(start) - -- elseif id == localpar_code and start_of_par(start) then + -- elseif id == par_code and start_of_par(start) then -- rlparmode, rlmode = pardirstate(start) -- start = getnext(start) else @@ -4108,7 +4134,7 @@ do elseif id == dir_code then topstack, rlmode = txtdirstate(start,dirstack,topstack,rlparmode) start = getnext(start) - -- elseif id == localpar_code and start_of_par(start) then + -- elseif id == par_code and start_of_par(start) then -- rlparmode, rlmode = pardirstate(start) -- start = getnext(start) else diff --git a/tex/context/base/mkiv/font-pre.mkiv b/tex/context/base/mkiv/font-pre.mkiv index 749c66fe7..19d4f3f7e 100644 --- a/tex/context/base/mkiv/font-pre.mkiv +++ b/tex/context/base/mkiv/font-pre.mkiv @@ -931,10 +931,14 @@ \unexpanded\def\normalss{\font_helpers_set_current_font_style{\s!ss}} \unexpanded\def\normaltt{\font_helpers_set_current_font_style{\s!tt}} +\pushoverloadmode + \let\rm\normalrm \let\ss\normalss \let\tt\normaltt +\popoverloadmode + \protect \endinput % LM math vs CM math (analysis by Taco): diff --git a/tex/context/base/mkiv/font-sol.lua b/tex/context/base/mkiv/font-sol.lua index 643080788..c61873995 100644 --- a/tex/context/base/mkiv/font-sol.lua +++ b/tex/context/base/mkiv/font-sol.lua @@ -105,7 +105,7 @@ local disc_code = nodecodes.disc local kern_code = nodecodes.kern local hlist_code = nodecodes.hlist local dir_code = nodecodes.dir -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local whatsit_code = nodecodes.whatsit @@ -437,7 +437,7 @@ function splitters.split(head) -- best also pass the direction end local direction, pop = getdirection(current) r2l = not pop and direction == righttoleft_code - elseif id == localpar_code and start_of_par(current) then + elseif id == par_code and start_of_par(current) then if start then flush() -- very unlikely as this starts a paragraph end diff --git a/tex/context/base/mkiv/font-sty.mklx b/tex/context/base/mkiv/font-sty.mklx index f0fe65183..457217f8d 100644 --- a/tex/context/base/mkiv/font-sty.mklx +++ b/tex/context/base/mkiv/font-sty.mklx @@ -48,13 +48,10 @@ \setnewconstant \c_font_current_alternative_style_index \plusone -\unexpanded\def\definealternativestyle - {\dotripleempty\font_basics_define_alternative_style} - -\def\font_basics_define_alternative_style[#commands][#variantone][#varianttwo]% +\permanent\tolerant\protected\def\definealternativestyle[#commands]#spacer[#variantone]#spacer[#varianttwo]% {\processcommalist[#commands]{\font_basics_define_alternative_style_indeed{#variantone}{#varianttwo}}} -\let\definestyle\definealternativestyle % later redefined +% \let\definestyle\definealternativestyle % later redefined \newconstant\c_fonts_basics_alternative_style_method @@ -66,7 +63,7 @@ \ifthirdargument \setuevalue{#command}{\triggergroupedcommandcs\begincsname\??alternativestyle#command\endcsname}% \else - \setuvalue{#command}{\triggergroupedcommand{#variantone}}% + \setuvalue{#command}{\triggergroupedcommand{#variantone}}% \fi \else \setuvalue{#command}{\triggergroupedcommand{#variantone}}% @@ -83,7 +80,7 @@ \expandafter\firstoftwoarguments \fi} -\def\applyalternativestyle#name% public +\permanent\def\applyalternativestyle#name% public .. expandable? frozen? {\begincsname\??alternativestyle#name\endcsname} \appendtoks @@ -146,7 +143,7 @@ \let\m_current_convert_font \empty \let\m_current_convert_font_dt\empty -\unexpanded\def\doconvertfont#specification% takes second argument / this command is obsolete +\permanent\protected\def\doconvertfont#specification% takes second argument / this command is obsolete {\edef\m_current_convert_font{#specification}% \ifempty\m_current_convert_font %\expandafter\firstofoneargument @@ -174,30 +171,33 @@ %D \chapter{This is \TEX} %D \stoptyping -\unexpanded\def\dontconvertfont{\c_font_current_alternative_style_index\plustwo} % needs checking in usage -\unexpanded\def\redoconvertfont{\c_font_current_alternative_style_index\plusone} % needs checking in usage +\permanent\protected\def\dontconvertfont{\c_font_current_alternative_style_index\plustwo} % needs checking in usage +\permanent\protected\def\redoconvertfont{\c_font_current_alternative_style_index\plusone} % needs checking in usage %D The new one: \setfalse\fontattributeisset -\unexpanded\def\dousestyleparameter#value% +\let\currentstyleparameter \empty % these might become private (possible conflict with defines) +\let\currentdetokenizedstyleparameter\empty % these might become private (possible conflict with defines) + +\permanent\protected\def\dousestyleparameter#value% {\edef\currentstyleparameter{#value}% \ifempty\currentstyleparameter\else \expandafter\dousecurrentstyleparameter \fi} -\unexpanded\def\dousestylehashparameter#hash#parameter% +\permanent\protected\def\dousestylehashparameter#hash#parameter% {\ifcsname#hash#parameter\endcsname \expandafter\dousestyleparameter\lastnamedcs \fi} -\unexpanded\def\dousecurrentstyleparameter % empty check outside here - {\edef\detokenizedstyleparameter{\detokenize\expandafter{\currentstyleparameter}}% +\permanent\protected\def\dousecurrentstyleparameter % empty check outside here + {\edef\currentdetokenizedstyleparameter{\detokenize\expandafter{\currentstyleparameter}}% \settrue\fontattributeisset % reset is done elsewhere - \ifcsname\??alternativestyle\detokenizedstyleparameter\endcsname + \ifcsname\??alternativestyle\currentdetokenizedstyleparameter\endcsname \lastnamedcs - \orelse\ifcsname\detokenizedstyleparameter\endcsname + \orelse\ifcsname\currentdetokenizedstyleparameter\endcsname \lastnamedcs \else \currentstyleparameter @@ -241,24 +241,24 @@ \fi \to \everydefinestyle -\unexpanded\def\font_styles_apply_start#name% +\protected\def\font_styles_apply_start#name% {\begingroup \font_styles_use_defined{#name}} -\unexpanded\def\font_styles_apply_stop +\protected\def\font_styles_apply_stop {\endgroup} -\unexpanded\def\font_styles_apply_grouped#name% assumes that the next is { or \bgroup +\protected\def\font_styles_apply_grouped#name% assumes that the next is { or \bgroup {\bgroup \def\g_style{\font_styles_use_defined{#name}}% \afterassignment\g_style \let\nexttoken} -\unexpanded\def\font_styles_use_defined#name% +\protected\def\font_styles_use_defined#name% {\edef\currentstyle{#name}% \usestylestyleandcolor\c!style\c!color} -\unexpanded\def\font_styles_use_generic#specification% +\protected\def\font_styles_use_generic#specification% {\let\currentstyle\s!unknown % reasonable generic tag \letstyleparameter\c!style\empty \letstyleparameter\c!color\empty @@ -269,7 +269,7 @@ \installcorenamespace{styleargument} -\unexpanded\def\style[#name]% as this is can be a switch we use groupedcommand +\protected\def\style[#name]% as this is can be a switch we use groupedcommand % frozen? {\csname\??styleargument \ifcsname\??stylecheck#name\endcsname 2% defined as style @@ -282,15 +282,9 @@ \fi \endcsname{#name}} -% \setvalue{\??styleargument1}#name% -% {\groupedcommand{\begincsname#name\endcsname}{}} - \setvalue{\??styleargument1}#name% {\expandafter\triggergroupedcommandcs\begincsname#name\endcsname} -% \setvalue{\??styleargument2}#name% -% {\groupedcommand{\font_styles_use_defined{#name}}{}} % or {\font_styles_apply_grouped{#name}} - \setvalue{\??styleargument2}#name% {\triggergroupedcommand{\font_styles_use_defined{#name}}} % or {\font_styles_apply_grouped{#name}} @@ -313,7 +307,7 @@ \installcorenamespace{styleenvironment} -\unexpanded\def\startstyle[#name]% +\protected\def\startstyle[#name]% {\begingroup \csname\??styleenvironment \ifcsname\??stylecheck#name\endcsname @@ -325,7 +319,7 @@ \fi \endcsname{#name}} -\unexpanded\def\stopstyle +\protected\def\stopstyle {\endgroup \autoinsertnextspace} % will be configurable, maybe also in \definestartstop @@ -355,11 +349,8 @@ \installcorenamespace{stylecollection} -\unexpanded\def\definestylecollection - {\dosingleargument\font_styles_define_style_collection} - -\def\font_styles_define_style_collection[#name]% - {\iffirstargument +\permanent\tolerant\protected\def\definestylecollection[#name]% + {\ifarguments\or \setuvalue{#name}{\styleinstance[#name]}% \def\font_styles_define_style_collection_a#style% {\def\font_styles_define_style_collection_b#alternative{\undefinevalue{\??stylecollection#name:#style:#alternative}}% @@ -372,29 +363,19 @@ \let\font_styles_define_style_collection_a\relax \let\font_styles_define_style_collection_b\relax -\unexpanded\def\definestyleinstance - {\doquadrupleargument\font_styles_define_style_instance} - -\def\font_styles_define_style_instance[#instance][#2][#3][#4]% [name] [rm|ss|tt|..] [sl|bf|...] [whatever] - {\iffirstargument +\permanent\tolerant\protected\def\definestyleinstance[#instance]#*[#2]#*[#3]#*[#4]% [name] [rm|ss|tt|..] [sl|bf|...] [whatever] + {\ifparameter#instance\or + \ifarguments\or\or + \letvalueempty{\??stylecollection#instance::#2}% + \or + \setvalue{\??stylecollection#instance::#2}{#3}% + \or + \setvalue{\??stylecollection#instance:#2:#3}{#4}% + \fi \ifcsname#instance\endcsname\else\font_styles_define_style_collection[#instance]\fi - \fi - \iffourthargument - \setvalue{\??stylecollection#instance:#2:#3}{#4}% - \orelse\ifthirdargument - \setvalue{\??stylecollection#instance::#2}{#3}% - \orelse\ifsecondargument - \letvalueempty{\??stylecollection#instance::#2}% - \fi} - -% \unexpanded\def\styleinstance[#instance]% will be made faster -% {%\begingroup\normalexpanded{\noexpand\infofont[#1:\fontstyle:\fontalternative]}\endgroup -% \executeifdefined{\??stylecollection#instance:\fontstyle:\fontalternative}% -% {\executeifdefined{\??stylecollection#instance:\fontstyle:\s!default}% -% {\executeifdefined{\??stylecollection#instance::\fontalternative} -% {\getvalue {\??stylecollection#instance::\s!default}}}}} + \fi} -\unexpanded\def\styleinstance[#instance]% maybe \lastnamedcs here too +\permanent\protected\def\styleinstance[#instance]% maybe \lastnamedcs here too {\csname\??stylecollection#instance:% \ifcsname\??stylecollection#instance:\fontstyle:\fontalternative\endcsname \fontstyle:\fontalternative @@ -414,20 +395,20 @@ %D \mathematics {\utfchar{0x2229}\vsone{}} %D \stoptyping -\unexpanded\edef\vsone#character{#character\normalUchar"FE00 } % used -\unexpanded\edef\vstwo#character{#character\normalUchar"FE01 } % not used but handy for testing +\permanent\protected\edef\vsone#character{#character\normalUchar"FE00 } % used +\permanent\protected\edef\vstwo#character{#character\normalUchar"FE01 } % not used but handy for testing %D For historic reasons we keep the following around but they are no longer that -%D relevant for \MKIV. +%D relevant for \MKIV. But \unknown\ they will be dropped in \LMTX ! -\unexpanded\def\doattributes#1#2#3#4% +\permanent\protected\def\doattributes#1#2#3#4% {\begingroup % geen \bgroup, anders in mathmode lege \hbox \dousestylehashparameter{#1}{#2}% \dousecolorhashparameter{#1}{#3}% #4% \endgroup} -\unexpanded\def\dostartattributes#1#2#3% +\permanent\protected\def\dostartattributes#1#2#3% {\begingroup % geen \bgroup, anders in mathmode lege \hbox \dousestylehashparameter{#1}{#2}% \dousecolorhashparameter{#1}{#3}} @@ -438,16 +419,16 @@ \newconditional\c_font_styles_math -\unexpanded\def\font_styles_math_reset +\protected\def\font_styles_math_reset {\setfalse\c_font_styles_math} -\unexpanded\def\font_styles_math_start +\protected\def\font_styles_math_start {\ifconditional\c_font_styles_math \startimath \fi \relax} -\unexpanded\def\font_styles_math_stop +\protected\def\font_styles_math_stop {\relax \ifconditional\c_font_styles_math \stopimath diff --git a/tex/context/base/mkiv/font-sty.mkvi b/tex/context/base/mkiv/font-sty.mkvi index a24194355..519381a2e 100644 --- a/tex/context/base/mkiv/font-sty.mkvi +++ b/tex/context/base/mkiv/font-sty.mkvi @@ -181,6 +181,9 @@ \setfalse\fontattributeisset +\let\currentstyleparameter \empty % these might become private +\let\currentdetokenizedstyleparameter\empty % these might become private + \unexpanded\def\dousestyleparameter#value% {\edef\currentstyleparameter{#value}% \ifx\currentstyleparameter\empty\else @@ -193,11 +196,11 @@ \fi} \unexpanded\def\dousecurrentstyleparameter % empty check outside here - {\edef\detokenizedstyleparameter{\detokenize\expandafter{\currentstyleparameter}}% + {\edef\currentdetokenizedstyleparameter{\detokenize\expandafter{\currentstyleparameter}}% \settrue\fontattributeisset % reset is done elsewhere - \ifcsname\??alternativestyle\detokenizedstyleparameter\endcsname + \ifcsname\??alternativestyle\currentdetokenizedstyleparameter\endcsname \lastnamedcs - \else\ifcsname\detokenizedstyleparameter\endcsname + \else\ifcsname\currentdetokenizedstyleparameter\endcsname \lastnamedcs \else \currentstyleparameter diff --git a/tex/context/base/mkiv/font-sym.mklx b/tex/context/base/mkiv/font-sym.mklx index 33f8a62da..db80572e8 100644 --- a/tex/context/base/mkiv/font-sym.mklx +++ b/tex/context/base/mkiv/font-sym.mklx @@ -82,7 +82,9 @@ %D The next macro is used to map non latin fontnames on fonts. See \type %D {font-uni} for an example of its use. -\def\fontstylesuffix% why the \s!Regular ? see \getglyph +% \frozen ... + +\permanent\def\fontstylesuffix% why the \s!Regular ? see \getglyph {\ifx\fontalternative\s!tf \s!Regular \orelse \ifx\fontalternative\s!bf \s!Bold \orelse \ifx\fontalternative\s!sl \s!Slanted \orelse @@ -92,7 +94,7 @@ \ifx\fontalternative\s!sc \s!Caps \else \s!Regular \fi} -\def\glyphfontfile#base% appends +\permanent\def\glyphfontfile#base% appends {#base% \ifcsname\??fontfile#base\v_font_string_a\v_font_string_c\endcsname \v_font_string_a\v_font_string_c @@ -108,7 +110,7 @@ %D The next macro can be used to make decisions based on the shape: -\def\doifelseitalic#yes#nop% +\permanent\def\doifelseitalic#yes#nop% {\ifx\fontalternative\s!sl#yes\orelse \ifx\fontalternative\s!it#yes\orelse \ifx\fontalternative\s!bs#yes\orelse @@ -129,7 +131,7 @@ \let\thedefinedfont\relax -\def\setscaledstyledsymbolicfont#1#2#3% quite a slowdown, glyphfontfile +\permanent\protected\def\setscaledstyledsymbolicfont#1#2#3% quite a slowdown, glyphfontfile {\edef\askedsymbolfont{\truefontname{\glyphfontfile{#3}} at \the\dimexpr#2\dimexpr\currentfontbodyscale\dimexpr#1}% \ifcsname\??symbolfont\askedsymbolfont\endcsname \lastnamedcs @@ -137,7 +139,7 @@ \font_basics_define_symbolic_font \fi} -\def\setscaleddirectsymbolicfont#1#2#3% quite a slowdown, glyphfontfile +\permanent\protected\def\setscaleddirectsymbolicfont#1#2#3% quite a slowdown, glyphfontfile {\edef\askedsymbolfont{\truefontname{#3} at \the\dimexpr#2\dimexpr\currentfontbodyscale\dimexpr#1}% \ifcsname\??symbolfont\askedsymbolfont\endcsname \lastnamedcs @@ -145,7 +147,7 @@ \font_basics_define_symbolic_font \fi} -\def\setstyledsymbolicfont#fontname% quite a slowdown, glyphfontfile +\permanent\protected\def\setstyledsymbolicfont#fontname% quite a slowdown, glyphfontfile {\edef\askedsymbolfont{\truefontname{\glyphfontfile{#fontname}} at \the\dimexpr\currentfontbodyscale\dimexpr\fontbody}% \ifcsname\??symbolfont\askedsymbolfont\endcsname \lastnamedcs @@ -153,7 +155,7 @@ \font_basics_define_symbolic_font \fi} -\def\setdirectsymbolicfont#fontname% +\permanent\protected\def\setdirectsymbolicfont#fontname% {\edef\askedsymbolfont{\truefontname{#fontname} at \the\dimexpr\currentfontbodyscale\dimexpr\fontbody}% \ifcsname\??symbolfont\askedsymbolfont\endcsname \lastnamedcs @@ -166,16 +168,16 @@ \currentsymbolfont \expandafter\glet\csname\??symbolfont\askedsymbolfont\endcsname\lastrawfontcall} -\unexpanded\def\getnamedglyphstyled#fontname#character{{\setstyledsymbolicfont{#fontname}\clf_fontchar{#character}}} -\unexpanded\def\getnamedglyphdirect#fontname#character{{\setdirectsymbolicfont{#fontname}\clf_fontchar{#character}}} -\unexpanded\def\getglyphstyled #fontname#character{{\setstyledsymbolicfont{#fontname}\doifelsenumber{#character}\char\donothing#character}} -\unexpanded\def\getglyphdirect #fontname#character{{\setdirectsymbolicfont{#fontname}\doifelsenumber{#character}\char\donothing#character}} -\unexpanded\def\resolvedglyphstyled#fontname#character{{\setstyledsymbolicfont{#fontname}\clf_tochar{#character}}} -\unexpanded\def\resolvedglyphdirect#fontname#character{{\setdirectsymbolicfont{#fontname}\clf_tochar{#character}}} +\permanent\protected\def\getnamedglyphstyled#fontname#character{{\setstyledsymbolicfont{#fontname}\clf_fontchar{#character}}} +\permanent\protected\def\getnamedglyphdirect#fontname#character{{\setdirectsymbolicfont{#fontname}\clf_fontchar{#character}}} +\permanent\protected\def\getglyphstyled #fontname#character{{\setstyledsymbolicfont{#fontname}\doifelsenumber{#character}\char\donothing#character}} +\permanent\protected\def\getglyphdirect #fontname#character{{\setdirectsymbolicfont{#fontname}\doifelsenumber{#character}\char\donothing#character}} +\permanent\protected\def\resolvedglyphstyled#fontname#character{{\setstyledsymbolicfont{#fontname}\clf_tochar{#character}}} +\permanent\protected\def\resolvedglyphdirect#fontname#character{{\setdirectsymbolicfont{#fontname}\clf_tochar{#character}}} % this one is wrong: -\unexpanded\def\getscaledglyph#scale#name#content% +\permanent\protected\def\getscaledglyph#scale#name#content% {{\setscaledstyledsymbolicfont\fontbody{#scale}{#name}\doifelsenumber{#content}\char\donothing#content}} \let\getglyph \getglyphstyled % old @@ -183,8 +185,7 @@ \let\symbolicsizedfont\setscaledstyledsymbolicfont % old \let\symbolicfont \setstyledsymbolicfont % old -\unexpanded\def\symbolicscaledfont{\setsscaledstyledsymbolicfont\fontbody} -\unexpanded\def\symbolicscaledfont{\setscaledstyledsymbolicfont\fontbody} +\permanent\protected\def\symbolicscaledfont{\setscaledstyledsymbolicfont\fontbody} %D The last implementation of \type {\getglyph} permits definitions like: %D @@ -215,7 +216,7 @@ %D Every now and then we want to define a font directly, for instance when we %D typeset title pages. The next macro saves some typing: -\unexpanded\def\setfont% geen \font_helpers_set_font mogelijk +\permanent\protected\def\setfont% geen \font_helpers_set_font mogelijk {\afterassignment\font_basics_set_font\font\nextfont=} \def\font_basics_set_font @@ -231,7 +232,7 @@ %D \macros{doiffontcharelse} -\unexpanded\def\doifelsefontchar#specification#unicode% this could be a direct lua call +\permanent\protected\def\doifelsefontchar#specification#unicode% this could be a direct lua call {\begingroup \font_basics_define_font_without_parameters{thedefinedfont}{#specification}% \iffontchar\font#unicode\relax @@ -240,6 +241,6 @@ \endgroup\expandafter\secondoftwoarguments \fi} -\let\doiffontcharelse\doifelsefontchar +\aliased\let\doiffontcharelse\doifelsefontchar \protect \endinput diff --git a/tex/context/base/mkiv/font-tra.mkiv b/tex/context/base/mkiv/font-tra.mkiv index 7d02cd140..99c7ab3c8 100644 --- a/tex/context/base/mkiv/font-tra.mkiv +++ b/tex/context/base/mkiv/font-tra.mkiv @@ -357,7 +357,7 @@ % new -\unexpanded\def\savefont[#1]% not yet in i-*.xml +\unexpanded\def\savefontdata[#1]% not yet in i-*.xml {\begingroup \getdummyparameters[#1]% \clf_savefont { diff --git a/tex/context/base/mkiv/grph-epd.lua b/tex/context/base/mkiv/grph-epd.lua index f8fa62953..0993270f1 100644 --- a/tex/context/base/mkiv/grph-epd.lua +++ b/tex/context/base/mkiv/grph-epd.lua @@ -40,7 +40,7 @@ local function mergegoodies(optionlist) end function figures.mergegoodies(optionlist) - -- todo: we can use runtoks instead + -- todo: we can use runlocal instead context.stepwise(function() -- we use stepwise because we might need to define symbols -- for stamps that have no default appearance diff --git a/tex/context/base/mkiv/grph-fig.mkiv b/tex/context/base/mkiv/grph-fig.mkiv index 3bf3248a6..c196d1420 100644 --- a/tex/context/base/mkiv/grph-fig.mkiv +++ b/tex/context/base/mkiv/grph-fig.mkiv @@ -256,6 +256,9 @@ \tpack{\vskip12\points\box2\vskip6\points}}% \endgroup} +\definesystemconstant {vwa} +\definesystemconstant {vwb} + \unexpanded\def\grph_steps_three_referring(#1,#2)#3(#4,#5)#6[#7]% {\advance\c_grph_steps_reference\plusone \position(#1,#2) diff --git a/tex/context/base/mkiv/grph-pat.mkxl b/tex/context/base/mkiv/grph-pat.mkxl new file mode 100644 index 000000000..df30258bc --- /dev/null +++ b/tex/context/base/mkiv/grph-pat.mkxl @@ -0,0 +1,119 @@ +%D \module +%D [ file=grph-par, +%D version=2016.07.08, +%D title=\CONTEXT\ Graphic Macros, +%D subtitle=Patterns, +%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 works ok in Okular and MuPDF but somehow xforms don't work in Acrobat +%D (full nor reader). Also the basic offset is kind of unspecified. So \unknown\ +%D we're dealing with a fragile feature. So, don't rely on where the first (ulr) +%D tile occurs. +%D +%D The two commands introduced here are not documented (yet). + +\writestatus{loading}{ConTeXt Graphic Macros / Patterns} + +\unprotect + +\registerctxluafile{grph-pat}{} + +\permanent\tolerant\protected\def\registerpattern[#1]#*[#2]% + {\begingroup + \letdummyparameter\c!name \s!dummy + \letdummyparameter\c!width \v!auto + \letdummyparameter\c!height \v!auto + \letdummyparameter\c!hoffset\zeropoint + \letdummyparameter\c!voffset\zeropoint + \unless\iftok{#2}\emptytoks + \setdummyparameter\c!name{#1}% + \getdummyparameters[#2]% + \orelse\ifhastok={#1}% + \getdummyparameters[#1]% + \else + \setdummyparameter\c!name{#1}% + \fi + \dowithnextboxcs\syst_boxes_registerpattern_indeed\hbox} + +\immutable\edef\v!auto_m{-\v!auto} + +\def\syst_boxes_registerpattern_indeed + {%\finalizeobjectbox\nextbox + \edef\p_width {\dummyparameter\c!width}% + \edef\p_height {\dummyparameter\c!height}% + \edef\p_hoffset{\dummyparameter\c!hoffset}% + \edef\p_voffset{\dummyparameter\c!voffset}% + \scratchwidth \dimexpr\ifx\p_width \v!auto\wd \nextbox \else\p_width \fi\relax + \scratchheight \dimexpr\ifx\p_height \v!auto\htdp\nextbox \else\p_height \fi\relax + \scratchhoffset\dimexpr\ifx\p_hoffset\v!auto\scratchwidth /2\else\ifx\p_hoffset\v!auto_m-\scratchwidth /2\else\p_hoffset\fi\fi\relax + \scratchvoffset\dimexpr\ifx\p_voffset\v!auto\scratchheight/2\else\ifx\p_voffset\v!auto_m-\scratchheight/2\else\p_voffset\fi\fi\relax + \clf_registerpattern + name {\dummyparameter\c!name} + number \nextbox + width \scratchwidth + height \scratchheight + hoffset \scratchhoffset + voffset \scratchvoffset + \relax + \endgroup} + +\permanent\tolerant\protected\def\applypattern[#1]#*[#2]% + {\hbox\bgroup + \letdummyparameter\c!name \s!dummy + \letdummyparameter\c!width \zeropoint + \letdummyparameter\c!height\zeropoint + \unless\iftok{#2}\emptytoks + \setdummyparameter\c!name{#1}% + \getdummyparameters[#2]% + \orelse\ifhastok={#1}% + \getdummyparameters[#1]% + \else + \setdummyparameter\c!name{#1}% + \fi + \clf_applypattern + name {\dummyparameter\c!name} + number \nextbox + width \dimexpr\dummyparameter\c!width\relax + height \dimexpr\dummyparameter\c!height\relax + \relax + \box\nextbox + \egroup} + +\protect + +\continueifinputfile{grph-pat.mkxl} + +\nopdfcompression + +\starttext + + \registerpattern[demo]{It \darkred Works!} + + \framed[offset=overlay]{\applypattern[demo][width=7cm,height=4cm]} + + \blank + + \registerpattern[name=more,hoffset=0bp,voffset=0pt]{\externalfigure[cow.pdf][width=1cm]} + + \framed[offset=overlay]{\applypattern[name=more,width=7cm,height=4cm]} + + \blank + + \registerpattern[name=more,hoffset=auto,voffset=auto]{\externalfigure[cow.pdf][width=1cm]} + + \framed[offset=overlay]{\applypattern[name=more,width=7cm,height=4cm]} + + \blank + + \registerpattern[name=more,hoffset=-auto,voffset=-auto]{\externalfigure[cow.pdf][width=1cm]} + + \framed[offset=overlay]{\applypattern[name=more,width=7cm,height=4cm]} + +\stoptext + diff --git a/tex/context/base/mkiv/grph-trf.mkiv b/tex/context/base/mkiv/grph-trf.mkiv index d6a6acd78..d1be7e1d7 100644 --- a/tex/context/base/mkiv/grph-trf.mkiv +++ b/tex/context/base/mkiv/grph-trf.mkiv @@ -234,11 +234,20 @@ {\ifdim\p_sx\onepoint=\onepoint\else\edef\p_width {\the\dimexpr\p_sx\d_grph_scale_wd}\fi \ifdim\p_sy\onepoint=\onepoint\else\edef\p_height{\the\dimexpr\p_sy\d_grph_scale_ht}\fi} -\def\grph_scale_rounded#1% - {\expandafter\expandafter\expandafter\grph_scale_rounded_indeed - \expandafter\WITHOUTPT\the\dimexpr#1\points*100+32768\scaledpoint\relax.\relax} +\ifcase\contextlmtxmode -\def\grph_scale_rounded_indeed#1.#2\relax{#1} + \def\grph_scale_rounded#1% + {\expandafter\expandafter\expandafter\grph_scale_rounded_indeed + \expandafter\WITHOUTPT\the\dimexpr#1\points*100+32768\scaledpoint\relax.\relax} + + \def\grph_scale_rounded_indeed#1.#2\relax{#1} + +\else + + \def\grph_scale_rounded#1% + {\thewithoutunit\dimexpr#1\points*100+32768\scaledpoint\relax} + +\fi \def\grph_scale_calculations_nop {\settrue\c_grph_scale_done diff --git a/tex/context/base/mkiv/hand-ini.mkxl b/tex/context/base/mkiv/hand-ini.mkxl index 9c291fed8..3fd82f239 100644 --- a/tex/context/base/mkiv/hand-ini.mkxl +++ b/tex/context/base/mkiv/hand-ini.mkxl @@ -37,26 +37,27 @@ \unprotect -%D New stuff. +%D Probbaly not yet used by many. -\unexpanded\def\setupfontexpansion {\dodoubleargument\font_expansion_setup } -\unexpanded\def\setupfontprotrusion{\dodoubleargument\font_protrusion_setup} - -\def\font_expansion_setup [#1][#2]{\clf_setupfontexpansion {#1}{#2}} -\def\font_protrusion_setup[#1][#2]{\clf_setupfontprotrusion{#1}{#2}} +\permanent\tolerant\protected\def\setupfontexpansion [#1]#*[#2]{\clf_setupfontexpansion {#1}{#2}} +\permanent\tolerant\protected\def\setupfontprotrusion[#1]#*[#2]{\clf_setupfontprotrusion{#1}{#2}} % \setupfontprotrusion[quality-upright][vector=quality] % \setupfontprotrusion[quality-slanted][vector=quality,right=1.5] -\let\adjustspacing\relax \newcount\adjustspacing % a little bit protection -\let\protrudechars\relax \newcount\protrudechars % a little bit protection +\pushoverloadmode + + \let\adjustspacing\relax \newcount\adjustspacing % a little bit protection + \let\protrudechars\relax \newcount\protrudechars % a little bit protection -% at some point we can introduce extreme expansion, i.e. \normaladjustspacing\plustwo +\popoverloadmode + +%D At some point we can introduce extreme expansion, i.e. \type {\normaladjustspacing\plustwo}. % 0 = disabled -% 1 = notused (thesis) +% 1 = notused (thesis) % 2 = glyph + kern -% 3 = glyph only +% 3 = glyph only (default) \def\font_expansion_enable {\normaladjustspacing\plusthree} \def\font_expansion_enable_k{\normaladjustspacing\plustwo} @@ -74,9 +75,9 @@ % % \let\fonthandling\empty % -% \unexpanded\def\startfonthandling #1{\fonthandlingerror\fonthandlingerror\gobbleuntil\stopfonthandling} % can't happen -% \unexpanded\def\definefonthandling {\dotripleempty\dodefinefonthandling} -% \unexpanded\def\setupfonthandling {\dodoubleempty\dosetupfonthandling } +% \protected\def\startfonthandling #1{\fonthandlingerror\fonthandlingerror\gobbleuntil\stopfonthandling} % can't happen +% \protected\def\definefonthandling {\dotripleempty\dodefinefonthandling} +% \protected\def\setupfonthandling {\dodoubleempty\dosetupfonthandling } % \def\dodefinefonthandling[#1][#2][#3]{\fonthandlingerror} % \def\dosetupfonthandling [#1][#2]{\fonthandlingerror} % \def\usehandling [#1]{\fonthandlingerror} @@ -102,10 +103,11 @@ % [\c!stretch=50, % \c!shrink=20] -\unexpanded\def\setexpansion - {\dosingleempty\font_expansion_set} +\permanent\tolerant\protected\def\setexpansion[#1]{\begincsname\??expansion:#1\endcsname} + +%D New in \LMTX: can be used grouped. -\unexpanded\def\font_expansion_set[#1]% - {\begincsname\??expansion:#1\endcsname} +\permanent\protected\def\noexpansion {\bitwiseflip\glyphoptions\noexpansioncode} +\permanent\protected\def\noprotrusion{\bitwiseflip\glyphoptions\noprotrusioncode} \protect \endinput diff --git a/tex/context/base/mkiv/lang-def.mkiv b/tex/context/base/mkiv/lang-def.mkiv index 35a634644..f2364a128 100644 --- a/tex/context/base/mkiv/lang-def.mkiv +++ b/tex/context/base/mkiv/lang-def.mkiv @@ -489,6 +489,22 @@ % Artificial Languages: Esperanto +\installlanguage + [\s!esperanto] + [%\c!spacing=\v!packed, + %\c!leftsentence=\emdash, + %\c!rightsentence=\emdash, + %\c!leftsubsentence=\emdash, + %\c!rightsubsentence=\emdash, + %\c!leftquote=\lowerleftdoubleninequote, + %\c!rightquote=\upperrightdoublesixquote, + %\c!leftquotation=\lowerleftdoubleninequote, + %\c!rightquotation=\upperrightdoublesixquote, + %\c!date={\v!year,~m.,\space,\v!month,\space,\v!day,~d.}, + \s!patterns=eo, + \s!lefthyphenmin=2, + \s!righthyphenmin=2] + % Baltic Languages: Lettish/Latvian, Lietuvių/Lithuanian \installlanguage diff --git a/tex/context/base/mkiv/lang-dis.lmt b/tex/context/base/mkiv/lang-dis.lmt new file mode 100644 index 000000000..263225691 --- /dev/null +++ b/tex/context/base/mkiv/lang-dis.lmt @@ -0,0 +1,222 @@ +if not modules then modules = { } end modules ['lang-dis'] = { + version = 1.001, + comment = "companion to lang-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local concat = table.concat + +local tex = tex +local nodes = nodes + +local tasks = nodes.tasks +local nuts = nodes.nuts + +local enableaction = tasks.enableaction +local setaction = tasks.setaction + +local setfield = nuts.setfield +local getnext = nuts.getnext +local getprev = nuts.getprev +local getid = nuts.getid +local getattr = nuts.getattr +local getsubtype = nuts.getsubtype +local setsubtype = nuts.setsubtype +local getchar = nuts.getchar +local setchar = nuts.setchar +local getdisc = nuts.getdisc +local setdisc = nuts.setdisc +local getlanguage = nuts.getlanguage +local getboth = nuts.getboth +local setlist = nuts.setlist +local setlink = nuts.setlink +local isglyph = nuts.isglyph + +local copy_node = nuts.copy +local remove_node = nuts.remove +local flush_list = nuts.flush_list +local flush_node = nuts.flush_node + +local nextdisc = nuts.traversers.disc + +local new_disc = nuts.pool.disc + +local nodecodes = nodes.nodecodes +local disccodes = nodes.disccodes + +local disc_code = nodecodes.disc +local glyph_code = nodecodes.glyph + +local explicitdisc_code = disccodes.explicit + +local a_visualize = attributes.private("visualizediscretionary") +local setattribute = tex.setattribute + +local getlanguagedata = languages.getdata +local prehyphenchar = language.prehyphenchar +local posthyphenchar = language.posthyphenchar + +local check_regular = true + +local setlistcolor = nodes.tracers.colors.setlist + +function languages.visualizediscretionaries(head) + for d in nextdisc, head do + if getattr(d,a_visualize) then + local pre, post, replace = getdisc(d) + if pre then + setlistcolor(pre,"darkred") + end + if post then + setlistcolor(post,"darkgreen") + end + if replace then + setlistcolor(replace,"darkblue") + end + end + end + return head +end + +local enabled = false + +function languages.showdiscretionaries(v) + if v == false then + setattribute(a_visualize,unsetvalue) + else -- also nil + if not enabled then + enableaction("processors","languages.visualizediscretionaries") + enabled = true + end + setattribute(a_visualize,1) + end +end + +interfaces.implement { + name = "showdiscretionaries", + actions = languages.showdiscretionaries +} + +do + + local toutf = nodes.listtoutf + local utfchar = utf.char + local f_disc = string.formatters["{%s}{%s}{%s}"] + local replace = lpeg.replacer( { + [utfchar(0x200C)] = "|", + [utfchar(0x200D)] = "|", + }, nil, true) + + local function convert(list) + return list and replace(toutf(list)) or "" + end + + function languages.serializediscretionary(d) -- will move to tracer + local pre, post, replace = getdisc(d) + return f_disc(convert(pre),convert(post),convert(replace)) + end + +end + +-- -- + +local wiped = 0 + +local flatten_discretionaries = nuts.flatten_discretionaries -- todo in nodes + +-- if flatten_discretionaries then + + function languages.flatten(head) + local h, n = flatten_discretionaries(head) + wiped = wiped + n + return h, n > 0 + end + +-- else +-- +-- local function wipe(head,delayed) +-- local p, n = getboth(delayed) +-- local _, _, h, _, _, t = getdisc(delayed,true) +-- if p or n then +-- if h then +-- setlink(p,h) +-- setlink(t,n) +-- setfield(delayed,"replace") +-- else +-- setlink(p,n) +-- end +-- end +-- if head == delayed then +-- head = h +-- end +-- wiped = wiped + 1 +-- flush_node(delayed) +-- return head +-- end +-- +-- function languages.flatten(head) +-- local delayed = nil +-- for d in nextdisc, head do +-- if delayed then +-- head = wipe(head,delayed) +-- end +-- delayed = d +-- end +-- if delayed then +-- return wipe(head,delayed), true +-- else +-- return head, false +-- end +-- end +-- +-- end + +function languages.nofflattened() + return wiped -- handy for testing +end + +-- experiment: for now not in not in export mode! + +local flatten = languages.flatten + +nodes.handlers.flattenline = flatten + +function nodes.handlers.flatten(head,where) + if head and (where == "box" or where == "adjusted_hbox") then + return flatten(head) + end + return head +end + +directives.register("hyphenator.flatten",function(v) + -- use with care + setaction("processors","nodes.handlers.flatten",v) + setaction("contributers","nodes.handlers.flattenline",v) +end) + +-- moved here: + +function languages.explicithyphen(template) + local pre, post + local disc = new_disc() + if template then + local langdata = getlanguagedata(getlanguage(template)) + local instance = langdata and langdata.instance + if instance then + local prechr = prehyphenchar(instance) + local postchr = posthyphenchar(instance) + if prechr >= 0 then + pre = copy_node(template) + setchar(pre,prechr) + end + if postchr >= 0 then + post = copy_node(template) + setchar(post,postchr) + end + end + end + setdisc(disc,pre,post,nil,explicitdisc_code,tex.exhyphenpenalty) + return disc +end diff --git a/tex/context/base/mkiv/lang-dis.lua b/tex/context/base/mkiv/lang-dis.lua index 90e84f65d..3e4678801 100644 --- a/tex/context/base/mkiv/lang-dis.lua +++ b/tex/context/base/mkiv/lang-dis.lua @@ -28,7 +28,7 @@ local getchar = nuts.getchar local setchar = nuts.setchar local getdisc = nuts.getdisc local setdisc = nuts.setdisc -local getlang = nuts.setlang +local getlanguage = nuts.getlanguage local getboth = nuts.getboth local setlist = nuts.setlist local setlink = nuts.setlink diff --git a/tex/context/base/mkiv/lang-exp.lua b/tex/context/base/mkiv/lang-exp.lua index 254961ee6..c2eb46990 100644 --- a/tex/context/base/mkiv/lang-exp.lua +++ b/tex/context/base/mkiv/lang-exp.lua @@ -116,7 +116,7 @@ if LUATEXVERSION < 1.005 then -- not loaded any more end end if template then - local language = template and getlang(template) + local language = template and getlanguage(template) local data = getlanguagedata(language) local prechar = data.prehyphenchar local postchar = data.posthyphenchar diff --git a/tex/context/base/mkiv/lang-hyp.lmt b/tex/context/base/mkiv/lang-hyp.lmt new file mode 100644 index 000000000..c2862f536 --- /dev/null +++ b/tex/context/base/mkiv/lang-hyp.lmt @@ -0,0 +1,1806 @@ +if not modules then modules = { } end modules ['lang-hyp'] = { + version = 1.001, + comment = "companion to lang-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- In an automated workflow hypenation of long titles can be somewhat problematic +-- especially when demands conflict. For that reason I played a bit with a Lua based +-- variant of the traditional hyphenation machinery. This mechanism has been extended +-- several times in projects, of which a good description can be found in TUGboat, +-- Volume 27 (2006), No. 2 — Proceedings of EuroTEX2006: Automatic non-standard +-- hyphenation in OpenOffice.org by László Németh. +-- +-- Being the result of two days experimenting the following implementation is probably +-- not completely okay yet. If there is demand I might add some more features and plugs. +-- The performance is quite okay but can probably improved a bit, although this is not +-- the most critital code. For instance, on a metafun manual run the overhead is about +-- 0.3 seconds on 19 seconds which is not that bad. +-- +-- In the procecess of wrapping up (for the ctx conference proceedings) I cleaned up +-- and extended the code a bit. It can be used in production. +-- +-- . a l g o r i t h m . +-- 4l1g4 +-- l g o3 +-- 1g o +-- 2i t h +-- 4h1m +-- --------------------- +-- 4 1 4 3 2 0 4 1 +-- a l-g o-r i t h-m + +-- . a s s z o n n y a l . +-- s1s z/sz=sz,1,3 +-- n1n y/ny=ny,1,3 +-- ----------------------- +-- 0 1 0 0 0 1 0 0 0/sz=sz,2,3,ny=ny,6,3 +-- a s-s z o n-n y a l/sz=sz,2,3,ny=ny,6,3 +-- +-- ab1cd/ef=gh,2,2 : acd - efd (pattern/replacement,start,length +-- +-- todo : support hjcodes (<32 == length) like luatex does now (no need/demand so far) +-- maybe : support hyphenation over range (can alsready be done using attributes/language) +-- maybe : reset dictionary.hyphenated when a pattern is added and/or forced reset option +-- todo : check subtypes (because they have subtle meanings in the line breaking) +-- +-- word start (in tex engine): +-- +-- boundary : yes when wordboundary +-- hlist : when hyphenationbounds 1 or 3 +-- vlist : when hyphenationbounds 1 or 3 +-- rule : when hyphenationbounds 1 or 3 +-- dir : when hyphenationbounds 1 or 3 +-- whatsit : when hyphenationbounds 1 or 3 +-- glue : yes +-- math : skipped +-- glyph : exhyphenchar (one only) : yes (so no -- ---) +-- otherwise : yes +-- +-- word end (in tex engine): +-- +-- boundary : yes +-- glyph : yes when different language +-- glue : yes +-- penalty : yes +-- kern : yes when not italic (for some historic reason) +-- hlist : when hyphenationbounds 2 or 3 +-- vlist : when hyphenationbounds 2 or 3 +-- rule : when hyphenationbounds 2 or 3 +-- dir : when hyphenationbounds 2 or 3 +-- whatsit : when hyphenationbounds 2 or 3 +-- ins : when hyphenationbounds 2 or 3 +-- adjust : when hyphenationbounds 2 or 3 + +local type, rawget, rawset, tonumber, next = type, rawget, rawset, tonumber, next + +local P, R, S, Cg, Cf, Ct, Cc, C, Carg, Cs = lpeg.P, lpeg.R, lpeg.S, lpeg.Cg, lpeg.Cf, lpeg.Ct, lpeg.Cc, lpeg.C, lpeg.Carg, lpeg.Cs +local lpegmatch = lpeg.match + +local context = context + +local concat = table.concat +local insert = table.insert +local remove = table.remove +local formatters = string.formatters +local utfchar = utf.char +local utfbyte = utf.byte + +if not characters then + require("char-ini") +end + +local setmetatableindex = table.setmetatableindex + +-- \enabletrackers[hyphenator.steps=silent] will not write to the terminal + +local trace_steps = false trackers.register("hyphenator.steps", function(v) trace_steps = v end) +local trace_visualize = false trackers.register("hyphenator.visualize",function(v) trace_visualize = v end) + +local report = logs.reporter("hyphenator") + +local implement = interfaces and interfaces.implement or function() end + +languages = languages or { } +local hyphenators = languages.hyphenators or { } +languages.hyphenators = hyphenators +local traditional = hyphenators.traditional or { } +hyphenators.traditional = traditional + +local dictionaries = setmetatableindex(function(t,k) + local v = { + patterns = { }, + hyphenated = { }, + specials = { }, + exceptions = { }, + loaded = false, + } + t[k] = v + return v +end) + +hyphenators.dictionaries = dictionaries + +local character = lpeg.patterns.utf8character +local digit = R("09") +local weight = digit/tonumber + Cc(0) +local fence = P(".") +local hyphen = P("-") +local space = P(" ") +local char = character - space +local validcharacter = (character - S("./")) +local keycharacter = character - S("/") +----- basepart = Ct( (Cc(0) * fence)^-1 * (weight * validcharacter)^1 * weight * (fence * Cc(0))^-1) +local specpart = (P("/") * Cf ( Ct("") * + Cg ( Cc("before") * C((1-P("="))^1) * P("=") ) * + Cg ( Cc("after") * C((1-P(","))^1) ) * + ( P(",") * + Cg ( Cc("start") * ((1-P(","))^1/tonumber) * P(",") ) * + Cg ( Cc("length") * ((1-P(-1) )^1/tonumber) ) + )^-1 + , rawset))^-1 + +local make_hashkey_p = Cs((digit/"" + keycharacter)^1) +----- make_pattern_p = basepart * specpart +local make_hashkey_e = Cs((hyphen/"" + keycharacter)^1) +local make_pattern_e = Ct(P(char) * (hyphen * Cc(true) * P(char) + P(char) * Cc(false))^1) -- catch . and char after - + +-- local make_hashkey_c = Cs((digit + keycharacter/"")^1) +-- local make_pattern_c = Ct((P(1)/tonumber)^1) + +-- local cache = setmetatableindex(function(t,k) +-- local n = lpegmatch(make_hashkey_c,k) +-- local v = lpegmatch(make_pattern_c,n) +-- t[k] = v +-- return v +-- end) +-- +-- local weight_n = digit + Cc("0") +-- local basepart_n = Cs( (Cc("0") * fence)^-1 * (weight * validcharacter)^1 * weight * (fence * Cc("0"))^-1) / cache +-- local make_pattern_n = basepart_n * specpart + +local make_pattern_c = Ct((P(1)/tonumber)^1) + +-- us + nl: 17664 entries -> 827 unique (saves some 3M) + +local cache = setmetatableindex(function(t,k) + local v = lpegmatch(make_pattern_c,k) + t[k] = v + return v +end) + +local weight_n = digit + Cc("0") +local fence_n = fence / "0" +local char_n = validcharacter / "" +local basepart_n = Cs(fence_n^-1 * (weight_n * char_n)^1 * weight_n * fence_n^-1) / cache +local make_pattern_n = basepart_n * specpart + +local function register_pattern(patterns,specials,str,specification) + local k = lpegmatch(make_hashkey_p,str) + -- local v1, v2 = lpegmatch(make_pattern_p,str) + local v1, v2 = lpegmatch(make_pattern_n,str) + patterns[k] = v1 -- is this key still ok for complex patterns + if specification then + specials[k] = specification + elseif v2 then + specials[k] = v2 + end +end + +local function unregister_pattern(patterns,specials,str) + local k = lpegmatch(make_hashkey_p,str) + patterns[k] = nil + specials[k] = nil +end + +local p_lower = lpeg.patterns.utf8lower + +local function register_exception(exceptions,str,specification) + local l = lpegmatch(p_lower,str) + local k = lpegmatch(make_hashkey_e,l) + local v = lpegmatch(make_pattern_e,l) + exceptions[k] = v +end + +local p_pattern = ((Carg(1) * Carg(2) * C(char^1)) / register_pattern + 1)^1 +local p_exception = ((Carg(1) * C(char^1)) / register_exception + 1)^1 +local p_split = Ct(C(character)^1) + +function traditional.loadpatterns(language,filename) + local dictionary = dictionaries[language] + if not dictionary.loaded then + if not filename or filename == "" then + filename = "lang-" .. language + end + filename = file.addsuffix(filename,"lua") + local fullname = resolvers.findfile(filename) + if fullname and fullname ~= "" then + local specification = dofile(fullname) + if specification then + local patterns = specification.patterns + if patterns then + local data = patterns.data + if data and data ~= "" then + lpegmatch(p_pattern,data,1,dictionary.patterns,dictionary.specials) + end + end + local exceptions = specification.exceptions + if exceptions then + local data = exceptions.data + if data and data ~= "" then + lpegmatch(p_exception,data,1,dictionary.exceptions) + end + end + end + end + dictionary.loaded = true + end + return dictionary +end + +local lcchars = characters.lcchars +local uccodes = characters.uccodes +local categories = characters.categories +local nofwords = 0 +local nofhashed = 0 + +local steps = nil +local f_show = formatters["%w%s"] + +local function show_log() + if trace_steps == true then + report() + local w = #steps[1][1] + for i=1,#steps do + local s = steps[i] + report("%s%w%S %S",s[1],w - #s[1] + 3,s[2],s[3] or "") + end + report() + end +end + +local function show_1(wsplit) + local u = concat(wsplit," ") + steps = { { f_show(0,u), f_show(0,u) } } +end + +local function show_2(c,m,wsplit,done,i,spec) + local s = lpegmatch(p_split,c) + local t = { } + local n = #m + local w = #wsplit + for j=1,n do + t[#t+1] = m[j] + t[#t+1] = s[j] + end + local m = 2*i-2 + local l = #t + local s = spec and table.sequenced(spec) or "" + if m == 0 then + steps[#steps+1] = { f_show(m, concat(t,"",2)), f_show(1,concat(done," ",2,#done),s) } + elseif i+1 == w then + steps[#steps+1] = { f_show(m-1,concat(t,"",1,#t-1)), f_show(1,concat(done," ",2,#done),s) } + else + steps[#steps+1] = { f_show(m-1,concat(t)), f_show(1,concat(done," ",2,#done),s) } + end +end + +local function show_3(wsplit,done) + local t = { } + local h = { } + local n = #wsplit + for i=1,n do + local w = wsplit[i] + if i > 1 then + local d = done[i] + t[#t+1] = i > 2 and d % 2 == 1 and "-" or " " + h[#h+1] = d + end + t[#t+1] = w + h[#h+1] = w + end + steps[#steps+1] = { f_show(0,concat(h)), f_show(0,concat(t)) } + show_log() +end + +local function show_4(wsplit,done) + steps = { { concat(wsplit," ") } } + show_log() +end + +function traditional.lasttrace() + return steps +end + +-- We could reuse the w table but as we cache the resolved words there is not much gain in +-- that complication. +-- +-- Beware: word can be a table and when n is passed to we can assume reuse so we need to +-- honor that n then. +-- +-- todo: a fast variant for tex ... less lookups (we could check is dictionary has changed) +-- ... although due to caching the already done words, we don't do much here + +local function hyphenate(dictionary,word,n) -- odd is okay + nofwords = nofwords + 1 + local hyphenated = dictionary.hyphenated + local isstring = type(word) == "string" + if isstring then + local done = hyphenated[word] + if done ~= nil then + return done + end + elseif n then + local done = hyphenated[concat(word,"",1,n)] + if done ~= nil then + return done + end + else + local done = hyphenated[concat(word)] + if done ~= nil then + return done + end + end + local key + if isstring then + key = word + word = lpegmatch(p_split,word) + if not n then + n = #word + end + else + if not n then + n = #word + end + key = concat(word,"",1,n) + end + local l = 1 + local w = { "." } + -- local d = dictionary.codehash + for i=1,n do + local c = word[i] + -- l = l + (d[c] or 1) + l = l + 1 + w[l] = lcchars[c] or c + end + l = l + 1 + w[l] = "." + local c = concat(w,"",2,l-1) + -- + local done = hyphenated[c] + if done ~= nil then + hyphenated[key] = done + nofhashed = nofhashed + 1 + return done + end + -- + local exceptions = dictionary.exceptions + local exception = exceptions[c] + if exception then + if trace_steps then + show_4(w,exception) + end + hyphenated[key] = exception + nofhashed = nofhashed + 1 + return exception + end + -- + if trace_steps then + show_1(w) + end + -- + local specials = dictionary.specials + local patterns = dictionary.patterns + -- + local spec + for i=1,l do + for j=i,l do + local c = concat(w,"",i,j) + local m = patterns[c] + if m then + local s = specials[c] + if not done then + done = { } + spec = nil + -- the string that we resolve has explicit fences (.) so done starts at + -- the first fence and runs upto the last one so we need one slot less + for i=1,l do + done[i] = 0 + end + end + -- we run over the pattern that always has a (zero) value for each character + -- plus one more as we look at both sides + for k=1,#m do + local new = m[k] + if not new then + break + elseif new == true then + report("fatal error") + break + elseif new > 0 then + local pos = i + k - 1 + local old = done[pos] + if not old then + -- break ? + elseif new > old then + done[pos] = new + if s then + local b = i + (s.start or 1) - 1 + if b > 0 then + local e = b + (s.length or 2) - 1 + if e > 0 then + if pos >= b and pos <= e then + if spec then + spec[pos] = { s, k - 1 } + else + spec = { [pos] = { s, k - 1 } } + end + end + end + end + end + end + end + end + if trace_steps and done then + show_2(c,m,w,done,i,s) + end + end + end + end + if trace_steps and done then + show_3(w,done) + end + if done then + local okay = false + for i=3,#done do + if done[i] % 2 == 1 then + done[i-2] = spec and spec[i] or true + okay = true + else + done[i-2] = false + end + end + if okay then + done[#done] = nil + done[#done] = nil + else + done = false + end + else + done = false + end + hyphenated[key] = done + nofhashed = nofhashed + 1 + return done +end + +function traditional.gettrace(language,word) + if not word or word == "" then + return + end + local dictionary = dictionaries[language] + if dictionary then + local hyphenated = dictionary.hyphenated + hyphenated[word] = nil + hyphenate(dictionary,word) + return steps + end +end + +local methods = setmetatableindex(function(t,k) local v = hyphenate t[k] = v return v end) + +function traditional.installmethod(name,f) + if rawget(methods,name) then + report("overloading %a is not permitted",name) + else + methods[name] = f + end +end + +local s_detail_1 = "-" +local f_detail_2 = formatters["%s-%s"] +local f_detail_3 = formatters["{%s}{%s}{}"] +local f_detail_4 = formatters["{%s%s}{%s%s}{%s}"] + +function traditional.injecthyphens(dictionary,word,specification) + if not word then + return false + end + if not specification then + return word + end + local hyphens = hyphenate(dictionary,word) + if not hyphens then + return word + end + + -- the following code is similar to code later on but here we have strings while there + -- we have hyphen specs + + local word = lpegmatch(p_split,word) + local size = #word + + local leftmin = specification.leftcharmin or 2 + local rightmin = size - (specification.rightcharmin or leftmin) + local leftchar = specification.leftchar + local rightchar = specification.rightchar + + local result = { } + local rsize = 0 + local position = 1 + + while position <= size do + if position >= leftmin and position <= rightmin then + local hyphen = hyphens[position] + if not hyphen then + rsize = rsize + 1 + result[rsize] = word[position] + position = position + 1 + elseif hyphen == true then + rsize = rsize + 1 + result[rsize] = word[position] + rsize = rsize + 1 + if leftchar and rightchar then + result[rsize] = f_detail_3(rightchar,leftchar) + else + result[rsize] = s_detail_1 + end + position = position + 1 + else + local o, h = hyphen[2] + if o then + h = hyphen[1] + else + h = hyphen + o = 1 + end + local b = position - o + (h.start or 1) + local e = b + (h.length or 2) - 1 + if b > 0 and e >= b then + for i=1,b-position do + rsize = rsize + 1 + result[rsize] = word[position] + position = position + 1 + end + rsize = rsize + 1 + if leftchar and rightchar then + result[rsize] = f_detail_4(h.before,rightchar,leftchar,h.after,concat(word,"",b,e)) + else + result[rsize] = f_detail_2(h.before,h.after) + end + position = e + 1 + else + -- error + rsize = rsize + 1 + result[rsize] = word[position] + position = position + 1 + end + end + else + rsize = rsize + 1 + result[rsize] = word[position] + position = position + 1 + end + end + return concat(result) +end + +do + + local word = C((1-space)^1) + local spaces = space^1 + + local u_pattern = (Carg(1) * Carg(2) * word / unregister_pattern + spaces)^1 + local r_pattern = (Carg(1) * Carg(2) * word * Carg(3) / register_pattern + spaces)^1 + local e_pattern = (Carg(1) * word / register_exception + spaces)^1 + + function traditional.registerpattern(language,str,specification) + local dictionary = dictionaries[language] + if specification == false then + lpegmatch(u_pattern,str,1,dictionary.patterns,dictionary.specials) + -- unregister_pattern(dictionary.patterns,dictionary.specials,str) + else + lpegmatch(r_pattern,str,1,dictionary.patterns,dictionary.specials,type(specification) == "table" and specification or false) + -- register_pattern(dictionary.patterns,dictionary.specials,str,specification) + end + end + + function traditional.registerexception(language,str) + lpegmatch(e_pattern,str,1,dictionaries[language].exceptions) + end + +end + +-- todo: unicodes or utfhash ? + +if context then + + local nodecodes = nodes.nodecodes + local disccodes = nodes.disccodes + + local glyph_code = nodecodes.glyph + local disc_code = nodecodes.disc + local math_code = nodecodes.math + local hlist_code = nodecodes.hlist + + local automaticdisc_code = disccodes.automatic + local regulardisc_code = disccodes.regular + + local nuts = nodes.nuts + local tonode = nodes.tonode + local nodepool = nuts.pool + + local new_disc = nodepool.disc + local new_penalty = nodepool.penalty + + local getfield = nuts.getfield + local getfont = nuts.getfont + local getid = nuts.getid + local getattr = nuts.getattr + local getnext = nuts.getnext + local getprev = nuts.getprev + local getsubtype = nuts.getsubtype + local getlist = nuts.getlist + local getlanguage = nuts.getlanguage + local getattrlist = nuts.getattrlist + local setattrlist = nuts.setattrlist + local isglyph = nuts.isglyph + local ischar = nuts.ischar + + local setchar = nuts.setchar + local setdisc = nuts.setdisc + local setlink = nuts.setlink + local setprev = nuts.setprev + local setnext = nuts.setnext + + local insert_before = nuts.insert_before + local insert_after = nuts.insert_after + local copy_node = nuts.copy + local copy_list = nuts.copy_list + local remove_node = nuts.remove + local end_of_math = nuts.end_of_math + local node_tail = nuts.tail + + local nexthlist = nuts.traversers.hlist + local nextdisc = nuts.traversers.disc + + local setcolor = nodes.tracers.colors.set + + local variables = interfaces.variables + local v_reset = variables.reset + local v_yes = variables.yes + local v_word = variables.word + local v_all = variables.all + + local settings_to_array = utilities.parsers.settings_to_array + + local unsetvalue = attributes.unsetvalue + local texsetattribute = tex.setattribute + + local prehyphenchar = language.prehyphenchar + local posthyphenchar = language.posthyphenchar + local preexhyphenchar = language.preexhyphenchar + local postexhyphenchar = language.postexhyphenchar + + local a_hyphenation = attributes.private("hyphenation") + + local interwordpenalty = 5000 + + function traditional.loadpatterns(language) + return dictionaries[language] + end + + -- for the moment we use an independent data structure + + setmetatableindex(dictionaries,function(t,k) + if type(k) == "string" then + -- this will force a load if not yet loaded (we need a nicer way) for the moment + -- that will do (nneeded for examples that register a pattern specification + languages.getnumber(k) + end + local specification = languages.getdata(k) + local dictionary = { + patterns = { }, + exceptions = { }, + hyphenated = { }, + specials = { }, + instance = false, + characters = { }, + unicodes = { }, + } + if specification then + local resources = specification.resources + if resources then + local characters = dictionary.characters or { } + local unicodes = dictionary.unicodes or { } + for i=1,#resources do + local r = resources[i] + if not r.in_dictionary then + r.in_dictionary = true + local patterns = r.patterns + if patterns then + local data = patterns.data + if data then + -- regular patterns + lpegmatch(p_pattern,data,1,dictionary.patterns,dictionary.specials) + end + local extra = patterns.extra + if extra then + -- special patterns + lpegmatch(p_pattern,extra,1,dictionary.patterns,dictionary.specials) + end + end + local exceptions = r.exceptions + if exceptions then + local data = exceptions.data + if data and data ~= "" then + lpegmatch(p_exception,data,1,dictionary.exceptions) + end + end + local usedchars = lpegmatch(p_split,patterns.characters) + for i=1,#usedchars do + local char = usedchars[i] + local code = utfbyte(char) + local upper = uccodes[code] + characters[char] = code + unicodes [code] = char + if type(upper) == "table" then + for i=1,#upper do + local u = upper[i] + unicodes[u] = utfchar(u) + end + else + unicodes[upper] = utfchar(upper) + end + end + end + end + dictionary.characters = characters + dictionary.unicodes = unicodes + setmetatableindex(characters,function(t,k) local v = k and utfbyte(k) t[k] = v return v end) + end + t[specification.number] = dictionary + dictionary.instance = specification.instance -- needed for hyphenchars + end + t[k] = dictionary + return dictionary + end) + + -- Beware: left and right min doesn't mean that in a 1 mmm hsize there can be snippets + -- with less characters than either of them! This could be an option but such a narrow + -- hsize doesn't make sense anyway. + + -- We assume that featuresets are defined global ... local definitions (also mid paragraph) + -- make not much sense anyway. For the moment we assume no predefined sets so we don't need + -- to store them. Nor do we need to hash them in order to save space ... no sane user will + -- define many of them. + + local featuresets = hyphenators.featuresets or { } + hyphenators.featuresets = featuresets + + storage.shared.noflanguagesfeaturesets = storage.shared.noflanguagesfeaturesets or 0 + + local noffeaturesets = storage.shared.noflanguagesfeaturesets + + storage.register("languages/hyphenators/featuresets",featuresets,"languages.hyphenators.featuresets") + + ----- hash = table.sequenced(featureset,",") -- no need now + + local function register(name,featureset) + noffeaturesets = noffeaturesets + 1 + featureset.attribute = noffeaturesets + featuresets[noffeaturesets] = featureset -- access by attribute + featuresets[name] = featureset -- access by name + storage.shared.noflanguagesfeaturesets = noffeaturesets + return noffeaturesets + end + + local function makeset(...) + -- a bit overkill, supporting variants but who cares + local set = { } + for i=1,select("#",...) do + local list = select(i,...) + local kind = type(list) + local used = nil + if kind == "string" then + if list == v_all then + -- not ok ... now all get ignored + return setmetatableindex(function(t,k) local v = utfchar(k) t[k] = v return v end) + elseif list ~= "" then + used = lpegmatch(p_split,list) + set = set or { } + for i=1,#used do + local char = used[i] + set[utfbyte(char)] = char + end + end + elseif kind == "table" then + if next(list) then + set = set or { } + for byte, char in next, list do + set[byte] = char == true and utfchar(byte) or char + end + elseif #list > 0 then + set = set or { } + for i=1,#list do + local l = list[i] + if type(l) == "number" then + set[l] = utfchar(l) + else + set[utfbyte(l)] = l + end + end + end + end + end + return set + end + + -- category pd (tex also sees --- and -- as hyphens but do we really want that + + local defaulthyphens = { + [0x002D] = true, -- HYPHEN-MINUS + [0x00AD] = 0x002D, -- SOFT HYPHEN (active in ConTeXt) + -- [0x058A] = true, -- ARMENIAN HYPHEN + -- [0x1400] = true, -- CANADIAN SYLLABICS HYPHEN + -- [0x1806] = true, -- MONGOLIAN TODO SOFT HYPHEN + [0x2010] = true, -- HYPHEN + -- [0x2011] = true, -- NON-BREAKING HYPHEN + -- [0x2012] = true, -- FIGURE DASH + [0x2013] = true, -- EN DASH + [0x2014] = true, -- EM DASH + -- [0x2015] = true, -- HORIZONTAL BAR + -- [0x2027] = true, -- HYPHENATION POINT + -- [0x2E17] = true, -- DOUBLE OBLIQUE HYPHEN + -- [0x2E1A] = true, -- HYPHEN WITH DIAERESIS + -- [0x2E3A] = true, -- TWO-EM DASH + -- [0x2E3B] = true, -- THREE-EM DASH + -- [0x2E40] = true, -- DOUBLE HYPHEN + -- [0x301C] = true, -- WAVE DASH + -- [0x3030] = true, -- WAVY DASH + -- [0x30A0] = true, -- KATAKANA-HIRAGANA DOUBLE HYPHEN + -- [0xFE31] = true, -- PRESENTATION FORM FOR VERTICAL EM DASH + -- [0xFE32] = true, -- PRESENTATION FORM FOR VERTICAL EN DASH + -- [0xFE58] = true, -- SMALL EM DASH + -- [0xFE63] = true, -- SMALL HYPHEN-MINUS + -- [0xFF0D] = true, -- FULLWIDTH HYPHEN-MINUS + } + + local defaultjoiners = { + [0x200C] = true, -- nzwj + [0x200D] = true, -- zwj + } + + local function somehyphenchar(c) + c = tonumber(c) + return c ~= 0 and c or nil + end + + local function definefeatures(name,featureset) + local extrachars = featureset.characters -- "[]()" + local hyphenchars = featureset.hyphens + local joinerchars = featureset.joiners + local alternative = featureset.alternative + local rightwordmin = tonumber(featureset.rightwordmin) + local charmin = tonumber(featureset.charmin) -- luatex now also has hyphenationmin + local leftcharmin = tonumber(featureset.leftcharmin) + local rightcharmin = tonumber(featureset.rightcharmin) + local leftchar = somehyphenchar(featureset.leftchar) + local rightchar = somehyphenchar(featureset.rightchar) + local rightchars = featureset.rightchars +local rightedge = featureset.rightedge +local autohyphen = v_yes -- featureset.autohyphen -- insert disc +local hyphenonly = v_yes -- featureset.hyphenonly -- don't hyphenate around + rightchars = rightchars == v_word and true or tonumber(rightchars) + joinerchars = joinerchars == v_yes and defaultjoiners or joinerchars -- table + hyphenchars = hyphenchars == v_yes and defaulthyphens or hyphenchars -- table + -- not yet ok: extrachars have to be ignored so it cannot be all) + featureset.extrachars = makeset(joinerchars or "",extrachars or "") + featureset.hyphenchars = makeset(hyphenchars or "") + featureset.alternative = alternative or "hyphenate" + featureset.rightwordmin = rightwordmin and rightwordmin > 0 and rightwordmin or nil + featureset.charmin = charmin and charmin > 0 and charmin or nil + featureset.leftcharmin = leftcharmin and leftcharmin > 0 and leftcharmin or nil + featureset.rightcharmin = rightcharmin and rightcharmin > 0 and rightcharmin or nil + featureset.rightchars = rightchars + featureset.leftchar = leftchar + featureset.rightchar = rightchar + -- featureset.strict = rightedge == "tex" +featureset.autohyphen = autohyphen == v_yes +featureset.hyphenonly = hyphenonly == v_yes + return register(name,featureset) + end + + local function setfeatures(n) + if not n or n == v_reset then + n = false + else + local f = featuresets[n] + if not f and type(n) == "string" then + local t = settings_to_array(n) + local s = { } + for i=1,#t do + local ti = t[i] + local fs = featuresets[ti] + if fs then + for k, v in next, fs do + s[k] = v + end + end + end + n = register(n,s) + else + n = f and f.attribute + end + end + texsetattribute(a_hyphenation,n or unsetvalue) + end + + traditional.definefeatures = definefeatures + traditional.setfeatures = setfeatures + + implement { + name = "definehyphenationfeatures", + actions = definefeatures, + arguments = { + "string", + { + { "characters" }, + { "hyphens" }, + { "joiners" }, + { "rightchars" }, + { "rightwordmin", "integer" }, + { "charmin", "integer" }, + { "leftcharmin", "integer" }, + { "rightcharmin", "integer" }, + { "leftchar", "integer" }, + { "rightchar", "integer" }, + { "alternative" }, + { "rightedge" }, + } + } + } + + implement { + name = "sethyphenationfeatures", + actions = setfeatures, + arguments = "string" + } + + implement { + name = "registerhyphenationpattern", + actions = traditional.registerpattern, + arguments = { "string", "string", "boolean" } + } + + implement { + name = "registerhyphenationexception", + actions = traditional.registerexception, + arguments = "2 strings", + } + + -- This is a relative large function with local variables and local functions. A previous + -- implementation had the functions outside but this is cleaner and as efficient. The test + -- runs 100 times over tufte.tex, knuth.tex, zapf.tex, ward.tex and darwin.tex in lower + -- and uppercase with a 1mm hsize. + -- + -- language=0 language>0 4 | 3 * slower + -- + -- tex 2.34 | 1.30 2.55 | 1.45 0.21 | 0.15 + -- lua 2.42 | 1.38 3.30 | 1.84 0.88 | 0.46 + -- + -- Of course we have extra overhead (virtual Lua machine) but also we check attributes and + -- support specific local options). The test puts the typeset text in boxes and discards + -- it. If we also flush the runtime is 4.31|2.56 and 4.99|2.94 seconds so the relative + -- difference is (somehow) smaller. The test has 536 pages. There is a little bit of extra + -- overhead because we store the patterns in a different way. + -- + -- As usual I will look for speedups. Some 0.01 seconds could be gained by sharing patterns + -- which is not impressive but it does save some 3M memory on this test. (Some optimizations + -- already brought the 3.30 seconds down to 3.14 but it all depends on aggressive caching.) + + -- As we kick in the hyphenator before fonts get handled, we don't look at implicit (font) + -- kerns or ligatures. + + local starttiming = statistics.starttiming + local stoptiming = statistics.stoptiming + + -- local strictids = { + -- [nodecodes.hlist] = true, + -- [nodecodes.vlist] = true, + -- [nodecodes.rule] = true, + -- [nodecodes.dir] = true, + -- [nodecodes.whatsit] = true, + -- [nodecodes.ins] = true, + -- [nodecodes.adjust] = true, + -- + -- [nodecodes.math] = true, + -- [nodecodes.disc] = true, + -- + -- [nodecodes.accent] = true, -- never used in context + -- } + + -- a lot of overhead when only one char + + function traditional.hyphenate(head) + + local first = head + local tail = nil + local last = nil + local current = first + local dictionary = nil + local instance = nil + local characters = nil + local unicodes = nil + local exhyphenchar = tex.exhyphenchar + local extrachars = nil + local hyphenchars = nil + local language = nil + local lastfont = nil + local start = nil + local stop = nil + local word = { } -- we reuse this table + local size = 0 + local leftchar = false + local rightchar = false -- utfbyte("-") + local leftexchar = false + local rightexchar = false -- utfbyte("-") + local leftmin = 0 + local rightmin = 0 + local charmin = 1 + local leftcharmin = nil + local rightcharmin = nil + ----- leftwordmin = nil + local rightwordmin = nil + local rightchars = nil + local leftchar = nil + local rightchar = nil + local attr = nil + local lastwordlast = nil + local hyphenated = hyphenate + ----- strict = nil + local exhyphenpenalty = tex.exhyphenpenalty + local hyphenpenalty = tex.hyphenpenalty + local autohyphen = false + local hyphenonly = false + + -- We cannot use an 'enabled' boolean (false when no characters or extras) because we + -- can have plugins that set a characters metatable and so) ... it doesn't save much + -- anyway. Using (unicodes and unicodes[code]) and a nil table when no characters also + -- doesn't save much. So there not that much to gain for languages that don't hyphenate. + -- + -- enabled = (unicodes and (next(unicodes) or getmetatable(unicodes))) + -- or (extrachars and next(extrachars)) + -- + -- This can be used to not add characters i.e. keep size 0 but then we need to check for + -- attributes that change it, which costs time too. Not much to gain there. + + starttiming(traditional) + + local function insertpenalty() + local p = new_penalty(interwordpenalty) + setattrlist(p,last) + if trace_visualize then + nuts.setvisual(p,"penalty") + end + last = getprev(last) + first, last = insert_after(first,last,p) + end + + local function synchronizefeatureset(a) + local f = a and featuresets[a] + if f then + hyphenated = methods[f.alternative or "hyphenate"] + extrachars = f.extrachars + hyphenchars = f.hyphenchars + rightwordmin = f.rightwordmin + charmin = f.charmin + leftcharmin = f.leftcharmin + rightcharmin = f.rightcharmin + leftchar = f.leftchar + rightchar = f.rightchar + -- strict = f.strict and strictids + rightchars = f.rightchars + autohyphen = f.autohyphen + hyphenonly = f.hyphenonly + if rightwordmin and rightwordmin > 0 and lastwordlast ~= rightwordmin then + -- so we can change mid paragraph but it's kind of unpredictable then + if not tail then + tail = node_tail(first) + end + last = tail + local inword = false + local count = 0 + while last and rightwordmin > 0 do + local id = getid(last) + if id == glyph_code then + count = count + 1 + inword = true + if trace_visualize then + setcolor(last,"darkgreen") + end + elseif inword then + inword = false + rightwordmin = rightwordmin - 1 + if rightchars == true then + if rightwordmin > 0 then + insertpenalty() + end + elseif rightchars and count <= rightchars then + insertpenalty() + end + end + last = getprev(last) + end + lastwordlast = rightwordmin + end + if not charmin or charmin == 0 then + charmin = 1 + end + else + hyphenated = methods.hyphenate + extrachars = false + hyphenchars = false + rightwordmin = false + charmin = 1 + leftcharmin = false + rightcharmin = false + leftchar = false + rightchar = false + -- strict = false + autohyphen = false + hyphenonly = false + end + + return a + end + + local function flush(hyphens) -- todo: no need for result + + local rightmin = size - rightmin + local result = { } + local rsize = 0 + local position = 1 + + -- todo: remember last dics and don't go back to before that (plus message) ... + -- for simplicity we also assume that we don't start with a dics node + -- + -- there can be a conflict: if we backtrack then we can end up in another disc + -- and get out of sync (dup chars and so) + + while position <= size do + if position >= leftmin and position <= rightmin then + local hyphen = hyphens[position] + if not hyphen then + rsize = rsize + 1 + result[rsize] = word[position] + position = position + 1 + elseif hyphen == true then + rsize = rsize + 1 + result[rsize] = word[position] + rsize = rsize + 1 + result[rsize] = true + position = position + 1 + else + local o, h = hyphen[2] + if o then + -- { hyphen, offset) + h = hyphen[1] + else + -- hyphen + h = hyphen + o = 1 + end + local b = position - o + (h.start or 1) + local e = b + (h.length or 2) - 1 + if b > 0 and e >= b then + for i=1,b-position do + rsize = rsize + 1 + result[rsize] = word[position] + position = position + 1 + end + rsize = rsize + 1 + result[rsize] = { + h.before or "", -- pre + h.after or "", -- post + concat(word,"",b,e), -- replace + h.right, -- optional after pre + h.left, -- optional before post + } + position = e + 1 + else + -- error + rsize = rsize + 1 + result[rsize] = word[position] + position = position + 1 + end + end + else + rsize = rsize + 1 + result[rsize] = word[position] + position = position + 1 + end + end + + local function serialize(replacement,leftchar,rightchar) + if not replacement then + return + elseif replacement == true then + local glyph = copy_node(stop) + setchar(glyph,leftchar or rightchar) + return glyph + end + local head = nil + local current = nil + if leftchar then + head = copy_node(stop) + current = head + setchar(head,leftchar) + end + local rsize = #replacement + if rsize == 1 then + local glyph = copy_node(stop) + setchar(glyph,characters[replacement]) + if head then + insert_after(current,current,glyph) + else + head = glyph + end + current = glyph + elseif rsize > 0 then + local list = lpegmatch(p_split,replacement) -- this is an utf split (could be cached) + for i=1,#list do + local glyph = copy_node(stop) + setchar(glyph,characters[list[i]]) + if head then + insert_after(current,current,glyph) + else + head = glyph + end + current = glyph + end + end + if rightchar then + local glyph = copy_node(stop) + insert_after(current,current,glyph) + setchar(glyph,rightchar) + end + return head + end + + local current = start + local attrnode = start -- will be different, just the first char + + for i=1,rsize do + local r = result[i] + if r == true then + local disc = new_disc() + local pre = nil + local post = nil + if rightchar then + pre = serialize(true,rightchar) + end + if leftchar then + post = serialize(true,leftchar) + end + setdisc(disc,pre,post,nil,regulardisc_code,hyphenpenalty) + if attrnode then + setattrlist(disc,attrnode) + end + -- could be a replace as well + insert_before(first,current,disc) + elseif type(r) == "table" then + local disc = new_disc() + local pre = r[1] + local post = r[2] + local replace = r[3] + local right = r[4] ~= false and rightchar + local left = r[5] ~= false and leftchar + if pre then + if pre ~= "" then + pre = serialize(pre,false,right) + else + pre = nil + end + end + if post then + if post ~= "" then + post = serialize(post,left,false) + else + post = nil + end + end + if replace then + if replace ~= "" then + replace = serialize(replace) + else + replace = nil + end + end + -- maybe regular code + setdisc(disc,pre,post,replace,regulardisc_code,hyphenpenalty) + if attrnode then + setattrlist(disc,attrnode) + end + insert_before(first,current,disc) + else + setchar(current,characters[r]) + if i < rsize then + current = getnext(current) + end + end + end + if current and current ~= stop then + local current = getnext(current) + local last = getnext(stop) + while current ~= last do + first, current = remove_node(first,current,true) + end + end + + end + + local function inject(leftchar,rightchar,code,attrnode) + if first ~= current then + local disc = new_disc() + first, current, glyph = remove_node(first,current) + first, current = insert_before(first,current,disc) + if trace_visualize then + setcolor(glyph,"darkred") -- these get checked + setcolor(disc,"darkgreen") -- in the colorizer + end + local pre = nil + local post = nil + local replace = glyph + if leftchar and leftchar > 0 then + post = copy_node(glyph) + setchar(post,leftchar) + end + pre = copy_node(glyph) + setchar(pre,rightchar and rightchar > 0 and rightchar or code) + setdisc(disc,pre,post,replace,automaticdisc_code,hyphenpenalty) -- ex ? + if attrnode then + setattrlist(disc,attrnode) + end + end + return current + end + + local function injectseries(current,last,next,attrnode) + local disc = new_disc() + local start = current + first, current = insert_before(first,current,disc) + setprev(start) + setnext(last) + if next then + setlink(current,next) + else + setnext(current) + end + local pre = copy_list(start) + local post = nil + local replace = start + setdisc(disc,pre,post,replace,automaticdisc_code,hyphenpenalty) -- ex ? + if attrnode then + setattrlist(disc,attrnode) + end + return current + end + + local a = getattr(first,a_hyphenation) + if a ~= attr then + attr = synchronizefeatureset(a) + end + + -- The first attribute in a word determines the way a word gets hyphenated and if + -- relevant, other properties are also set then. We could optimize for silly one-char + -- cases but it has no priority as the code is still not that much slower than the + -- native hyphenator and this variant also provides room for extensions. + + local skipping = false + + -- In "word word word." the sequences "word" and "." can be a different font! + + while current and current ~= last do -- and current + local code, id = isglyph(current) + if code then + if skipping then + current = getnext(current) + else + local lang = getlanguage(current) + local font = getfont(current) + if lang ~= language or font ~= lastfont then + if dictionary and size > charmin and leftmin + rightmin <= size then + -- only german has many words starting with an uppercase character + if categories[word[1]] == "lu" and getfield(start,"uchyph") < 0 then + -- skip + else + local hyphens = hyphenated(dictionary,word,size) + if hyphens then + flush(hyphens) + end + end + end + lastfont = font + if language ~= lang and lang > 0 then + -- + dictionary = dictionaries[lang] + instance = dictionary.instance + characters = dictionary.characters + unicodes = dictionary.unicodes + -- + local a = getattr(current,a_hyphenation) + attr = synchronizefeatureset(a) + leftchar = leftchar or (instance and posthyphenchar (instance)) -- we can make this more + rightchar = rightchar or (instance and prehyphenchar (instance)) -- efficient if needed + leftexchar = (instance and preexhyphenchar (instance)) + rightexchar = (instance and postexhyphenchar(instance)) + leftmin = leftcharmin or getfield(current,"left") + rightmin = rightcharmin or getfield(current,"right") + if not leftchar or leftchar < 0 then + leftchar = false + end + if not rightchar or rightchar < 0 then + rightchar = false + end + -- + local char = unicodes[code] or (extrachars and extrachars[code]) + if char then + word[1] = char + size = 1 + start = current + else + size = 0 + end + else + size = 0 + end + language = lang + elseif language <= 0 then + -- + elseif size > 0 then + local char = unicodes[code] or (extrachars and extrachars[code]) + if char then + size = size + 1 + word[size] = char + elseif dictionary then + if not hyphenonly or code ~= exhyphenchar then + if size > charmin and leftmin + rightmin <= size then + if categories[word[1]] == "lu" and getfield(start,"uchyph") < 0 then + -- skip + else + local hyphens = hyphenated(dictionary,word,size) + if hyphens then + flush(hyphens) + end + end + end + end + size = 0 + if code == exhyphenchar then -- normally the - + local next = getnext(current) + local last = current + local font = getfont(current) + while next and ischar(next,font) == code do + last = next + next = getnext(next) + end + if not autohyphen then + current = last + elseif current == last then + current = inject(leftexchar,rightexchar,code,current) + else + current = injectseries(current,last,next,current) + end + if hyphenonly then + skipping = true + end + elseif hyphenchars then + local char = hyphenchars[code] + if char == true then + char = code + end + if char then + current = inject(leftchar and char or nil,rightchar and char or nil,char,current) + end + end + end + else + local a = getattr(current,a_hyphenation) + if a ~= attr then + attr = synchronizefeatureset(a) -- influences extrachars + leftchar = leftchar or (instance and posthyphenchar (instance)) -- we can make this more + rightchar = rightchar or (instance and prehyphenchar (instance)) -- efficient if needed + leftexchar = (instance and preexhyphenchar (instance)) + rightexchar = (instance and postexhyphenchar(instance)) + leftmin = leftcharmin or getfield(current,"left") + rightmin = rightcharmin or getfield(current,"right") + if not leftchar or leftchar < 0 then + leftchar = false + end + if not rightchar or rightchar < 0 then + rightchar = false + end + end + -- + local char = unicodes[code] or (extrachars and extrachars[code]) + if char then + word[1] = char + size = 1 + start = current + end + end + stop = current + current = getnext(current) + end + else + if skipping then + skipping = false + end + if id == disc_code then + size = 0 + current = getnext(current) + if hyphenonly then + skipping = true + end + -- elseif strict and strict[id] then + -- current = id == math_code and getnext(end_of_math(current)) or getnext(current) + -- size = 0 + else + current = id == math_code and getnext(end_of_math(current)) or getnext(current) + end + if size > 0 then + if dictionary and size > charmin and leftmin + rightmin <= size then + if categories[word[1]] == "lu" and getfield(start,"uchyph") < 0 then + -- skip + else + local hyphens = hyphenated(dictionary,word,size) + if hyphens then + flush(hyphens) + end + end + end + size = 0 + end + end + end + -- we can have quit due to last so we need to flush the last seen word, we could move + -- this in the loop and test for current but ... messy + if dictionary and size > charmin and leftmin + rightmin <= size then + if categories[word[1]] == "lu" and getfield(start,"uchyph") < 0 then + -- skip + else + local hyphens = hyphenated(dictionary,word,size) + if hyphens then + flush(hyphens) + end + end + end + + stoptiming(traditional) + + return head + end + + statistics.register("hyphenation",function() + if nofwords > 0 or statistics.elapsed(traditional) > 0 then + return string.format("%s words hyphenated, %s unique, used time %s", + nofwords,nofhashed,statistics.elapsedseconds(traditional) or 0) + end + end) + + local texmethod = "builders.kernel.hyphenation" + local oldmethod = texmethod + local newmethod = texmethod + + -- local newmethod = "languages.hyphenators.traditional.hyphenate" + -- + -- nodes.tasks.prependaction("processors","words",newmethod) + -- nodes.tasks.disableaction("processors",oldmethod) + -- + -- nodes.tasks.replaceaction("processors","words",oldmethod,newmethod) + + -- \enabledirectives[hyphenators.method=traditional] + -- \enabledirectives[hyphenators.method=builtin] + + -- push / pop ? check first attribute + + -- local replaceaction = nodes.tasks.replaceaction -- no longer overload this way (too many local switches) + + local hyphenate = language.hyphenate + local hyphenating = nuts.hyphenating + local methods = { } + local usedmethod = false + local stack = { } + + local original = hyphenating and + function(head) + return (hyphenating(head)) + end + or + function(head) + hyphenate(tonode(head)) + return head -- a nut + end + + -- local has_language = language.has_language + -- + -- local function original(head) -- kernel.hyphenation(head) + -- local h = tonode(head) + -- if has_language(h) then + -- hyphenate(h) + -- end + -- return head + -- end + + local getcount = tex.getcount + + hyphenators.methods = methods + local optimize = false + + directives.register("hyphenator.optimize", function(v) optimize = v end) + + function hyphenators.handler(head,groupcode) + if usedmethod then + if optimize and (groupcode == "hbox" or groupcode == "adjusted_hbox") then + if getcount("hyphenstate") > 0 then + forced = false + return usedmethod(head) + else + return head + end + else + return usedmethod(head) + end + else + return head + end + end + + methods.tex = original + methods.original = original + methods.expanded = original -- was expanded before 1.005 + methods.traditional = languages.hyphenators.traditional.hyphenate + methods.none = false -- function(head) return head, false end + + usedmethod = original + + local function setmethod(method) + usedmethod = type(method) == "string" and methods[method] + if usedmethod == nil then + usedmethod = methods.tex + end + end + local function pushmethod(method) + insert(stack,usedmethod) + usedmethod = type(method) == "string" and methods[method] + if usedmethod == nil then + usedmethod = methods.tex + end + end + local function popmethod() + usedmethod = remove(stack) or methods.tex + end + + hyphenators.setmethod = setmethod + hyphenators.pushmethod = pushmethod + hyphenators.popmethod = popmethod + + directives.register("hyphenators.method",setmethod) + + function hyphenators.setup(specification) + local method = specification.method + if method then + setmethod(method) + end + end + + implement { name = "sethyphenationmethod", actions = setmethod, arguments = "string" } + implement { name = "pushhyphenation", actions = pushmethod, arguments = "string" } + implement { name = "pophyphenation", actions = popmethod } + + -- can become a runtime loaded one: + + local context = context + local ctx_NC = context.NC + local ctx_NR = context.NR + local ctx_verbatim = context.verbatim + + function hyphenators.showhyphenationtrace(language,word) + if not word or word == "" then + return + end + local saved = trace_steps + trace_steps = "silent" + local steps = traditional.gettrace(language,word) + trace_steps = saved + if steps then + local n = #steps + if n > 0 then + context.starttabulate { "|r|l|l|l|" } + for i=1,n do + local s = steps[i] + ctx_NC() if i > 1 and i < n then context(i-1) end + ctx_NC() ctx_verbatim(s[1]) + ctx_NC() ctx_verbatim(s[2]) + ctx_NC() ctx_verbatim(s[3]) + ctx_NC() + ctx_NR() + end + context.stoptabulate() + end + end + end + + implement { + name = "showhyphenationtrace", + actions = hyphenators.showhyphenationtrace, + arguments = "2 strings", + } + + function nodes.stripdiscretionaries(head) + for l in nexthlist, head do + for d in nextdisc, getlist(l) do + remove_node(h,false,true) + end + end + return head + end + + +else + + -- traditional.loadpatterns("nl","lang-nl") + -- traditional.loadpatterns("de","lang-de") + -- traditional.loadpatterns("us","lang-us") + + -- traditional.registerpattern("nl","e1ë", { start = 1, length = 2, before = "e", after = "e" } ) + -- traditional.registerpattern("nl","oo7ë", { start = 2, length = 3, before = "o", after = "e" } ) + -- traditional.registerpattern("de","qqxc9xkqq",{ start = 3, length = 4, before = "ab", after = "cd" } ) + + -- local specification = { + -- leftcharmin = 2, + -- rightcharmin = 2, + -- leftchar = "<", + -- rightchar = ">", + -- } + + -- print("reëel", traditional.injecthyphens(dictionaries.nl,"reëel", specification),"r{e>}{}{}{ charmin and leftmin + rightmin <= size then diff --git a/tex/context/base/mkiv/lang-hyp.mkiv b/tex/context/base/mkiv/lang-hyp.mkiv index fbd83fe0c..d8fbb0b22 100644 --- a/tex/context/base/mkiv/lang-hyp.mkiv +++ b/tex/context/base/mkiv/lang-hyp.mkiv @@ -30,8 +30,8 @@ \writestatus{loading}{ConTeXt Language Macros / Initialization} -\registerctxluafile{lang-dis}{} -\registerctxluafile{lang-hyp}{} +\registerctxluafile{lang-dis}{autosuffix} +\registerctxluafile{lang-hyp}{autosuffix} \unprotect @@ -152,7 +152,7 @@ rightedge {\dummyparameter\c!rightedge}% {\clf_sethyphenationfeatures{#1}} \unexpanded\def\resethyphenationfeatures - {\hyphenationattribute\attributeunsetvalue} + {\attribute\hyphenationattribute\attributeunsetvalue} \resethyphenationfeatures diff --git a/tex/context/base/mkiv/lang-ini.lmt b/tex/context/base/mkiv/lang-ini.lmt new file mode 100644 index 000000000..5f2dd1a55 --- /dev/null +++ b/tex/context/base/mkiv/lang-ini.lmt @@ -0,0 +1,670 @@ +if not modules then modules = { } end modules ['lang-ini'] = { + version = 1.001, + comment = "companion to lang-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- needs a cleanup (share locals) +-- discard language when redefined + +-- 002D : hyphen-minus (ascii) +-- 2010 : hyphen +-- 2011 : nonbreakable hyphen +-- 2013 : endash (compound hyphen) + +--~ language:hyphenation(string) string = language:hyphenation() language:clear_hyphenation() + +-- todo: no foo:bar but foo(bar,...) + +local type, tonumber, next = type, tonumber, next +local utfbyte = utf.byte +local format, gsub, gmatch, find = string.format, string.gsub, string.gmatch, string.find +local concat, sortedkeys, sortedpairs, keys, insert = table.concat, table.sortedkeys, table.sortedpairs, table.keys, table.insert +local utfvalues, strip, utfcharacters = string.utfvalues, string.strip, utf.characters + +local context = context +local commands = commands +local implement = interfaces.implement + +local settings_to_array = utilities.parsers.settings_to_array +local settings_to_set = utilities.parsers.settings_to_set + +local trace_patterns = false trackers.register("languages.patterns", function(v) trace_patterns = v end) + +local report_initialization = logs.reporter("languages","initialization") + +local prehyphenchar = language.prehyphenchar -- global per language +local posthyphenchar = language.posthyphenchar -- global per language +local preexhyphenchar = language.preexhyphenchar -- global per language +local postexhyphenchar = language.postexhyphenchar -- global per language +----- lefthyphenmin = language.lefthyphenmin +----- righthyphenmin = language.righthyphenmin +local sethjcode = language.sethjcode +local currentlanguage = language.current -- or function() return tex.normallanguage or tex.language end + +local uccodes = characters.uccodes +local lccodes = characters.lccodes + +local new_language = language.new + +languages = languages or {} +local languages = languages + +languages.version = 1.010 + +languages.registered = languages.registered or { } +local registered = languages.registered + +languages.associated = languages.associated or { } +local associated = languages.associated + +languages.numbers = languages.numbers or { } +local numbers = languages.numbers + +languages.data = languages.data or { } +local data = languages.data + +storage.register("languages/registered",registered,"languages.registered") +storage.register("languages/associated",associated,"languages.associated") +storage.register("languages/numbers", numbers, "languages.numbers") +storage.register("languages/data", data, "languages.data") + +local variables = interfaces.variables + +local v_reset = variables.reset +local v_yes = variables.yes + +local nofloaded = 0 + +local function resolve(tag) + local data, instance = registered[tag], nil + if data then + instance = data.instance + if not instance then + instance = new_language(data.number) + data.instance = instance + end + end + return data, instance +end + +local function tolang(what) -- returns lang object + if not what then + what = currentlanguage() + end + local tag = numbers[what] + local data = tag and registered[tag] or registered[what] + if data then + local instance = data.instance -- .lang -- was this ok ? + if not instance then + instance = new_language(data.number) + data.instance = instance + end + return instance + end +end + +function languages.getdata(tag) -- or number + if tag then + return registered[tag] or registered[numbers[tag]] + else + return registered[numbers[currentlanguage()]] + end +end + +-- languages.tolang = tolang + +-- patterns=en +-- patterns=en,de + +local function validdata(loaded,what,tag) + local dataset = loaded[what] + if dataset then + local data = dataset.data + if not data or data == "" then + -- nothing + elseif dataset.compression == "zlib" then + data = zlib.decompress(data) + if dataset.length and dataset.length ~= #data then + report_initialization("compression error in %a for language %a","patterns",what,tag) + end + return data + else + return data + end + end +end + +-- languages.hjcounts[unicode].count + +-- hjcode: 0 not to be hyphenated +-- 1--31 length +-- 32 zero length +-- > 32 hyphenated with length 1 + +local function sethjcodes(instance,loaded,what,factor) + local l = loaded[what] + local c = l and l.characters + if c then + local hjcounts = factor and languages.hjcounts or false + -- + local h = loaded.codehash + if not h then + h = { } + loaded.codehash = h + end + -- + local function setcode(l) + local u = uccodes[l] + local s = l + if hjcounts then + local c = hjcounts[l] + if c then + c = c.count + if not c then + -- error, keep as 1 + elseif c <= 0 then + -- counts as 0 i.e. ignored + s = 32 + elseif c >= 31 then + -- counts as 31 + s = 31 + else + -- count c times + s = c + end + end + end + sethjcode(instance,l,s) + h[l] = s + if u ~= l and type(u) == "number" then + sethjcode(instance,u,s) + h[u] = lccodes[l] + end + end + -- + local s = tex.savinghyphcodes + tex.savinghyphcodes = 0 + if type(c) == "table" then + for l in next, c do + setcode(utfbyte(l)) + end + else + for l in utfvalues(c) do + setcode(l) + end + end + tex.savinghyphcodes = s + end +end + +-- 2'2 conflicts with 4' ... and luatex barks on it + +local P, R, Cs, Ct, lpegmatch, lpegpatterns = lpeg.P, lpeg.R, lpeg.Cs, lpeg.Ct, lpeg.match, lpeg.patterns + +local utfsplit = utf.split + +local space = lpegpatterns.space +local whitespace = lpegpatterns.whitespace^1 +local nospace = lpegpatterns.utf8char - whitespace +local digit = lpegpatterns.digit +----- endofstring = #whitespace + P(-1) +local endofstring = #whitespace + +local word = (digit/"")^0 * (digit/"" * endofstring + digit/" " + nospace)^1 +local anyword = (1-whitespace)^1 +local analyze = Ct((whitespace + Cs(word))^1) + +local function unique(tag,requested,loaded) + local nofloaded = #loaded + if nofloaded == 0 then + return "" + elseif nofloaded == 1 then + return loaded[1] + else + insert(loaded,1," ") -- no need then for special first word + -- insert(loaded, " ") + loaded = concat(loaded," ") + local t = lpegmatch(analyze,loaded) or { } + local h = { } + local b = { } + for i=1,#t do + local ti = t[i] + local hi = h[ti] + if not hi then + h[ti] = 1 + elseif hi == 1 then + h[ti] = 2 + b[#b+1] = utfsplit(ti," ") + end + end + -- sort + local nofbad = #b + if nofbad > 0 then + local word + for i=1,nofbad do + local bi = b[i] + local p = P(bi[1]) + for i=2,#bi do + p = p * digit * P(bi[i]) + end + if word then + word = word + p + else + word = p + end + report_initialization("language %a, patterns %a, discarding conflict (0-9)%{[0-9]}t(0-9)",tag,requested,bi) + end + t, h, b = nil, nil, nil -- permit gc + local someword = digit^0 * word * digit^0 * endofstring / "" + -- local strip = Cs(someword^-1 * (someword + anyword + whitespace)^1) + local strip = Cs((someword + anyword + whitespace)^1) + return lpegmatch(strip,loaded) or loaded + else + return loaded + end + end +end + +local shared = false + +local function loaddefinitions(tag,specification) + statistics.starttiming(languages) + local data, instance = resolve(tag) + local requested = specification.patterns or "" + local definitions = settings_to_array(requested) + if #definitions > 0 then + if trace_patterns then + report_initialization("pattern specification for language %a: %s",tag,specification.patterns) + end + local ploaded = instance:patterns() + local eloaded = instance:hyphenation() + if not ploaded or ploaded == "" then + ploaded = { } + else + ploaded = { ploaded } + end + if not eloaded or eloaded == "" then + eloaded = { } + else + eloaded = { eloaded } + end + local dataused = data.used + local ok = false + local resources = data.resources or { } + data.resources = resources + if not shared then + local found = resolvers.findfile("lang-exc.lua") + if found then + shared = dofile(found) + if type(shared) == "table" then + shared = concat(shared," ") + else + shared = true + end + else + shared = true + end + end + for i=1,#definitions do + local definition = definitions[i] + if definition == "" then + -- error + elseif definition == v_reset then + if trace_patterns then + report_initialization("clearing patterns for language %a",tag) + end + instance:clear_patterns() + instance:clear_hyphenation() + ploaded = { } + eloaded = { } + elseif not dataused[definition] then + dataused[definition] = definition + local filename = "lang-" .. definition .. ".lua" + local fullname = resolvers.findfile(filename) or "" + if fullname == "" then + fullname = resolvers.findfile(filename .. ".gz") or "" + end + if fullname ~= "" then + if trace_patterns then + report_initialization("loading definition %a for language %a from %a",definition,tag,fullname) + end + local suffix, gzipped = gzip.suffix(fullname) + local loaded = table.load(fullname,gzipped and gzip.load) + if loaded then -- todo: version test + ok, nofloaded = true, nofloaded + 1 + sethjcodes(instance,loaded,"patterns",specification.factor) + sethjcodes(instance,loaded,"exceptions",specification.factor) + local p = validdata(loaded,"patterns",tag) + local e = validdata(loaded,"exceptions",tag) + if p and p ~= "" then + ploaded[#ploaded+1] = p + end + if e and e ~= "" then + eloaded[#eloaded+1] = e + end + resources[#resources+1] = loaded -- so we can use them otherwise + else + report_initialization("invalid definition %a for language %a in %a",definition,tag,filename) + end + elseif trace_patterns then + report_initialization("invalid definition %a for language %a in %a",definition,tag,filename) + end + elseif trace_patterns then + report_initialization("definition %a for language %a already loaded",definition,tag) + end + end + if #ploaded > 0 then + -- why not always clear + instance:clear_patterns() + instance:patterns(unique(tag,requested,ploaded)) + end + if #eloaded > 0 then + -- why not always clear + instance:clear_hyphenation() + instance:hyphenation(concat(eloaded," ")) + end + if type(shared) == "string" then + instance:hyphenation(shared) + end + return ok + elseif trace_patterns then + report_initialization("no definitions for language %a",tag) + end + statistics.stoptiming(languages) +end + +storage.shared.noflanguages = storage.shared.noflanguages or 0 + +local noflanguages = storage.shared.noflanguages + +function languages.define(tag,parent) + noflanguages = noflanguages + 1 + if trace_patterns then + report_initialization("assigning number %a to %a",noflanguages,tag) + end + numbers[noflanguages] = tag + registered[tag] = { + tag = tag, + parent = parent or "", + patterns = "", + loaded = false, + used = { }, + dirty = true, + number = noflanguages, + instance = nil, -- luatex data structure + synonyms = { }, + } + storage.shared.noflanguages = noflanguages +end + +function languages.setsynonym(synonym,tag) -- convenience function + local l = registered[tag] + if l then + l.synonyms[synonym] = true -- maybe some day more info + end +end + +function languages.installed(separator) + return concat(sortedkeys(registered),separator or ",") +end + +function languages.current(n) + return numbers[n and tonumber(n) or currentlanguage()] +end + +function languages.associate(tag,script,language) -- not yet used + associated[tag] = { script, language } +end + +function languages.association(tag) -- not yet used + if not tag then + tag = numbers[currentlanguage()] + elseif type(tag) == "number" then + tag = numbers[tag] + end + local lat = tag and associated[tag] + if lat then + return lat[1], lat[2] + end +end + +function languages.loadable(tag,defaultlanguage) -- hack + local l = registered[tag] -- no synonyms + if l and resolvers.findfile("lang-"..l.patterns..".lua") then + return true + else + return false + end +end + +-- a bit messy, we will do all language setting in lua as we can now assign +-- and 'patterns' will go away here. + +function languages.unload(tag) + local l = registered[tag] + if l then + l.dirty = true + end +end + +if environment.initex then + + function languages.getnumber() + return 0 + end + +else + + function languages.getnumber(tag,default,patterns,factor) + local l = registered[tag] + if l then + if l.dirty then + l.factor = factor == v_yes and true or false + if trace_patterns then + report_initialization("checking patterns for %a with default %a",tag,default) + end + -- patterns is already resolved to parent patterns if applicable + if patterns and patterns ~= "" then + if l.patterns ~= patterns then + l.patterns = patterns + if trace_patterns then + report_initialization("loading patterns for %a using specification %a",tag,patterns) + end + loaddefinitions(tag,l) + else + -- unchanged + end + elseif l.patterns == "" then + l.patterns = tag + if trace_patterns then + report_initialization("loading patterns for %a using tag",tag) + end + local ok = loaddefinitions(tag,l) + if not ok and tag ~= default then + l.patterns = default + if trace_patterns then + report_initialization("loading patterns for %a using default",tag) + end + loaddefinitions(tag,l) + end + end + l.loaded = true + l.dirty = false + end + return l.number + else + return 0 + end + end + + numbers[0] = "null" + + registered.null = { + number = 0, + instance = new_language(0), + } + +end + +-- not that usefull, global values + +function languages.prehyphenchar (what) return prehyphenchar (tolang(what)) end +function languages.posthyphenchar (what) return posthyphenchar (tolang(what)) end +function languages.preexhyphenchar (what) return preexhyphenchar (tolang(what)) end +function languages.postexhyphenchar(what) return postexhyphenchar(tolang(what)) end +-------- languages.lefthyphenmin (what) return lefthyphenmin (tolang(what)) end +-------- languages.righthyphenmin (what) return righthyphenmin (tolang(what)) end + +-- e['implementer']= 'imple{m}{-}{-}menter' +-- e['manual'] = 'man{}{}{}' +-- e['as'] = 'a-s' +-- e['user-friendly'] = 'user=friend-ly' +-- e['exceptionally-friendly'] = 'excep-tionally=friend-ly' + +local invalid = { "{", "}", "-" } + +local function collecthjcodes(data,str) + local found = data.extras and data.extras.characters or { } + for s in utfcharacters(str) do + if not found[s] then + found[s] = true + end + end + for i=1,#invalid do -- less checks this way + local c = invalid[i] + if found[c] then + found[c] = nil + end + end + data.extras = { characters = found } + sethjcodes(data.instance,data,"extras",data.factor) +end + +function languages.loadwords(tag,filename) + local data, instance = resolve(tag) + if data then + statistics.starttiming(languages) + local str = io.loaddata(filename) or "" + collecthjcodes(data,str) + instance:hyphenation(str) + statistics.stoptiming(languages) + end +end + + +function languages.setexceptions(tag,str) + local data, instance = resolve(tag) + if data then + str = strip(str) -- we need to strip leading spaces + collecthjcodes(data,str) + instance:hyphenation(str) + end +end + +function languages.hyphenate(tag,str) + -- todo: does this still work? + local data, instance = resolve(tag) + if data then + return instance:hyphenate(str) + else + return str + end +end + +-- hyphenation.define ("zerolanguage") +-- hyphenation.loadpatterns ("zerolanguage") -- else bug +-- hyphenation.loadexceptions("zerolanguage") -- else bug + +languages.logger = languages.logger or { } + +function languages.logger.report() + local result, r = { }, 0 + for tag, l in sortedpairs(registered) do + if l.loaded then + r = r + 1 + result[r] = format("%s:%s:%s",tag,l.parent,l.number) + end + end + return r > 0 and concat(result," ") or "none" +end + +-- must happen at the tex end .. will use lang-def.lua + +languages.associate('en','latn','eng') +languages.associate('uk','latn','eng') +languages.associate('nl','latn','nld') +languages.associate('de','latn','deu') +languages.associate('fr','latn','fra') + +statistics.register("loaded patterns", function() + local result = languages.logger.report() + if result ~= "none" then + -- return result + return format("%s, load time: %s",result,statistics.elapsedtime(languages)) + end +end) + +-- statistics.register("language load time", function() +-- -- often zero so we can merge that in the above +-- return statistics.elapsedseconds(languages, format(", nofpatterns: %s",nofloaded)) +-- end) + +-- interface + +implement { + name = "languagenumber", + actions = { languages.getnumber, context }, + arguments = "4 strings" +} + +implement { + name = "installedlanguages", + actions = { languages.installed, context }, +} + +implement { + name = "definelanguage", + actions = languages.define, + arguments = "2 strings" +} + +implement { + name = "setlanguagesynonym", + actions = languages.setsynonym, + arguments = "2 strings" +} + +implement { + name = "unloadlanguage", + actions = languages.unload, + arguments = "string" +} + +implement { + name = "setlanguageexceptions", + actions = languages.setexceptions, + arguments = "2 strings" +} + +implement { + name = "currentprehyphenchar", + actions = function() + local c = prehyphenchar(tolang()) + if c and c > 0 then + context.char(c) + end + end +} + +implement { + name = "currentposthyphenchar", + actions = function() + local c = posthyphenchar(tolang()) + if c and c > 0 then + context.char(c) + end + end +} diff --git a/tex/context/base/mkiv/lang-ini.lua b/tex/context/base/mkiv/lang-ini.lua index ac5b2c113..7a8aab818 100644 --- a/tex/context/base/mkiv/lang-ini.lua +++ b/tex/context/base/mkiv/lang-ini.lua @@ -48,7 +48,6 @@ local sethjcode = lang.sethjcode local uccodes = characters.uccodes local lccodes = characters.lccodes -lang.exceptions = lang.hyphenation local new_language = lang.new languages = languages or {} diff --git a/tex/context/base/mkiv/lang-ini.mkxl b/tex/context/base/mkiv/lang-ini.mkxl index f5831a5ea..6d0649fa8 100644 --- a/tex/context/base/mkiv/lang-ini.mkxl +++ b/tex/context/base/mkiv/lang-ini.mkxl @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -%D This module needs a further cleanup (real split between ii/iv). +% We can protect \currentlanguage etc too. % \cldcontext{languages.numbers[tex.count.mainlanguagenumber]} @@ -22,7 +22,7 @@ \writestatus{loading}{ConTeXt Language Macros / Initialization} -\registerctxluafile{lang-ini}{} +\registerctxluafile{lang-ini}{autosuffix} \registerctxluafile{lang-def}{} \registerctxluafile{lang-cnt}{} @@ -74,14 +74,14 @@ \def\currentusedlanguage{\currentlanguage} -\def\defaultlanguage#1% +\permanent\def\defaultlanguage#1% {\ifcsname\??language#1\s!default\endcsname \expandafter\defaultlanguage\lastnamedcs \else #1% \fi} -\def\languageparameter#1% +\permanent\def\languageparameter#1% {\ifcsname\??language\currentlanguage#1\endcsname \lastnamedcs \orelse\ifcsname\??language\currentlanguage\s!default\endcsname @@ -90,7 +90,7 @@ \lastnamedcs \fi} -\def\specificlanguageparameter#1#2% +\permanent\def\specificlanguageparameter#1#2% {\ifcsname\??language#1#2\endcsname \lastnamedcs \orelse\ifcsname\??language#1\s!default\endcsname @@ -99,7 +99,7 @@ \lastnamedcs \fi} -\def\mainlanguageparameter#1% +\permanent\def\mainlanguageparameter#1% {\ifcsname\??language\currentmainlanguage#1\endcsname \lastnamedcs \orelse\ifcsname\??language\currentmainlanguage\s!default\endcsname @@ -108,9 +108,9 @@ \lastnamedcs \fi} -\let\usedlanguageparameter\languageparameter +\aliased\let\usedlanguageparameter\languageparameter -\def\askedlanguageparameter#1% assumes \currentusedlanguage being set +\permanent\def\askedlanguageparameter#1% assumes \currentusedlanguage being set {\ifcsname\??language\currentusedlanguage#1\endcsname \lastnamedcs \orelse\ifcsname\??language\currentusedlanguage\s!default\endcsname @@ -119,25 +119,25 @@ \lastnamedcs \fi} -\unexpanded\def\setusedlanguage#1% +\permanent\protected\def\setusedlanguage#1% {\edef\currentusedlanguage{\reallanguagetag{#1}}% \ifempty\currentusedlanguage \let\currentusedlanguage \currentlanguage - \let\usedlanguageparameter\languageparameter + \enforced\let\usedlanguageparameter\languageparameter \orelse\ifx\currentusedlanguage\v!global \let\currentusedlanguage \currentmainlanguage - \let\usedlanguageparameter\mainlanguageparameter + \enforced\let\usedlanguageparameter\mainlanguageparameter \orelse\ifx\currentusedlanguage\v!local \let\currentusedlanguage \currentlanguage - \let\usedlanguageparameter\languageparameter + \enforced\let\usedlanguageparameter\languageparameter \else - \let\usedlanguageparameter\askedlanguageparameter + \enforced\let\usedlanguageparameter\askedlanguageparameter \fi} -\unexpanded\def\setupcurrentlanguage[#1]% +\permanent\protected\def\setupcurrentlanguage[#1]% {\setcurrentlanguage\currentmainlanguage{#1}} -\unexpanded\def\setcurrentlanguage#1#2% sets modes: **id (currentmain) *id (current) +\permanent\protected\def\setcurrentlanguage#1#2% sets modes: **id (currentmain) *id (current) {\edef\xaskedlanguage{#1}% otherwise clash with \askedlanguage \ifempty\xaskedlanguage \else \ifempty\currentmainlanguage\else\resetsystemmode{\systemmodeprefix\currentmainlanguage}\fi @@ -176,9 +176,9 @@ \newtoks \everysetuplanguage -\def\installedlanguages{\clf_installedlanguages} +\aliased\let\installedlanguages\clf_installedlanguages % no need for \clf_ -\unexpanded\def\doifelselanguage#1% +\permanent\protected\def\doifelselanguage#1% {\ifcsname\??language#1\c!state\endcsname \expandafter\firstoftwoarguments \else @@ -187,15 +187,12 @@ \let\doiflanguageelse\doifelselanguage -\def\reallanguagetag#1% +\permanent\def\reallanguagetag#1% {\ifcsname\??languagelinked#1\endcsname\lastnamedcs\else#1\fi} % \language[#1] gave unwanted side effect of loading language specifics -\unexpanded\def\installlanguage - {\dodoubleargument\lang_basics_install} - -\def\lang_basics_install[#1][#2]% +\permanent\tolerant\protected\def\installlanguage[#1]#*[#2]% {\ifcondition\validassignment{#2}% \doifelselanguage{#1} {\getparameters[\??language#1][#2]} @@ -218,7 +215,7 @@ %D feature is present because we used dutch mnemonics in the dutch version, but %D nowadays conform a standard. -\unexpanded\def\doifelsepatterns#1% +\permanent\protected\def\doifelsepatterns#1% {\begingroup % will change \lang_basics_set_current[#1]% \ifnum\normallanguage>\zerocount @@ -227,7 +224,7 @@ \endgroup\expandafter\secondoftwoarguments \fi} -\let\doifpatternselse\doifelsepatterns +\aliased\let\doifpatternselse\doifelsepatterns %D \macros %D {setuplanguage} @@ -238,27 +235,26 @@ %D %D Beware, this command can only be used when a language is installed. -\unexpanded\def\setuplanguage - {\dodoubleempty\lang_basics_setup} - \ifdefined\lang_basics_synchronize \else \let\lang_basics_synchronize\relax % be nice for setups till we have one \fi \installmacrostack\currentlanguage -\def\lang_basics_setup[#1][#2]% - {\ifsecondargument +\permanent\tolerant\protected\def\setuplanguage[#1]#*[#2]% + {\ifarguments + % only synchronize + \or + \let\currentsetuplanguage\currentlanguage + \getparameters[\??language\currentsetuplanguage][#1]% + \the\everysetuplanguage + \or \push_macro_currentlanguage % can be default \edef\currentsetuplanguage{\reallanguagetag{#1}}% \getparameters[\??language\currentsetuplanguage][#2]% \the\everysetuplanguage \pop_macro_currentlanguage %\doif\currentsetuplanguage\currentlanguage we can have influenced inheritance (default) - \else - \let\currentsetuplanguage\currentlanguage - \getparameters[\??language\currentsetuplanguage][#1]% - \the\everysetuplanguage \fi \lang_basics_synchronize} @@ -316,8 +312,8 @@ %D %D Just to make things easy we can ask for the current date specification by saying: -\def\currentdatespecification{\languageparameter\c!date} -\def\currenttimespecification{\languageparameter\c!time} +\permanent\def\currentdatespecification{\languageparameter\c!date} +\permanent\def\currenttimespecification{\languageparameter\c!time} %D Carefull reading of these macros shows that it's legal to say %D @@ -398,9 +394,9 @@ % This is the old implementation: a hack that sets the min values, because we want % to keep the language set: % -% \unexpanded\def\nohyphens % nicer for url's +% \protected\def\nohyphens % nicer for url's % {\ifx\dohyphens\relax -% \unexpanded\edef\dohyphens +% \protected\edef\dohyphens % {\hyphenminoffset\the\hyphenminoffset\relax % \lang_basics_synchronize_min_max}% % \fi @@ -433,10 +429,10 @@ + \permitmathreplacehyphenationmodecode % and again we're more permissive \relax -\unexpanded\def\dohyphens{\hyphenationmode\completehyphenationmodecode} -\unexpanded\def\nohyphens{\hyphenationmode\zerocount} +\permanent\protected\def\dohyphens{\hyphenationmode\completehyphenationmodecode} +\permanent\protected\def\nohyphens{\hyphenationmode\zerocount} -\unexpanded\def\usehyphensparameter#1% +\permanent\protected\def\usehyphensparameter#1% {\edef\p_hyphens{#1\c!hyphens}% \ifx\p_hyhens\v!no \nohyphens @@ -446,17 +442,17 @@ %D The rest stays the same as in mkiv: -\unexpanded\def\lesshyphens +\permanent\protected\def\lesshyphens {\advance\hyphenminoffset\plusone \lang_basics_synchronize_min_max} -\unexpanded\def\morehyphens +\permanent\protected\def\morehyphens {\ifcase\hyphenminoffset \else \advance\hyphenminoffset\minusone \fi \lang_basics_synchronize_min_max} -\unexpanded\def\lang_basics_synchronize_min_max % maybe store this at the lua end +\protected\def\lang_basics_synchronize_min_max % maybe store this at the lua end {% these values are stored along with glyph nodes \lefthyphenmin \numexpr0\languageparameter\s!lefthyphenmin +\hyphenminoffset\relax \righthyphenmin\numexpr0\languageparameter\s!righthyphenmin+\hyphenminoffset\relax @@ -469,7 +465,7 @@ \lang_basics_synchronize_min_max \to \everylanguage -\unexpanded\def\unhyphenated +\permanent\protected\def\unhyphenated {\groupedcommand{\lefthyphenmin\maxdimen}\donothing} % \appendtoks @@ -509,7 +505,7 @@ % new experimental feature -\unexpanded\def\setuplanguages +\permanent\protected\def\setuplanguages {\setuplanguage[\s!default]} % \setuplanguages[\c!font=\v!auto] @@ -537,36 +533,40 @@ \fi \fi} -\unexpanded\def\uselanguageparameter#1% +\protected\def\uselanguageparameter#1% {\edef\askedlanguage{#1\c!language}% \ifempty\askedlanguage\else\lang_basics_switch_asked\fi} -\unexpanded\def\douselanguageparameter#1% fast setter +\protected\def\douselanguageparameter#1% fast setter {\edef\askedlanguage{#1}% \ifempty\askedlanguage\else\lang_basics_switch_asked\fi} -\unexpanded\def\lang_basics_set_current[#1]% +\protected\def\lang_basics_set_current[#1]% {\edef\askedlanguage{#1}% \ifempty\askedlanguage\else\lang_basics_switch_asked\fi} -\unexpanded\def\language - {\doifelsenextoptionalcs\lang_basics_set_current\normallanguage} +\pushoverloadmode -\let\setlanguage\language % we make these synonyms + \permanent\protected\def\language + {\doifelsenextoptionalcs\lang_basics_set_current\normallanguage} -\let\patterns\gobbleoneargument + \let\setlanguage\language % we make these synonyms + + \let\patterns\gobbleoneargument + +\popoverloadmode \newcount\mainlanguagenumber %D Beware: you might need to use \type {\dontleavehmode} outside and|/|or \type {\par} %D inside the group! -\unexpanded\def\startlanguage +\permanent\protected\def\startlanguage {\begingroup\language} -\let\stoplanguage\endgroup +\permanent\let\stoplanguage\endgroup -\unexpanded\def\mainlanguage[#1]% +\permanent\protected\def\mainlanguage[#1]% {\edef\askedlanguage{#1}% \ifempty\askedlanguage \orelse\ifcsname\??languagelinked\askedlanguage\endcsname @@ -590,10 +590,10 @@ %D Used at all? -\def\splitsequence#1#2% +\permanent\def\splitsequence#1#2% {\doifelse{#1}\v!no{#2}{\doifelse{#1}\v!yes{\languageparameter\c!limittext}{#1}}} -\def\splitsymbol#1% +\permanent\def\splitsymbol#1% {\splitsequence{#1}{\languageparameter\c!limittext}} %D Just like with subsentence boundary symbols, quotes placement depends on the @@ -704,25 +704,22 @@ %D \stoptable %D \protect -\unexpanded\def\nopatterns{\normallanguage\minusone} +\permanent\protected\def\nopatterns{\normallanguage\minusone} %D We default to the language belonging to the interface. This is one of the few %D places outside the interface modules where \type {\startinterface} is used. \setupcurrentlanguage[\s!en] -\unexpanded\def\initializemainlanguage +\permanent\protected\def\initializemainlanguage {\mainlanguage[\currentlanguage]% \showmessage\m!languages9\currentlanguage} %D New: -\let\stopexceptions\relax +\permanent\let\stopexceptions\relax -\unexpanded\def\startexceptions - {\dosingleempty\lang_basics_start_exceptions} - -\def\lang_basics_start_exceptions[#1]#2\stopexceptions % multilingual or not? +\tolerant\permanent\protected\def\startexceptions[#1]#:#2\stopexceptions {\begingroup \edef\askedlanguage{\reallanguagetag{#1}}% \ifempty\askedlanguage @@ -731,26 +728,38 @@ \clf_setlanguageexceptions{\askedlanguage}{#2}% \endgroup} -\unexpanded\def\hyphenation +\pushoverloadmode + +\permanent\protected\def\hyphenation {\clf_setlanguageexceptions{\currentlanguage}} +\popoverloadmode + %D New: -\unexpanded\def\traceddiscretionary#1#% +\permanent\protected\def\traceddiscretionary#1#% {\dontleavehmode\lang_basics_traced_discretionary{#1}} -\unexpanded\def\lang_basics_traced_discretionary#1#2#3#4% +\protected\def\lang_basics_traced_discretionary#1#2#3#4% {\normaldiscretionary#1{\darkred#2}{\darkgreen#3}{\darkblue#4}} \installtextracker {discretionaries} - {\let\discretionary\traceddiscretionary} - {\let\discretionary\normaldiscretionary} + {\enforced\let\discretionary\traceddiscretionary} + {\enforced\let\discretionary\normaldiscretionary} -\unexpanded\def\samplediscretionary +\permanent\protected\def\samplediscretionary {\traceddiscretionary {pre\clf_currentprehyphenchar}% {\clf_currentposthyphenchar post}% {replace}} +%D Also new: + +\immutable\chardef\nokerningcode \numexpr\noleftkerncode +\norightkerncode \relax +\immutable\chardef\noligaturingcode\numexpr\noleftligaturecode+\norightligaturecode\relax + +\permanent\protected\def\nokerning {\bitwiseflip\glyphoptions\nokerningcode} +\permanent\protected\def\noligaturing{\bitwiseflip\glyphoptions\noligaturingcode} + \protect \endinput diff --git a/tex/context/base/mkiv/lang-lab.mkxl b/tex/context/base/mkiv/lang-lab.mkxl index bf503c069..d627e5a42 100644 --- a/tex/context/base/mkiv/lang-lab.mkxl +++ b/tex/context/base/mkiv/lang-lab.mkxl @@ -21,7 +21,7 @@ %D Left-overs: \ifdefined\sixperemspace \else - \def\sixperemspace{\normalUchar"2006} + \permanent\def\sixperemspace{\normalUchar"2006} \fi %D In this module we deal with language dependant labels and prefixes, like in {\em @@ -62,14 +62,11 @@ \let\currentlabelcategory\empty -\unexpanded\def\definelabelclass - {\dodoubleempty\lang_labels_define_class} - -\def\lang_labels_define_class[#1][#2]% +\permanent\tolerant\protected\def\definelabelclass[#1]#*[#2]% {\normalexpanded {\lang_labels_define_class_indeed {#1}% - {\ifsecondargument#2\else\zerocount\fi}% + {\ifchknum#2\or#2\else\zerocount\fi}% \expandafter\noexpand\csname dogetupsome#1text\endcsname \expandafter\noexpand\csname #1language\endcsname \expandafter\noexpand\csname dodogetupsome#1text\endcsname @@ -82,11 +79,11 @@ \let\thetextprefix\empty -\unexpanded\def\lang_labels_define_class_indeed#1#2#3#4#5#6#7#8#9% - {\setuvalue{setup#1text}{\protecttextprefixes#2\def\currenttextprefixclass{#1}\dodoubleempty\lang_labels_text_prefix_setup}% - \setuvalue{preset#1text}{\protecttextprefixes1\def\currenttextprefixclass{#1}\dodoubleempty\lang_labels_text_prefix_setup}% - \setuvalue{copy#1text}{\protecttextprefixes1\def\currenttextprefixclass{#1}\dodoubleempty\lang_labels_text_prefix_copy}% - \setuvalue{start#1text}{\protecttextprefixes1\def\currenttextprefixclass{#1}\dotripleempty\lang_labels_text_prefix_start[#1]}% +\protected\def\lang_labels_define_class_indeed#1#2#3#4#5#6#7#8#9% + {\setuvalue {setup#1text}{\protecttextprefixes#2\def\currenttextprefixclass{#1}\lang_labels_text_prefix_setup}% + \setuvalue{preset#1text}{\protecttextprefixes 1\def\currenttextprefixclass{#1}\lang_labels_text_prefix_setup}% + \setuvalue {copy#1text}{\protecttextprefixes 1\def\currenttextprefixclass{#1}\lang_labels_text_prefix_copy }% + \setuvalue {start#1text}{\protecttextprefixes 1\def\currenttextprefixclass{#1}\lang_labels_text_prefix_start[#1]}% \letvalue{stop#1text}\relax \def#4{\reallanguagetag{\defaultlanguage\currentmainlanguage}}% \ifnum#2=\plustwo % used for math and tags @@ -117,27 +114,27 @@ \let#8\gobbletwoarguments \let#9#3% \else - \unexpanded\def#3{#5#4}% - \unexpanded\def#5##1##2% + \protected\def#3{#5#4}% + \protected\def#5##1##2% {\ifcsname\??label#1:##1:##2\endcsname %\expandafter\let\expandafter\thetextprefix\csname\??label#1:##1:##2\endcsname - \expandafter\let\expandafter\thetextprefix\lastnamedcs + \enforced\expandafter\let\expandafter\thetextprefix\lastnamedcs \orelse\ifcsname\??language#4\s!default\endcsname %\expandafter#5\csname\??language#4\s!default\endcsname{##2}% \expandafter#5\lastnamedcs{##2}% \orelse\ifcsname\??label#1:##2\endcsname %\expandafter\let\expandafter\thetextprefix\csname\??label#1:##2\endcsname - \expandafter\let\expandafter\thetextprefix\lastnamedcs + \enforced\expandafter\let\expandafter\thetextprefix\lastnamedcs \orelse\ifcsname\??label#1:\s!en:##2\endcsname %\expandafter\let\expandafter\thetextprefix\csname\??label#1:\s!en:##2\endcsname - \expandafter\let\expandafter\thetextprefix\lastnamedcs + \enforced\expandafter\let\expandafter\thetextprefix\lastnamedcs \else - \let\thetextprefix\dummytextprefix + \enforced\let\thetextprefix\dummytextprefix \fi}% - \unexpanded\def#6##1{#3{##1}\expandafter\flushleftlabelclass \thetextprefix}% - \unexpanded\def#7##1{#3{##1}\expandafter\flushrightlabelclass\thetextprefix}% - \unexpanded\def#8##1{#3{##1}\expandafter\flushbothlabelclass \thetextprefix}% #2 - \unexpanded\def#9##1{#3{##1}\expandafter\flushleftlabelclass \thetextprefix}% + \protected\def#6##1{#3{##1}\expandafter\flushleftlabelclass \thetextprefix}% + \protected\def#7##1{#3{##1}\expandafter\flushrightlabelclass\thetextprefix}% + \protected\def#8##1{#3{##1}\expandafter\flushbothlabelclass \thetextprefix}% #2 + \protected\def#9##1{#3{##1}\expandafter\flushleftlabelclass \thetextprefix}% \fi \appendtoks \let#6\firstofoneargument % to be checked @@ -146,10 +143,14 @@ \let#9\firstofoneargument % to be checked \to \everysimplifycommands} +% why not lang_* ? + \let\flushleftlabelclass \firstoftwoarguments \let\flushrightlabelclass\secondoftwoarguments -\def\flushbothlabelclass #1#2#3{#1#3#2} -\def\dummytextprefix {\empty\empty} + +\permanent\def\flushbothlabelclass#1#2#3{#1#3#2} + +\permanent\def\dummytextprefix{\empty\empty} %D \macros %D {headtext, labeltext, leftlabeltext, rightlabeltext, labeltexts} @@ -172,13 +173,13 @@ \let\currenttextprefixtag \s!unknown \let\currenttextprefixclass\s!unknown -\def\lang_labels_text_prefix_start[#1][#2][#3]% class language name - {\ifthirdargument - \edef\currenttextprefixtag{\reallanguagetag{#2}}% - \edef\currenttextprefixname{#3}% - \else +\tolerant\def\lang_labels_text_prefix_start[#1]#*[#2]#*[#3]% class language name + {\ifarguments\or\or \edef\currenttextprefixtag{\reallanguagetag\currentmainlanguage}% \edef\currenttextprefixname{#2}% + \else + \edef\currenttextprefixtag{\reallanguagetag{#2}}% + \edef\currenttextprefixname{#3}% \fi \grabuntil{stop#1text}\lang_labels_text_prefix_start_indeed} @@ -186,13 +187,13 @@ {\expandafter\edef\csname\??label\currenttextprefixclass:\currenttextprefixtag:\currenttextprefixname\endcsname% {{\clf_strip{#1}}\empty}} -\def\lang_labels_text_prefix_setup[#1][#2]% - {\ifsecondargument - \edef\currenttextprefixtag{\reallanguagetag{#1}}% - \processcommalist[#2]\lang_labels_text_prefix_setup_indeed - \else +\tolerant\def\lang_labels_text_prefix_setup[#1]#*[#2]% + {\ifarguments\or \edef\currenttextprefixtag{\reallanguagetag\currentmainlanguage}% \processcommalist[#1]\lang_labels_text_prefix_setup_indeed + \else + \edef\currenttextprefixtag{\reallanguagetag{#1}}% + \processcommalist[#2]\lang_labels_text_prefix_setup_indeed \fi} \def\lang_labels_text_prefix_setup_indeed#1% @@ -240,17 +241,17 @@ \def\lang_labels_text_prefix_assign_dumb#1[#2,#3]% {\expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{#2}} -\unexpanded\def\setlabeltextpair#1#2#3#4#5% a fast one for usage at the Lua end +\permanent\protected\def\setlabeltextpair#1#2#3#4#5% a fast one for usage at the Lua end {%\writestatus{!!!!}{#1:\reallanguagetag{#2}:#3}% \expandafter\def\csname\??label#1:\reallanguagetag{#2}:#3\endcsname{{#4}{#5}}} % class tag key left right -\def\lang_labels_text_prefix_copy[#1][#2]% - {\ifsecondargument - \edef\currenttextprefixtag{\reallanguagetag{#1}}% - \processcommalist[#2]\lang_labels_text_prefix_copy_indeed - \else +\tolerant\def\lang_labels_text_prefix_copy[#1]#*[#2]% + {\ifarguments\or \edef\currenttextprefixtag{\reallanguagetag\currentmainlanguage}% \processcommalist[#1]\lang_labels_text_prefix_copy_indeed + \else + \edef\currenttextprefixtag{\reallanguagetag{#1}}% + \processcommalist[#2]\lang_labels_text_prefix_copy_indeed \fi} \def\lang_labels_text_prefix_copy_indeed#1% @@ -298,10 +299,7 @@ \installcorenamespace{translation} -\unexpanded\def\translate - {\dosingleempty\lang_translate} - -\def\lang_translate[#1]% +\permanent\tolerant\protected\def\translate[#1]% {\getparameters[\??translation][#1]% \ifcsname\??translation\currentlanguage\endcsname \lastnamedcs @@ -328,7 +326,9 @@ %D \assigntranslation[en=something,nl=iets]\to\command %D \stoptyping -\unexpanded\def\assigntranslation[#1]\to#2% bad, this \to +% nicer is \edef\command{\translated[...]} ... todo + +\permanent\protected\def\assigntranslation[#1]\to#2% bad, this \to {\getparameters[\??translation][#1]% \edef#2{\begincsname\??translation\currentlanguage\endcsname}} @@ -352,10 +352,7 @@ %D \getbuffer %D \stoplines -\unexpanded\def\commalistsentence - {\dodoubleempty\typo_helpers_concat_comma_list} - -\def\typo_helpers_concat_comma_list[#1][#2]% +\permanent\tolerant\protected\def\commalistsentence[#1]#*[#2]% {\clf_concatcommalist text {#1}% separators {#2}% @@ -370,6 +367,6 @@ %D Goodie (handy at \LUA\ end): -\unexpanded\def\LABELTEXT#1{\WORD{\labeltext{#1}}} % only for simple cases! +\permanent\protected\def\LABELTEXT#1{\WORD{\labeltext{#1}}} % only for simple cases! \protect \endinput diff --git a/tex/context/base/mkiv/lang-mis.mkiv b/tex/context/base/mkiv/lang-mis.mkiv index 3ec29a782..4d81c01fa 100644 --- a/tex/context/base/mkiv/lang-mis.mkiv +++ b/tex/context/base/mkiv/lang-mis.mkiv @@ -254,12 +254,12 @@ \def\lang_discretionaries_check_after {\setfalse\punctafterdiscretionary \setfalse\spaceafterdiscretionary - \ifx\blankspace\nextnext \settrue \spaceafterdiscretionary \else - \ifx\space \nextnext \settrue \spaceafterdiscretionary \else - \ifx .\nextnext \settrue \punctafterdiscretionary \else - \ifx ,\nextnext \settrue \punctafterdiscretionary \else - \ifx :\nextnext \settrue \punctafterdiscretionary \else - \ifx ;\nextnext \settrue \punctafterdiscretionary \fi\fi\fi\fi\fi\fi} + \ifx\blankspace\nexttoken \settrue \spaceafterdiscretionary \else + \ifx\space \nexttoken \settrue \spaceafterdiscretionary \else + \ifx .\nexttoken \settrue \punctafterdiscretionary \else + \ifx ,\nexttoken \settrue \punctafterdiscretionary \else + \ifx :\nexttoken \settrue \punctafterdiscretionary \else + \ifx ;\nexttoken \settrue \punctafterdiscretionary \fi\fi\fi\fi\fi\fi} \letvalue{\??discretionarymode m}\handlemathmodediscretionary @@ -268,7 +268,7 @@ \let\nextnextnext\egroup \def\next##1#1% {\def\next{\activedododotextmodediscretionary#1{##1}}% - \futurelet\nextnext\next}% + \futurelet\nexttoken\next}% \next} \let\discretionarytoken \relax @@ -279,7 +279,7 @@ \def\textmodediscretionary{\handletextmodediscretionary{#1}}% \lang_discretionaries_check_after \ifx\discretionarytoken\empty - \ifx#1\nextnext % takes care of ||| and +++ and ...... + \ifx#1\nexttoken % takes care of ||| and +++ and ...... \ifcsname\??discretionaryaction\string#1\endcsname \lastnamedcs \else\ifconditional\spaceafterdiscretionary @@ -296,7 +296,7 @@ \else \lang_discretionaries_check_before % the next line has been changed (20050203) - % \prewordbreak\hbox{\textmodediscretionary\nextnext}\postwordbreak + % \prewordbreak\hbox{\textmodediscretionary\nexttoken}\postwordbreak % but an hbox blocks a possible \discretionary \ifcsname\??discretionaryaction\endcsname \lastnamedcs diff --git a/tex/context/base/mkiv/lang-mis.mkxl b/tex/context/base/mkiv/lang-mis.mkxl index 5ed131d25..9515a1f8e 100644 --- a/tex/context/base/mkiv/lang-mis.mkxl +++ b/tex/context/base/mkiv/lang-mis.mkxl @@ -150,8 +150,8 @@ % hm why ex -\ifx\compoundhyphen \undefined - \unexpanded\def\compoundhyphen {\hbox{-\kern-.10775\emwidth-}} % .25\exheight +\ifx\compoundhyphen\undefined + \permanent\protected\def\compoundhyphen{\hbox{-\kern-.10775\emwidth-}} % .25\exheight \fi %D The last two variables are needed for subsentences |<|like this one|>| which we @@ -159,12 +159,12 @@ %D compound characters like |-| or || to be separated from the words. \TEX\ hackers %D will recognise the next two macro's: -\ifx\prewordbreak \undefined \unexpanded\def\prewordbreak {\penalty\plustenthousand\hskip\zeropoint\relax} \fi -\ifx\postwordbreak\undefined \unexpanded\def\postwordbreak {\penalty\zerocount \hskip\zeropoint\relax} \fi -\ifx\hspaceamount \undefined \def\hspaceamount#1#2{.16667\emwidth} \fi % language specific +\ifx\prewordbreak \undefined \permanent\protected\def\prewordbreak {\penalty\plustenthousand\hskip\zeropoint\relax} \fi +\ifx\postwordbreak\undefined \permanent\protected\def\postwordbreak {\penalty\zerocount \hskip\zeropoint\relax} \fi +\ifx\hspaceamount \undefined \def\hspaceamount#1#2{.16667\emwidth} \fi % will be overloaded -%unexpanded\def\permithyphenation{\ifhmode\prewordbreak\fi} % doesn't remove spaces -\unexpanded\def\permithyphenation{\ifhmode\wordboundary\fi} % doesn't remove spaces +%frozen\protected\def\permithyphenation{\ifhmode\prewordbreak\fi} % doesn't remove spaces +\permanent\protected\def\permithyphenation{\ifhmode\wordboundary\fi} % doesn't remove spaces %D \macros %D {beginofsubsentence,endofsubsentence, @@ -191,22 +191,22 @@ \installcorenamespace{discretionaryboth} \installcorenamespace{discretionarymode} -\unexpanded\def\installdiscretionary#1#2% +\permanent\protected\def\installdiscretionary#1#2% {\setevalue{\??discretionarymath\detokenize{#1}}{\detokenize{#1}}% ? \setvalue {\??discretionarytext\detokenize{#1}}{#2}% \setvalue {\??discretionaryboth\detokenize{#1}}{\lang_discretionaries_command#1}% \scratchcounter\expandafter`\detokenize{#1}% \expandafter\uedcatcodecommand\expandafter\ctxcatcodes\expandafter\scratchcounter\csname\??discretionaryboth\detokenize{#1}\endcsname} -\unexpanded\def\handlemathmodediscretionary#1{\ifcsname\??discretionarymath\detokenize{#1}\endcsname\lastnamedcs} -\unexpanded\def\handletextmodediscretionary#1{\ifcsname\??discretionarytext\detokenize{#1}\endcsname\lastnamedcs} +\permanent\protected\def\handlemathmodediscretionary#1{\ifcsname\??discretionarymath\detokenize{#1}\endcsname\lastnamedcs} +\permanent\protected\def\handletextmodediscretionary#1{\ifcsname\??discretionarytext\detokenize{#1}\endcsname\lastnamedcs} -\unexpanded\def\installdiscretionaries#1#2{\writestatus\m!system{use \string \installdiscretionary}} % obsolete +\permanent\protected\def\installdiscretionaries#1#2{\writestatus\m!system{use \string \installdiscretionary}} % obsolete \setnewconstant\discretionarymode\plusone -\unexpanded\def\ignorediscretionaries{\discretionarymode\zerocount} -\unexpanded\def\obeydiscretionaries {\discretionarymode\plusone} +\permanent\protected\def\ignorediscretionaries{\discretionarymode\zerocount} +\permanent\protected\def\obeydiscretionaries {\discretionarymode\plusone} \def\lang_discretionaries_command {% if direct if, we need \relax for lookahead in math mode @@ -252,12 +252,12 @@ \def\lang_discretionaries_check_after {\setfalse\punctafterdiscretionary \setfalse\spaceafterdiscretionary - \ifx\blankspace\nextnext \settrue \spaceafterdiscretionary \orelse - \ifx\space \nextnext \settrue \spaceafterdiscretionary \orelse - \ifx .\nextnext \settrue \punctafterdiscretionary \orelse - \ifx ,\nextnext \settrue \punctafterdiscretionary \orelse - \ifx :\nextnext \settrue \punctafterdiscretionary \orelse - \ifx ;\nextnext \settrue \punctafterdiscretionary \fi} + \ifx\blankspace\nexttoken \settrue \spaceafterdiscretionary \orelse + \ifx\space \nexttoken \settrue \spaceafterdiscretionary \orelse + \ifx .\nexttoken \settrue \punctafterdiscretionary \orelse + \ifx ,\nexttoken \settrue \punctafterdiscretionary \orelse + \ifx :\nexttoken \settrue \punctafterdiscretionary \orelse + \ifx ;\nexttoken \settrue \punctafterdiscretionary \fi} \letvalue{\??discretionarymode m}\handlemathmodediscretionary @@ -266,18 +266,18 @@ \let\nextnextnext\egroup \def\next##1#1% {\def\next{\activedododotextmodediscretionary#1{##1}}% - \futurelet\nextnext\next}% + \futurelet\nexttoken\next}% \next} \let\discretionarytoken \relax \let\textmodediscretionary\relax -\unexpanded\def\activedododotextmodediscretionary#1#2% +\permanent\protected\def\activedododotextmodediscretionary#1#2% {\edef\discretionarytoken{\detokenize{#2}}% \def\textmodediscretionary{\handletextmodediscretionary{#1}}% \lang_discretionaries_check_after \ifx\discretionarytoken\empty - \ifx#1\nextnext % takes care of ||| and +++ and ...... + \ifx#1\nexttoken % takes care of ||| and +++ and ...... \ifcsname\??discretionaryaction\string#1\endcsname \lastnamedcs \orelse\ifconditional\spaceafterdiscretionary @@ -294,7 +294,7 @@ \else \lang_discretionaries_check_before % the next line has been changed (20050203) - % \prewordbreak\hbox{\textmodediscretionary\nextnext}\postwordbreak + % \prewordbreak\hbox{\textmodediscretionary\nexttoken}\postwordbreak % but an hbox blocks a possible \discretionary \ifcsname\??discretionaryaction\endcsname \lastnamedcs @@ -333,7 +333,7 @@ %D In those situations where the nature of characters is less predictable, we can %D use the more direct approach: -\unexpanded\def\directdiscretionary +\permanent\protected\def\directdiscretionary {\csname\??discretionarymode \ifcase\discretionarymode n% @@ -342,7 +342,7 @@ \fi \endcsname} -\unexpanded\def\indirectdiscretionary +\permanent\protected\def\indirectdiscretionary {\csname\??discretionarymode \ifcase\discretionarymode n% @@ -365,7 +365,7 @@ {\wordboundary\discretionary{\hbox{#1}}{}{\hbox{#1}}\wordboundary} %{\discretionary options \plusthree{\hbox{#1}}{}{\hbox{#1}}} -\unexpanded\def\definetextmodediscretionary #1 +\permanent\protected\def\definetextmodediscretionary #1 {\setvalue{\??discretionaryaction\detokenize{#1}}} % \start \hsize 1mm @@ -479,7 +479,7 @@ %D \installdiscretionary | + %D \installdiscretionary + = -\def\defaultdiscretionaryhyphen{\compoundhyphen} +\permanent\protected\def\defaultdiscretionaryhyphen{\compoundhyphen} \installdiscretionary | \defaultdiscretionaryhyphen % installs in ctx and prt will fall back on it @@ -494,11 +494,11 @@ %D \goto{Some||Long||Word} %D \stoptyping -\unexpanded\def\fakecompoundhyphen - {\def\|{\mathortext\vert\lang_compounds_fake_hyphen}} +\permanent\protected\def\fakecompoundhyphen + {\enforced\permanent\protected\def\|{\mathortext\vert\lang_compounds_fake_hyphen}} \def\lang_compounds_fake_hyphen - {\def##1|% + {\enforced\permanent\protected\def##1|% {\doifelsenothing{##1}\compoundhyphen{##1}% \kern\compoundbreakpoint\allowbreak}} @@ -510,7 +510,7 @@ %D but, like the ones implemented earlier, this one also looks ahead for spaces and %D grouping tokens. -\unexpanded\def\midworddiscretionary +\permanent\protected\def\midworddiscretionary {\futurelet\nexttoken\lang_discretionaries_mid_word} \def\lang_discretionaries_mid_word @@ -552,10 +552,10 @@ \catcode\barasciicode\activecatcode - \unexpanded\gdef\compound#1{|#1|} + \permanent\protected\gdef\compound#1{|#1|} \doglobal \appendtoks - \def|#1|{\ifx#1\empty\empty-\else#1\fi}% + \enforced\permanent\protected\def|#1|{\ifx#1\empty\empty-\else#1\fi}% \to \everysimplifycommands \egroup @@ -575,7 +575,7 @@ %D %D \typebuffer \blank {\hsize3mm\getbuffer\par} \blank -\unexpanded\def\compounddiscretionary +\permanent\protected\def\compounddiscretionary {\discretionary options \plusthree {\ifnum\prehyphenchar >\zerocount\char\prehyphenchar \fi}% diff --git a/tex/context/base/mkiv/lang-rep.lua b/tex/context/base/mkiv/lang-rep.lua index a48215781..2a3c8a7fa 100644 --- a/tex/context/base/mkiv/lang-rep.lua +++ b/tex/context/base/mkiv/lang-rep.lua @@ -164,50 +164,6 @@ function languages.replacements.addlist(category,list) end end -local function hit(a,head) - local tree = trees[a] - if tree then - local root = tree[getchar(head)] - if root then - local current = getnext(head) - local lastrun = false - local lastfinal = false - while current do - local char, id = isglyph(current) - if not char and id == glue_code then - local s = getsubtype(current) - if s == spaceskip_code or s == xspaceskip_code then - char = 32 -- if needed we can also deal with spaces and special nbsp and such - end - end - if char then - local newroot = root[char] - if not newroot then - return lastrun, lastfinal - else - local final = newroot.final - if final then - if trace_details then - report_replacement("hitting word %a, replacement %a",final.word,final.replacement) - end - lastrun = current - lastfinal = final - else - root = newroot - end - end - current = getnext(current) - else - break - end - end - if lastrun then - return lastrun, lastfinal - end - end - end -end - local function tonodes(list,template) local head, current for i=1,#list do @@ -222,120 +178,241 @@ local function tonodes(list,template) return head end +local is_punctuation = characters.is_punctuation + +-- We can try to be clever and use the fact that there is no match to skip +-- over to the next word but it is gives fuzzy code so for now I removed +-- that optimization (when I really need a high performance version myself +-- I will look into it (but so far I never used this mechanism myself). +-- +-- We used to have the hit checker as function but is got messy when checks +-- for punctuation was added. + +local function replace(head,first,last,final,hasspace,overload) + local current = first + local prefirst = getprev(first) or head + local postlast = getnext(last) + local oldlength = final.oldlength + local newcodes = final.newcodes + local newlength = newcodes and #newcodes or 0 + if trace_replacements then + report_replacement("replacing word %a by %a",final.word,final.replacement) + end + if hasspace or final.special then + -- It's easier to delete and insert so we do just that. On the todo list is + -- turn injected spaces into glue but easier might be to let the char break + -- handler do that ... + local prev = getprev(current) + local next = getnext(last) + local list = current + setnext(last) + setlink(prev,next) + current = prev + if not current then + head = nil + end + local i = 1 + while i <= newlength do + local codes = newcodes[i] + if type(codes) == "table" then + local method = codes[1] + if method == "discretionary" then + local pre, post, replace = codes[2], codes[3], codes[4] + if pre then + pre = tonodes(pre,first) + end + if post then + post = tonodes(post,first) + end + if replace then + replace = tonodes(replace,first) + end + -- todo: also set attr + local new = new_disc(pre,post,replace) + setattrlist(new,first) + head, current = insert_after(head,current,new) + elseif method == "noligature" then + -- not that efficient to copy but ok for testing + local list = codes[2] + if list then + for i=1,#list do + local new = copy_node(first) + setchar(new,list[i]) + setattr(new,a_noligature,1) + head, current = insert_after(head,current,new) + end + else + local new = copy_node(first) + setchar(new,zwnj) + head, current = insert_after(head,current,new) + end + else + report_replacement("unknown method %a",method or "?") + end + else + local new = copy_node(first) + setchar(new,codes) + head, current = insert_after(head,current,new) + end + i = i + 1 + end + flush_list(list) + elseif newlength == 0 then + -- we overload + elseif oldlength == newlength then + if final.word ~= final.replacement then + for i=1,newlength do + setchar(current,newcodes[i]) + current = getnext(current) + end + end + current = getnext(final) + elseif oldlength < newlength then + for i=1,newlength-oldlength do + local n = copy_node(current) + setchar(n,newcodes[i]) + head, current = insert_node_before(head,current,n) + current = getnext(current) + end + for i=newlength-oldlength+1,newlength do + setchar(current,newcodes[i]) + current = getnext(current) + end + else + for i=1,oldlength-newlength do + head, current = remove_node(head,current,true) + end + for i=1,newlength do + setchar(current,newcodes[i]) + current = getnext(current) + end + end + if overload then + overload(final,getnext(prefirst),getprev(postlast)) + end + return head, postlast +end + +-- we handle just one space + function replacements.handler(head) - local current = head - local overload = attributes.applyoverloads + local current = head + local overload = attributes.applyoverloads + local mode = false -- we're in word or punctuation mode + local wordstart = false + local wordend = false + local prevend = false + local prevfinal = false + local tree = false + local root = false + local hasspace = false while current do - if getid(current) == glyph_code then + local id = getid(current) -- or use the char getter + if id == glyph_code then local a = getattr(current,a_replacements) if a then - local last, final = hit(a,current) - if last then - local precurrent = getprev(current) or head - local oldlength = final.oldlength - local newcodes = final.newcodes - local newlength = newcodes and #newcodes or 0 - if trace_replacement then - report_replacement("replacing word %a by %a",final.word,final.replacement) - end - if final.special then - -- easier is to delete and insert (a simple callout to tex would be more efficient) - -- maybe just walk over a replacement string instead - local prev = getprev(current) - local next = getnext(last) - local list = current - setnext(last) - setlink(prev,next) - current = prev - if not current then - head = nil - end - local i = 1 - while i <= newlength do - local codes = newcodes[i] - if type(codes) == "table" then - local method = codes[1] - if method == "discretionary" then - local pre, post, replace = codes[2], codes[3], codes[4] - if pre then - pre = tonodes(pre,last) - end - if post then - post = tonodes(post,last) - end - if replace then - replace = tonodes(replace,last) - end - -- todo: also set attr - local new = new_disc(pre,post,replace) - setattrlist(new,last) - head, current = insert_after(head,current,new) - elseif method == "noligature" then - -- not that efficient to copy but ok for testing - local list = codes[2] - if list then - for i=1,#list do - local new = copy_node(last) - setchar(new,list[i]) - setattr(new,a_noligature,1) - head, current = insert_after(head,current,new) - end - else - local new = copy_node(last) - setchar(new,zwnj) - head, current = insert_after(head,current,new) - end - else - -- todo + -- we have a run + tree = trees[a] + if tree then + local char = getchar(current) + local punc = is_punctuation[char] + if mode == "punc" then + if not punc then + if root then + local final = root.final + if final then + head = replace(head,wordstart,wordend,final,hasspace,overload) + elseif prevfinal then + head = replace(head,wordstart,prevend,prevfinal,hasspace,overload) end - else - local new = copy_node(last) - setchar(new,codes) - head, current = insert_after(head,current,new) + prevfinal = false + root = false end - i = i + 1 + mode = "word" end - flush_list(list) - -- elseif newlength == 0 then - -- -- nothing gets replaced - -- current = getnext(last) - elseif oldlength == newlength then -- #old == #new - if final.word == final.replacement then - -- nothing to do but skip - else - for i=1,newlength do - setchar(current,newcodes[i]) - current = getnext(current) + elseif mode == "word" then + if punc then + if root then + local final = root.final + if final then + head = replace(head,wordstart,wordend,final,hasspace,overload) + elseif prevfinal then + head = replace(head,wordstart,prevend,prevfinal,hasspace,overload) + end + prevfinal = false + root = false end + mode = "punc" end - elseif oldlength < newlength then -- #old < #new - for i=1,newlength-oldlength do - local n = copy_node(current) - setchar(n,newcodes[i]) - head, current = insert_node_before(head,current,n) - current = getnext(current) - end - for i=newlength-oldlength+1,newlength do - setchar(current,newcodes[i]) - current = getnext(current) + else + mode = punc and "punc" or "word" + end + if root then + root = root[char] + if root then + wordend = current end - else -- #old > #new or #new == 0 - for i=1,oldlength-newlength do - head, current = remove_node(head,current,true) + else + if prevfinal then + head = replace(head,wordstart,prevend,prevfinal,hasspace,overload) + prevfinal = false end - for i=1,newlength do - setchar(current,newcodes[i]) - current = getnext(current) + root = tree[char] + if root then + wordstart = current + wordend = current + prevend = false + hasspace = false end end - if overload then - overload(final,getnext(precurrent),getprev(current)) + else + root= false + end + else + tree = false + end + current = getnext(current) + elseif root then + local final = root.final + if mode == "word" and id == glue_code then + local s = getsubtype(current) + if s == spaceskip_code or s == xspaceskip_code then + local r = root[32] -- maybe more types + if r then + if not prevend then + local f = root.final + if f then + prevend = wordend + prevfinal = f + end + end + wordend = current + root = r + hasspace = true + goto moveon end end end + if final then + head, current = replace(head,wordstart,wordend,final,hasspace,overload) + elseif prevfinal then + head, current = replace(head,wordstart,prevend,prevfinal,hasspace,overload) + end + prevfinal = false + root = false + ::moveon:: + current = getnext(current) + else + current = getnext(current) + end + end + if root then + local final = root.final + if final then + head = replace(head,wordstart,wordend,final,hasspace,overload) + elseif prevfinal then + head = replace(head,wordstart,prevend,prevfinal,hasspace,overload) end - -- we're one ahead now but we need to because we handle words - current = getnext(current) end return head end diff --git a/tex/context/base/mkiv/lang-url.lua b/tex/context/base/mkiv/lang-url.lua index 7428d64ab..7a8b7ca86 100644 --- a/tex/context/base/mkiv/lang-url.lua +++ b/tex/context/base/mkiv/lang-url.lua @@ -9,7 +9,9 @@ if not modules then modules = { } end modules ['lang-url'] = { local utfcharacters, utfbyte, utfchar = utf.characters, utf.byte, utf.char local min, max = math.min, math.max -local context = context +local context = context +local ctx_pushcatcodes = context.pushcatcodes +local ctx_popcatcodes = context.popcatcodes local implement = interfaces.implement local variables = interfaces.variables @@ -190,9 +192,9 @@ local function action(hyphenatedurl,str,left,right,disc) end end if dodi then - list[i] = "\\d" + list[i] = "\\lang_url_d " else - list[i] = "\\" .. what .. "{" .. utfbyte(char) .. "}" + list[i] = "\\lang_url_" .. what .. "{" .. utfbyte(char) .. "}" end prev = char end @@ -200,7 +202,9 @@ local function action(hyphenatedurl,str,left,right,disc) report("old : %s",str) report("new : %t",list) end + ctx_pushcatcodes("prtcatcodes") context("%t",list) + ctx_popcatcodes() end -- urls.action = function(_,...) action(...) end -- sort of obsolete diff --git a/tex/context/base/mkiv/lang-url.mkiv b/tex/context/base/mkiv/lang-url.mkiv index 6afef63ce..c3ec02da4 100644 --- a/tex/context/base/mkiv/lang-url.mkiv +++ b/tex/context/base/mkiv/lang-url.mkiv @@ -47,19 +47,19 @@ \resetfontfeature \resetcharacterspacing % - \let\&\letterampersand - \let\#\letterhash - \let\~\lettertilde - \let\\\letterbackslash - \let\$\letterdollar - \let\^\letterhat - \let\_\letterunderscore - \let\{\letterleftbrace - \let\}\letterrightbrace - \let\|\letterbar - \let~=\lettertilde - \let|=\letterbar - \let\Ux\eUx + \enforced\let\&\letterampersand + \enforced\let\#\letterhash + \enforced\let\~\lettertilde + \enforced\let\\\letterbackslash + \enforced\let\$\letterdollar + \enforced\let\^\letterhat + \enforced\let\_\letterunderscore + \enforced\let\{\letterleftbrace + \enforced\let\}\letterrightbrace + \enforced\let\|\letterbar + \enforced\let~=\lettertilde + \enforced\let|=\letterbar + \enforced\let\Ux\eUx \to \everyhyphenatedurl \let\hyphenatedurlseparator \empty % \periodcentered @@ -100,22 +100,17 @@ {\dontleavehmode \begingroup \the\everyhyphenatedurl - \normallanguage\zerocount - \let\a\lang_url_a % after - \let\b\lang_url_b % before - \let\d\lang_url_d % disc - \let\l\lang_url_l % letter - \let\c\lang_url_c % character - \let\L\lang_url_L % letter_nobreak - \let\C\lang_url_C % character_nobreak + \normallanguage\zerocount % \nohyphens in mkiv \scratchskipone\zeropoint\s!plus\dimexpr\emwidth/12\s!minus\dimexpr\emwidth/24\relax % 1.00pt @ 12pt \scratchskiptwo\zeropoint\s!plus\dimexpr\emwidth/48\s!minus\dimexpr\emwidth/96\relax % 0.25pt @ 12pt + \unprotect \normalexpanded{\noexpand\clf_hyphenatedurl {\noexpand\detokenize{#1}}% \hyphenatedurllefthyphenmin \hyphenatedurlrighthyphenmin {\hyphenatedurldiscretionary}% }% + \protect \endgroup} %D \macros diff --git a/tex/context/base/mkiv/lang-wrd.lua b/tex/context/base/mkiv/lang-wrd.lua index 9fbced2ce..1c440bd7f 100644 --- a/tex/context/base/mkiv/lang-wrd.lua +++ b/tex/context/base/mkiv/lang-wrd.lua @@ -39,7 +39,7 @@ local getid = nuts.getid local getchar = nuts.getchar local setattr = nuts.setattr ----- getattr = nuts.getattr -local getlang = nuts.getlang +local getlanguage = nuts.getlanguage local ischar = nuts.ischar local nextnode = nuts.traversers.node @@ -163,7 +163,7 @@ local function mark_words(head,whenfound) -- can be optimized and shared while current do local code, id = ischar(current) -- not isglyph because otherwise we can run into if code then -- processed streams (\about[foo] does that) - local a = getlang(current) + local a = getlanguage(current) if a then if a ~= language then if s > 0 then diff --git a/tex/context/base/mkiv/lpdf-epa.lua b/tex/context/base/mkiv/lpdf-epa.lua index 45000aebc..0ff764e1d 100644 --- a/tex/context/base/mkiv/lpdf-epa.lua +++ b/tex/context/base/mkiv/lpdf-epa.lua @@ -510,7 +510,7 @@ local validstamps = { ForPublicRelease = true, } --- todo: we can use runtoks instead of steps +-- todo: we can use runlocal instead of steps local function validStamp(v) local name = "Stamped" -- fallback diff --git a/tex/context/base/mkiv/luat-cnf.lua b/tex/context/base/mkiv/luat-cnf.lua index ebce83ca8..16448c429 100644 --- a/tex/context/base/mkiv/luat-cnf.lua +++ b/tex/context/base/mkiv/luat-cnf.lua @@ -37,7 +37,7 @@ texconfig.save_size = 500000 texconfig.stack_size = 100000 texconfig.buffer_size = 10000000 texconfig.token_size = 10000000 -texconfig.node_size = 20000000 +texconfig.node_size = 50000000 texconfig.max_pool = 10000000 else @@ -121,15 +121,17 @@ function texconfig.init() }, basictex = { -- always - "callback", "font", "lang", "lua", "node", "status", "tex", "texconfig", "texio", "token", - -- not in luametatex - "img", "pdf", + "callback", "font", "lua", "node", "status", "tex", "texconfig", "texio", "token", + -- not in luametatex + "img", "pdf", "lang", + -- in luametatex + "language", }, extralua = { -- not in luametatex "unicode", "utf", "gzip", "zip", "zlib", -- in luametatex - "xzip", "xmath", "xcomplex", "basexx", + "xzip", "xmath", "xcomplex", "xdecimal", "basexx", -- maybe some day in luametatex "lz4", "lzo", -- always (mime can go) diff --git a/tex/context/base/mkiv/luat-cod.lmt b/tex/context/base/mkiv/luat-cod.lmt index 9b7564483..e4432345e 100644 --- a/tex/context/base/mkiv/luat-cod.lmt +++ b/tex/context/base/mkiv/luat-cod.lmt @@ -27,7 +27,7 @@ texconfig.save_size = 500000 texconfig.stack_size = 100000 texconfig.buffer_size = 10000000 texconfig.token_size = 10000000 -texconfig.node_size = 20000000 +texconfig.node_size = 50000000 texconfig.max_print_line = 100000 texconfig.max_strings = 500000 @@ -190,7 +190,7 @@ if not environment.luafilechunk then fullname = sourcepath .. "/" .. filename end local data = loadfile(fullname) - texio.write("term and log","<",data and "+ " or "- ",fullname,">") + texio.write("terminal_and_logfile","<",data and "+ " or "- ",fullname,">") if data then -- package.loaded[gsub(filename,"%..-$"] = data() @@ -297,7 +297,7 @@ callback.register("trace_memory", function(what,success) logs.report("tex memory","bumping category %a %s, details: %s", what,success,table.sequenced(status["get"..what.."state"]())) elseif texio then - texio.write_nl(format("bumping tex %a memory %s", + texio.write_nl(format("bumping tex '%s' memory %s", what,success)) end -- os.exit() diff --git a/tex/context/base/mkiv/luat-cod.mkxl b/tex/context/base/mkiv/luat-cod.mkxl index 3d3a5dd6b..fec88aecd 100644 --- a/tex/context/base/mkiv/luat-cod.mkxl +++ b/tex/context/base/mkiv/luat-cod.mkxl @@ -17,28 +17,28 @@ \newif\ifproductionrun -\let\ctxdirectlua \directlua -\let\ctxlatelua \latelua -\def\ctxsprint #1{\directlua{tex.sprint(tex.ctxcatcodes,#1)}} % saves tokens -\def\ctxwrite #1{\directlua{tex.write(#1)}} % saves tokens -\def\ctxcommand #1{\directlua{commands.#1}} % saves tokens -\def\ctxdirectcommand#1{\directlua{commands.#1}} % saves tokens -\def\ctxlatecommand #1{\latelua {commands.#1}} % saves tokens -\def\ctxreport #1{\directlua{logs.writer[[#1]]}} +\permanent\let\ctxdirectlua \directlua +\permanent\let\ctxlatelua \latelua +\permanent\def\ctxsprint #1{\directlua{tex.sprint(tex.ctxcatcodes,#1)}} % saves tokens +\permanent\def\ctxwrite #1{\directlua{tex.write(#1)}} % saves tokens +\permanent\def\ctxcommand #1{\directlua{commands.#1}} % saves tokens +\permanent\def\ctxdirectcommand#1{\directlua{commands.#1}} % saves tokens +\permanent\def\ctxlatecommand #1{\latelua {commands.#1}} % saves tokens +\permanent\def\ctxreport #1{\directlua{logs.writer[[#1]]}} %D Take your choice \unknown -\let\ctxlua \ctxdirectlua -\let\luacode \ctxdirectlua -\let\lateluacode \ctxlatelua -\let\directluacode\ctxdirectlua +\aliased\let\ctxlua \ctxdirectlua +\aliased\let\luacode \ctxdirectlua +\aliased\let\lateluacode \ctxlatelua +\aliased\let\directluacode\ctxdirectlua %D Reporting the version of \LUA\ that we use is done as follows: -\def\luaversion{\ctxwrite{LUAVERSION}} +\permanent\def\luaversion{\ctxwrite{LUAVERSION}} -\def\registerctxluafile#1#2{\ctxlua{lua.registercode("#1","#2")}} -\def\ctxloadluafile #1{\ctxlua{lua.registercode("#1")}} +\permanent\def\registerctxluafile#1#2{\ctxlua{lua.registercode("#1","#2")}} +\permanent\def\ctxloadluafile #1{\ctxlua{lua.registercode("#1")}} \registerctxluafile{luat-cod.lmt}{autosuffix} diff --git a/tex/context/base/mkiv/luat-fmt.lua b/tex/context/base/mkiv/luat-fmt.lua index 815ff10db..30792931e 100644 --- a/tex/context/base/mkiv/luat-fmt.lua +++ b/tex/context/base/mkiv/luat-fmt.lua @@ -178,8 +178,9 @@ function environment.make_format(formatname) -- because we can have half qualified paths (in lxc) local binarypath = validbinarypath() report_format("changing to format path %a",validformatpath) - lfs.chdir(validformatpath) - if dir.current() ~= validformatpath then + -- lfs.chdir(validformatpath) + -- if dir.current() ~= validformatpath then + if not lfs.chdir(validformatpath) then return fatalerror(startupdir,"unable to change to format path %a",validformatpath) end -- now we can generate the format, where we use a couple of flags, diff --git a/tex/context/base/mkiv/luat-ini.mkiv b/tex/context/base/mkiv/luat-ini.mkiv index d1b02ec7e..053e2ea4d 100644 --- a/tex/context/base/mkiv/luat-ini.mkiv +++ b/tex/context/base/mkiv/luat-ini.mkiv @@ -77,21 +77,25 @@ \edef\lua_letter_seven {\string\7} \edef\lua_letter_eight {\string\8} \edef\lua_letter_nine {\string\9} \edef\lua_letter_zero {\string\0} +\pushoverloadmode + \let\-\explicitdiscretionary +\popoverloadmode + \everyluacode {% \appendtoks - \let\\\lua_letter_backslash - \let\|\lua_letter_bar \let\-\lua_letter_dash - \let\(\lua_letter_lparent \let\)\lua_letter_rparent - \let\{\lua_letter_lbrace \let\}\lua_letter_rbrace - \let\'\lua_letter_squote \let\"\lua_letter_dquote - \let\n\lua_letter_n \let\r\lua_letter_r - \let\f\lua_letter_f \let\t\lua_letter_t - \let\a\lua_letter_a \let\b\lua_letter_b - \let\v\lua_letter_v \let\s\lua_letter_s - \let\1\lua_letter_one \let\2\lua_letter_two - \let\3\lua_letter_three \let\4\lua_letter_four - \let\5\lua_letter_five \let\6\lua_letter_six - \let\7\lua_letter_seven \let\8\lua_letter_eight - \let\9\lua_letter_nine \let\0\lua_letter_zero + \enforced\let\\\lua_letter_backslash + \enforced\let\|\lua_letter_bar \enforced\let\-\lua_letter_dash + \enforced\let\(\lua_letter_lparent \enforced\let\)\lua_letter_rparent + \enforced\let\{\lua_letter_lbrace \enforced\let\}\lua_letter_rbrace + \enforced\let\'\lua_letter_squote \enforced\let\"\lua_letter_dquote + \enforced\let\n\lua_letter_n \enforced\let\r\lua_letter_r + \enforced\let\f\lua_letter_f \enforced\let\t\lua_letter_t + \enforced\let\a\lua_letter_a \enforced\let\b\lua_letter_b + \enforced\let\v\lua_letter_v \enforced\let\s\lua_letter_s + \enforced\let\1\lua_letter_one \enforced\let\2\lua_letter_two + \enforced\let\3\lua_letter_three \enforced\let\4\lua_letter_four + \enforced\let\5\lua_letter_five \enforced\let\6\lua_letter_six + \enforced\let\7\lua_letter_seven \enforced\let\8\lua_letter_eight + \enforced\let\9\lua_letter_nine \enforced\let\0\lua_letter_zero } % \to \everyluacode \protected\def\obeyluatokens diff --git a/tex/context/base/mkiv/luat-lib.mkiv b/tex/context/base/mkiv/luat-lib.mkiv index ac60374d0..e89747de7 100644 --- a/tex/context/base/mkiv/luat-lib.mkiv +++ b/tex/context/base/mkiv/luat-lib.mkiv @@ -24,7 +24,7 @@ \registerctxluafile{util-dim}{} \registerctxluafile{trac-set}{} -\registerctxluafile{trac-log}{} +\registerctxluafile{luat-log}{autosuffix} \registerctxluafile{trac-inf}{autosuffix} \registerctxluafile{util-lua}{} \registerctxluafile{util-deb}{} % could also be done in trac-deb.mkiv @@ -99,8 +99,8 @@ \registerctxluafile{lxml-aux}{} \registerctxluafile{lxml-mis}{} -\protected\def\writestatus#1#2{\ctxlua{logs.status([==[#1]==],[==[#2]==])}} -\protected\def\writestring #1{\ctxlua{logs.writer([==[#1]==],"\string\n")}} -\protected\def\writeline {\ctxlua{logs.newline()}} +\frozen\overloaded\protected\def\writestatus#1#2{\ctxlua{logs.status([==[#1]==],[==[#2]==])}} +\frozen\overloaded\protected\def\writestring #1{\ctxlua{logs.writer([==[#1]==],"\string\n")}} +\frozen\overloaded\protected\def\writeline {\ctxlua{logs.newline()}} \endinput diff --git a/tex/context/base/mkiv/luat-log.lmt b/tex/context/base/mkiv/luat-log.lmt new file mode 100644 index 000000000..684b2ac8d --- /dev/null +++ b/tex/context/base/mkiv/luat-log.lmt @@ -0,0 +1,739 @@ +if not modules then modules = { } end modules ['luat-log'] = { + version = 1.001, + comment = "companion to trac-log.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- In fact all writes could go through lua and we could write the console and +-- terminal handler in lua then. Ok, maybe it's slower then, so a no-go. + +-- This used to be combined in trac-log but as we also split between mkiv and lmtx +-- we now have dedicated files. A side effect is a smaller format and a smaller +-- mtxrun. +-- +-- We use different targets: "terminal" "logfile", "both" and have no number +-- channel. + +local next, type, select, print = next, type, select, print +local format, gmatch, find = string.format, string.gmatch, string.find +local concat, insert, remove = table.concat, table.insert, table.remove +local topattern = string.topattern +local utfchar = utf.char +local datetime = os.date +local openfile = io.open + +local write_nl = texio.write_nl +local write = texio.write + +local setmetatableindex = table.setmetatableindex +local formatters = string.formatters +local settings_to_hash = utilities.parsers.settings_to_hash +local sortedkeys = table.sortedkeys + +-- variant is set now + +local variant = "default" +----- variant = "ansi" + +logs = logs or { } +local logs = logs + +-- we extend the formatters: + +formatters.add ( + formatters, "unichr", + [["U+" .. format("%%05X",%s) .. " (" .. utfchar(%s) .. ")"]] +) + +formatters.add ( + formatters, "chruni", + [[utfchar(%s) .. " (U+" .. format("%%05X",%s) .. ")"]] +) + +-- basic loggers + +local function ignore() end + +setmetatableindex(logs, function(t,k) t[k] = ignore ; return ignore end) + +local report, subreport, status, settarget, setformats, settranslations + +local direct, subdirect, writer, pushtarget, poptarget, setlogfile, settimedlog, setprocessor, setformatters, newline + +-- we use formatters but best check for % then because for simple messages but +-- we don't want this overhead for single messages (not that there are that +-- many; we could have a special weak table) + +local function ansisupported(specification) + if specification ~= "ansi" and specification ~= "ansilog" then + return false + elseif os and os.enableansi then + return os.enableansi() + else + return false + end +end + +do + + if arg and ansisupported then + -- we're don't have environment.arguments yet + for k, v in next, arg do -- k can be negative ! + if v == "--ansi" or v == "--c:ansi" then + if ansisupported("ansi") then + variant = "ansi" + end + break + elseif v == "--ansilog" or v == "--c:ansilog" then + if ansisupported("ansilog") then + variant = "ansilog" + end + break + end + end + end + + local whereto = "both" + local target = nil + local targets = nil + + local formats = table.setmetatableindex("self") + local translations = table.setmetatableindex("self") + + local report_yes, subreport_yes, direct_yes, subdirect_yes, status_yes + local report_nop, subreport_nop, direct_nop, subdirect_nop, status_nop + + local variants = { + default = { + formats = { + report_yes = formatters["%-15s > %s\n"], + report_nop = formatters["%-15s >\n"], + direct_yes = formatters["%-15s > %s"], + direct_nop = formatters["%-15s >"], + subreport_yes = formatters["%-15s > %s > %s\n"], + subreport_nop = formatters["%-15s > %s >\n"], + subdirect_yes = formatters["%-15s > %s > %s"], + subdirect_nop = formatters["%-15s > %s >"], + status_yes = formatters["%-15s : %s\n"], + status_nop = formatters["%-15s :\n"], + }, + targets = setmetatableindex( { + logfile = "logfile", + log = "logfile", + file = "logfile", + console = "terminal", + terminal = "terminal", + both = "terminal_and_logfile", + }, function(t,k) t[k] = "terminal_and_logfile" end), + }, + ansi = { + formats = { + report_yes = formatters["%-15s > %s\n"], + report_nop = formatters["%-15s >\n"], + direct_yes = formatters["%-15s > %s"], + direct_nop = formatters["%-15s >"], + subreport_yes = formatters["%-15s > %s > %s\n"], + subreport_nop = formatters["%-15s > %s >\n"], + subdirect_yes = formatters["%-15s > %s > %s"], + subdirect_nop = formatters["%-15s > %s >"], + status_yes = formatters["%-15s : %s\n"], + status_nop = formatters["%-15s :\n"], + }, + targets = setmetatableindex( { + logfile = false, + log = false, + file = false, + console = "terminal", + terminal = "terminal", + both = "terminal", + }, function(t,k) t[k] = "terminal" end), + } + } + + variants.ansilog = { + formats = variants.ansi.formats, + targets = variants.default.targets, + } + + logs.flush = io.flush + + writer = function(...) + if target then + write_nl(target,...) + end + end + + newline = function() + if target then + write_nl(target,"\n") + end + end + + report = function(a,b,c,...) + if not target then + -- ignore + elseif c ~= nil then + write_nl(target,report_yes(translations[a],formatters[formats[b]](c,...))) + elseif b then + write_nl(target,report_yes(translations[a],formats[b])) + elseif a then + write_nl(target,report_nop(translations[a])) + else + write_nl(target,"\n") + end + end + + direct = function(a,b,c,...) + if not target then + return "" + elseif c ~= nil then + return direct_yes(translations[a],formatters[formats[b]](c,...)) + elseif b then + return direct_yes(translations[a],formats[b]) + elseif a then + return direct_nop(translations[a]) + else + return "" + end + end + + subreport = function(a,s,b,c,...) + if not target then + -- ignore + elseif c ~= nil then + write_nl(target,subreport_yes(translations[a],translations[s],formatters[formats[b]](c,...))) + elseif b then + write_nl(target,subreport_yes(translations[a],translations[s],formats[b])) + elseif a then + write_nl(target,subreport_nop(translations[a],translations[s])) + else + write_nl(target,"\n") + end + end + + subdirect = function(a,s,b,c,...) + if not target then + return "" + elseif c ~= nil then + return subdirect_yes(translations[a],translations[s],formatters[formats[b]](c,...)) + elseif b then + return subdirect_yes(translations[a],translations[s],formats[b]) + elseif a then + return subdirect_nop(translations[a],translations[s]) + else + return "" + end + end + + status = function(a,b,c,...) + if not target then + -- ignore + elseif c ~= nil then + write_nl(target,status_yes(translations[a],formatters[formats[b]](c,...))) + elseif b then + write_nl(target,status_yes(translations[a],formats[b])) + elseif a then + write_nl(target,status_nop(translations[a])) + else + write_nl(target,"\n") + end + end + + settarget = function(askedwhereto) + whereto = askedwhereto or whereto or "both" + target = targets[whereto] + if not target then + whereto = "both" + target = targets[whereto] + end + if target == "terminal" or target == "terminal_and_logfile" then + logs.flush = io.flush + else + logs.flush = ignore + end + end + + local stack = { } + + pushtarget = function(newtarget) + insert(stack,target) + settarget(newtarget) + end + + poptarget = function() + if #stack > 0 then + settarget(remove(stack)) + end + end + + setformats = function(f) + formats = f + end + + settranslations = function(t) + translations = t + end + + setprocessor = function(f) + local writeline = write_nl + write_nl = function(target,...) + if target then + writeline(target,f(...)) + end + end + end + + setformatters = function(specification) + local t = nil + local f = nil + local d = variants.default + if not specification then + -- + elseif type(specification) == "table" then + t = specification.targets + f = specification.formats or specification + else + if not ansisupported(specification) then + specification = "default" + end + local v = variants[specification] + if v then + t = v.targets + f = v.formats + variant = specification + end + end + targets = t or d.targets + target = targets[whereto] + if f then + d = d.formats + else + f = d.formats + d = f + end + setmetatableindex(f,d) + report_yes = f.report_yes + report_nop = f.report_nop + subreport_yes = f.subreport_yes + subreport_nop = f.subreport_nop + direct_yes = f.direct_yes + direct_nop = f.direct_nop + subdirect_yes = f.subdirect_yes + subdirect_nop = f.subdirect_nop + status_yes = f.status_yes + status_nop = f.status_nop + settarget(whereto) + end + + setformatters(variant) + + setlogfile = ignore + settimedlog = ignore + +end + +logs.report = report +logs.subreport = subreport +logs.status = status +logs.settarget = settarget +logs.pushtarget = pushtarget +logs.poptarget = poptarget +logs.setformats = setformats +logs.settranslations = settranslations + +logs.setlogfile = setlogfile +logs.settimedlog = settimedlog +logs.setprocessor = setprocessor +logs.setformatters = setformatters + +logs.direct = direct +logs.subdirect = subdirect +logs.writer = writer +logs.newline = newline + +local data = { } +local states = nil +local force = false + +function logs.reporter(category,subcategory) + local logger = data[category] + if not logger then + local state = states == true + if not state and type(states) == "table" then + for c, _ in next, states do + if find(category,c) then + state = true + break + end + end + end + logger = { + reporters = { }, + state = state, + } + data[category] = logger + end + local reporter = logger.reporters[subcategory or "default"] + if not reporter then + if subcategory then + reporter = function(...) + if force or not logger.state then + subreport(category,subcategory,...) + end + end + logger.reporters[subcategory] = reporter + else + local tag = category + reporter = function(...) + if force or not logger.state then + report(category,...) + end + end + logger.reporters.default = reporter + end + end + return reporter +end + +logs.new = logs.reporter -- for old times sake + +-- context specicific: this ends up in the macro stream + +local ctxreport = logs.writer + +function logs.setmessenger(m) + ctxreport = m +end + +function logs.messenger(category,subcategory) + -- we need to avoid catcode mess (todo: fast context) + if subcategory then + return function(...) + ctxreport(subdirect(category,subcategory,...)) + end + else + return function(...) + ctxreport(direct(category,...)) + end + end +end + +-- so far + +local function setblocked(category,value) -- v.state == value == true : disable + if category == true or category == "all" then + -- lock all + category, value = "*", true + elseif category == false then + -- unlock all + category, value = "*", false + elseif value == nil then + -- lock selective + value = true + end + if category == "*" then + states = value + for k, v in next, data do + v.state = value + end + else + alllocked = false + states = settings_to_hash(category,type(states)=="table" and states or nil) + for c in next, states do + local v = data[c] + if v then + v.state = value + else + c = topattern(c,true,true) + for k, v in next, data do + if find(k,c) then + v.state = value + end + end + end + end + end +end + +function logs.disable(category,value) + setblocked(category,value == nil and true or value) +end + +function logs.enable(category) + setblocked(category,false) +end + +function logs.categories() + return sortedkeys(data) +end + +function logs.show() + local n, c, s, max = 0, 0, 0, 0 + for category, v in table.sortedpairs(data) do + n = n + 1 + local state = v.state + local reporters = v.reporters + local nc = #category + if nc > c then + c = nc + end + for subcategory, _ in next, reporters do + local ns = #subcategory + if ns > c then + s = ns + end + local m = nc + ns + if m > max then + max = m + end + end + local subcategories = concat(sortedkeys(reporters),", ") + if state == true then + state = "disabled" + elseif state == false then + state = "enabled" + else + state = "unknown" + end + -- no new here + report("logging","category %a, subcategories %a, state %a",category,subcategories,state) + end + report("logging","categories: %s, max category: %s, max subcategory: %s, max combined: %s",n,c,s,max) +end + +local delayed_reporters = { } + +setmetatableindex(delayed_reporters,function(t,k) + local v = logs.reporter(k.name) + t[k] = v + return v +end) + +function utilities.setters.report(setter,...) + delayed_reporters[setter](...) +end + +directives.register("logs.blocked", function(v) + setblocked(v,true) +end) + +directives.register("logs.target", function(v) + settarget(v) +end) + +do + + local report = logs.reporter("pages") -- not needed but saves checking when we grep for it + local texgetcount = tex and tex.getcount + + local real, user, sub = 0, 0, 0 + + function logs.start_page_number() + real = texgetcount("realpageno") + user = texgetcount("userpageno") + sub = texgetcount("subpageno") + end + + local timing = false + local usage = false + local lasttime = nil + + logs.private = { + enablepagetiming = function() + usage = true + end, + getpagetiming = function() + return type(usage) == "table" and usage + end, + } + + trackers.register("pages.timing", function() timing = "" end) + + function logs.stop_page_number() -- the first page can includes the initialization so we omit this in average + if timing or usage then + local elapsed = statistics.currenttime(statistics) + local average, page + if not lasttime or real < 2 then + average = elapsed + page = elapsed + else + average = elapsed / (real - 1) + page = elapsed - lasttime + end + lasttime = elapsed + if timing then + timing = formatters[", total %0.03f, page %0.03f, average %0.03f"](elapsed,page,average) + end + if usage then + usage = { + page = { + real = real, + user = user, + sub = sub, + }, + time = { + elapsed = elapsed, + page = page, + average = average, + } + } + end + end + if real <= 0 then + report("flushing page%s",timing) + elseif user <= 0 then + report("flushing realpage %s%s",real,timing) + elseif sub <= 0 then + report("flushing realpage %s, userpage %s%s",real,user,timing) + else + report("flushing realpage %s, userpage %s, subpage %s%s",real,user,sub,timing) + end + logs.flush() + end + +end + +-- we don't have show_open and show_close callbacks yet + +do + local texerror = tex and tex.error or print + local formatters = string.formatters + + function logs.texerrormessage(fmt,first,...) -- for the moment we put this function here + texerror(first and formatters[fmt](first,...) or fmt) + end + +end + +-- this is somewhat slower but prevents out-of-order messages when print is mixed +-- with texio.write + +-- io.stdout:setvbuf('no') +-- io.stderr:setvbuf('no') + +-- windows: > nul 2>&1 +-- unix : > null 2>&1 + +if package.helpers.report then + package.helpers.report = logs.reporter("package loader") -- when used outside mtxrun +end + +do + + local finalactions = { } + local fatalerrors = { } + local possiblefatal = { } + local loggingerrors = false + + function logs.loggingerrors() + return loggingerrors + end + + directives.register("logs.errors",function(v) + loggingerrors = v + if type(v) == "string" then + fatalerrors = settings_to_hash(v) + else + fatalerrors = { } + end + end) + + function logs.registerfinalactions(...) + insert(finalactions,...) -- so we can force an order if needed + end + + local what = nil + local report = nil + local state = nil + local target = nil + + local function startlogging(t,r,w,s) + target = t + state = force + force = true + report = type(r) == "function" and r or logs.reporter(r) + what = w + pushtarget(target) + newline() + if s then + report("start %s: %s",what,s) + else + report("start %s",what) + end + if target == "logfile" then + newline() + end + return report + end + + local function stoplogging() + if target == "logfile" then + newline() + end + report("stop %s",what) + if target == "logfile" then + newline() + end + poptarget() + state = oldstate + end + + function logs.startfilelogging(...) + return startlogging("logfile", ...) + end + + logs.stopfilelogging = stoplogging + + local done = false + + function logs.starterrorlogging(r,w,...) + if not done then + pushtarget("terminal") + newline() + logs.report("error logging","start possible issues") + poptarget() + done = true + end + if fatalerrors[w] then + possiblefatal[w] = true + end + return startlogging("terminal",r,w,...) + end + + logs.stoperrorlogging = stoplogging + + function logs.finalactions() + if #finalactions > 0 then + for i=1,#finalactions do + finalactions[i]() + end + if done then + pushtarget("terminal") + newline() + logs.report("error logging","stop possible issues") + poptarget() + end + return next(possiblefatal) and sortedkeys(possiblefatal) or false + end + end + +end + +-- just in case we load from context + +local dummy = function() end + +function logs.application(t) + return { + name = t.name or tex.jobname, + banner = t.banner, + report = logs.reporter(t.name), + moreinfo = dummy, + export = dummy, + help = dummy, + identify = dummy, + version = dummy, + } +end diff --git a/tex/context/base/mkiv/luat-log.lua b/tex/context/base/mkiv/luat-log.lua new file mode 100644 index 000000000..fd3b73d3d --- /dev/null +++ b/tex/context/base/mkiv/luat-log.lua @@ -0,0 +1,795 @@ +if not modules then modules = { } end modules ['luat-log'] = { + version = 1.001, + comment = "companion to trac-log.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- In fact all writes could go through lua and we could write the console and +-- terminal handler in lua then. Ok, maybe it's slower then, so a no-go. + +-- This used to be combined in trac-log but as we also split between mkiv and lmtx +-- we now have dedicated files. A side effect is a smaller format and a smaller +-- mtxrun. + +local next, type, select, print = next, type, select, print +local format, gmatch, find = string.format, string.gmatch, string.find +local concat, insert, remove = table.concat, table.insert, table.remove +local topattern = string.topattern +local utfchar = utf.char +local datetime = os.date +local openfile = io.open + +local write_nl = texio and texio.write_nl +local write = texio and texio.write + +local setmetatableindex = table.setmetatableindex +local formatters = string.formatters +local settings_to_hash = utilities.parsers.settings_to_hash +local sortedkeys = table.sortedkeys + +-- variant is set now + +local variant = "default" +----- variant = "ansi" + +logs = logs or { } +local logs = logs + +-- we extend the formatters: + +formatters.add ( + formatters, "unichr", + [["U+" .. format("%%05X",%s) .. " (" .. utfchar(%s) .. ")"]] +) + +formatters.add ( + formatters, "chruni", + [[utfchar(%s) .. " (U+" .. format("%%05X",%s) .. ")"]] +) + +-- basic loggers + +local function ignore() end + +setmetatableindex(logs, function(t,k) t[k] = ignore ; return ignore end) + +local report, subreport, status, settarget, setformats, settranslations + +local direct, subdirect, writer, pushtarget, poptarget, setlogfile, settimedlog, setprocessor, setformatters, newline + +-- we use formatters but best check for % then because for simple messages but +-- we don't want this overhead for single messages (not that there are that +-- many; we could have a special weak table) + +local function ansisupported(specification) + if specification ~= "ansi" and specification ~= "ansilog" then + return false + elseif os and os.enableansi then + return os.enableansi() + else + return false + end +end + +do + + if texio.setescape then + texio.setescape(0) -- or (false) + end + + if arg and ansisupported then + -- we're don't have environment.arguments yet + for k, v in next, arg do -- k can be negative ! + if v == "--ansi" or v == "--c:ansi" then + if ansisupported("ansi") then + variant = "ansi" + end + break + elseif v == "--ansilog" or v == "--c:ansilog" then + if ansisupported("ansilog") then + variant = "ansilog" + end + break + end + end + end + + local function useluawrites() + + -- quick hack, awaiting speedup in engine (8 -> 6.4 sec for --make with console2) + -- still needed for luajittex .. luatex should not have that ^^ mess + + local texio_write_nl = texio.write_nl + local texio_write = texio.write + local io_write = io.write + + write_nl = function(target,...) + if not io_write then + io_write = io.write + end + if target == "term and log" then + texio_write_nl("log",...) + texio_write_nl("term","") + io_write(...) + elseif target == "log" then + texio_write_nl("log",...) + elseif target == "term" then + texio_write_nl("term","") + io_write(...) + elseif type(target) == "number" then + texio_write_nl(target,...) -- a tex output channel + elseif target ~= "none" then + texio_write_nl("log",target,...) + texio_write_nl("term","") + io_write(target,...) + end + end + + write = function(target,...) + if not io_write then + io_write = io.write + end + if target == "term and log" then + texio_write("log",...) + io_write(...) + elseif target == "log" then + texio_write("log",...) + elseif target == "term" then + io_write(...) + elseif type(target) == "number" then + texio_write(target,...) -- a tex output channel + elseif target ~= "none" then + texio_write("log",target,...) + io_write(target,...) + end + end + + texio.write = write + texio.write_nl = write_nl + + useluawrites = ignore + + end + + -- local format = string.formatter + + local whereto = "both" + local target = nil + local targets = nil + + local formats = table.setmetatableindex("self") + local translations = table.setmetatableindex("self") + + local report_yes, subreport_yes, direct_yes, subdirect_yes, status_yes + local report_nop, subreport_nop, direct_nop, subdirect_nop, status_nop + + local variants = { + default = { + formats = { + report_yes = formatters["%-15s > %s\n"], + report_nop = formatters["%-15s >\n"], + direct_yes = formatters["%-15s > %s"], + direct_nop = formatters["%-15s >"], + subreport_yes = formatters["%-15s > %s > %s\n"], + subreport_nop = formatters["%-15s > %s >\n"], + subdirect_yes = formatters["%-15s > %s > %s"], + subdirect_nop = formatters["%-15s > %s >"], + status_yes = formatters["%-15s : %s\n"], + status_nop = formatters["%-15s :\n"], + }, + targets = { + logfile = "log", + log = "log", + file = "log", + console = "term", + terminal = "term", + both = "term and log", + }, + }, + ansi = { + formats = { + report_yes = formatters["%-15s > %s\n"], + report_nop = formatters["%-15s >\n"], + direct_yes = formatters["%-15s > %s"], + direct_nop = formatters["%-15s >"], + subreport_yes = formatters["%-15s > %s > %s\n"], + subreport_nop = formatters["%-15s > %s >\n"], + subdirect_yes = formatters["%-15s > %s > %s"], + subdirect_nop = formatters["%-15s > %s >"], + status_yes = formatters["%-15s : %s\n"], + status_nop = formatters["%-15s :\n"], + }, + targets = { + logfile = "none", + log = "none", + file = "none", + console = "term", + terminal = "term", + both = "term", + }, + } + } + + variants.ansilog = { + formats = variants.ansi.formats, + targets = variants.default.targets, + } + + logs.flush = io.flush + + writer = function(...) + write_nl(target,...) + end + + newline = function() + write_nl(target,"\n") + end + + report = function(a,b,c,...) + if c ~= nil then + write_nl(target,report_yes(translations[a],formatters[formats[b]](c,...))) + elseif b then + write_nl(target,report_yes(translations[a],formats[b])) + elseif a then + write_nl(target,report_nop(translations[a])) + else + write_nl(target,"\n") + end + end + + direct = function(a,b,c,...) + if c ~= nil then + return direct_yes(translations[a],formatters[formats[b]](c,...)) + elseif b then + return direct_yes(translations[a],formats[b]) + elseif a then + return direct_nop(translations[a]) + else + return "" + end + end + + subreport = function(a,s,b,c,...) + if c ~= nil then + write_nl(target,subreport_yes(translations[a],translations[s],formatters[formats[b]](c,...))) + elseif b then + write_nl(target,subreport_yes(translations[a],translations[s],formats[b])) + elseif a then + write_nl(target,subreport_nop(translations[a],translations[s])) + else + write_nl(target,"\n") + end + end + + subdirect = function(a,s,b,c,...) + if c ~= nil then + return subdirect_yes(translations[a],translations[s],formatters[formats[b]](c,...)) + elseif b then + return subdirect_yes(translations[a],translations[s],formats[b]) + elseif a then + return subdirect_nop(translations[a],translations[s]) + else + return "" + end + end + + status = function(a,b,c,...) + if c ~= nil then + write_nl(target,status_yes(translations[a],formatters[formats[b]](c,...))) + elseif b then + write_nl(target,status_yes(translations[a],formats[b])) + elseif a then + write_nl(target,status_nop(translations[a])) + else + write_nl(target,"\n") + end + end + + settarget = function(askedwhereto) + whereto = askedwhereto or whereto or "both" + target = targets[whereto] + if not target then + whereto = "both" + target = targets[whereto] + end + if target == "term" or target == "term and log" then + logs.flush = io.flush + else + logs.flush = ignore + end + end + + local stack = { } + + pushtarget = function(newtarget) + insert(stack,target) + settarget(newtarget) + end + + poptarget = function() + if #stack > 0 then + settarget(remove(stack)) + end + end + + setformats = function(f) + formats = f + end + + settranslations = function(t) + translations = t + end + + setprocessor = function(f) + local writeline = write_nl + write_nl = function(target,...) + writeline(target,f(...)) + end + end + + setformatters = function(specification) + local t = nil + local f = nil + local d = variants.default + if not specification then + -- + elseif type(specification) == "table" then + t = specification.targets + f = specification.formats or specification + else + if not ansisupported(specification) then + specification = "default" + end + local v = variants[specification] + if v then + t = v.targets + f = v.formats + variant = specification + end + end + targets = t or d.targets + target = targets[whereto] or target + if f then + d = d.formats + else + f = d.formats + d = f + end + setmetatableindex(f,d) + report_yes = f.report_yes + report_nop = f.report_nop + subreport_yes = f.subreport_yes + subreport_nop = f.subreport_nop + direct_yes = f.direct_yes + direct_nop = f.direct_nop + subdirect_yes = f.subdirect_yes + subdirect_nop = f.subdirect_nop + status_yes = f.status_yes + status_nop = f.status_nop + if variant == "ansi" or variant == "ansilog" then + useluawrites() -- because tex escapes ^^, not needed in lmtx + end + settarget(whereto) + end + + setformatters(variant) + + setlogfile = ignore + settimedlog = ignore + + -- settimedlog = function() + -- local localtime = os.localtime + -- local writeline = write_nl + -- write_nl = function(f,...) + -- writeline(f,localtime() .. " | " .. concat { ... }) + -- end + -- settimedlog = ignore + -- end + +end + +logs.report = report +logs.subreport = subreport +logs.status = status +logs.settarget = settarget +logs.pushtarget = pushtarget +logs.poptarget = poptarget +logs.setformats = setformats +logs.settranslations = settranslations + +logs.setlogfile = setlogfile +logs.settimedlog = settimedlog +logs.setprocessor = setprocessor +logs.setformatters = setformatters + +logs.direct = direct +logs.subdirect = subdirect +logs.writer = writer +logs.newline = newline + +local data = { } +local states = nil +local force = false + +function logs.reporter(category,subcategory) + local logger = data[category] + if not logger then + local state = states == true + if not state and type(states) == "table" then + for c, _ in next, states do + if find(category,c) then + state = true + break + end + end + end + logger = { + reporters = { }, + state = state, + } + data[category] = logger + end + local reporter = logger.reporters[subcategory or "default"] + if not reporter then + if subcategory then + reporter = function(...) + if force or not logger.state then + subreport(category,subcategory,...) + end + end + logger.reporters[subcategory] = reporter + else + local tag = category + reporter = function(...) + if force or not logger.state then + report(category,...) + end + end + logger.reporters.default = reporter + end + end + return reporter +end + +logs.new = logs.reporter -- for old times sake + +-- context specicific: this ends up in the macro stream + +local ctxreport = logs.writer + +function logs.setmessenger(m) + ctxreport = m +end + +function logs.messenger(category,subcategory) + -- we need to avoid catcode mess (todo: fast context) + if subcategory then + return function(...) + ctxreport(subdirect(category,subcategory,...)) + end + else + return function(...) + ctxreport(direct(category,...)) + end + end +end + +-- so far + +local function setblocked(category,value) -- v.state == value == true : disable + if category == true or category == "all" then + -- lock all + category, value = "*", true + elseif category == false then + -- unlock all + category, value = "*", false + elseif value == nil then + -- lock selective + value = true + end + if category == "*" then + states = value + for k, v in next, data do + v.state = value + end + else + alllocked = false + states = settings_to_hash(category,type(states)=="table" and states or nil) + for c in next, states do + local v = data[c] + if v then + v.state = value + else + c = topattern(c,true,true) + for k, v in next, data do + if find(k,c) then + v.state = value + end + end + end + end + end +end + +function logs.disable(category,value) + setblocked(category,value == nil and true or value) +end + +function logs.enable(category) + setblocked(category,false) +end + +function logs.categories() + return sortedkeys(data) +end + +function logs.show() + local n, c, s, max = 0, 0, 0, 0 + for category, v in table.sortedpairs(data) do + n = n + 1 + local state = v.state + local reporters = v.reporters + local nc = #category + if nc > c then + c = nc + end + for subcategory, _ in next, reporters do + local ns = #subcategory + if ns > c then + s = ns + end + local m = nc + ns + if m > max then + max = m + end + end + local subcategories = concat(sortedkeys(reporters),", ") + if state == true then + state = "disabled" + elseif state == false then + state = "enabled" + else + state = "unknown" + end + -- no new here + report("logging","category %a, subcategories %a, state %a",category,subcategories,state) + end + report("logging","categories: %s, max category: %s, max subcategory: %s, max combined: %s",n,c,s,max) +end + +local delayed_reporters = { } + +setmetatableindex(delayed_reporters,function(t,k) + local v = logs.reporter(k.name) + t[k] = v + return v +end) + +function utilities.setters.report(setter,...) + delayed_reporters[setter](...) +end + +directives.register("logs.blocked", function(v) + setblocked(v,true) +end) + +directives.register("logs.target", function(v) + settarget(v) +end) + +do + + local report = logs.reporter("pages") -- not needed but saves checking when we grep for it + local texgetcount = tex and tex.getcount + + local real, user, sub = 0, 0, 0 + + function logs.start_page_number() + real = texgetcount("realpageno") + user = texgetcount("userpageno") + sub = texgetcount("subpageno") + end + + local timing = false + local usage = false + local lasttime = nil + + logs.private = { + enablepagetiming = function() + usage = true + end, + getpagetiming = function() + return type(usage) == "table" and usage + end, + } + + trackers.register("pages.timing", function() timing = "" end) + + function logs.stop_page_number() -- the first page can includes the initialization so we omit this in average + if timing or usage then + local elapsed = statistics.currenttime(statistics) + local average, page + if not lasttime or real < 2 then + average = elapsed + page = elapsed + else + average = elapsed / (real - 1) + page = elapsed - lasttime + end + lasttime = elapsed + if timing then + timing = formatters[", total %0.03f, page %0.03f, average %0.03f"](elapsed,page,average) + end + if usage then + usage = { + page = { + real = real, + user = user, + sub = sub, + }, + time = { + elapsed = elapsed, + page = page, + average = average, + } + } + end + end + if real <= 0 then + report("flushing page%s",timing) + elseif user <= 0 then + report("flushing realpage %s%s",real,timing) + elseif sub <= 0 then + report("flushing realpage %s, userpage %s%s",real,user,timing) + else + report("flushing realpage %s, userpage %s, subpage %s%s",real,user,sub,timing) + end + logs.flush() + end + +end + +-- we don't have show_open and show_close callbacks yet + +do + local texerror = tex and tex.error or print + local formatters = string.formatters + + function logs.texerrormessage(fmt,first,...) -- for the moment we put this function here + texerror(first and formatters[fmt](first,...) or fmt) + end + +end + +-- this is somewhat slower but prevents out-of-order messages when print is mixed +-- with texio.write + +-- io.stdout:setvbuf('no') +-- io.stderr:setvbuf('no') + +-- windows: > nul 2>&1 +-- unix : > null 2>&1 + +if package.helpers.report then + package.helpers.report = logs.reporter("package loader") -- when used outside mtxrun +end + +do + + local finalactions = { } + local fatalerrors = { } + local possiblefatal = { } + local loggingerrors = false + + function logs.loggingerrors() + return loggingerrors + end + + directives.register("logs.errors",function(v) + loggingerrors = v + if type(v) == "string" then + fatalerrors = settings_to_hash(v) + else + fatalerrors = { } + end + end) + + function logs.registerfinalactions(...) + insert(finalactions,...) -- so we can force an order if needed + end + + local what = nil + local report = nil + local state = nil + local target = nil + + local function startlogging(t,r,w,s) + target = t + state = force + force = true + report = type(r) == "function" and r or logs.reporter(r) + what = w + pushtarget(target) + newline() + if s then + report("start %s: %s",what,s) + else + report("start %s",what) + end + if target == "logfile" then + newline() + end + return report + end + + local function stoplogging() + if target == "logfile" then + newline() + end + report("stop %s",what) + if target == "logfile" then + newline() + end + poptarget() + state = oldstate + end + + function logs.startfilelogging(...) + return startlogging("logfile", ...) + end + + logs.stopfilelogging = stoplogging + + local done = false + + function logs.starterrorlogging(r,w,...) + if not done then + pushtarget("terminal") + newline() + logs.report("error logging","start possible issues") + poptarget() + done = true + end + if fatalerrors[w] then + possiblefatal[w] = true + end + return startlogging("terminal",r,w,...) + end + + logs.stoperrorlogging = stoplogging + + function logs.finalactions() + if #finalactions > 0 then + for i=1,#finalactions do + finalactions[i]() + end + if done then + pushtarget("terminal") + newline() + logs.report("error logging","stop possible issues") + poptarget() + end + return next(possiblefatal) and sortedkeys(possiblefatal) or false + end + end + +end + +-- just in case we load from context + +local dummy = function() end + +function logs.application(t) + return { + name = t.name or tex.jobname, + banner = t.banner, + report = logs.reporter(t.name), + moreinfo = dummy, + export = dummy, + help = dummy, + identify = dummy, + version = dummy, + } +end diff --git a/tex/context/base/mkiv/luat-mac.lua b/tex/context/base/mkiv/luat-mac.lua index c754f602c..3c50a41f8 100644 --- a/tex/context/base/mkiv/luat-mac.lua +++ b/tex/context/base/mkiv/luat-mac.lua @@ -72,23 +72,60 @@ local stack, top, n, hashes = { }, nil, 0, { } -- end -- end -local function set(s) - if top then - local ns = #stack - local h = hashes[ns] - if not h then - h = rep("#",2^(ns-1)) - hashes[ns] = h +local set = CONTEXTLMTXMODE > 0 and + function(s) + if top then + local ns = #stack + local h = hashes[ns] + if not h then + h = rep("#",2^(ns-1)) + hashes[ns] = h + end + if s == "ignore" then + return h .. "-" + elseif s == "spacer" then + return h .. "*" + elseif s == "pickup" then + return h .. ":" + else + n = n + 1 + if n > 9 then + report_macros("number of arguments > 9, ignoring %s",s) + elseif s == "discard" then + top[s] = "" + return h .. "0" + elseif s == "keepbraces" then + top[s] = "" + return h .. "+" + elseif s == "mandate" then + top[s] = "" + return h .. "=" + elseif s == "keepmandate" then + top[s] = "" + return h .. "_" + elseif s == "prunespacing" then + top[s] = "" + return h .. "/" + else + local m = h .. n + top[s] = m + return m + end + end end - if s == "ignore" then - return h .. "-" - else + end +or + function(s) + if top then + local ns = #stack + local h = hashes[ns] + if not h then + h = rep("#",2^(ns-1)) + hashes[ns] = h + end n = n + 1 if n > 9 then report_macros("number of arguments > 9, ignoring %s",s) - elseif s == "discard" then - top[s] = "" - return h .. "0" else local m = h .. n top[s] = m @@ -96,7 +133,6 @@ local function set(s) end end end -end local function get(s) if s == "ignore" or s == "discard" then @@ -262,7 +298,7 @@ end function macros.convertfile(oldname,newname) -- beware, no testing on oldname == newname local data = loadtexfile(oldname) - data = interfaces.preprocessed(data) or "" -- interfaces not yet defined + data = macros.preprocessed(data) or "" -- interfaces not yet defined savedata(newname,data) end diff --git a/tex/context/base/mkiv/luat-run.lua b/tex/context/base/mkiv/luat-run.lua index cb947f318..cce6ab73b 100644 --- a/tex/context/base/mkiv/luat-run.lua +++ b/tex/context/base/mkiv/luat-run.lua @@ -293,6 +293,32 @@ end) -- end -- end) +local report = logs.reporter("csname overload") +local reported = { } + +callback.register("handle_overload", function(fatal,overload,csname,flags) + if not reported[csname] then + logs.newline() + local readstate = status.readstate + local filename = readstate.filename + local linenumber = readstate.linenumber + if filename and linenumber then + report("%s, protection level %i, control sequence %a, properties '% t', file %a, line %i", + fatal and "fatal error" or "warning",overload,csname,tokens.flags(csname),filename,linenumber) + else + report("%s, protection level %i, control sequence %a, properties '% t'", + fatal and "fatal error" or "warning",overload,csname,tokens.flags(csname)) + end + reported[csname] = true + logs.newline() + if fatal then + cleanup_run() + osexit(1) + end + end +end) + +-- bonus if environment.initex then diff --git a/tex/context/base/mkiv/luat-usr.mkiv b/tex/context/base/mkiv/luat-usr.mkiv index f3868ccf4..ebd96e031 100644 --- a/tex/context/base/mkiv/luat-usr.mkiv +++ b/tex/context/base/mkiv/luat-usr.mkiv @@ -38,13 +38,14 @@ %D \macros %D {definenamedlua} %D -%D We provide an interface for defining instances: +%D We provide an interface for defining instances. We don't have the definers yet +%D so we do itlow level: \def\s!lua {lua} \def\s!code {code} \def\s!data {data} -%def\s!start{start} -%def\s!stop {stop} +\def\s!start{start} +\def\s!stop {stop} %D Beware: because \type {\expanded} is een convert command, the error %D message will show \type{} as part of the message. diff --git a/tex/context/base/mkiv/lxml-ini.mkxl b/tex/context/base/mkiv/lxml-ini.mkxl new file mode 100644 index 000000000..01e2024bf --- /dev/null +++ b/tex/context/base/mkiv/lxml-ini.mkxl @@ -0,0 +1,544 @@ +%D \module +%D [ file=lxml-ini, +%D version=2007.08.17, +%D title=\CONTEXT\ \XML\ Support, +%D subtitle=Initialization, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA 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 Todo: auto apply setups (manage at lua end) +%D Todo: manuak: \xmlinclusion \xmlinclusions + +\writestatus{loading}{ConTeXt XML Support / Initialization} + +%registerctxluafile{lxml-tab}{} % loader +%registerctxluafile{lxml-lpt}{} % parser +%registerctxluafile{lxml-xml}{} % xml finalizers +%registerctxluafile{lxml-aux}{} % extras using parser +%registerctxluafile{lxml-mis}{} % extras independent of parser +\registerctxluafile{lxml-ent}{} % entity hacks +\registerctxluafile{lxml-tex}{} % tex finalizers +\registerctxluafile{lxml-dir}{} % ctx hacks +\registerctxluafile{lxml-ini}{} % interface + +\unprotect + +% todo: { } mandate so that we can alias + +% undocumented: + +\def\ctxlxml #1{\ctxlua{lxml.#1}} + +% for now indirect .. this will change when we have updated luatex (scan_argument) + +\permanent\def\xmlconcat #1#2#3{\clf_xmlconcat {#1}{#2}{\detokenize{#3}}} +\permanent\def\xmlconcatrange #1#2#3#4#5{\clf_xmlconcatrange{#1}{#2}{#3}{#4}{\detokenize{#5}}} + +%D Maybe I should add \type {\protected} here: + +\permanent\def\xmlloadfile #1#2{\clf_xmlloadfile {#1}{#2}{\directxmlparameter\c!compress}} +\permanent\def\xmlloadbuffer#1#2{\clf_xmlloadbuffer{#1}{#2}{\directxmlparameter\c!compress}} +\permanent\def\xmlloaddata #1#2{\clf_xmlloaddata {#1}{#2}{\directxmlparameter\c!compress}} + +\aliased\let\xmlload\xmlloadfile + +% aliased + +%let\xmlall \clf_xmlall +%let\xmlatt \clf_xmlatt +%let\xmlattdef \clf_xmlattdef +%let\xmlattribute \clf_xmlattribute +%let\xmlattributedef \clf_xmlattributedef +%let\xmlbadinclusions \clf_xmlbadinclusions +%let\xmlchainatt \clf_xmlchainatt +%let\xmlchainattdef \clf_xmlchainattdef +%let\xmlchecknamespace \clf_xmlchecknamespace +%let\xmlcommand \clf_xmlcommand +%let\xmlcontext \clf_xmlcontext +%let\xmlcount \clf_xmlcount +%let\xmldelete \clf_xmldelete +%let\xmldirect \clf_xmldirect % in loops, not dt but root +%let\xmldirectives \clf_xmldirectives +%let\xmldirectivesafter \clf_xmldirectivesafter +%let\xmldirectivesbefore \clf_xmldirectivesbefore +%let\xmldisplayverbatim \clf_xmldisplayverbatim +%let\xmlelement \clf_xmlelement +%let\xmlfilter \clf_xmlfilter +%let\xmlfilterlist \clf_xmlfilterlist +%let\xmlfirst \clf_xmlfirst +%let\xmlflush \clf_xmlflush +%let\xmlflushcontext \clf_xmlflushcontext +%let\xmlflushlinewise \clf_xmlflushlinewise +%let\xmlflushpure \clf_xmlflushpure +%let\xmlflushspacewise \clf_xmlflushspacewise +%let\xmlflushtext \clf_xmlflushtext +%let\xmlfunction \clf_xmlfunction +%let\xmlinclude \clf_xmlinclude +%let\xmlincludeoptions \clf_xmlincludeoptions +%let\xmlinclusion \clf_xmlinclusion +%let\xmlinclusionbase \clf_xmlinclusionbase +%let\xmlinclusions \clf_xmlinclusions +%let\xmlindex \clf_xmlindex +%let\xmlinlineverbatim \clf_xmlinlineverbatim +%let\xmllast \clf_xmllast +%let\xmllastatt \clf_xmllastatt +%let\xmllastmatch \clf_xmllastmatch +%let\xmllastpar \clf_xmllastpar +%let\xmlloaddirectives \clf_xmlloaddirectives +%let\xmlmain \clf_xmlmain +%let\xmlmatch \clf_xmlmatch +%let\xmlname \clf_xmlname +%let\xmlnamespace \clf_xmlnamespace +%let\xmlnonspace \clf_xmlnonspace +%let\xmlpar \clf_xmlpar +%let\xmlparam \clf_xmlparam +%let\xmlpath \clf_xmlpath +%let\xmlpopmatch \clf_xmlpopmatch +%let\xmlpos \clf_xmlpos +%let\xmlpure \clf_xmlpure +%let\xmlpushmatch \clf_xmlpushmatch +%let\xmlraw \clf_xmlraw +%let\xmlrefatt \clf_xmlrefatt +%let\xmlregisterns \clf_xmlregisterns % document +%let\xmlremapname \clf_xmlremapname % element +%let\xmlremapnamespace \clf_xmlremapnamespace % document +%let\xmlsave \clf_xmlsave +%let\xmlsetatt \clf_xmlsetatt +%let\xmlsetattribute \clf_xmlsetattribute +%let\xmlsetpar \clf_xmlsetpar +%let\xmlsetparam \clf_xmlsetparam +%let\xmlsetsetup \clf_xmlsetsetup +%let\xmlsnippet \clf_xmlsnippet +%let\xmlstrip \clf_xmlstrip +%let\xmlstripanywhere \clf_xmlstripanywhere +%let\xmlstripnolines \clf_xmlstripnolines +%let\xmlstripped \clf_xmlstripped +%let\xmlstrippednolines \clf_xmlstrippednolines +%let\xmltag \clf_xmltag +%let\xmltext \clf_xmltext +%let\xmltobuffer \clf_xmltobuffer % id pattern name +%let\xmltobuffertextonly \clf_xmltobuffertextonly % id pattern name +%let\xmltobufferverbose \clf_xmltobufferverbose % id pattern name +%let\xmltofile \clf_xmltofile % id pattern filename +%let\xmltoparameters \clf_xmltoparameters +%let\xmlverbatim \clf_xmlverbatim + +\let\xmlposition \xmlindex + +\permanent\protected\def\xmlinfo#1{\hbox{\ttxx[\xmlname{#1}]}} +\permanent\protected\def\xmlshow#1{\startpacked\ttx\xmlverbatim{#1}\stoppacked} + +% the next one is handy for mode runs because it enforces a consistent +% #1 indexing (needed when using \xmltext{main:123}{...} like calls + +%let\xmladdindex \clf_xmladdindex + +% we need to pass the last argument as function, so + +\protected\def\xmlsetfunction#1#2#3{\ctxcommand{xmlsetfunction("#1",\!!bs#2\!!es,#3)}} + +% goodie: + +\immutable\def\xmltempbuffername{xml-temp} + +\permanent\protected\def\prettyprintbuffer#1#2% only used here + {\ifdefined\scitebuffer + \scitebuffer[#2][#1]% + \else + \typebuffer[#1][\c!option=#2]% + \fi} + +\permanent\protected\def\xmlprettyprint#1#2% + {\xmltobufferverbose{#1}{.}{\xmltempbuffername}% + \prettyprintbuffer\xmltempbuffername{#2}} + +\permanent\protected\def\xmlprettyprinttext#1#2% + {\xmltobuffertextonly{#1}{.}{\xmltempbuffername}% + \prettyprintbuffer\xmltempbuffername{#2}} + +\permanent\protected\def\inlineprettyprintbuffer#1#2% only used here + {\ifdefined\sciteinlinebuffer + \sciteinlinebuffer[#2][#1]% + \else + \typeinlinebuffer[#1][\c!option=#2]% + \fi} + +\permanent\protected\def\xmlinlineprettyprint#1#2% + {\xmltobufferverbose{#1}{.}{\xmltempbuffername}% + \inlineprettyprintbuffer\xmltempbuffername{#2}} + +\permanent\protected\def\xmlinlineprettyprinttext#1#2% + {\xmltobuffertextonly{#1}{.}{\xmltempbuffername}% + \inlineprettyprintbuffer\xmltempbuffername{#2}} + +% kind of special: + +\aliased\let\xmlstartraw\clf_xmlstartraw +\aliased\let\xmlstopraw \clf_xmlstopraw + +\aliased\let\startxmlraw\clf_xmlstartraw +\aliased\let\stopxmlraw \clf_xmlstopraw + +% these are expandable! todo: \xmldoifelseattribute + +%let\xmldoif \clf_xmldoif +%let\xmldoifnot \clf_xmldoifnot +%let\xmldoifelse \clf_xmldoifelse +%let\xmldoiftext \clf_xmldoiftext +%let\xmldoifnottext \clf_xmldoifnottext +%let\xmldoifelsetext \clf_xmldoifelsetext + +%let\xmldoifatt \clf_xmldoifatt +%let\xmldoifnotatt \clf_xmldoifnotatt +%let\xmldoifelseatt \clf_xmldoifelseatt + +%let\xmldoifempty \clf_xmldoifempty +%let\xmldoifnotempty \clf_xmldoifnotempty +%let\xmldoifelseempty \clf_xmldoifelseempty +%let\xmldoifselfempty \clf_xmldoifselfempty +%let\xmldoifnotselfempty \clf_xmldoifnotselfempty +%let\xmldoifelseselfempty \clf_xmldoifelseselfempty + +\aliased\let\xmldoiftextelse \xmldoifelsetext +\aliased\let\xmldoifemptyelse \xmldoifelseempty +\aliased\let\xmldoifselfemptyelse \xmldoifelseselfempty + +% \startxmlsetups xml:include +% \xmlinclude{main}{include}{filename|href} +% \stopxmlsetups +% +% \xmlprependsetup{xml:include} + +% \let\xmlgrab\xmlsetsetup % obsolete +% \let\xmlself\s!unknown % obsolete + +\aliased\let\xmlsetup\setupwithargumentswapped +\aliased\let\xmls \setupwithargumentswapped % hardly any faster +\aliased\let\xmlw \setupwithargument % hardly any faster + +% todo: 1:xml:whatever always before 3:xml:something + +\permanent\protected\def\xmlprependsetup #1{\clf_xmlprependsetup{*}{#1}} +\permanent\protected\def\xmlappendsetup #1{\clf_xmlappendsetup {*}{#1}} +\permanent\protected\def\xmlbeforesetup #1#2{\clf_xmlbeforesetup {*}{#1}{#2}} +\permanent\protected\def\xmlaftersetup #1#2{\clf_xmlaftersetup {*}{#1}{#2}} +\permanent\protected\def\xmlremovesetup #1{\clf_xmlremovesetup {*}{#1}} +\permanent\protected\def\xmlresetsetups {\clf_xmlresetsetups {*}} + +\permanent\protected\def\xmlprependdocumentsetup #1#2{\clf_xmlprependsetup{#1}{#2}} +\permanent\protected\def\xmlappenddocumentsetup #1#2{\clf_xmlappendsetup {#1}{#2}} +\permanent\protected\def\xmlbeforedocumentsetup #1#2#3{\clf_xmlbeforesetup {#1}{#2}{#3}} +\permanent\protected\def\xmlafterdocumentsetup #1#2#3{\clf_xmlaftersetup {#1}{#2}{#3}} +\permanent\protected\def\xmlremovedocumentsetup #1#2{\clf_xmlremovesetup {#1}{#2}} +\permanent\protected\def\xmlresetdocumentsetups #1{\clf_xmlresetsetups {#1}} + +\permanent\protected\def\xmlflushsetups #1{\clf_xmlflushsetups {#1}{*}{}} % #1 == id where to apply * +\permanent\protected\def\xmlflushdocumentsetups #1#2{\clf_xmlflushsetups {#1}{*}{#2}} % #1 == id where to apply * and #2 + +\aliased\let\xmlregistersetup \xmlappendsetup +\aliased\let\xmlregisterdocumentsetup\xmlappenddocumentsetup + +\def\xmldocument{main} + +\permanent\protected\def\xmlregisteredsetups + {\xmlstarttiming + \xmlflushsetups\xmldocument + \xmldefaulttotext\xmldocument % after include + \xmlstoptiming} + +\permanent\protected\def\xmlregistereddocumentsetups#1#2% id setups + {\xmlstarttiming + % todo: test for duplicates ! + \xmlflushdocumentsetups{#1}{#2}% + \xmldefaulttotext{#1}% after include + \xmlstoptiming} + +\permanent\protected\def\xmlstarttiming{\clf_xmlstarttiming} % undocumented +\permanent\protected\def\xmlstoptiming {\clf_xmlstoptiming} % undocumented + +\def\lxml_process#1#2#3#4#5% flag \loader id name what initializersetup + {\begingroup + \edef\xmldocument{#3}% #2 can be \xmldocument and set as such + %xmlpushdocument{#3}% + #2{#3}{#4}% + \setcatcodetable\notcatcodes + \doifelsenothing{#5}% + {\xmlsetup{#3}{xml:process}}% + {\xmlsetup{#3}{#5}}% + %xmlpopdocument + \endgroup} + +\permanent\protected\def\xmlprocessfile {\lxml_process\plusone \xmlload} +\permanent\protected\def\xmlprocessdata {\lxml_process\zerocount\xmlloaddata} +\permanent\protected\def\xmlprocessbuffer{\lxml_process\zerocount\xmlloadbuffer} +\aliased \let\xmlprocess \xmlprocessfile + +\startxmlsetups xml:flush + \xmlflush{#1} +\stopxmlsetups + +\startxmlsetups xml:process + \xmlregistereddocumentsetups{#1}{#1} + \xmlmain{#1} +\stopxmlsetups + +\permanent\protected\def\xmlloadonly#1#2#3% + {\xmlload{#1}{#2}% + \xmlregistereddocumentsetups{#1}{#3}} + +% replaced by concat +% +% \protected\def\xmlconnect#1#2#3% inefficient +% {\scratchcounter\xmlcount{#1}{#2}\relax +% \ifcase\scratchcounter \or +% \xmlall{#1}{#2}% +% \else +% \dorecurse \scratchcounter +% {\ifnum\recurselevel>\plusone#3\fi +% \xmlidx{#1}{#2}\recurselevel}% +% \fi} + +\permanent\protected\def\xmlcdataobeyedline {\obeyedline} +\permanent\protected\def\xmlcdataobeyedspace{\strut\obeyedspace} +\permanent\protected\def\xmlcdatabefore {\begingroup\tt} +\permanent\protected\def\xmlcdataafter {\endgroup} + +% verbatim (dodo:pre/post whitespace, maybe splot verbatim and +% cdata commands), experimental: +% +% \xmlsetfunction{main}{verbatim}{lxml.displayverbatim} +% \xmlsetfunction{main}{verb} {lxml.inlineverbatim} + +% we use an xml: namespace so one has to define a suitable verbatim, say +% +% \definetyping[xml:verbatim][typing] +% +% this is experimental! + +\permanent\tolerant\protected\def\startxmldisplayverbatim[#1]% + {\startpacked + \edef\currenttyping{#1}% + \ifx\currenttyping\empty + \let\currenttyping\v!typing + \else % maybe test for existence + \edef\currenttyping{xml:\currenttyping}% + \fi + \protected\def\stopxmldisplayverbatim + {\endofverbatimlines + \stoppacked}% + \doinitializeverbatim + \beginofverbatimlines} + +\let\stopxmldisplayverbatim\relax + +\permanent\tolerant\protected\def\startxmlinlineverbatim[#1]% + {\begingroup + \edef\currenttype{#1}% + \ifx\currenttype\empty + \let\currenttype\v!type + \else % maybe test for existence + \edef\currenttype{xml:\currenttype}% + \fi + \let\stopxmlinlineverbatim\endgroup + \doinitializeverbatim} + +\let\stopxmlinlineverbatim\relax + +% processing instructions + +\permanent\protected\def\xmlinstalldirective#1#2% + {\clf_xmlinstalldirective{#1}{\csstring#2}} + +% an example: + +% + +\appendtoks + \xmlinstalldirective{tex}{xmltexcommand}% +\to \everyjob + +\permanent\def\xmltexcommand#1{\begincsname#1\endcsname} + +% \def\xmlcontextdirective#1% kind class key value +% {\executeifdefined{xml#1directive}\gobblethreearguments} + +% setting up xml: +% +% \setupxml[\c!default=] % mkiv only == text +% \setupxml[\c!default=\v!none] % mkiv only, undefined -> hidden +% \setupxml[\c!default=\v!text] % mkiv only, undefined -> text + +% \def\xmlctxdirective#1#2#3{\doif{#1}{clue}{\doif{#2}{page}}{\page[#3]}} + +\newconstant\xmlprocessingmode % 0=unset, 1=text, 2=hidden + +\installcorenamespace{xml} +\installcorenamespace{xmldefaults} +\installcorenamespace{xmlmapvalue} + +\installdirectcommandhandler \??xml {xml} + +\letvalue{\??xmldefaults\v!normal}\zerocount +\letvalue{\??xmldefaults\v!none }\zerocount +\letvalue{\??xmldefaults\v!text }\plusone +\letvalue{\??xmldefaults\v!hidden}\plustwo + +\permanent\protected\def\xmldefaulttotext + {\ifcase\xmlprocessingmode + \expandafter\gobbleoneargument % 0 (none) + \or + \expandafter\clf_xmlsetcommandtotext % 1 (normal) + \or + \expandafter\clf_xmlsetcommandtonone % 2 (hidden) + \else + \expandafter\gobbleoneargument % (none) + \fi} + +\appendtoks + \xmlprocessingmode\executeifdefined{\??xmldefaults\directxmlparameter\c!default}\plusone +\to \everysetupxml + +\setupxml + [\c!default=, % flush all + \c!compress=\v!no, % strip comment + \c!entities=\v!no] % load big entity file + +\appendtoks + \doif{\directxmlparameter\c!entities}\v!yes\clf_xmlloadentities +\to \everysetupxml + +\permanent\def\xmlmapvalue #1#2#3{\setvalue{\??xmlmapvalue#1:#2}{#3}} % keep #3 to grab spaces +\permanent\def\xmldoifelsevalue #1#2{\ifcsname\??xmlmapvalue#1:#2\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi} + +\permanent\def\xmlvalue#1#2% #3 + {\ifcsname\??xmlmapvalue#1:#2\endcsname + \expandafter\expandafter\expandafter\lastnamedcs\expandafter\gobbleoneargument + \else + \expandafter\firstofoneargument + \fi} + +\permanent\def\xmlmappedvalue#1#2#3% + {\ifcsname\??xmlmapvalue#1:#2\endcsname + \expandafter\lastnamedcs + \else + \csname\??xmlmapvalue#1:#3\expandafter\endcsname + \fi} + +\aliased\let\xmldoifvalueelse\xmldoifelsevalue + +\aliased\let\xmlmapval\xmlmapvalue +\aliased\let\xmlval \xmlvalue + +%D Experimental: + +\permanent\def\xmlgetindex #1{\clf_xmlgetindex {\xmldocument}{#1}} +\permanent\def\xmlwithindex #1#2{\clf_xmlwithindex{\xmldocument}{#1}{#2}} +\permanent\def\xmlreference #1#2{\string\xmlwithindex{#1}{#2}} + +%D Entities: +%D +%D \starttyping +%D \xmlsetentity{tex}{\TEX{}} % {} needed +%D \stoptyping + +\permanent\protected\def\xmlsetentity#1#2{\clf_xmlsetentity{#1}{\detokenize{#2}}} +\permanent\protected\def\xmltexentity#1#2{\clf_xmltexentity{#1}{\detokenize{#2}}} + +%D The following might change (or even disappear) so we keep it undocumented. + +\setnewconstant\xmlautoentities\plusone % 0=off, 1=upper, 2=upper,lower + +\permanent\protected\def\xmle + {\ifcase\xmlautoentities + \expandafter\lxml_e_none + \or + \expandafter\lxml_e_upper + \or + \expandafter\lxml_e_upperlower + \else + \expandafter\lxml_e_none + \fi} + +\def\lxml_e_none#1#2% safe + {#1} + +\def\lxml_e_upper#1#2% can be abbreviation + {\ifcsname#2\endcsname + \csname#2\expandafter\endcsname + \else + #1% + \fi} + +\def\lxml_e_upperlower#1#2% can be anything, so unsafe + {\ifcsname#2\endcsname + \csname#2\expandafter\endcsname + \orelse\ifcsname#1\endcsname + \csname#1\expandafter\endcsname + \else + #1% + \fi} + +%D We keep these around as there are also MP, LUA and TEX variants but they are not +%D the same as in \MKII. + +\permanent\tolerant\protected\def\processXMLbuffer[#1]{\xmlprocessbuffer{temp}{#1}{}} +\permanent \protected\def\processXMLfile #1{\xmlprocessfile {temp}{#1}{}} +\permanent \protected\def\XMLdata #1{\xmlprocessdata {temp}{#1}{}} + +\aliased\let\processxmlbuffer\processXMLbuffer +\aliased\let\processxmlfile \processXMLfile +\aliased\let\xmldata \XMLdata + +\permanent\protected\def\xmlsetinjectors [#1]{\clf_xmlsetinjectors{#1}} +\permanent\protected\def\xmlresetinjectors {\clf_xmlresetinjectors{}} + +% \def\xmlinjector#1{\executeifdefined{#1}\donothing} + +\permanent\def\xmlinjector#1{\fastsetup{xml:directive:injector:#1}} + +\startsetups xml:directive:injector:page + \page +\stopsetups + +\startsetups xml:directive:injector:column + \column +\stopsetups + +\startsetups xml:directive:injector:blank + \blank +\stopsetups + +\startsetups xml:directive:injector:noline + \vskip-\lineheight +\stopsetups + +\aliased\let\xmlapplyselectors\clf_xmlapplyselectors + +% \let\xmlcatcodes\notcatcodes + +\protect \endinput + +% \newcount\charactersactiveoffset \charactersactiveoffset="10000 +% +% \startextendcatcodetable\ctxcatcodes +% \catcode\numexpr\charactersactiveoffset+`<\relax=13 +% \catcode\numexpr\charactersactiveoffset+`&\relax=13 +% \catcode\numexpr\charactersactiveoffset+`>\relax=13 +% \stopextendcatcodetable +% +% \startextendcatcodetable\xmlcatcodes % not needed +% \catcode\numexpr\charactersactiveoffset+`<\relax=13 +% \catcode\numexpr\charactersactiveoffset+`&\relax=13 +% \catcode\numexpr\charactersactiveoffset+`>\relax=13 +% \stopextendcatcodetable +% +% \ctxlua { % entities are remembered in the format +% commands.remapentity("<",characters.activeoffset + utf.byte("<")) +% commands.remapentity("&",characters.activeoffset + utf.byte("&")) +% commands.remapentity(">",characters.activeoffset + utf.byte(">")) +% } diff --git a/tex/context/base/mkiv/math-ali.mkxl b/tex/context/base/mkiv/math-ali.mkxl new file mode 100644 index 000000000..997ecd3d7 --- /dev/null +++ b/tex/context/base/mkiv/math-ali.mkxl @@ -0,0 +1,1893 @@ +%D \module +%D [ file=math-ali, +%D version=2008.10.20, +%D title=\CONTEXT\ Math Macros, +%D subtitle=Math Alignments, +%D author={Hans Hagen, Taco Hoekwater \& Aditya Mahajan}, +%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 Math Macros / Math Alignments} + +\unprotect + +%D The code here has been moved from other files. Beware: the \MKII\ and \MKIV\ code +%D is not gathered in files with the same name. In the meantime this code has been +%D adapted to \MKIV\ but more is possible. The code is somewhat complicated by the +%D fact that alignments are tricky with rspect to tagging. + +% export: +% +% alignment : ok +% cases : +% matrix : ok +% substack : + +%D \macros +%D {definemathalignment, setupmathalignment, startmathalignment} +%D +%D Modules may provide additional alignment features. The following mechanisms are +%D provided by the core. + +\newtoks\t_math_align_a +\newtoks\t_math_align_b +\newtoks\t_math_align_c + +\newskip\d_math_eqalign_distance + +\protected\def\math_eqalign_distance + {\relax + \ifdim\d_math_eqalign_distance>\zeropoint + % \hskip\d_math_eqalign_distance + \tabskip\d_math_eqalign_distance + \fi + \mathalignmentparameter\c!separator + \relax} + +\def\displayopenupvalue{.25\bodyfontsize} + +\def\math_build_eqalign + {\scratchtoks\emptytoks + \d_math_eqalign_distance\mathalignmentparameter\c!distance\relax + \scratchcounterone\mathalignmentparameter\c!m + \scratchcountertwo\mathalignmentparameter\c!n + \etoksapp\scratchtoks{\the\t_math_align_a}% + \scratchcounter\plusone + \dorecurse{\numexpr\scratchcounterone*\scratchcountertwo-\plusone\relax} + {\ifnum\scratchcounter=\scratchcountertwo + \scratchcounter\plusone + \etoksapp\scratchtoks{\math_eqalign_distance}% + \else + \advance\scratchcounter\plusone + \fi + \etoksapp\scratchtoks{\the\t_math_align_b}}% + \etoksapp\scratchtoks{\the\t_math_align_c}} + +\def\math_math_in_eqalign#1% + {\startforceddisplaymath + \tabskip\zeropoint + \everycr\emptytoks + {{}#1{}}% + \stopforceddisplaymath} + +\def\math_text_in_eqalign#1% + {\startimath + \tabskip\zeropoint + \everycr\emptytoks + #1% + \stopimath} + +\def\eqalign#1% why no halign here, probably because of displaywidth + {\emptyhbox + \mskip\thinmuskip + \vcenter + {\math_openup\displayopenupvalue % was: \openup\jot + \mathsurround\zeropoint + \ialign{% + \strut + \hfil + \startforceddisplaymath{\alignmark\alignmark}\stopforceddisplaymath + \aligntab + \startforceddisplaymath{{}\alignmark\alignmark{}}\stopforceddisplaymath + \hfil\crcr + #1\crcr}% + }% + \mskip\thinmuskip} + +% preamble is scanned for tabskips so we need the span to prevent an error message + +\setnewconstant\eqalignmode\plusone + +% use zeroskipplusfill + +\def\math_prepare_r_eqalign_no + {\t_math_align_a + {\strut + \tabskip\zeropoint + \alignmark\alignmark % for picking up the number + \aligntab + \math_first_in_eqalign + \hfil + \math_left_of_eqalign + \span + \math_math_in_eqalign{\alignmark\alignmark}% + \math_right_of_eqalign + \tabskip\zeropoint}% + \t_math_align_b + {\aligntab + \math_next_in_eqalign + \math_left_of_eqalign + \span + \math_math_in_eqalign{\alignmark\alignmark}% + \math_right_of_eqalign + \tabskip\zeropoint}% + \ifnum\mathraggedstatus=\plusone + \t_math_align_c + {\hfil + \aligntab + \span + \math_text_in_eqalign{\alignmark\alignmark}% + \tabskip\zeropoint}% + \orelse\ifnum\mathraggedstatus=\plusthree + \t_math_align_c + {\hfil + \tabskip\zeropoint\s!plus 1\s!fill + \aligntab + \span + \math_text_in_eqalign{\alignmark\alignmark}% + \tabskip\zeropoint}% + \else + \t_math_align_c + {\hfil + \tabskip\centering + \aligntab + \span + \llap{\math_text_in_eqalign{\alignmark\alignmark}}% + \tabskip\zeropoint}% + \fi + \math_build_eqalign + \the\mathdisplayaligntweaks + \tabskip\centering} + +\def\math_prepare_l_eqalign_no % \checkeddisplaymath + {\t_math_align_a + {\strut + \tabskip\zeropoint + \alignmark\alignmark % for picking up the number + \aligntab + \math_first_in_eqalign + \hfil + \math_left_of_eqalign + \span + \math_math_in_eqalign{\alignmark\alignmark}% + \math_right_of_eqalign + \tabskip\zeropoint}% + \t_math_align_b + {\aligntab + \math_next_in_eqalign + \math_left_of_eqalign + \span + \math_math_in_eqalign{\alignmark\alignmark}% + \math_right_of_eqalign + \tabskip\zeropoint}% + \ifnum\mathraggedstatus=\plusone + \t_math_align_c + {\hfil + \aligntab + \kern-\displaywidth + \span + \rlap{\math_text_in_eqalign{\alignmark\alignmark}}% + \tabskip\displaywidth}% + \orelse\ifnum\mathraggedstatus=\plusthree + \t_math_align_c + {\hfil + \tabskip\zeropoint\s!plus 1\s!fill + \aligntab + \kern-\displaywidth + \span + \math_rlap{\math_text_in_eqalign{\alignmark\alignmark}}% + \tabskip\displaywidth}% + \else + \t_math_align_c + {\hfil + \tabskip\centering + \aligntab + \kern-\displaywidth + \span + \rlap{\math_text_in_eqalign{\alignmark\alignmark}}% + \tabskip\displaywidth}% + \fi + \math_build_eqalign + \the\mathdisplayaligntweaks + \tabskip\centering} + +\def\math_halign_checked + {\halign \ifcase\eqalignmode \or to \checkeddisplaywidth \fi} + +\def\math_both_eqalign_no_normal#1#2% + {\ifmmode + \the\mathdisplayaligntweaks + \vcenter\bgroup + \enforced\let\math_finish_eqalign_no\egroup + \else + \enforced\let\math_finish_eqalign_no\relax + \fi + #1% + \math_halign_checked\expandafter\bgroup\the\scratchtoks\crcr#2\crcr\egroup + \math_finish_eqalign_no} + +\installcorenamespace {mathalignlocation} + +\setvalue{\??mathalignlocation\v!top }{\let\math_alignment_halign_method\halign\tpack} +\setvalue{\??mathalignlocation\v!bottom}{\let\math_alignment_halign_method\halign\vpack} +\setvalue{\??mathalignlocation\v!center}{\let\math_alignment_halign_method\halign\vcenter} + +\def\math_both_eqalign_no_aligned#1% + {\let\math_alignment_halign_method\math_halign_checked + \ifmmode + \the\mathdisplayaligntweaks + \global\mathnumberstatus\plusone + \ifcase\mathraggedstatus + \def\math_finish_eqalign_no{\crcr\egroup}% + \else % we're in a mathbox + \ifcsname\??mathalignlocation\mathalignmentparameter\c!location\endcsname + \lastnamedcs % top|bottom|center as suggested by HM + \else + \vcenter + \fi + \bgroup + \def\math_finish_eqalign_no{\crcr\egroup\egroup}% + \fi + \fi + #1% + \math_alignment_halign_method\expandafter\bgroup\the\scratchtoks\crcr} + +\def\math_rlap#1% + {\setbox\scratchbox\hbox{#1}% + \ifdim\wd\scratchbox>\d_math_number_correction + \global\d_math_number_correction\wd\scratchbox + \fi + \box\scratchbox + \global\mathnumberstatus\plustwo} + +\def\math_handle_eqalign_no_r_normal {\math_both_eqalign_no_normal \math_prepare_r_eqalign_no} +\def\math_handle_eqalign_no_l_normal {\math_both_eqalign_no_normal \math_prepare_l_eqalign_no} +\def\math_handle_eqalign_no_r_aligned{\math_both_eqalign_no_aligned\math_prepare_r_eqalign_no} +\def\math_handle_eqalign_no_l_aligned{\math_both_eqalign_no_aligned\math_prepare_l_eqalign_no} +\def\math_finish_eqalign_no {\crcr\egroup} + +\let\reqalignno\relax +\let\leqalignno\relax +\let\eqalignno \relax + +%D Here we implement the user interface part. We start with basic math alignments: + +\newcount \c_math_eqalign_column +\newconditional\c_math_eqalign_first + +\newtoks \everymathalignment +\newtoks \everymathalignmentdone + +\permanent\tolerant\protected\def\math_alignment_NN[#1]#*[#2]% + {\aligntab + \strc_formulas_place_number_nested{#1}{#2}} + +\permanent\tolerant\protected\def\math_alignment_NR[#1]#*[#2]% + {\aligntab + \dostoptagged % finish cell + \strc_formulas_place_number_nested{#1}{#2}% + \math_number_right_of_eqalign + \global\settrue\c_math_eqalign_first + \crcr + \dostoptagged} % finish row + +\permanent\protected\def\math_alignment_NC + {\relax + \ifconditional\c_math_eqalign_first + \ifx\p_math_alignment_number\v!auto + \strc_formulas_place_number_nested{+}{}% + \fi + \global\setfalse\c_math_eqalign_first + \fi + \math_number_left_of_eqalign + \aligntab} + +\permanent\protected\def\math_alignment_EQ + {\NC=} + +\installmacrostack\NC % maybe more to shared table definitions +\installmacrostack\NN % maybe more to shared table definitions +\installmacrostack\EQ % maybe more to shared table definitions +\installmacrostack\NR % maybe more to shared table definitions +\installmacrostack\BC % maybe more to shared table definitions +\installmacrostack\EC % maybe more to shared table definitions + +\appendtoks + \push_macro_NC + \push_macro_NN + \push_macro_EQ + \push_macro_NR + \enforced\let\NC\math_alignment_NC + \enforced\let\NN\math_alignment_NN + \enforced\let\EQ\math_alignment_EQ + \enforced\let\NR\math_alignment_NR + \global\settrue\c_math_eqalign_first +\to \everymathalignment + +\appendtoks + \pop_macro_NR + \pop_macro_EQ + \pop_macro_NN + \pop_macro_NC +\to \everymathalignmentdone + +\let\math_alignment_snap_start\relax +\let\math_alignment_snap_stop \relax + +% % experimental: +% +% \def\math_alignment_snap_start +% {\ifgridsnapping +% \edef\p_math_alignment_grid{\mathalignmentparameter\c!grid}% +% \ifx\p_math_alignment_grid\v!no\else +% \snaptogrid[\p_math_alignment_grid]\vbox\bgroup +% \fi +% \fi} +% +% \def\math_alignment_snap_stop +% {\ifgridsnapping +% \ifx\p_math_alignment_grid\v!no\else +% \egroup +% \fi +% \fi} +% +% % doesn't work well, so: + +\let\math_alignment_snap_start\relax +\let\math_alignment_snap_stop \relax + +% end of experimental + +\newconditional\c_math_alignment_auto_number + +% \begingroup not permitted ($$...assignments...\halign... ).. check in luametatex + +\permanent\tolerant\protected\def\math_alignment_start[#1]#*[#2]% + {\edef\currentmathalignment{#1}% + \ifarguments\or\or + \setupmathalignment[#1][#2]% bad! ungrouped + \fi + \math_alignment_snap_start + \the\everymathalignment + \c_math_eqalign_column\zerocount + \edef\p_math_alignment_number{\mathalignmentparameter\c!number}% + \processcommacommand + [\mathalignmentparameter\c!align]% + {\advance\c_math_eqalign_column\plusone\math_eqalign_set_column}% takes argument + \global\c_math_eqalign_column\plusone + \dostarttagged\t!math\empty + \dostarttagged\t!mathtable\currentmathalignment + \numberedeqalign} + +\def\math_alignment_stop + {\math_finish_eqalign_no + \dostoptagged + \dostoptagged + \the\everymathalignmentdone + \math_alignment_snap_stop} + +\installcorenamespace{mathalignment} +\installcorenamespace{mathalignmentvariant} + +\installcommandhandler \??mathalignment {mathalignment} \??mathalignment + +\appendtoks + \setuevalue{\e!start\currentmathalignment}{\math_alignment_start[\currentmathalignment]}% + \setvalue {\e!stop \currentmathalignment}{\math_alignment_stop}% +\to \everydefinemathalignment + +\setupmathalignment + [\c!n=2, + \c!m=1, + \c!distance=\emwidth, + \c!grid=\v!math] + +\definemathalignment[align] % default case (this is what amstex users expect) +\definemathalignment[\v!mathalignment] % prefered case (this is cleaner, less clashing) + +% special case.. in case one mistypes .. + +\ifdefined \startalignment + + \let\align_math_normal_start\startalign + \let\align_math_normal_stop \stopalign + + \let\align_text_normal_start\startalignment + \let\align_text_normal_stop \stopalignment + + \permanent\overloaded\protected\def\startalign + {\ifmmode + \enforced\let\stopalign\align_math_normal_stop % cannot be an unexpanded def ... lookahead in align + \expandafter\align_math_normal_start + \orelse\ifinformula + \enforced\let\stopalign\align_math_normal_stop + \expandafter\align_math_normal_start + \else + \enforced\let\stopalign\align_text_normal_stop + \expandafter\align_text_normal_start + \fi} + + \overloaded\let\stopalign\relax + + \permanent\overloaded\protected\def\startalignment + {\ifmmode + \enforced\let\stopalignment\align_math_normal_stop % cannot be an unexpanded def ... lookahead in align + \expandafter\align_math_normal_start + \orelse\ifinformula + \enforced\let\stopalignment\align_math_normal_stop % cannot be an unexpanded def ... lookahead in align + \expandafter\align_math_normal_start + \else + \enforced\let\stopalignment\align_text_normal_stop + \expandafter\align_text_normal_start + \fi} + + \overloaded\let\stopalignment\relax + +\fi + +% + +\permanent\protected\def\numberedeqalign + {\doifelse{\formulaparameter\c!location}\v!left + \math_handle_eqalign_no_l_aligned + \math_handle_eqalign_no_r_aligned} + +\def\math_first_in_eqalign + {\global\c_math_eqalign_column\plusone + \dostarttagged\t!mathtablerow \empty + \dostarttagged\t!mathtablecell\empty} + +\def\math_next_in_eqalign + {\global\advance\c_math_eqalign_column\plusone + \dostoptagged % finish cell + \dostarttagged\t!mathtablecell\empty} + +\def\math_left_of_eqalign + {\ifcsname\??mathalignmentvariant\number\c_math_eqalign_column\endcsname + \ifcase\lastnamedcs \or \relax \or \hfill \or \hfill \fi + \fi} + +\def\math_right_of_eqalign + {\ifcsname\??mathalignmentvariant\number\c_math_eqalign_column\endcsname + \ifcase\lastnamedcs \or \hfill \or \relax \or \hfill \fi + \fi} + +\newconditional\c_math_alignment_local_number % not used but when true puts in front (todo) + +\def\math_number_right_of_eqalign + {\ifcase\wd\b_strc_formulas_number\else + \ifconditional\c_math_alignment_local_number + \ifcase\c_strc_math_number_location\or\or + \box\b_strc_formulas_number + \fi + \else + \box\b_strc_formulas_number + \fi + \fi} + +\def\math_number_left_of_eqalign + {\ifcase\wd\b_strc_formulas_number\else + \ifconditional\c_math_alignment_local_number + \ifcase\c_strc_math_number_location\or + \box\b_strc_formulas_number + \fi + \fi + \fi} + +% \def\math_eqalign_set_column#1% we could just add to the preamble (as with other alignments) +% {\expandafter\let\csname\??mathalignmentvariant\number\c_math_eqalign_column\expandafter\endcsname +% \csname\??mathalignmentvariant\ifcsname\??mathalignmentvariant#1\endcsname#1\else\v!normal\fi\endcsname} + +\def\math_eqalign_set_column#1% we could just add to the preamble (as with other alignments) + {\expandafter\chardef\csname\??mathalignmentvariant\number\c_math_eqalign_column\expandafter\expandafter\expandafter\endcsname + \ifcsname\??mathalignmentvariant#1\endcsname\lastnamedcs\else\zerocount\fi\relax} + +\letvalue{\??mathalignmentvariant\v!normal}\zerocount +\letvalue{\??mathalignmentvariant\v!left }\plusone +\letvalue{\??mathalignmentvariant\v!right }\plustwo +\letvalue{\??mathalignmentvariant\v!middle}\plusthree + +\permanent\protected\def\math_align_NR_generic[#1][#2]% + {\strc_formulas_place_number_nested{#1}{#2}\crcr} + +%D \starttyping +%D \placeformula[eqn0]\startformula \startalign[n=1] a\NR \stopalign \stopformula See \in[eqn0] +%D \placeformula[eqn1]\startformula \startalign[n=1] a\NR \stopalign \stopformula See \in[eqn1] +%D \placeformula \startformula \startalign[n=1] a\NR[eqn2] \stopalign \stopformula See \in[eqn2] +%D \placeformula[eqn3]\startformula \startalign[n=1] a\NR[+] \stopalign \stopformula See \in[eqn3] +%D \stoptyping + +%D \startbuffer +%D \placeformula \startformula \eqalignno { +%D a &= b & \formulanumber \cr +%D c &= d \cr +%D &= e \cr +%D &= f & \formulanumber +%D } \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \startbuffer +%D \placeformula \startformula \startalign +%D \NC a \EQ b \NR[+] +%D \NC c \EQ d \NR +%D \NC \EQ f \NR[for:demo-a-1] +%D \NC \EQ g \NR[for:demo-a-2][a] +%D \NC \EQ h \NR[for:demo-a-3][b] +%D \NC \EQ i \NR +%D \stopalign \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \startbuffer +%D \placeformula \startformula \startalign +%D \NC a \EQ b \NR[+] +%D \NC c \EQ d \NR +%D \NC \EQ f \NR +%D \NC \EQ g \NR +%D \NC \EQ h \NR +%D \NC \EQ i \NR[+] +%D \stopalign \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \startbuffer +%D \placeformula \startformula \startalign +%D \NC a \NC \eq b \NR[+] +%D \NC c \NC \neq d \NR +%D \NC \NC \neq f \NR[for:demo-b-1] +%D \NC \NC \geq g \NR[for:demo-b-2][a] +%D \NC \NC \leq h \NR[for:demo-b-3][b] +%D \NC \NC \neq i \NR +%D \stopalign \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \startbuffer +%D \placeformula \startformula \startalign[n=3,align={left,middle,right}] +%D \NC l \NC = \NC r \NR +%D \NC left \NC = \NC right \NR +%D \stopalign \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \startbuffer +%D \placeformula \startformula \startalign[n=3,align={right,middle,left}] +%D \NC l \NC = \NC r \NR +%D \NC left \NC = \NC right \NR +%D \stopalign \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \startbuffer +%D \placeformula \startformula \startalign[n=3,align={middle,middle,middle}] +%D \NC l \NC = \NC r \NR +%D \NC left \NC = \NC right \NR +%D \stopalign \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \startbuffer +%D \placeformula +%D \startformula +%D \startalign[n=3,align={middle,middle,middle}] +%D \NC a \NC = \NC b \NR[+] +%D \NC 2a \NC = \NC 2b \NR +%D \stopalign +%D \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \startbuffer +%D \placeformula +%D \startformulas +%D \setupmathalignment[n=3,align={middle,middle,middle}]% +%D \startformula +%D \startalign +%D \NC a \NC = \NC b \NR[+] +%D \NC 2a \NC = \NC 2b \NR +%D \stopalign +%D \stopformula +%D \startformula +%D \startalign +%D \NC a \NC = \NC b \NR[+] +%D \NC 2a \NC = \NC 2b \NR +%D \stopalign +%D \stopformula +%D \stopformulas +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \startbuffer +%D \placeformula +%D \startformulas +%D \dorecurse{5}{\startformula +%D \startalign[n=3,align={middle,middle,middle}] +%D \NC a \NC = \NC b \NR[+] +%D \NC 2a \NC = \NC 2b \NR +%D \stopalign +%D \stopformula} +%D \stopformulas +%D \stopbuffer +%D +%D \typebuffer \getbuffer + +%D \macros +%D {definemathcases, setupmathcases, startmathcases} +%D +%D Another wish \unknown + +\installcorenamespace{mathcases} + +\installcommandhandler \??mathcases {mathcases} \??mathcases + +\setupmathcases + [\c!distance=\emwidth, + \c!strut=\v!yes, % new + \c!numberdistance=2.5\emwidth, + \c!left={\left\{\mskip\thinmuskip}, + \c!right={\right.}] + +\appendtoks + \setuevalue{\e!start\currentmathcases}{\math_cases_start[\currentmathcases]}% + \setvalue {\e!stop \currentmathcases}{\math_cases_stop}% +\to \everydefinemathcases + +\permanent\protected\def\math_cases_NC_zero + {\math_cases_NC} + +\permanent\protected\def\math_cases_MC_zero + {\math_cases_NC + \ifmmode\else + \startimath + \enforced\let\math_cases_end_math\stopimath + \fi} + +\let\math_cases_end_math\relax + +\permanent\protected\def\math_cases_NR_zero + {\unskip + \math_cases_end_math + \aligntab + \global\enforced\let\math_cases_NC\math_cases_NC_first + \dodirectdoubleempty\math_cases_NR} + +\permanent\protected\def\math_cases_NC_first + {\global\enforced\let\math_cases_NC\math_cases_NC_second} + +\permanent\protected\def\math_cases_NC_second + {\math_cases_end_math\aligntab} + +\let\math_cases_NR\math_align_NR_generic + +\installmacrostack\math_cases_NC + +\permanent\tolerant\protected\def\math_cases_start[#1]#*[#2]% + {\begingroup + \edef\currentmathcases{#1}% + \ifarguments\or\or + \setupcurrentmathcases[#2]% + \fi + \edef\p_strut{\mathcasesparameter\c!strut}% + \ifx\p_strut\v!yes + \enforced\let\math_cases_strut\strut + \else + \enforced\let\math_cases_strut\relax + \fi + \mathcasesparameter\c!left + \vcenter\bgroup + \push_macro_math_cases_NC + \enforced\let\endmath\relax + \enforced\let\NC\math_cases_NC_zero + \enforced\let\MC\math_cases_MC_zero + \enforced\let\NR\math_cases_NR_zero + \global\enforced\let\math_cases_NC\math_cases_NC_first + \normalbaselines + \mathsurround\zeropoint + \everycr\emptytoks + \tabskip\zeropoint + \global\c_math_eqalign_column\plusone + \halign\bgroup + \startimath + \mathcasesparameter\c!style + \alignmark\alignmark + \stopimath + \hfil + \aligntab + \hskip\mathcasesparameter\c!distance\relax + \pop_macro_math_cases_NC + \math_cases_strut % looks better + \alignmark\alignmark + \hfil + \aligntab + \hskip\mathcasesparameter\c!numberdistance\relax + \let\formuladistance\!!zeropoint + \span\math_text_in_eqalign{\alignmark\alignmark}% + \crcr} % todo: number + +\def\math_cases_stop + {\crcr + \egroup + \popmacro\math_cases_NC + \egroup + \mathcasesparameter\c!right + \endgroup} + +\definemathcases[cases] +\definemathcases[\v!mathcases] + +%D \startbuffer +%D \placeformula \startformula \startcases +%D \NC 2 \NC $ y > 0 $ \NR +%D \NC 7 \NC $ x = 7 $ \NR[+] +%D \NC 4 \NC otherwise \NR +%D \stopcases \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \startbuffer +%D \placeformula \startformula x \startcases +%D \NC 2 \NC $ y > 0 $ \NR[+] +%D \NC 7 \NC $ x = 7 $ \NR +%D \NC 4 \NC otherwise \NR +%D \stopcases \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \startbuffer +%D \placeformula \startformula \startcases +%D \NC 2 \NC $ y > 0 $ \NR +%D \NC 7 \NC $ x = 7 $ \NR +%D \NC 4 \NC otherwise \NR +%D \stopcases \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \startbuffer +%D \placeformula \startformula x \startcases +%D \NC 2 \NC $ y > 0 $ \NR +%D \NC 7 \NC $ x = 7 $ \NR +%D \NC 4 \NC otherwise \NR +%D \stopcases \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer + +%D \macros +%D {definemathmatrix, setupmathmatrix, startmathmatrix} +%D +%D Yet another one \unknown. This time we implement the lot a bit +%D different which is a side effect of getting the tagging right. In +%D retrospect the main alignment could be done this way but \unknown + +\installcorenamespace{mathmatrix} + +\installcommandhandler \??mathmatrix {mathmatrix} \??mathmatrix + +\setupmathmatrix + [\c!distance=\emwidth, + \c!left=, + \c!right=, + \c!align=\v!middle] + +\appendtoks + \setuevalue{\e!start\currentmathmatrix}{\math_matrix_start[\currentmathmatrix]}% + \setvalue {\e!stop \currentmathmatrix}{\math_matrix_stop}% no u else lookahead problem +\to \everydefinemathmatrix + +\def\math_matrix_start_table + {\global\c_math_eqalign_column\zerocount + \dostarttagged\t!math\empty + \dostarttagged\t!mathtable\empty} + +\def\math_matrix_stop_table + {\dostoptagged + \dostoptagged} + +\def\math_matrix_start_row + {\noalign{\global\c_math_eqalign_column\zerocount}% + \dostarttagged\t!mathtablerow\empty} + +\def\math_matrix_stop_row + {\dostoptagged} + +\protected\def\math_matrix_start_cell + {\dostarttagged\t!mathtablecell\empty + \hss + \math_left_of_eqalign + \startimath + \math_matrix_set_style + \tabskip\zeropoint + \everycr\emptytoks} + +\protected\def\math_matrix_stop_cell + {\stopimath + \math_right_of_eqalign + \hss + \dostoptagged} + +% We could construct a preamble with alignment and such embedded but the number +% of matrices with many rows is normally so low that it doesn't pay of at all. + +\protected\def\math_matrix_distance + {\relax + \ifdim\d_math_eqalign_distance>\zeropoint + \hskip\d_math_eqalign_distance + \fi + \relax} + +\def\math_matrix_preamble + {\math_matrix_strut + \global\advance\c_math_eqalign_column\plusone + \math_matrix_start_cell + \alignmark\alignmark + \math_matrix_stop_cell + \aligntab + \aligntab + \math_matrix_distance + \global\advance\c_math_eqalign_column\plusone + \math_matrix_start_cell + \alignmark\alignmark + \math_matrix_stop_cell} + +\newconditional\c_math_matrix_first + +\permanent\protected\def\math_matrix_NR + {\aligntab\omit + \math_matrix_stop_row + \math_matrix_pickup + \crcr + \math_matrix_start_row} + +\permanent\protected\def\math_matrix_NC + {\ifconditional\c_math_matrix_first + \expandafter\math_matrix_NC_yes + \else + \expandafter\math_matrix_NC_nop + \fi} + +\permanent\protected\def\math_matrix_pickup{\global\settrue \c_math_matrix_first} +\permanent\protected\def\math_matrix_NC_yes{\global\setfalse\c_math_matrix_first} +\permanent\protected\def\math_matrix_NC_nop{\aligntab} % avoids lookahead + +% \def\math_matrix_stop_wrapup +% {\crcr +% \strut +% \crcr +% \noalign{\vskip-\struthtdp}} + +\def\math_matrix_start_processing + {\dontleavehmode + \bgroup + \tabskip\zeropoint + \math_matrix_pickup + \enforced\let\NR\math_matrix_NR + \enforced\let\NC\math_matrix_NC + \enforced\let\MC\math_matrix_NC + % + \enforced\let\endmath\relax + % + \setbox\nextbox\vbox\bgroup + \math_matrix_start_table + \halign \bgroup + % preamble + \span\math_matrix_preamble + % done + \crcr + \math_matrix_start_row} + +\def\math_matrix_stop_processing + {%\math_matrix_stop_wrapup % optional + \math_matrix_stop_row + \egroup + \math_matrix_stop_table + \egroup + \mathmatrixleft + \math_matrix_finish_nextbox + \mathmatrixright + \egroup} + +\let\math_matrix_strut \strut +\let\math_matrix_set_style\relax + +\def\math_matrix_check_settings + {\edef\p_strut{\mathmatrixparameter\c!strut}% + \ifx\p_strut\v!no + \enforced\let\math_matrix_strut\relax + \else + \enforced\let\math_matrix_strut\strut + \ifx\p_strut\v!yes\else + \spacing\p_strut + \fi + \fi + \d_math_eqalign_distance\mathmatrixparameter\c!distance\relax + \edef\math_matrix_set_style{\mathmatrixparameter\c!style}} + +\def\math_matrix_set_defaults + {\normalbaselines % hm, spacing ? + \mathsurround\zeropoint + \tabskip\zeropoint} + +\def\math_matrix_set_columns_step + {\advance\c_math_eqalign_column\plusone + %\c_math_matrix_columns\c_math_eqalign_column + \math_eqalign_set_column} + +\def\math_matrix_set_columns + {\c_math_eqalign_column\zerocount + \rawprocesscommacommand[\mathmatrixparameter\c!align]\math_matrix_set_columns_step} + +\newcount\c_math_eqalign_column_saved + +% \installglobalmacrostack\c_math_matrix_first + +\tolerant\protected\def\math_matrix_start[#1]#*[#2]% + {\begingroup + \globalpushmacro\c_math_matrix_first % hm, does that work? + \c_math_eqalign_column_saved\c_math_eqalign_column + \globalpushmacro\c_math_eqalign_first + \edef\currentmathmatrix{#1}% + \setupcurrentmathmatrix[#2]% + \math_matrix_check_settings + \math_matrix_set_defaults + \math_matrix_set_columns + \math_matrix_start_processing} + +\def\math_matrix_stop + {\math_matrix_stop_processing + \globalpushmacro\c_math_eqalign_first + \global\c_math_eqalign_column\c_math_eqalign_column_saved + \globalpopmacro\c_math_matrix_first + \endgroup} + +% vcenter: +% +% delta = (height(v) + depth(v))/2 +% axis = math_axis_size(cur_size) +% height(v) = delta + axis +% depth(v) = delta - axis + +\installcorenamespace{mathmatrixalignlocation} + +\let\mathmatrixleft \empty % experimental hook +\let\mathmatrixright\empty % experimental hook + +\setvalue{\??mathmatrixalignlocation\v!top }{\raise\dimexpr(\nextboxdp-\nextboxht)/2 +\mathaxisheight\mathstyle\relax} +\setvalue{\??mathmatrixalignlocation\v!high }{\raise\dimexpr(\nextboxdp-\nextboxht)/2\relax} +\setvalue{\??mathmatrixalignlocation\v!center}{\relax} +\setvalue{\??mathmatrixalignlocation\v!lohi} {\relax} +\setvalue{\??mathmatrixalignlocation\v!normal}{\relax} +\setvalue{\??mathmatrixalignlocation\v!bottom}{\lower\dimexpr(\nextboxdp-\nextboxht)/2 +\mathaxisheight\mathstyle\relax} +\setvalue{\??mathmatrixalignlocation\v!low }{\lower\dimexpr(\nextboxdp-\nextboxht)/2\relax} + +\def\math_matrix_finish_nextbox + {\begincsname\??mathmatrixalignlocation\mathmatrixparameter\c!location\endcsname\hbox\bgroup + \normalstartimath + \mathmatrixparameter\c!left + \vcenter{\box\nextbox}% + \mathmatrixparameter\c!right + \normalstopimath + \egroup} + +\definemathmatrix[matrix] +\definemathmatrix[\v!mathmatrix] + +%D \startbuffer +%D \placeformula \startformula[-] \startmatrix +%D \NC 1 \NC x \NC a \NR +%D \NC 2 \NC y \NC b \NR +%D \NC 3 \NC z \NC c \NR +%D \stopmatrix \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \definemathmatrix[bmatrix][left={\left[\mskip\thinmuskip},right={\mskip\thinmuskip\right]},strut=1.25] +%D +%D \startbuffer +%D \placeformula \startformula[-] \startbmatrix +%D \NC 1 \NC x \NC a \NR +%D \NC 2 \NC y \NC b \NR +%D \NC 3 \NC z \NC c \NR +%D \stopbmatrix \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D Taco added some code (dedicated to Aditya Mahajan) that gives more +%D control over aligments: + +%D \startbuffer +%D \startformula +%D \startmatrix +%D \NC a + x \NC = \NC a + d \NR +%D \NC y \NC = \NC d \NR +%D \stopmatrix +%D \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer + +%D \startbuffer +%D \startformula +%D \startmatrix [distance=3pt,align={right,left}] +%D \NC a + x \NC = a + d \NR +%D \NC y \NC = d \NR +%D \stopmatrix +%D \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer + +%D \startbuffer +%D \startformula +%D \startmatrix [left=\left(,right=\right)] +%D \NC a + x \NR +%D \NC y \NR +%D \stopmatrix +%D \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D A bit more complex code: +%D +%D \startbuffer +%D \startformula +%D \text{Let }{\cal R} = \bigcup_{P_{X_1},P_{X_2}} +%D \left\{ (R_1, R_2) : +%D \startmatrix[distance=1em,align={left,left,right}] +%D \NC R_1 \NC < I(X_1 ; Y \mid X_2) \NC R_1 \NR +%D \NC \hfill Q_2 \NC < I(X_2 ; Y \mid X_1) \NC R_2 \NR +%D \NC R_1 + R_2 \NC < I(X_1 ; Y) \NC R_1 + R_2 \NR +%D \stopmatrix +%D \right\} +%D \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer + +%D \macros +%D {startmatrices} +%D +%D Just a handy keystroke safer: + +\permanent\protected\def\startmatrices + {\begingroup + \setupmathmatrix} + +\permanent\protected\def\stopmatrices + {\endgroup} + +%D \startbuffer +%D \startformula +%D \startmatrix[left={\left(},right={\right)}] +%D \NC A \NC B \NR \NC C \NC D \NR +%D \stopmatrix +%D = +%D \startmatrix[left={\left(},right={\right)},location=low] +%D \NC A \NC B \NR \NC C \NC D \NR +%D \stopmatrix +%D = +%D \startmatrix[left={\left(},right={\right)},location=high] +%D \NC A \NC B \NR \NC C \NC D \NR +%D \stopmatrix +%D \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \startbuffer +%D \startformula +%D \startmatrices[left={\left(},right={\right)}] +%D \startmatrix +%D \NC A \NC B \NR \NC C \NC D \NR +%D \stopmatrix +%D = +%D \startmatrix[location=bottom] +%D \NC A \NC B \NR \NC C \NC D \NR +%D \stopmatrix +%D = +%D \startmatrix[location=top] +%D \NC A \NC B \NR \NC C \NC D \NR +%D \stopmatrix +%D \stopmatrices +%D \stopformula +%D \stopbuffer +%D +%D \typebuffer % does not run well: \getbuffer + +%D Handy for the \type {m-matrix} module: + +\permanent\tolerant\protected\def\startnamedmatrix[#1]#*[#2]% + {\begingroup + \edef\currentmathmatrix{#1}% + \setupcurrentmathmatrix[#2]% + \math_matrix_start[\currentmathmatrix]} + +\permanent\protected\def\stopnamedmatrix + {\math_matrix_stop + \endgroup} + +%D The following code is derived from Aditya's simplematrix prototype but +%D adapted to regular mathmatrices (which saves some code so it can go into +%D the core): + +\def\math_matrix_simple_row#1% + {\rawprocesscommalist[#1]\math_matrix_simple_col + \toksapp\scratchtoks{\NR}} + +\def\math_matrix_simple_col#1% + {\toksapp\scratchtoks{\NC#1}} + +\permanent\tolerant\protected\def\math_matrix_simple[#1]#*[#2]#:#3% + {\begingroup + \edef\currentmathmatrix{#1}% + \setupcurrentmathmatrix[#2]% + \scratchtoks\emptytoks + \processlist[];\math_matrix_simple_row[#3]% + \math_matrix_start[\currentmathmatrix]% + \the\scratchtoks + \math_matrix_stop + \endgroup} + +%D We hook it into the normal mathmatrix code: + +\appendtoks + \edef\p_simplecommand{\mathmatrixparameter\c!simplecommand}% + \ifx\p_simplecommand\empty\else + \setuevalue{\p_simplecommand}{\math_matrix_simple[\currentmathmatrix]}% + \fi +\to \everydefinemathmatrix + +%D And predefine some matrices: + +\definemathmatrix[matrix:parentheses][\c!left={\left(\mskip\thinmuskip},\c!right={\mskip\thinmuskip\right)},\c!align=\v!middle] +\definemathmatrix[matrix:brackets] [\c!left={\left[\mskip\thinmuskip},\c!right={\mskip\thinmuskip\right]},\c!align=\v!middle] +\definemathmatrix[matrix:bars] [\c!left={\left|\mskip\thinmuskip},\c!right={\mskip\thinmuskip\right|},\c!align=\v!middle] + +\definemathmatrix[thematrix][matrix:parentheses][\c!simplecommand=thematrix] + +%D \startbuffer +%D \startformula +%D \thematrix{1,2,3,4;5,6,7,8;9,10,11,12} +%D \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D \startbuffer +%D \startformula +%D \startthematrix +%D \NC 1\NC 2\NC 3\NC 4\NR +%D \NC 5\NC 6\NC 7\NC 8\NR +%D \NC 9\NC10\NC11\NC12\NR +%D \stopthematrix +%D \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer + +%D \macros +%D {startintertext} +%D +%D Preliminary feature: +%D +%D {\em example code} +%D +%D The intertext commands have to be expandable (in aligment lookahead) so +%D we cannot use \type {\protected}. + +\permanent\def\startintertext#1\stopintertext + {\noalign{\math_intertext{#1}}} + +\permanent\let\stopintertext\relax + +\permanent\def\intertext#1% + {\noalign{\math_intertext{#1}}} + +\protected\def\math_intertext#1% + {\penalty\postdisplaypenalty + \afterdisplayspace + \vbox{\forgetall\noindent#1\par}% + \penalty\predisplaypenalty + \beforedisplayspace} + +%D \macros +%D {substack} +%D +%D Preliminary code: +%D +%D \startbuffer +%D \startformula +%D \sum_{% +%D \startsubstack +%D i = 1 \NR +%D i \neq n \NR +%D i \neq m +%D \stopsubstack +%D }a_i +%D \stopformula +%D \stopbuffer +%D +%D \getbuffer which was typed as \typebuffer +%D +%D Notice that these macros give the correct spacing for +%D subscripts. Compare for example +%D +%D \startbuffer +%D \startformula +%D \sum_{\startsubstack a \NR b \NR \stopsubstack} +%D \text{ and } +%D \sum_{\scriptstyle a \atop \scriptstyle} +%D \stopformula +%D \stopbuffer +%D +%D \typebuffer which gives \getbuffer + +% no tagging yet : how is it supposed to be coded? + +\permanent\protected\def\startsubstack + {\begingroup + \vcenter\bgroup + \baselineskip\mathstacktotal + \lineskip\mathstackvgap + \lineskiplimit\lineskip + \mathsurround\zeropoint + \everycr\emptytoks + \enforced\let\NC\relax + \enforced\let\MC\relax + \enforced\let\NR\crcr + \halign\bgroup\hfil\normalstartimath\scriptstyle\alignmark\alignmark\normalstopimath\hfil\crcr} + +\permanent\def\stopsubstack % todo: \protected and delayed + {\crcr + \egroup + \egroup + \endgroup} + +% %D \macros +% %D {bordermatrix} +% %D +% %D In \PLAIN\ \TEX\ the width of a parenthesis is stored in +% %D the \DIMENSION\ \type{\mathparentwd}. This value is derived from +% %D the width of \type{\tenrm B}, so let's take care of it now: +% +% \ifx\mathparentwd\undefined \newdimen\mathparentwd \fi +% +% \let\normalbordermatrix\bordermatrix % move that code to here instead +% +% \protected\def\bordermatrix +% {\begingroup +% \setbox\scratchbox\hbox{\mr\char"239C}% +% \global\mathparentwd\wd\scratchbox +% \endgroup +% \normalbordermatrix} +% +% \def\bordermatrix +% {\begingroup +% \mr +% \global\mathparentwd\fontcharwd\font"239C\relax +% \endgroup +% \normalbordermatrix} + +%D \macros{overset, underset} +%D +%D The macros \type{\overset} and \type{\underset} are provided by +%D \AMS\ packages in \LATEX. These macro allows you to place a symbol +%D above or below another symbol, irrespective of whether the other +%D symbol is a relation or something else, and without influencing the +%D spacing. For most cases there is a better way to do such things +%D (declaring a math command with limop option, or using accents), but +%D occasionally these macros can be useful, for example: +%D +%D \startbuffer +%D \startformula +%D \overset{*}{X} \underset{*}{X} +%D \stopformula +%D \stopbuffer +%D \typebuffer \getbuffer +%D +%D Use these macros sparingly. Remember, \TEX\ was designed for +%D mathematics, so there is usually a proper method for typesetting +%D common math notation. +%D +%D These macros are a cleaner version of \type {\binrel@} and +%D \type {\binrel@@} macros in \AMSTEX\ packages. + +\def\math_binrel_apply#1% + {\begingroup + \setbox\scratchbox\hbox + {\thinmuskip 0mu + \medmuskip -1mu + \thickmuskip -1mu + \setbox\scratchbox\hbox{\normalstartimath#1\mathsurround\zeropoint\normalstopimath}% + \kern-\wd\scratchbox + \normalstartimath{}#1{}\mathsurround\zeropoint\normalstopimath}% + \ifdim\wd\scratchbox<\zeropoint + \endgroup + \expandafter\mathbin + \orelse\ifdim\wd\scratchbox>\zeropoint + \endgroup + \doubleexpandafter\mathrel + \else + \endgroup + \doubleexpandafter\firstofoneargument + \fi} + +\permanent\protected\def\overset#1#2% + {\math_binrel_apply{#2}{\mathop{\kern\zeropoint#2}\limits\normalsuperscript{#1}}} + +\permanent\protected\def\underset#1#2% + {\math_binrel_apply{#2}{\mathop{\kern\zeropoint#2}\limits\normalsubscript {#1}}} + +%D The following code comes from \type {math-str.mkiv}. +%D +%D Here we implement a basic math alignment mechanism. Numbers are also handled. The macros +%D \type {\startinnermath} and \type {\stopinnermath} can be overloaded in specialized +%D modules. + +\installcorenamespace{mathinnerstart} +\installcorenamespace{mathinnerstop} + +% \protected\def\startinnermath{\csname\??mathinnerstart\formulaparameter\c!align\endcsname} +% \protected\def\stopinnermath {\csname\??mathinnerstop \formulaparameter\c!align\endcsname} + +\permanent\protected\def\startinnermath{\expandnamespaceparameter\??mathinnerstart\formulaparameter\c!align\v!normal} +\permanent\protected\def\stopinnermath {\expandnamespaceparameter\??mathinnerstop \formulaparameter\c!align\v!normal} + +\permanent\protected\def\mathinnerstrut + {\doif{\formulaparameter\c!strut}\v!yes\strut} + +\permanent\protected\def\defineinnermathhandler#1#2#3% + {\setvalue{\??mathinnerstart#1}{#2}% + \setvalue{\??mathinnerstop #1}{#3}} + +\installtextracker + {formulas.boxes} + {\enforced\let\math_hbox\ruledhbox} + {\enforced\let\math_hbox\hbox} + +\let\math_hbox\hbox + +\newconstant\mathraggedstatus % normal left center right +\newconstant\mathnumberstatus % nothing normal shift_right + +\newdimen\d_math_number_correction + +\def\math_box_llapped_math_no + {\ifcase\mathraggedstatus\or + \box\b_strc_formulas_number + \or + \llap{\box\b_strc_formulas_number}% + \or + \llap{\box\b_strc_formulas_number}% + \fi} + +\def\math_box_rlapped_math_no + {\ifcase\mathraggedstatus\or + \rlap{\box\b_strc_formulas_number}% + \or + \rlap{\box\b_strc_formulas_number}% + \or + \box\b_strc_formulas_number + \fi} + +\newconditional\c_strc_math_has_number +\newconditional\c_strc_math_display_overflow +\newconstant \c_strc_math_number_location +\newdimen \d_strc_math_number_width +\newdimen \d_strc_math_display_width +\newbox \b_strc_math_display +\newconstant \c_strc_formulas_frame_mode +\newdimen \d_strc_math_indent +\newconditional\c_strc_math_indent + +\let\d_strc_math_framed_width\displaywidth + +\setvalue{\??formulaoption\v!frame}% + {\edef\p_frame{\formulaparameter\c!frame}% + \ifx\p_frame\v!number + \c_strc_formulas_frame_mode\plustwo % inside frame + \else + \c_strc_formulas_frame_mode\plusone % outside frame + \fi} + +% mode: 0=no frame | 1=number inside frame | 2=number outside frame + +\def\strc_math_flush_aligned + {\ifcase\c_strc_math_vertical + \ifcase\mathraggedstatus\or\hfill\or\hfill\fi + \box\b_strc_math_display + \ifcase\mathraggedstatus\or\or\hfill\or\hfill\fi + \else + \ifconditional\c_strc_math_indent + \ifzeropt\d_strc_math_indent\else + \hangafter\plusone + \hangindent\d_strc_math_indent + \fi + \fi + \edef\p_interlinespace{\formulaparameter\c!interlinespace}% + \ifx\p_interlinespace\empty\else\baselineskip\p_interlinespace\fi + \global\d_strc_math_indent\zeropoint + \ifcase\mathraggedstatus\or\raggedleft\or\raggedcenter\or\raggedright\fi + \unhbox\b_strc_math_display + \fi} + +\def\strc_math_flush_box_normal + {\ifcase\c_strc_math_vertical + \hbox to \displaywidth\bgroup + \strc_math_flush_aligned + \egroup + \else + \strc_math_flush_aligned + \fi} + +\def\strc_math_flush_box_framed_common + {\setformulaframedparameter\c!align{\formulaparameter\c!align}% + \letformulaframedparameter\c!strut\v!no + \d_framed_formula\ht\b_strc_math_display + \ifcase\mathraggedstatus\or\hfill\or\hfill \fi + \inheritedformulaframedframed{\box\b_strc_math_display}% + \ifcase\mathraggedstatus\or \or\hfill\or\hfill\fi} + +% \def\strc_math_flush_box_framed_inline +% {\letformulaframedparameter\c!location\empty +% \letformulaframedparameter\c!width\displaywidth +% \strc_math_flush_box_framed_common} + +\def\strc_math_flush_box_framed_display + {\let\currentformulaframed\currentformula + \letformulaframedparameter\c!location\v!formula + \setformulaframedparameter\c!width{\d_strc_math_framed_width}% + \strc_math_flush_box_framed_common} + +\def\strc_math_flush_box_framed_fit_inline + {\let\currentformulaframed\currentformula + \letformulaframedparameter\c!location\empty + \letformulaframedparameter\c!width\v!fit + \strc_math_flush_box_framed_common} + +\def\strc_math_flush_box_framed_fit_display + {\let\currentformulaframed\currentformula + \letformulaframedparameter\c!location\v!formula + \letformulaframedparameter\c!width\v!fit + \strc_math_flush_box_framed_common} + +% combiners + +\def\strc_math_flush_box + {\ifcase\c_strc_formulas_frame_mode + \strc_math_flush_box_normal + \else + \strc_math_flush_box_framed_display + \fi} + +\def\strc_math_number_right_normal + {\strc_math_flush_aligned + \hss % hss makes room for number + \math_box_llapped_math_no} + +\def\strc_math_number_left_normal + {\math_box_rlapped_math_no + \strc_math_flush_aligned + \hss} % hss makes room for number + +\def\strc_math_number_right_normal_outside + {\ifconditional\c_strc_formulas_tight + \strc_math_flush_box_framed_fit_display + \else + \strc_math_flush_box_framed_display + \fi + \hss % hss makes room for number + \math_box_llapped_math_no} + +\def\strc_math_number_left_normal_outside + {\math_box_rlapped_math_no + \hss % hss makes room for number + \ifconditional\c_strc_formulas_tight + \strc_math_flush_box_framed_fit_display + \else + \strc_math_flush_box_framed_display + \fi} + +\def\strc_math_number_right_normal_inside + {\setbox\b_strc_math_display\hpack to \dimexpr\displaywidth-\d_framed_locator_lo-\d_framed_locator_ro\relax\bgroup + \strc_math_flush_aligned + \hss + \math_box_llapped_math_no + \egroup + \strc_math_flush_box_framed_fit_inline} + +\def\strc_math_number_left_normal_inside + {\setbox\b_strc_math_display\hpack to \dimexpr\displaywidth-\d_framed_locator_lo-\d_framed_locator_ro\relax\bgroup + \math_box_rlapped_math_no + \hss + \strc_math_flush_aligned + \egroup + \strc_math_flush_box_framed_fit_inline} + +\def\strc_math_number_right_overflow + {\vpack\bgroup + \strc_math_flush_box + \par + \hpack to \displaywidth\bgroup + \hss + \math_box_llapped_math_no + \egroup + \egroup} + +\def\strc_math_number_left_overflow + {\vpack\bgroup + \hpack to \displaywidth\bgroup + \math_box_rlapped_math_no + \hss + \egroup + \strc_math_flush_box + \egroup} + +\def\strc_math_number_right_overflow_outside + {\vpack\bgroup + \strc_math_flush_box_framed_fit_inline + %\hskip\zeropoint % nicely breaks the line without introducing funny vertical spacing ... why o why + \hpack to \displaywidth\bgroup + \hss + \math_box_llapped_math_no + \egroup + \egroup} + +\def\strc_math_number_left_overflow_outside + {\vpack\bgroup + \hpack to \dimexpr\displaywidth-\d_framed_locator_lo\relax\bgroup + \math_box_rlapped_math_no + \hss + \egroup + \hskip\zeropoint % nicely breaks the line without introducing funny vertical spacing ... why o why + \strc_math_flush_box_framed_fit_inline + \egroup} + +\def\strc_math_number_right_overflow_inside + {\setbox\b_strc_math_display\vpack\bgroup + \box\b_strc_math_display + \hpack to \displaywidth\bgroup + \hss + \math_box_llapped_math_no + \hskip\d_framed_locator_ro + \egroup + \egroup + \strc_math_flush_box_framed_fit_inline} + +\def\strc_math_number_left_overflow_inside + {\setbox\b_strc_math_display\vpack\bgroup + \hpack to \displaywidth\bgroup + % \hskip\d_framed_locator_lo + \math_box_rlapped_math_no + \hss + \egroup + \box\b_strc_math_display + \egroup + \strc_math_flush_box_framed_fit_inline} + +% checkers + +\def\strc_math_number_check + {\d_strc_math_display_width\wd\b_strc_math_display + \ifconditional\c_strc_formulas_tight + \ifdim\d_strc_math_display_width>\displaywidth + \settrue\c_strc_math_display_overflow + \else + \displaywidth\d_strc_math_display_width + \setfalse\c_strc_math_display_overflow + \fi + \else + \ifdim\d_strc_math_display_width>\displaywidth + \settrue\c_strc_math_display_overflow + \else + \setfalse\c_strc_math_display_overflow + \fi + \fi} + +\def\strc_math_number_check_outside + {\d_strc_math_display_width\naturalwd\b_strc_math_display + \ifdim\dimexpr\d_strc_math_display_width+\d_framed_locator_lo+\d_framed_locator_ro\relax>\displaywidth + \settrue\c_strc_math_display_overflow + \else + \setfalse\c_strc_math_display_overflow + \fi + % still ok? + \ifnum\mathraggedstatus=\plustwo + \edef\d_strc_math_framed_width{\the\dimexpr\displaywidth-2\wd\b_strc_formulas_number\relax}% + \else + \edef\d_strc_math_framed_width{\the\dimexpr\displaywidth-\wd\b_strc_formulas_number\relax}% + \fi} + +\let\strc_math_number_check_inside\strc_math_number_check_outside + +% offsets + +\def\strc_math_number_check_offsets + {\begingroup + \setbox\scratchbox\hbox + {\inheritedformulaframedframed + {\pack_framed_locator_set_lo\pack_framed_locator_set_ro}}% + \endgroup} + +% tracing + +\def\strc_math_traced_state_yes + {\llap{\setbox\scratchbox\hbox{\infofont + \ifcase\mathraggedstatus unset\or right\or middle\or left\fi + \space + \ifcase\c_strc_formulas_frame_mode no\or out\or in\fi + \space + \ifconditional\c_strc_math_display_overflow overflow\else fit\fi + \quad}\ht\scratchbox\zeropoint\dp\scratchbox\zeropoint\box\scratchbox}} + +\let\strc_math_traced_state\relax + +\installtextracker + {formulas.framed} + {\let\strc_math_traced_state\strc_math_traced_state_yes} + {\let\strc_math_traced_state\relax} + +% packaging + +\protected\def\strc_math_box_start#1% + {\hsize\displaywidth % \checkeddisplaymath + \global\mathnumberstatus\plusone + \mathraggedstatus#1\relax + % + \global\d_math_number_correction\zeropoint + % + \edef\p_location{\formulaparameter\c!location}% + \useformulacolorparameter\c!color + \c_strc_math_number_location\ifx\p_location\v!left\plusone\orelse\ifx\p_location\v!right\plustwo\else\zerocount\fi + % + %\strc_formulas_place_number % not here as we can have inner alignment numbers + \dontcomplain + \setbox\b_strc_math_display\math_hbox\bgroup % \checkeddisplaymath + \mathinnerstrut + \startforceddisplaymath} + +\def\strc_math_flush_number_no + {\ifcase\c_strc_math_vertical + \ifconditional\c_strc_math_display_overflow + \ifcase\c_strc_formulas_frame_mode + \strc_math_flush_box_normal + \else + \strc_math_flush_box_framed_fit_inline + \fi + \else + \ifcase\c_strc_formulas_frame_mode + %\ifconditional\c_strc_formulas_tight + % \strc_math_flush_box_normal + %\else + \strc_math_flush_box_normal + %\fi + \else + \ifconditional\c_strc_formulas_tight + \strc_math_flush_box_framed_fit_inline + \else + \strc_math_flush_box_framed_display + \fi + \fi + \fi + \else + \strc_math_flush_box + \fi} + +\def\strc_math_flush_number_left + {\ifcase\c_strc_math_vertical + \ifconditional\c_strc_math_display_overflow + \ifcase\c_strc_formulas_frame_mode + \strc_math_number_left_overflow + \or + \strc_math_number_left_overflow_outside + \or + \strc_math_number_left_overflow_inside + \fi + \else + \ifcase\c_strc_formulas_frame_mode + \strc_math_number_left_normal + \or + \strc_math_number_left_normal_outside + \or + \strc_math_number_left_normal_inside + \fi + \fi + \else + \box\b_strc_formulas_number + \hfill + \strc_math_flush_aligned + \fi} + +\def\strc_math_flush_number_right + {\ifcase\c_strc_math_vertical + \ifconditional\c_strc_math_display_overflow + \ifcase\c_strc_formulas_frame_mode + \strc_math_number_right_overflow + \or + \strc_math_number_right_overflow_outside + \or + \strc_math_number_right_overflow_inside + \fi + \else + \ifcase\c_strc_formulas_frame_mode + \strc_math_number_right_normal + \or + \strc_math_number_right_normal_outside + \or + \strc_math_number_right_normal_inside + \fi + \fi + \else + \strc_math_flush_aligned + \hfill + \box\b_strc_formulas_number + \fi} + +\protected\def\strc_math_box_stop + {\stopforceddisplaymath + \egroup + % check number + \d_strc_math_number_width\wd\b_strc_formulas_number + % + \ifcase\mathnumberstatus + \setfalse\c_strc_math_has_number + \or\ifzeropt\d_strc_math_number_width + \setfalse\c_strc_math_has_number + \else + \settrue\c_strc_math_has_number + \fi\fi + % preroll left and right offsets + \ifcase\c_strc_formulas_frame_mode + % no frame + \else + \strc_math_number_check_offsets + \fi + \ifcase\c_strc_formulas_frame_mode + \strc_math_number_check + \or + \strc_math_number_check_outside + \else + \strc_math_number_check_inside + \fi + \noindent % \noindentation % not \dontleavehmode + \hskip\d_strc_formulas_display_margin_left % was kern but that doesn't indent + \strc_math_traced_state + \ifcase\c_strc_math_vertical + \hbox to \displaywidth \bgroup + \or + \vbox \bgroup \hsize\displaywidth + \or + \bgroup \hsize\displaywidth + \fi + \ifcase\mathnumberstatus + \strc_math_flush_box + \or % status 1 + \ifcase\c_strc_math_number_location + \strc_math_flush_box + \or % number left + \ifzeropt\wd\b_strc_formulas_number + \strc_math_flush_number_no + \else + \strc_math_flush_number_left + \fi + \else % number right + \ifzeropt\wd\b_strc_formulas_number + \strc_math_flush_number_no + \else + \strc_math_flush_number_right + \fi + \fi + \or % status 2 + \hskip\d_math_number_correction % probably no longer used + \strc_math_flush_box + \hss + \else + \strc_math_flush_box + \fi + \ifcase\c_strc_math_vertical + \or + \or + \par + \fi + \egroup} + +\defineinnermathhandler\v!left {\strc_math_box_start\plusone }{\strc_math_box_stop} +\defineinnermathhandler\v!middle {\strc_math_box_start\plustwo }{\strc_math_box_stop} +\defineinnermathhandler\v!right {\strc_math_box_start\plusthree}{\strc_math_box_stop} +\defineinnermathhandler\v!flushleft {\strc_math_box_start\plusthree}{\strc_math_box_stop} +\defineinnermathhandler\v!center {\strc_math_box_start\plustwo }{\strc_math_box_stop} +\defineinnermathhandler\v!flushright{\strc_math_box_start\plusone }{\strc_math_box_stop} +\defineinnermathhandler\v!normal {\strc_math_box_start\plustwo }{\strc_math_box_stop} + +%D Some inline math tweak. + +\appendtoks + \ifcase\mathnestinglevel\or + % 4=disable 6=only when no spaces + \mathsurroundskip\mathematicsparameter\c!textdistance\relax + \ifzeropt\mathsurroundskip + \ifzeropt\gluestretch\mathsurroundskip + \ifzeropt\glueshrink\mathsurroundskip + \mathsurroundmode\plussix + \else + \mathsurroundskip\zeropoint + \mathsurroundmode\plusfour + \fi + \else + \mathsurroundmode\plussix + \fi + \else + \mathsurroundmode\plussix + \fi + \else + \mathsurroundmode\plusfour + \mathsurroundskip\zeropoint + \fi +\to \everymathematics + +\setupmathematics + [\c!textdistance=\zeropoint] + +%D This is an experiment. No fancy spacing and alignments here. If we ever +%D go that route it might result in incompatible rendering. + +\permanent\protected\def\startsplitformula + {\ifhmode + \par + \fi + \begingroup + \beforedisplayspace + % subset of \everydisplay: + \c_attr_mathmode\plusone + \settrue \indisplaymath + % end of subset + \informulatrue} + +\permanent\protected\def\stopsplitformula + {\afterdisplayspace + \endgroup} + +\protect \endinput + +% \placeformula \startformula[-] \startmatrix +% \NC 1 \NC x \NC a \NR +% \NC 2 \NC y \NC b \NR +% \NC 3 \NC z \NC c \NR +% \stopmatrix \stopformula + +% \definemathmatrix[bordermatrix][left={\left[\mskip\thinmuskip},right={\mskip\thinmuskip\right]}] + +% \placeformula \startformula[-] \startbordermatrix +% \NC 1 \NC x \NC a \NR +% \NC 2 \NC y \NC b \NR +% \NC 3 \NC z \NC c \NR +% \stopbordermatrix \stopformula diff --git a/tex/context/base/mkiv/math-def.mkiv b/tex/context/base/mkiv/math-def.mkiv index 641f7411e..14ceeb61e 100644 --- a/tex/context/base/mkiv/math-def.mkiv +++ b/tex/context/base/mkiv/math-def.mkiv @@ -1,4 +1,4 @@ -%D \module + %D \module %D [ file=math-tex, %D version=2001.04.12, %D title=\CONTEXT\ Math Macros, @@ -80,6 +80,8 @@ {\savenormalmeaning{#1}% \expandafter\def\expandafter#1\expandafter{\csname normal\csstring#1\endcsname#2}} +\pushoverloadmode + \setoperatorlimits \int \intlimits \setoperatorlimits \iint \intlimits \setoperatorlimits \iiint \intlimits @@ -90,6 +92,8 @@ \setoperatorlimits \ointclockwise \intlimits \setoperatorlimits \ointctrclockwise \intlimits +\popoverloadmode + %D \macros %D {centercolon, colonminus, minuscolon, colonequals, equalscolon, %D colonapprox, approxcolon, colonsim, simcolon, coloncolon, @@ -131,6 +135,8 @@ %D The next macros take care of the space between the colon and the %D relation symbol. +\pushoverloadmode + \definemathcommand [colonsep] {\mkern-1.2mu} \definemathcommand [doublecolonsep] {\mkern-0.9mu} @@ -154,6 +160,8 @@ \definemathcommand [coloncolonsim] [rel] {\coloncolon\colonsep\sim} \definemathcommand [simcoloncolon] [rel] {\sim\coloncolon\colonsep} +\popoverloadmode + % \appendtoks % \def\over{\primitive\over}% % \to \everymathematics diff --git a/tex/context/base/mkiv/math-fen.mkiv b/tex/context/base/mkiv/math-fen.mkiv index 246ff989d..d7c67b7e3 100644 --- a/tex/context/base/mkiv/math-fen.mkiv +++ b/tex/context/base/mkiv/math-fen.mkiv @@ -335,6 +335,8 @@ %D A bonus: +\pushoverloadmode + \unexpanded\def\Lparenthesis {\math_fenced_fenced_start{parenthesis}} \unexpanded\def\Rparenthesis {\math_fenced_fenced_stop {parenthesis}} \unexpanded\def\Lbracket {\math_fenced_fenced_start{bracket}} \unexpanded\def\Rbracket {\math_fenced_fenced_stop {bracket}} \unexpanded\def\Lbrace {\math_fenced_fenced_start{brace}} \unexpanded\def\Rbrace {\math_fenced_fenced_stop {brace}} @@ -394,14 +396,20 @@ % \left| \frac{1}{e} \right| % \stopformula +\popoverloadmode + \installcorenamespace{mathleft} \installcorenamespace{mathright} \installcorenamespace{mathmiddle} +\pushoverloadmode + \unexpanded\def\left {\afterassignment\math_left \let\nexttoken} \unexpanded\def\right {\afterassignment\math_right \let\nexttoken} \unexpanded\def\middle{\afterassignment\math_middle\let\nexttoken} +\popoverloadmode + \let\leftorright\relax \newconditional\c_math_fenced_done @@ -565,6 +573,8 @@ % The names in char-def.lua (historic mess): +\pushoverloadmode + \let\lbrack \lbracket \let\rbrack \rbracket \let\lceiling \lceil @@ -634,6 +644,8 @@ \installmathfencepair \< \Langle \> \Rangle \installmathfencepair \| \Lbar \| \Rbar +\popoverloadmode + %D As we have overloaded \type {\left} and \type {\right} we also need a more %D clever version of the following: diff --git a/tex/context/base/mkiv/math-frc.mkiv b/tex/context/base/mkiv/math-frc.mkiv index 8b068bc6c..1b0149f96 100644 --- a/tex/context/base/mkiv/math-frc.mkiv +++ b/tex/context/base/mkiv/math-frc.mkiv @@ -630,8 +630,6 @@ %D More fracking (for Alan): -\def\s!vfrac{vfrac} - \unexpanded\def\math_frac_colored_vulgar#1#2% {\savecolor \colo_helpers_activate\p_math_fractions_color diff --git a/tex/context/base/mkiv/math-frc.mkxl b/tex/context/base/mkiv/math-frc.mkxl new file mode 100644 index 000000000..b6c77f4bb --- /dev/null +++ b/tex/context/base/mkiv/math-frc.mkxl @@ -0,0 +1,753 @@ +%D \module +%D [ file=math-frc, +%D version=2013.04.06, % 2007.07.19, +%D title=\CONTEXT\ Math Macros, +%D subtitle=Fractions, +%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 Math Macros / Fractions} + +\unprotect + +%D I need to check it all again as there was a bug in luatex with dimensions that could +%D resulted in side effects that made me mess with spacing. + +\unexpanded\def\topstrut{\vrule\s!width\zeropoint\s!height\strutht\s!depth\zeropoint\relax} +\unexpanded\def\botstrut{\vrule\s!width\zeropoint\s!height\zeropoint\s!depth\strutdp\relax} + +\unexpanded\def\mathtopstrut{\setbox\scratchbox\mathstylehbox{(}\vrule\s!width\zeropoint\s!height\ht\scratchbox\s!depth\zeropoint\relax} +\unexpanded\def\mathbotstrut{\setbox\scratchbox\mathstylehbox{(}\vrule\s!width\zeropoint\s!height\zeropoint\s!depth\dp\scratchbox\relax} + +%D This module is reimplemented in \MKIV\ style. + +\registerctxluafile{math-frc}{} + +%D \macros +%D {frac, xfrac, xxfrac} +%D +%D This is another one Tobias asked for. It replaces the primitive \type +%D {\over}. We also take the opportunity to handle math style restoring, +%D which makes sure units and chemicals come out ok. The \type {\frac} +%D macro kind of replaces the awkward \type {\over} primitive. Say that +%D we have the following formulas: +%D +%D \startbuffer[sample] +%D test $\frac {1}{2}$ test $$1 + \frac {1}{2} = 1.5$$ +%D test $\xfrac {1}{2}$ test $$1 + \xfrac {1}{2} = 1.5$$ +%D test $\xxfrac{1}{2}$ test $$1 + \xxfrac{1}{2} = 1.5$$ +%D \stopbuffer +%D +%D \typebuffer[sample] +%D +%D With the most straightforward definitions, we get: +%D +%D \startbuffer[code] +%D \def\dofrac#1#2#3{\relax\mathematics{{{#1{#2}}\over{#1{#3}}}}} +%D +%D \def\frac {\dofrac\mathstyle} +%D \def\xfrac {\dofrac\scriptstyle} +%D \def\xxfrac{\dofrac\scriptscriptstyle} +%D \stopbuffer +%D +%D \typebuffer[code] \getbuffer[code,sample] +%D +%D Since this does not work well, we can try: +%D +%D \startbuffer[code] +%D \def\xfrac #1#2{\hbox{$\dofrac\scriptstyle {#1}{#2}$}} +%D \def\xxfrac#1#2{\hbox{$\dofrac\scriptscriptstyle{#1}{#2}$}} +%D \stopbuffer +%D +%D \typebuffer[code] \getbuffer[code,sample] +%D +%D This for sure looks better than: +%D +%D \startbuffer[code] +%D \def\xfrac #1#2{{\scriptstyle \dofrac\relax{#1}{#2}}} +%D \def\xxfrac#1#2{{\scriptscriptstyle\dofrac\relax{#1}{#2}}} +%D \stopbuffer +%D +%D \typebuffer[code] \getbuffer[code,sample] +%D +%D So we stick to the next definitions (watch the local overloading of +%D \type {\xfrac}). +%D +%D In the meantime, in \LUATEX, we have better control over styles so the +%D following macros are different from the \MKII\ ones. + +% obsolete, is now c!mathstyle +% +% 0=auto, 1=displaystyle, 2=textstyle, 3=scriptstyle, 4=scriptscriptstyle, 5=mathstyle +% +% $\mathfracmode0 \frac{1}{2}$ +% $\mathfracmode1 \frac{1}{2}$ +% $\mathfracmode2 \frac{1}{2}$ +% $\mathfracmode3 \frac{1}{2}$ +% $\mathfracmode4 \frac{1}{2}$ +% $\mathfracmode5 \frac{1}{2}$ +% +% we keep the constant for a while + +\setnewconstant\mathfracmode\zerocount + +\installcorenamespace{mathfractions} +\installcorenamespace{mathfractionstyle} +\installcorenamespace{mathfractionalternative} + +\installcommandhandler \??mathfractions {mathfraction} \??mathfractions + +\let\setupmathfractions\setupmathfraction + +% color only applies to rule, use regular color for rest + +\setupmathfractions + [\c!mathstyle=, + \c!alternative=\v!inner, + \c!margin=\zeropoint, + \c!rulethickness=.25\exheight, + \c!left=0x2E, + \c!right=0x2E, + \c!strut=\v!yes, + \c!topdistance=, + \c!bottomdistance=, + \c!rule=\v!auto] + +\appendtoks + \setuevalue{\currentmathfraction}{\math_frac{\currentmathfraction}}% +\to \everydefinemathfraction + +% Sometimes users want control over the distances: + +\let\math_fraction_set_distance\relax + +\appendtoks + \math_fraction_set_distance +\to \everymathematics + +% why only displaystyle .. a bit weak + +\unexpanded\def\math_fraction_set_distance_top + {\Umathfractionnumup \displaystyle\m_math_fraction_distance_top + \relax} + +\unexpanded\def\math_fraction_set_distance_bot + {\Umathfractiondenomdown\displaystyle\m_math_fraction_distance_bot + \relax} + +\unexpanded\def\math_fraction_set_distance_all + {\Umathfractionnumup \displaystyle\m_math_fraction_distance_top + \Umathfractiondenomdown\displaystyle\m_math_fraction_distance_bot + \relax} + +\appendtoks + \ifx\currentmathfraction\empty + \edef\m_math_fraction_distance_top{\mathfractionparameter\c!topdistance}% + \edef\m_math_fraction_distance_bot{\mathfractionparameter\c!bottomdistance}% + \ifx\m_math_fraction_distance_top\empty + \ifx\m_math_fraction_distance_bot\empty + \let\math_fraction_set_distance\relax + \else + \let\math_fraction_set_distance\math_fraction_set_distance_bot + \fi + \else + \ifx\m_math_fraction_distance_bot\empty + \let\math_fraction_set_distance\math_fraction_set_distance_top + \else + \let\math_fraction_set_distance\math_fraction_set_distance_all + \fi + \fi + \fi +\to \everysetupmathfraction + +% So far for control. + +\installcorenamespace{mathfractionstrut} + +\def\math_frac_no_strut + {\enforced\let\m_fractions_strut_top\relax + \enforced\let\m_fractions_strut_bot\relax} + +\setvalue{\??mathfractionstrut\v!yes}% + {\enforced\let\m_fractions_strut_top\mathstrut + \enforced\let\m_fractions_strut_bot\mathstrut} + +\setvalue{\??mathfractionstrut\v!math}% + {\enforced\let\m_fractions_strut_top\mathstrut + \enforced\let\m_fractions_strut_bot\mathstrut} + +\letvalue{\??mathfractionstrut\v!no}\math_frac_no_strut + +\setvalue{\??mathfractionstrut\v!tight}% + {\enforced\let\m_fractions_strut_top\mathbotstrut % indeed swapped name + \enforced\let\m_fractions_strut_bot\mathtopstrut} % indeed swapped name + +\math_frac_no_strut + +\newdimen\d_math_fraction_margin + +\unexpanded\def\math_frac#1% + {\begingroup + \edef\currentmathfraction{#1}% + % + \edef\p_math_fraction_fences{\mathfractionparameter\c!fences}% + \ifx\p_math_fraction_fences\empty \else + \math_fenced_fenced_start\p_math_fraction_fences + \fi + % + \d_math_fraction_margin\mathfractionparameter\c!margin + % + \edef\p_math_fractions_color{\mathfractionparameter\c!color}% + % + \edef\p_math_fractions_strut{\mathfractionparameter\c!strut}% + \ifcsname\??mathfractionstrut\p_math_fractions_strut\endcsname + \lastnamedcs + \else + \math_frac_no_strut + \fi + % + \ifx\p_math_fractions_color\empty + \expandafter\math_frac_normal + \else + \expandafter\math_frac_colored + \fi} + +\unexpanded\def\math_frac_wrapup + {\ifx\p_math_fraction_fences\empty \else + \math_fenced_fenced_stop\p_math_fraction_fences + \fi + \endgroup} + +\unexpanded\def\math_frac_colored#1#2% + {\savecolor + \colo_helpers_activate\p_math_fractions_color + \math_frac_normal{\restorecolor#1}{\restorecolor#2}} + +\unexpanded\def\math_frac_normal + {\expandnamespaceparameter\??mathfractionalternative\mathfractionparameter\c!alternative\v!inner} + +% we use utfchar anyway so we can as well do all at the lua end + +\def\math_frac_no_delim{0x2E} + +\def\math_frac_command + {\clf_mathfraction + {\mathfractionparameter\c!rule}% + \ifx\p_math_fraction_fences\empty + \mathfractionparameter\c!left \space + \mathfractionparameter\c!right\space + \else + \math_frac_no_delim\space + \math_frac_no_delim\space + \fi + \dimexpr\mathfractionparameter\c!rulethickness\relax + \relax} + +% Having a \withmarginornot{#1}{#2} makes not much sense nor do 4 tests or 4 redundant +% kerns (longer node lists plus possible interference). A split in normal and margin +% also makes testing easier. When left and right margins are needed we might merge the +% variants again. After all, these are not real installers. + +% the denominator is in cramped! + +\setvalue{\??mathfractionalternative\v!inner}% + {\ifcase\d_math_fraction_margin + \expandafter\math_fraction_inner_normal + \else + \expandafter\math_fraction_inner_margin + \fi} + +\setvalue{\??mathfractionalternative\v!outer}% + {\ifcase\d_math_fraction_margin + \expandafter\math_fraction_outer_normal + \else + \expandafter\math_fraction_outer_margin + \fi} + +\setvalue{\??mathfractionalternative\v!both}% + {\ifcase\d_math_fraction_margin + \expandafter\math_fraction_both_normal + \else + \expandafter\math_fraction_both_margin + \fi} + +% todo: store first state and reuse second time + +\def\math_fraction_inner_normal#1#2% + {\Ustack{% + {% + {\usemathstyleparameter\mathfractionparameter{\m_fractions_strut_top#1}}% + \math_frac_command + {\usemathstyleparameter\mathfractionparameter{\m_fractions_strut_bot#2}}% + }% + }% + \math_frac_wrapup} + +\def\math_fraction_outer_normal#1#2% + {\Ustack{% + \usemathstyleparameter\mathfractionparameter + {% + {\m_fractions_strut_top#1}% + \math_frac_command + {\m_fractions_strut_bot#2}% + }% + }% + \math_frac_wrapup} + +\def\math_fraction_both_normal#1#2% + {\Ustack{% + \usemathstyleparameter\mathfractionparameter + {% + {\usemathstyleparameter\mathfractionparameter\m_fractions_strut_top#1}% + \math_frac_command + {\usemathstyleparameter\mathfractionparameter\m_fractions_strut_bot#2}% + }% + }% + \math_frac_wrapup} + +\def\math_fraction_inner_margin#1#2% + {\Ustack{% + {% + {\kern\d_math_fraction_margin + \usemathstyleparameter\mathfractionparameter{\m_fractions_strut_top#1}% + \kern\d_math_fraction_margin}% + \math_frac_command + {\kern\d_math_fraction_margin + \usemathstyleparameter\mathfractionparameter{\m_fractions_strut_bot#2}% + \kern\d_math_fraction_margin}% + }% + }% + \math_frac_wrapup} + +\def\math_fraction_outer_margin#1#2% + {\Ustack{% + \usemathstyleparameter\mathfractionparameter + {% + {\kern\d_math_fraction_margin + \m_fractions_strut_top#1% + \kern\d_math_fraction_margin}% + \math_frac_command + {\kern\d_math_fraction_margin + \m_fractions_strut_bot#2% + \kern\d_math_fraction_margin}% + }% + }% + \math_frac_wrapup} + +\def\math_fraction_both_margin#1#2% + {\Ustack{% + \usemathstyleparameter\mathfractionparameter + {% + {\kern\d_math_fraction_margin + \usemathstyleparameter\mathfractionparameter\m_fractions_strut_top#1% + \kern\d_math_fraction_margin}% + \math_frac_command + {\kern\d_math_fraction_margin + \usemathstyleparameter\mathfractionparameter\m_fractions_strut_bot#2% + \kern\d_math_fraction_margin}% + }% + }% + \math_frac_wrapup} + +\definemathfraction[xfrac] [\c!alternative=\v!inner,\c!mathstyle=\s!script] +\definemathfraction[xxfrac][\c!alternative=\v!inner,\c!mathstyle=\s!scriptscript] + +\let\normalxfrac\xfrac + +\unexpanded\def\xfrac#1#2{\normalxfrac{\let\xfrac\xxfrac#1}{\let\xfrac\xxfrac#2}} + +%D Spacing (sensitive for definition of \triggermathstyle: + +% \ifcase\contextlmtxmode + +\unexpanded\def\nomathfractiongaps {\normalexpanded{\math_no_fraction_gaps \mathstyletrigger\mathstyle}} % maybe collect settings +\unexpanded\def\overlaymathfractiongaps{\normalexpanded{\math_overlay_fraction_gaps\mathstyletrigger\mathstyle}} % maybe collect settings + +\unexpanded\def\math_no_fraction_gaps#1% + {\Umathfractionnumup #1\zeropoint + \Umathfractiondenomdown#1\zeropoint} + +\unexpanded\def\math_overlay_fraction_gaps#1% + {\Umathfractionnumup #1\zeropoint + \Umathfractionnumvgap #1\zeropoint + %Umathfractionrule #1\zeropoint + \Umathfractiondenomvgap#1\zeropoint + \Umathfractiondenomdown#1\zeropoint} + +% \else + +% \unexpanded\def\math_no_fraction_gaps +% {\Umathfractionnumup \mathstyle\zeropoint +% \Umathfractiondenomdown\mathstyle\zeropoint} +% +% \unexpanded\def\math_overlay_fraction_gaps +% {\Umathfractionnumup \mathstyle\zeropoint +% \Umathfractionnumvgap \mathstyle\zeropoint +% %Umathfractionrule \mathstyle\zeropoint +% \Umathfractiondenomvgap\mathstyle\zeropoint +% \Umathfractiondenomdown\mathstyle\zeropoint} + +% \fi + +\installcorenamespace{mathfractiondistance} + +\letvalue{\??mathfractiondistance\v!none }\nomathfractiongaps +\letvalue{\??mathfractiondistance\v!no }\nomathfractiongaps +\letvalue{\??mathfractiondistance\v!overlay}\overlaymathfractiongaps + +\setupmathfractions + [\c!distance=\v!none] + +\appendtoks + \edef\p_distance{\rootmathfractionparameter\c!distance}% + \ifx\p_distance\empty\else + \ifcsname\??mathfractiondistance\p_distance\endcsname + \lastnamedcs + \fi + \fi +\to \everymathematics + +% theshold is new! + +\let\math_fraction_set_threshold_inline \relax +\let\math_fraction_set_threshold_display\relax + +\appendtoks + \math_fraction_set_threshold_inline + \math_fraction_set_threshold_display +\to \everymathematics + +\appendtoks + \ifx\currentmathfraction\empty + \edef\p_threshold{\mathfractionparameter\c!inlinethreshold}% + \ifx\p_threshold\empty + \let\math_fraction_set_threshold_inline\relax + \else\ifx\p_threshold\v!auto + \let\math_fraction_set_threshold_inline\relax + \else + \let\math_fraction_set_threshold_inline\math_fraction_set_theshold_inline + \fi\fi + \edef\p_threshold{\mathfractionparameter\c!displaythreshold}% + \ifx\p_threshold\empty + \let\math_fraction_set_threshold_display\relax + \else\ifx\p_threshold\v!auto + \let\math_fraction_set_threshold_display\relax + \else + \let\math_fraction_set_threshold_display\math_fraction_set_theshold_display + \fi\fi + \fi +\to \everysetupmathfraction + +\def\math_fraction_set_theshold_inline + {\edef\p_threshold{\mathfractionparameter\c!inlinethreshold}% + \Umathfractiondelsize\textstyle \p_threshold\dimexpr\textface\relax + \Umathfractiondelsize\scriptstyle \p_threshold\dimexpr\scriptface\relax + \Umathfractiondelsize\scriptscriptstyle\p_threshold\dimexpr\scriptscriptface\relax} + +\def\math_fraction_set_theshold_display + {\edef\p_threshold{\mathfractionparameter\c!displaythreshold}% + \Umathfractiondelsize\displaystyle \p_threshold\dimexpr\textface\relax} + +%D \macros +%D {dfrac, tfrac, frac, dbinom, tbinom, binom} +%D +%D \startbuffer +%D $\dfrac {1}{2} \tfrac {1}{2} \frac {1}{2}$ +%D $\dbinom{1}{2} \tbinom{1}{2} \binom{1}{2}$ +%D \stopbuffer +%D +%D \typebuffer +%D \getbuffer + +% $$ +% {{a}\over{b}} + +% {{a}\overwithdelims(){b}} + +% {{a}\atopwithdelims(){b}} + +% {{a}\abovewithdelims()\zeropoint{b}} + +% \left({{a}\over{b}}\right) +% $$ + +% \dorecurse {10} { % weird +% $$ {{a}\abovewithdelims()#1pt{b}} $$ +% } + +\definemathfraction[i:frac] [\c!alternative=\v!inner,\c!mathstyle=] % was script and then small but nothing needed +\definemathfraction[i:tfrac][\c!alternative=\v!inner,\c!mathstyle=\s!text] % was script (before luatex fix) +\definemathfraction[i:sfrac][\c!alternative=\v!inner,\c!mathstyle=\s!scriptscript] +\definemathfraction[i:dfrac][\c!alternative=\v!inner,\c!mathstyle=\s!display] + +\definemathfraction[d:frac] [\c!alternative=\v!inner,\c!mathstyle=\s!cramped] % was cramped,text +\definemathfraction[d:tfrac][\c!alternative=\v!both ,\c!mathstyle={\s!cramped,\s!text}] % was cramped,script (before luatex fix) +\definemathfraction[d:sfrac][\c!alternative=\v!both ,\c!mathstyle={\s!cramped,\s!scriptscript}] +\definemathfraction[d:dfrac][\c!alternative=\v!inner,\c!mathstyle=\s!display] + +%D \unexpanded\def\ShowMathFractions#1#2% +%D {\dontleavehmode +%D \begingroup +%D \showmathstruts +%D \mathematics{x+\tfrac{#1}{#2}+1+\frac{#1}{#2}+2+\sfrac{#1}{#2}+g}% +%D \endgroup} +%D +%D The default \type {tfrac}, \type {frac} and \type \sfrac} look like this: +%D +%D \blank +%D \ShowMathFractions{a}{a}\par +%D \ShowMathFractions{1}{x}\par +%D \ShowMathFractions{a}{b}\par +%D \ShowMathFractions{1}{b}\par +%D \blank + +\unexpanded\def\frac {\csname\inlineordisplaymath id:frac\endcsname} +\unexpanded\def\tfrac{\csname\inlineordisplaymath id:tfrac\endcsname} +\unexpanded\def\sfrac{\csname\inlineordisplaymath id:sfrac\endcsname} +\unexpanded\def\dfrac{\csname\inlineordisplaymath id:dfrac\endcsname} + +\definemathfraction[ams] [\c!strut=\v!no,\c!alternative=\v!outer] +\definemathfraction[i:ams:frac][ams][\c!mathstyle={\s!cramped,\s!text}] +\definemathfraction[d:ams:frac][ams][\c!mathstyle={\s!cramped,\s!display}] + +\unexpanded\def\ctxfrac{\csname\inlineordisplaymath id:frac\endcsname} +\unexpanded\def\amsfrac{\csname\inlineordisplaymath id:ams:frac\endcsname} + +% \appendtoks +% \doifelse{\mathfractionparameter\c!option}{ams}% +% {\let\frac\amsfrac}% +% {\let\frac\ctxfrac}% +% \to \everysetupmathfraction + +\appendtoks + \doifelse{\mathematicsparameter\c!fractions}{ams}% + {\let\frac\amsfrac}% + {\let\frac\ctxfrac}% +\to \everysetupmathematics + +% \definemathfraction[ddfrac][\c!mathstyle=\s!display] +% \definemathfraction[ttfrac][\c!mathstyle=\s!text] +% \definemathfraction[ssfrac][\c!mathstyle=\s!script] + +% \unexpanded\def\binom #1#2{{\Ustack {{#1}\normalabovewithdelims()\zeropoint{#2}}}} +% \unexpanded\def\dbinom#1#2{{\displaystyle{{#1}\normalabovewithdelims()\zeropoint{#2}}}} +% \unexpanded\def\tbinom#1#2{{\textstyle {{#1}\normalabovewithdelims()\zeropoint{#2}}}} + +\definemathfraction + [binom] + [\c!alternative=\v!outer, + \c!rule=\v!no, + \c!left=0x28, + \c!right=0x29, + \c!mathstyle=\s!auto] + +\definemathfraction + [dbinom] + [binom] + [\c!mathstyle=\s!display] + +\definemathfraction + [tbinom] + [binom] + [\c!mathstyle=\s!text] + +%D \macros +%D {cfrac} +%D +%D \startbuffer +%D $\cfrac{12}{3} \cfrac[l]{12}{3} \cfrac[c]{12}{3} \cfrac[r]{12}{3}$ +%D $\cfrac{1}{23} \cfrac[l]{1}{23} \cfrac[c]{1}{23} \cfrac[r]{1}{23}$ +%D \stopbuffer +%D +%D \typebuffer +%D +%D \getbuffer +%D +%D Now we can align every combination we want: +%D +%D \startbuffer +%D $\cfrac{12}{3} \cfrac[l]{12}{3} \cfrac[c]{12}{3} \cfrac[r]{12}{3}$ +%D $\cfrac{1}{23} \cfrac[l]{1}{23} \cfrac[c]{1}{23} \cfrac[r]{1}{23}$ +%D $\cfrac[cl]{12}{3} \cfrac[cc]{12}{3} \cfrac[cr]{12}{3}$ +%D $\cfrac[lc]{1}{23} \cfrac[cc]{1}{23} \cfrac[rc]{1}{23}$ +%D \stopbuffer +%D +%D \typebuffer +%D +%D \getbuffer + +\unexpanded\def\cfrac + {\doifelsenextoptionalcs\math_cfrac_yes\math_cfrac_nop} + +\def\math_cfrac_nop {\math_cfrac_indeed[cc]} +\def\math_cfrac_yes[#1]{\math_cfrac_indeed[#1cc]} + +\def\math_cfrac_indeed[#1#2#3]#4#5% + {{\displaystyle + \frac + {\strut + \ifx r#1\hfill\fi#4\ifx l#1\hfill\fi}% + {\ifx r#2\hfill\fi#5\ifx l#2\hfill\fi}% + \kern-\nulldelimiterspace}} + +%D \macros +%D {splitfrac, splitdfrac} +%D +%D Occasionally one needs to typeset multi||line fractions. +%D These commands use \tex{genfrac} to create such fractions. +%D +%D \startbuffer +%D \startformula +%D a=\frac{ +%D \splitfrac{xy + xy + xy + xy + xy} +%D {+ xy + xy + xy + xy} +%D } +%D {z} +%D =\frac{ +%D \splitdfrac{xy + xy + xy + xy + xy} +%D {+ xy + xy + xy + xy} +%D } +%D {z} +%D \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D These macros are based on Michael J.~Downes posting on +%D comp.text.tex on 2001/12/06 but adapted a bit. + +\unexpanded\def\splitfrac #1#2% + {{\textstyle {{\textstyle#1\quad\hfill}\normalabove\zeropoint{\textstyle\hfill\quad\mathstrut#2}}}} + +\unexpanded\def\splitdfrac#1#2% + {{\displaystyle{{ #1\quad\hfill}\normalabove\zeropoint{ \hfill\quad\mathstrut#2}}}} + +%D For testing: + +% \unexpanded\def\ShowMathFractions#1#2% +% {\mathematics{x+\tfrac{#1}{#2}+1+\frac{#1}{#2}+2+\sfrac{#1}{#2}+g}} + +%D More fracking (for Alan): + +\unexpanded\def\math_frac_colored_vulgar#1#2% + {\savecolor + \colo_helpers_activate\p_math_fractions_color + {\restorecolor#1}\Uskewed/{\restorecolor#2}} + +\unexpanded\def\math_frac_normal_vulgar#1#2% + {{#1}\Uskewed/{#2}} + +\unexpanded\def\vfrac#1#2% + {\bgroup + \edef\p_math_fractions_color{\namedmathfractionparameter\s!vfrac\c!color}% + \ifx\p_math_fractions_color\empty + \expandafter\math_frac_normal_vulgar + \else + \expandafter\math_frac_colored_vulgar + \fi + {#1}% + {#2}% + \egroup} + +\appendtoks + \edef\p_hfactor{\namedmathfractionparameter\s!vfrac\c!hfactor}% + \edef\p_vfactor{\namedmathfractionparameter\s!vfrac\c!vfactor}% + \Umathskewedfractionhgap\textstyle \p_hfactor\fontemwidth \mathstylefont\textstyle + \Umathskewedfractionhgap\scriptstyle \p_hfactor\fontemwidth \mathstylefont\scriptstyle + \Umathskewedfractionhgap\scriptscriptstyle\p_hfactor\fontemwidth \mathstylefont\scriptscriptstyle + \Umathskewedfractionvgap\textstyle \p_vfactor\fontexheight\mathstylefont\textstyle + \Umathskewedfractionvgap\scriptstyle \p_vfactor\fontexheight\mathstylefont\scriptstyle + \Umathskewedfractionvgap\scriptscriptstyle\p_vfactor\fontexheight\mathstylefont\scriptscriptstyle +\to \everysetupmathfraction + +\setupmathfraction + [\s!vfrac] + [\c!hfactor=.2, + \c!vfactor=.1] + +\protect \endinput + +% I have no clue what \mthfrac and \mthsqrt are supposed to do but +% I guess that it can be done with tweaking luatex's math parameters. +% Otherwise I'll write something from scratch. + +% \def\math_stylebuilders_frac#1#2#3#4#5#6#7% +% {\begingroup +% \mathsurround\zeropoint +% \setbox0\hbox{$#1 #6$}% +% \setbox2\hbox{$#1 #7$}% +% \dimen0\wd\ifdim\wd2>\wd0 2\else 0\fi +% \setbox4\hbox to \dimen0{\leaders\hbox{#4}\hss#5}% +% \mathord{\vcenter{{\offinterlineskip +% \hbox to \dimen0{\hss\box0\hss}% +% \kern\ht4% +% \hbox to \dimen0{\hss\copy4\hss}% +% \kern\ht4% +% \hbox to \dimen0{\hss\box2\hss}}}}% +% \endgroup} +% +% \def\math_stylebuilders_sqrt#1#2#3#4#5% +% {\begingroup +% \mathsurround\zeropoint +% \setbox0\hbox{$#1 #5$}% +% \ht0\dimexpr1.05\ht0+\onepoint\relax +% \dp0\dimexpr1.05\dp0+\onepoint\relax +% \setbox4\hbox to \wd0{\mr#2\leaders\hbox{#3}\hfill#4}% +% \delimitershortfall\zeropoint +% \nulldelimiterspace\zeropoint +% \setbox2\hbox{$\left\delimiter"0270370 \vrule \s!height\ht0 \s!depth \dp0 \s!width\zeropoint\right.$}% is this the right code point? +% \mathord{\vcenter{\hbox{\copy2\rlap{\raise\dimexpr\ht2-\ht4\relax\copy4}\copy0}}}% +% \endgroup} +% +% \def\mthfrac#1#2#3#4#5{\mathchoice +% {\math_stylebuilders_frac\displaystyle \textface {#1}{#2}{#3}{#4}{#5}}% +% {\math_stylebuilders_frac\textstyle \textface {#1}{#2}{#3}{#4}{#5}}% +% {\math_stylebuilders_frac\scriptstyle \scriptface {#1}{#2}{#3}{#4}{#5}}% +% {\math_stylebuilders_frac\scriptscriptstyle\scriptscriptface{#1}{#2}{#3}{#4}{#5}}} +% +% \def\mthsqrt#1#2#3{\mathchoice +% {\math_stylebuilders_sqrt\displaystyle \textface{#1}{#2}{#3}}% +% {\math_stylebuilders_sqrt\textstyle \textface{#1}{#2}{#3}}% +% {\math_stylebuilders_sqrt\scriptstyle \textface{#1}{#2}{#3}}% +% {\math_stylebuilders_sqrt\scriptscriptstyle\textface{#1}{#2}{#3}}} + +% \unexpanded\def\mthfrac#1#2#3{[mthfrac: #1 #2 #3]} +% \unexpanded\def\mthsqrt#1#2#3{[mthsqrt: #1 #2 #3]} + +% used for prototyping \Uskewed +% +% \unexpanded\def\skewedfractiona#1#2{% +% \raise +% \Umathskewedfractionvgap\textstyle +% \hbox\bgroup +% $\scriptstyle#1\hskip\dimexpr\Umathskewedfractionhgap\scriptstyle/2\relax$% +% \egroup +% \hbox to \zeropoint\bgroup +% \hss$\textstyle/$\hss +% \egroup +% \lower +% \Umathskewedfractionvgap\textstyle +% \hbox\bgroup +% $\hskip\dimexpr\Umathskewedfractionhgap\scriptstyle/2\relax\scriptstyle#2$% +% \egroup +% } +% +% \unexpanded\def\skewedfractionb#1#2{% +% \raise +% \Umathskewedfractionvgap\textstyle +% \hbox\bgroup +% $\scriptstyle#1\hskip\dimexpr\Umathskewedfractionhgap\textstyle/2\relax$% +% \egroup +% \hbox to \zeropoint\bgroup +% \hss$\textstyle/$\hss +% \egroup +% \lower +% \Umathskewedfractionvgap\textstyle +% \hbox\bgroup +% $\hskip\dimexpr\Umathskewedfractionhgap\textstyle/2\relax\scriptstyle#2$% +% \egroup +% } +% +% $\skewedfractiona{1}{2}$ +% $\skewedfractionb{1}{2}$ diff --git a/tex/context/base/mkiv/math-ini.lua b/tex/context/base/mkiv/math-ini.lua index 0af9a2121..4f7e803d0 100644 --- a/tex/context/base/mkiv/math-ini.lua +++ b/tex/context/base/mkiv/math-ini.lua @@ -243,6 +243,8 @@ local f_root = formatters[ [[\ugdef\%s{\Uroot "%X "%X }]] ] ----- f_char = formatters[ [[\ugdef\%s{\Umathchar "%X "%X "%X }]] local f_char = formatters[ [[\Umathchardef\%s "%X "%X "%X ]] ] +local texmathchardef = tex.mathchardef + local setmathsymbol = function(name,class,family,slot) -- hex is nicer for tracing if class == classes.accent then ctx_sprint(f_accent(name,family,slot)) @@ -264,6 +266,8 @@ local setmathsymbol = function(name,class,family,slot) -- hex is nicer for traci ctx_sprint(f_radical(name,family,slot)) elseif class == classes.root then ctx_sprint(f_root(name,family,slot)) + elseif texmathchardef then + texmathchardef(name,class,family,slot,"permanent") else -- beware, open/close and other specials should not end up here ctx_sprint(f_char(name,class,family,slot)) diff --git a/tex/context/base/mkiv/math-ini.mkxl b/tex/context/base/mkiv/math-ini.mkxl index 427d79d45..6e6018896 100644 --- a/tex/context/base/mkiv/math-ini.mkxl +++ b/tex/context/base/mkiv/math-ini.mkxl @@ -32,7 +32,7 @@ % % plus two new math styles: larger/smaller % -% \unexpanded\def\Umathshow#1% +% \protected\def\Umathshow#1% % {\hbox{\infofont(\string#1:\the#1\textstyle,\the#1\scriptstyle,\the#1\scriptscriptstyle)}} %D This module provides namespaces for math fonts, thereby permitting mixed usage of @@ -72,8 +72,8 @@ \registerctxluafile{math-ttv}{} \registerctxluafile{math-map}{optimize} \registerctxluafile{math-ren}{} -\registerctxluafile{math-noa}{optimize} -\registerctxluafile{math-tag}{} +\registerctxluafile{math-noa}{autosuffix,optimize} +\registerctxluafile{math-tag}{autosuffix} \registerctxluafile{math-fbk}{} \registerctxluafile{math-dir}{} \registerctxluafile{math-spa}{} @@ -100,7 +100,7 @@ \def\Umathbotaccent{\Umathaccent \s!bottom } \def\Umathtopaccent{\Umathaccent \s!top } -\def\Umathaccents {\Umathaccent \s!both } +\def\Umathaccents {\Umathaccent \s!both } % strange highlighting \ifdefined\Umathcharclass \else \def\Umathcharclass{\numexpr\cldcontext{tex.getmathcode(token.scan_int())[1]}\relax} @@ -142,9 +142,9 @@ \c_attr_displaymath\plusone \to \everybeforedisplayformula -\setnewconstant\defaultmathfamily \zerocount % 255 +\defaultmathfamily \zerocount % 255 -\unexpanded\def\resetmathattributes{\clf_resetmathattributes} +\permanent\protected\def\resetmathattributes{\clf_resetmathattributes} % handy @@ -158,25 +158,25 @@ \settrue\indisplaymath \to \everydisplay -\def\inlineordisplaymath{\ifconditional\indisplaymath\expandafter\secondoftwoarguments\else\expandafter\firstoftwoarguments\fi} +\permanent\def\inlineordisplaymath{\ifconditional\indisplaymath\expandafter\secondoftwoarguments\else\expandafter\firstoftwoarguments\fi} -\unexpanded\def\forcedisplaymath +\permanent\protected\def\forcedisplaymath {\ifmmode \displaystyle \settrue\indisplaymath \fi} -\unexpanded\def\startforceddisplaymath +\permanent\protected\def\startforceddisplaymath {\startimath \displaystyle \begingroup \settrue\indisplaymath} -\unexpanded\def\stopforceddisplaymath +\permanent\protected\def\stopforceddisplaymath {\endgroup \stopimath} -\unexpanded\def\startpickupmath % for the moment private +\permanent\protected\def\startpickupmath % for the moment private {\ifconditional\indisplaymath \startforceddisplaymath \let\stoppickupmath\stopforceddisplaymath @@ -187,7 +187,7 @@ \let\stoppickupmath\relax -% \unexpanded\def\rawmathcharacter#1% slow but only for tracing +% \protected\def\rawmathcharacter#1% slow but only for tracing % {\begingroup % \ifmmode % \resetmathattributes\Uchar#1% @@ -196,7 +196,7 @@ % \fi % \endgroup} -\unexpanded\def\rawmathematics#1% slow but only for tracing +\permanent\protected\def\rawmathematics#1% slow but only for tracing {\begingroup \ifmmode \clf_resetmathattributes#1% @@ -221,22 +221,22 @@ \installswitchcommandhandler \??mathematics {mathematics} \??mathematics -\unexpanded\def\startmathematics % no grouping, if ever then also an optional second +\permanent\protected\def\startmathematics % no grouping, if ever then also an optional second {\doifelsenextoptionalcs\math_mathematics_start_yes\math_mathematics_start_nop} \installmacrostack\currentmathematics -\unexpanded\def\math_mathematics_start_yes[#1]% +\protected\def\math_mathematics_start_yes[#1]% {\push_macro_currentmathematics \edef\currentmathematics{#1}% check for valid \the\everyswitchmathematics} -\unexpanded\def\math_mathematics_start_nop +\protected\def\math_mathematics_start_nop {\push_macro_currentmathematics \let\currentmathematics\empty \the\everyswitchmathematics} -\unexpanded\def\stopmathematics +\permanent\protected\def\stopmathematics {\pop_macro_currentmathematics \the\everyswitchmathematics} @@ -244,7 +244,7 @@ % Now we redefine \type {\mathematics} and \type {\m}: -\unexpanded\def\mathematics +\permanent\protected\def\mathematics {\doifelsenextoptionalcs\math_m_yes\math_m_nop} \def\math_m_yes @@ -258,18 +258,6 @@ \def\math_m_yes_math[#1]#2% {#2} -% \def\math_m_yes_text[#1]% -% {\begingroup -% \doifassignmentelse{#1}% -% {\setupcurrentmathematics[#1]}% -% {\edef\currentmathematics{#1}}% check for valid -% \edef\p_openup{\mathematicsparameter\c!openup}% -% \ifx\p_openup\v!yes -% \expandafter\math_m_yes_text_openedup -% \else -% \expandafter\math_m_yes_text_normal -% \fi} - \def\math_m_yes_text[#1]% {\begingroup \ifcondition\validassignment{#1}% @@ -418,21 +406,21 @@ % todo: only in mmode % these commands are semi-public but should not be used directly (lua names wil change) -\unexpanded\def\math_set_attribute #1#2{\ifmmode\clf_setmathattribute{#1}{#2}\fi} -\unexpanded\def\math_set_alphabet #1{\ifmmode\clf_setmathalphabet{#1}\fi} -\unexpanded\def\math_set_font_style #1{\ifmmode\clf_setmathstyle{#1}\fi} -\unexpanded\def\math_set_font_alternate#1{\ifmmode\clf_setmathalternate\defaultmathfamily{#1}\fi} +\protected\def\math_set_attribute #1#2{\ifmmode\clf_setmathattribute{#1}{#2}\fi} +\protected\def\math_set_alphabet #1{\ifmmode\clf_setmathalphabet{#1}\fi} +\protected\def\math_set_font_style #1{\ifmmode\clf_setmathstyle{#1}\fi} +\protected\def\math_set_font_alternate#1{\ifmmode\clf_setmathalternate\defaultmathfamily{#1}\fi} \installcorenamespace{mathstylealternative} % might become a setuphandler -\unexpanded\def\math_set_font_style_alternate#1% +\protected\def\math_set_font_style_alternate#1% {\ifcsname\??mathstylealternative\fontclass:#1\endcsname \expandafter\math_set_font_alternate\lastnamedcs \orelse\ifcsname\??mathstylealternative#1\endcsname \expandafter\math_set_font_alternate\lastnamedcs \fi} -\unexpanded\def\setupmathrendering % the name might change +\protected\def\setupmathrendering % the name might change {\dodoubleargument\math_setup_rendering} \def\math_setup_rendering[#1][#2]% @@ -462,24 +450,31 @@ % \setupmathematics[stylealternative={reset,calligraphic,italic}]$x+\mathcal A$ % \stopTEXpage -\unexpanded\def\mathaltcalligraphic{\math_set_font_alternate{calligraphic}\cal} % set via goody file -\unexpanded\def\mathaltitalic {\math_set_font_alternate{italic}} % set via goody file -\unexpanded\def\mathslashedzero {\begingroup\math_set_font_alternate{zero}∅\endgroup} % set via goody file or automatic -\unexpanded\def\mathdotless {\math_set_font_alternate{dotless}} % set via goody file or automatic -\unexpanded\def\mathdotlessi {\begingroup\mathdotless i\endgroup} -\unexpanded\def\mathdotlessj {\begingroup\mathdotless j\endgroup} +% no longer needed now we have enforce so the next few lines will go + +\pushoverloadmode + \enforced\let\dotlessi\dotlessi + \enforced\let\dotlessj\dotlessj +\popoverloadmode + +\permanent\protected\def\mathaltcalligraphic{\math_set_font_alternate{calligraphic}\cal} % set via goody file +\permanent\protected\def\mathaltitalic {\math_set_font_alternate{italic}} % set via goody file +\permanent\protected\def\mathslashedzero {\begingroup\math_set_font_alternate{zero}∅\endgroup} % set via goody file or automatic +\permanent\protected\def\mathdotless {\math_set_font_alternate{dotless}} % set via goody file or automatic +\permanent\protected\def\mathdotlessi {\begingroup\mathdotless i\endgroup} +\permanent\protected\def\mathdotlessj {\begingroup\mathdotless j\endgroup} -\let\mathaltcal\mathaltcalligraphic -\let\mathaltit \mathaltitalic +\aliased\let\mathaltcal\mathaltcalligraphic +\aliased\let\mathaltit \mathaltitalic -%let\textslashedzero\slashedzero \unexpanded\def\autoslashedzero{\mathortext\mathslashedzero\textslashedzero} -\let\textdotlessi \dotlessi \unexpanded\def\autodotlessi {\mathortext\mathdotlessi \textdotlessi} -\let\textdotlessj \dotlessj \unexpanded\def\autodotlessj {\mathortext\mathdotlessj \textdotlessj} +%aliased\let\textslashedzero\slashedzero \permanent\protected\def\autoslashedzero{\mathortext\mathslashedzero\textslashedzero} +\aliased\let\textdotlessi \dotlessi \permanent\protected\def\autodotlessi {\mathortext\mathdotlessi \textdotlessi} +\aliased\let\textdotlessj \dotlessj \permanent\protected\def\autodotlessj {\mathortext\mathdotlessj \textdotlessj} \appendtoks - %let\slashedzero\autoslashedzero - \let\dotlessi \autodotlessi - \let\dotlessj \autodotlessj + %enforced\let\slashedzero\autoslashedzero + \enforced\let\dotlessi\autodotlessi + \enforced\let\dotlessj\autodotlessj \to \everymathematics \let\setmathattribute \math_set_attribute @@ -492,72 +487,72 @@ \let\mathalternate \math_set_font_alternate -\unexpanded\def\mathupright {\math_set_attribute\s!regular\s!tf\math_set_font_style_alternate\s!tf} -\unexpanded\def\mathitalic {\math_set_attribute\s!regular\s!it\math_set_font_style_alternate\s!it} -\unexpanded\def\mathscript {\math_set_alphabet \s!script \math_set_font_style_alternate\s!script} -\unexpanded\def\mathfraktur {\math_set_alphabet \s!fraktur \math_set_font_style_alternate\s!fraktur} -\unexpanded\def\mathblackboard{\math_set_alphabet \s!blackboard \math_set_font_style_alternate\s!blackboard} +\permanent\protected\def\mathupright {\math_set_attribute\s!regular\s!tf\math_set_font_style_alternate\s!tf} +\permanent\protected\def\mathitalic {\math_set_attribute\s!regular\s!it\math_set_font_style_alternate\s!it} +\permanent\protected\def\mathscript {\math_set_alphabet \s!script \math_set_font_style_alternate\s!script} +\permanent\protected\def\mathfraktur {\math_set_alphabet \s!fraktur \math_set_font_style_alternate\s!fraktur} +\permanent\protected\def\mathblackboard{\math_set_alphabet \s!blackboard \math_set_font_style_alternate\s!blackboard} -\unexpanded\def\mathrm {\math_set_attribute\s!rm\s!tf \math_set_font_style_alternate\s!tf} -\unexpanded\def\mathss {\math_set_attribute\s!ss\s!tf \math_set_font_style_alternate\s!tf} -\unexpanded\def\mathtt {\math_set_attribute\s!tt\s!tf \math_set_font_style_alternate\s!tf} +\permanent\protected\def\mathrm {\math_set_attribute\s!rm\s!tf \math_set_font_style_alternate\s!tf} +\permanent\protected\def\mathss {\math_set_attribute\s!ss\s!tf \math_set_font_style_alternate\s!tf} +\permanent\protected\def\mathtt {\math_set_attribute\s!tt\s!tf \math_set_font_style_alternate\s!tf} -\unexpanded\def\mathtf {\math_set_font_style\s!tf \math_set_font_style_alternate\s!tf} -\unexpanded\def\mathsl {\math_set_font_style\s!it \math_set_font_style_alternate\s!it} % no sl -\unexpanded\def\mathit {\math_set_font_style\s!it \math_set_font_style_alternate\s!it} +\permanent\protected\def\mathtf {\math_set_font_style\s!tf \math_set_font_style_alternate\s!tf} +\permanent\protected\def\mathsl {\math_set_font_style\s!it \math_set_font_style_alternate\s!it} % no sl +\permanent\protected\def\mathit {\math_set_font_style\s!it \math_set_font_style_alternate\s!it} -\unexpanded\def\mathbf {\math_set_font_style\s!bf \math_set_font_style_alternate\s!bf} -\unexpanded\def\mathbs {\math_set_font_style\s!bi \math_set_font_style_alternate\s!bi} % no sl -\unexpanded\def\mathbi {\math_set_font_style\s!bi \math_set_font_style_alternate\s!bi} +\permanent\protected\def\mathbf {\math_set_font_style\s!bf \math_set_font_style_alternate\s!bf} +\permanent\protected\def\mathbs {\math_set_font_style\s!bi \math_set_font_style_alternate\s!bi} % no sl +\permanent\protected\def\mathbi {\math_set_font_style\s!bi \math_set_font_style_alternate\s!bi} \let\mathdefault\mathitalic \appendtoks \edef\p_default{\mathematicsparameter\c!default}% \ifx\p_default\v!normal - \let\mathdefault\mathupright + \enforced\let\mathdefault\mathupright \else - \let\mathdefault\mathitalic + \enforced\let\mathdefault\mathitalic \fi \to \everysetupmathematics \setupmathematics [\c!default=\v!italic] -\let\tfmath\mathtf % maybe a grouped command -\let\slmath\mathsl -\let\itmath\mathit +\aliased\let\tfmath\mathtf % maybe a grouped command +\aliased\let\slmath\mathsl +\aliased\let\itmath\mathit -\let\bfmath\mathbf -\let\bsmath\mathbs -\let\bimath\mathbi +\aliased\let\bfmath\mathbf +\aliased\let\bsmath\mathbs +\aliased\let\bimath\mathbi -\let\Bbb\mathblackboard +\aliased\let\Bbb\mathblackboard -\unexpanded\def\frak {\ifmmode\expandafter\mathfraktur \fi} -\unexpanded\def\cal {\ifmmode\expandafter\mathscript \fi} -\unexpanded\def\bbd {\ifmmode\expandafter\mathblackboard\fi} -\unexpanded\def\blackboard{\ifmmode\expandafter\mathblackboard\fi} -\unexpanded\def\fraktur {\ifmmode\expandafter\mathfraktur \fi} -\unexpanded\def\gothic {\ifmmode\expandafter\mathfraktur \fi} +\permanent\protected\def\frak {\ifmmode\expandafter\mathfraktur \fi} +\permanent\protected\def\cal {\ifmmode\expandafter\mathscript \fi} +\permanent\protected\def\bbd {\ifmmode\expandafter\mathblackboard\fi} +\permanent\protected\def\blackboard{\ifmmode\expandafter\mathblackboard\fi} +\permanent\protected\def\fraktur {\ifmmode\expandafter\mathfraktur \fi} +\permanent\protected\def\gothic {\ifmmode\expandafter\mathfraktur \fi} -\unexpanded\def\mathcal #1{{\mathscript #1}} % for AMS compatibility -\unexpanded\def\mathfrak#1{{\mathfraktur #1}} % for AMS compatibility -\unexpanded\def\mathbb #1{{\mathblackboard#1}} % for AMS compatibility +\permanent\protected\def\mathcal #1{{\mathscript #1}} % for AMS compatibility +\permanent\protected\def\mathfrak#1{{\mathfraktur #1}} % for AMS compatibility +\permanent\protected\def\mathbb #1{{\mathblackboard#1}} % for AMS compatibility -\ifdefined\normaltf\else\let\normaltf\tf\fi \unexpanded\def\tf{\ifmmode\mathtf\else\normaltf\fi} -\ifdefined\normalbf\else\let\normalbf\bf\fi \unexpanded\def\bf{\ifmmode\mathbf\else\normalbf\fi} -\ifdefined\normalit\else\let\normalit\it\fi \unexpanded\def\it{\ifmmode\mathit\else\normalit\fi} -\ifdefined\normalsl\else\let\normalsl\sl\fi \unexpanded\def\sl{\ifmmode\mathsl\else\normalsl\fi} -\ifdefined\normalbi\else\let\normalbi\bi\fi \unexpanded\def\bi{\ifmmode\mathbi\else\normalbi\fi} -\ifdefined\normalbs\else\let\normalbs\bs\fi \unexpanded\def\bs{\ifmmode\mathbs\else\normalbs\fi} +\ifdefined\normaltf \else \permanent\let\normaltf\tf \fi \permanent\protected\def\tf{\ifmmode\mathtf\else\normaltf\fi} +\ifdefined\normalbf \else \permanent\let\normalbf\bf \fi \permanent\protected\def\bf{\ifmmode\mathbf\else\normalbf\fi} +\ifdefined\normalit \else \permanent\let\normalit\it \fi \permanent\protected\def\it{\ifmmode\mathit\else\normalit\fi} +\ifdefined\normalsl \else \permanent\let\normalsl\sl \fi \permanent\protected\def\sl{\ifmmode\mathsl\else\normalsl\fi} +\ifdefined\normalbi \else \permanent\let\normalbi\bi \fi \permanent\protected\def\bi{\ifmmode\mathbi\else\normalbi\fi} +\ifdefined\normalbs \else \permanent\let\normalbs\bs \fi \permanent\protected\def\bs{\ifmmode\mathbs\else\normalbs\fi} -\unexpanded\def\rm{\ifmmode\mathrm\else\normalrm\fi} -\unexpanded\def\ss{\ifmmode\mathss\else\normalss\fi} -\unexpanded\def\tt{\ifmmode\mathtt\else\normaltt\fi} +\permanent\protected\def\rm{\ifmmode\mathrm\else\normalrm\fi} +\permanent\protected\def\ss{\ifmmode\mathss\else\normalss\fi} +\permanent\protected\def\tt{\ifmmode\mathtt\else\normaltt\fi} -\ifdefined\mr \else \let\mr\relax \fi -\ifdefined\mb \else \let\mb\relax \fi +\ifdefined\mr \else \let\mr\relax \fi % hm ... permanent +\ifdefined\mb \else \let\mb\relax \fi % hm ... permanent % 1: $\setmathattribute{ss}{bf}3$ % 2: $\setmathattribute{ss}{bf}\setmathfontstylealternate{bf}3$ @@ -608,39 +603,39 @@ \let\mathboldsymbol\relax % yet unsupported, will be -\unexpanded\def\boldsymbol +\permanent\protected\def\boldsymbol {\mathortext\mathboldsymbol\bold} %D Helpers -\def\utfmathclass #1{\clf_utfmathclass {#1}} -\def\utfmathstretch#1{\clf_utfmathstretch{#1}} -\def\utfmathcommand#1{\clf_utfmathcommand{#1}} -\def\utfmathfiller #1{\clf_utfmathfiller {#1}} +\permanent\def\utfmathclass #1{\clf_utfmathclass {#1}} +\permanent\def\utfmathstretch#1{\clf_utfmathstretch{#1}} +\permanent\def\utfmathcommand#1{\clf_utfmathcommand{#1}} +\permanent\def\utfmathfiller #1{\clf_utfmathfiller {#1}} -\def\utfmathcommandabove #1{\clf_utfmathcommandabove {#1}} -\def\utfmathcommandbelow #1{\clf_utfmathcommandbelow {#1}} -\def\utfmathcommandfiller#1{\clf_utfmathcommandfiller{#1}} +\permanent\def\utfmathcommandabove #1{\clf_utfmathcommandabove {#1}} +\permanent\def\utfmathcommandbelow #1{\clf_utfmathcommandbelow {#1}} +\permanent\def\utfmathcommandfiller#1{\clf_utfmathcommandfiller{#1}} -\unexpanded\def\doifelseutfmathaccent#1{\clf_doifelseutfmathaccent{#1}} -\unexpanded\def\doifelseutfmathabove #1{\clf_doifelseutfmathabove {#1}} -\unexpanded\def\doifelseutfmathbelow #1{\clf_doifelseutfmathbelow {#1}} -\unexpanded\def\doifelseutfmathfiller#1{\clf_doifelseutfmathfiller{#1}} -\unexpanded\def\doifelseutfmathlimop #1{\clf_doifelseutfmathlimop {#1}} +\permanent\protected\def\doifelseutfmathaccent#1{\clf_doifelseutfmathaccent{#1}} +\permanent\protected\def\doifelseutfmathabove #1{\clf_doifelseutfmathabove {#1}} +\permanent\protected\def\doifelseutfmathbelow #1{\clf_doifelseutfmathbelow {#1}} +\permanent\protected\def\doifelseutfmathfiller#1{\clf_doifelseutfmathfiller{#1}} +\permanent\protected\def\doifelseutfmathlimop #1{\clf_doifelseutfmathlimop {#1}} -\let\doifutfmathaccentelse \doifelseutfmathaccent -\let\doifutfmathaboveelse \doifelseutfmathabove -\let\doifutfmathbelowelse \doifelseutfmathbelow -\let\doifutfmathfillerelse \doifelseutfmathfiller -\let\doifutfmathlimopelse \doifelseutfmathlimop +\aliased\let\doifutfmathaccentelse \doifelseutfmathaccent +\aliased\let\doifutfmathaboveelse \doifelseutfmathabove +\aliased\let\doifutfmathbelowelse \doifelseutfmathbelow +\aliased\let\doifutfmathfillerelse \doifelseutfmathfiller +\aliased\let\doifutfmathlimopelse \doifelseutfmathlimop %D Not used that much: \installcorenamespace{mathcodecommand} -\unexpanded\def\mathlimop#1{\mathop{#1}} %no \limits -\unexpanded\def\mathbox #1{\dontleavehmode\hbox\Ustartmath\mathsurround\zeropoint#1\Ustopmath} -\unexpanded\def\mathnolop#1{\mathop{#1}\nolimits} +\permanent\protected\def\mathlimop#1{\mathop{#1}} %no \limits +\permanent\protected\def\mathbox #1{\dontleavehmode\hbox\Ustartmath\mathsurround\zeropoint#1\Ustopmath} +\permanent\protected\def\mathnolop#1{\mathop{#1}\nolimits} \let\mathnothing\firstofoneunexpanded \let\mathalpha \firstofoneunexpanded @@ -663,9 +658,9 @@ \setnewconstant\mathaccentcode \pluseight \setnewconstant\mathradicalcode \plusnine - \def\mathcodenumber #1{\the\csname math#1code\endcsname} -\unexpanded\def\mathcodecommand#1{\csname\??mathcodecommand#1\endcsname} - \def\mathcodechecked#1{\ifcsname math#1code\endcsname\lastnamedcs\else#1\fi} +\permanent \def\mathcodenumber #1{\the\csname math#1code\endcsname} +\permanent\protected\def\mathcodecommand#1{\csname\??mathcodecommand#1\endcsname} +\permanent \def\mathcodechecked#1{\ifcsname math#1code\endcsname\lastnamedcs\else#1\fi} % \startlines % $\mathopnolimits{\rm d}x$ @@ -681,11 +676,10 @@ \installcorenamespace{mathcommand} -\unexpanded\def\definemathcommand - {\dotripleempty\math_define_command} +% todo: define these commands as frozen! -\def\math_define_command[#1][#2][#3]#4% command class args meaning - {\ifthirdargument +\permanent\tolerant\protected\def\definemathcommand[#1]#*[#2]#*[#3]#:#*#4% command class args meaning + {\ifparameter#3\or \edef\nofmathcommandarguments{#3}% \ifx\nofmathcommandarguments\v!one \setuvalue{\??mathcommand#1}##1{\mathcodecommand{#2}{#4{##1}}}% @@ -694,14 +688,16 @@ \else \setuvalue{\??mathcommand#1}{\mathcodecommand{#2}{#4}}% \fi - \orelse\ifsecondargument + \orelse\ifparameter#2\or \setuvalue{\??mathcommand#1}{\mathcodecommand{#2}{#4}}% \else \setuvalue{\??mathcommand#1}{\mathcodecommand{nothing}{#4}}% \fi - \letcsnamecsname\csname#1\endcsname\csname\??mathcommand#1\endcsname} + \ifparameter#1\or % safeguard + \letcsnamecsname\csname#1\endcsname\csname\??mathcommand#1\endcsname + \fi} -\unexpanded\def\mathcommand#1% +\permanent\protected\def\mathcommand#1% {\begincsname\??mathcommand#1\endcsname} %D Let's define a few comands here: @@ -712,17 +708,17 @@ \chardef\c_math_strut"28 -\unexpanded\def\math_strut_htdp#1% +\protected\def\math_strut_htdp#1% {\s!height\fontcharht#1\c_math_strut \s!depth \fontchardp#1\c_math_strut} -\unexpanded\def\math_strut_normal +\protected\def\math_strut_normal {\vrule \s!width \zeropoint \normalexpanded{\math_strut_htdp{\mathstylefont\normalmathstyle}}% \relax} -\unexpanded\def\math_strut_visual +\protected\def\math_strut_visual {\hskip-.01\emwidth \vrule \s!width .02\emwidth @@ -730,19 +726,23 @@ \relax \hskip-.01\emwidth} -\unexpanded\def\showmathstruts % let's not overload \math_strut_normal - {\let\math_strut\math_strut_visual} +\protected\def\showmathstruts % let's not overload \math_strut_normal + {\enforced\let\math_strut\math_strut_visual} \let\math_strut\math_strut_normal -% \unexpanded\def\mathstrut{\mathcodecommand{nothing}{\math_strut}} +% \protected\def\mathstrut{\mathcodecommand{nothing}{\math_strut}} + +\pushoverloadmode + + \definemathcommand [mathstrut] {\math_strut} -\definemathcommand [mathstrut] {\math_strut} +\popoverloadmode %D We could have a arg variant \unknown\ but not now. -\unexpanded\def\mathopwithlimits#1#2{\mathop{#1{#2}}\limits} -\unexpanded\def\stackrel #1#2{\mathrel{\mathop{#2}\limits^{#1}}} +\permanent\protected\def\mathopwithlimits#1#2{\mathop{#1{#2}}\limits} +\permanent\protected\def\stackrel #1#2{\mathrel{\mathop{#2}\limits^{#1}}} %D Moved from font-ini.mkiv: %D @@ -751,14 +751,13 @@ %D %D Todo: -\unexpanded\def\mf - {\begincsname\fontalternative\endcsname} +\protected\def\mf{\begincsname\fontalternative\endcsname} % todo: \frozen % \let\normalmathop\mathop % already defined % no longer needed as we no longer switch fonts % -% \unexpanded\def\mathop +% \protected\def\mathop % {\normalmathop % \bgroup % % no: \let\rm\mf @@ -768,7 +767,7 @@ % this one too: \letvalue{\??mathcodecommand op}\mathop ? -\unexpanded\def\normalmbox +\permanent\protected\def\normalmbox {\normalhbox\bgroup \usemathematicsstyleandcolor\c!textstyle\c!textcolor % new \dowithnextboxcs\math_mbox_finish\normalhbox} @@ -777,16 +776,16 @@ {\flushnextbox \egroup} -\unexpanded\def\mbox % we cannot add \dontleavehmode ... else no \setbox0\mbox possible +\permanent\protected\def\mbox % we cannot add \dontleavehmode ... else no \setbox0\mbox possible {\ifmmode\normalmbox\else\normalhbox\fi} -\unexpanded\def\enablembox +\permanent\protected\def\enablembox {\toksapp\everymathematics{\math_enable_mbox}} -\def\math_enable_mbox - {\let\hbox\mbox} +\permanent\def\math_enable_mbox % brrrr + {\enforced\let\hbox\mbox} -\unexpanded\def\snappedmath#1% sort of \struttedbox +\permanent\protected\def\snappedmath#1% sort of \struttedbox {\dontleavehmode \begingroup \setbox\scratchbox\normalhbox\bgroup @@ -797,7 +796,7 @@ \box\scratchbox \endgroup} -\unexpanded\def\mtext#1% +\permanent\protected\def\mtext#1% {\text{\usemathematicsstyleandcolor\c!textstyle\c!textcolor#1}} %D The next hack is needed needed for sine, cosine etc. @@ -810,8 +809,8 @@ \let\math_tags_mo\firstofoneunexpanded \let\math_tags_mi\firstofoneunexpanded -\unexpanded\def\math_tags_mn#1{\begingroup\mathupright\math_set_o_both#1\endgroup} -\unexpanded\def\math_tags_ms#1{\begingroup\mathupright\math_set_p_both#1\endgroup} +\protected\def\math_tags_mn#1{\begingroup\mathupright\math_set_o_both#1\endgroup} +\protected\def\math_tags_ms#1{\begingroup\mathupright\math_set_p_both#1\endgroup} % Once this is stable we can store the number at the tex end which is % faster. Functions getnumbers >= 1000. @@ -824,7 +823,7 @@ \c!functionstyle=, % rm ss etc i.e. known alternatives, otherwise math \c!functioncolor=] -\unexpanded\def\math_mfunction_styled +\protected\def\math_mfunction_styled {\begingroup \usemathematicscolorparameter\c!functioncolor \edef\p_functionstyle{\mathematicsparameter\c!functionstyle}% @@ -836,28 +835,28 @@ \doubleexpandafter\math_mfunction_styled_math \fi} -\unexpanded\def\math_mfunction_styled_text#1% +\protected\def\math_mfunction_styled_text#1% %{\mathoptext{\csname\??alternativestyle\p_functionstyle\endcsname#1}% {\expandafter\mathoptext\expandafter{\lastnamedcs#1}% \endgroup} -\unexpanded\def\math_mfunction_styled_math#1% +\protected\def\math_mfunction_styled_math#1% {\p_functionstyle #1% \endgroup} -\unexpanded\def\math_mfunction_styled_none#1% +\protected\def\math_mfunction_styled_none#1% {\mathupright #1% \endgroup} -\unexpanded\def\mfunction#1% +\permanent\protected\def\mfunction#1% {\begingroup \math_tags_mfunctiontxt{#1}\c_apply_function \math_mfunction_styled{#1}% \endgroup} -\unexpanded\def\mfunctionlabeltext#1% +\permanent\protected\def\mfunctionlabeltext#1% {\begingroup \math_tags_mfunctionlab{#1}\c_apply_function \math_mfunction_styled{\mathlabeltext{#1}}% @@ -866,14 +865,14 @@ \let\math_tags_mfunctiontxt\gobbletwoarguments \let\math_tags_mfunctionlab\gobbletwoarguments -\unexpanded\def\math_tags_mo_indeed#1{\begingroup \c_attr_mathcategory\plusone #1\endgroup} -\unexpanded\def\math_tags_mi_indeed#1{\begingroup \c_attr_mathcategory\plustwo #1\endgroup} -\unexpanded\def\math_tags_mn_indeed#1{\begingroup\mathupright\c_attr_mathcategory\plusthree\math_set_o_both#1\endgroup} -\unexpanded\def\math_tags_ms_indeed#1{\begingroup\mathupright\c_attr_mathcategory\plusfour \math_set_p_both#1\endgroup} % todo: mathoptext +\permanent\protected\def\math_tags_mo_indeed#1{\begingroup \c_attr_mathcategory\plusone #1\endgroup} +\permanent\protected\def\math_tags_mi_indeed#1{\begingroup \c_attr_mathcategory\plustwo #1\endgroup} +\permanent\protected\def\math_tags_mn_indeed#1{\begingroup\mathupright\c_attr_mathcategory\plusthree\math_set_o_both#1\endgroup} +\permanent\protected\def\math_tags_ms_indeed#1{\begingroup\mathupright\c_attr_mathcategory\plusfour \math_set_p_both#1\endgroup} % todo: mathoptext \newconditional\c_apply_function -\unexpanded\def\math_tags_apply#1#2% +\permanent\protected\def\math_tags_apply#1#2% {\begingroup \settrue\c_apply_function #1% @@ -884,20 +883,20 @@ \endgroup} \appendtoks - \let\math_tags_mfunctiontxt\clf_tagmfunctiontxt - \let\math_tags_mfunctionlab\clf_tagmfunctionlab - \let\math_tags_mo \math_tags_mo_indeed - \let\math_tags_mi \math_tags_mi_indeed - \let\math_tags_mn \math_tags_mn_indeed - \let\math_tags_ms \math_tags_ms_indeed + \enforced\let\math_tags_mfunctiontxt\clf_tagmfunctiontxt + \enforced\let\math_tags_mfunctionlab\clf_tagmfunctionlab + \enforced\let\math_tags_mo \math_tags_mo_indeed + \enforced\let\math_tags_mi \math_tags_mi_indeed + \enforced\let\math_tags_mn \math_tags_mn_indeed + \enforced\let\math_tags_ms \math_tags_ms_indeed \to \everyenableelements \appendtoks - \let\mo \math_tags_mo - \let\mi \math_tags_mi - \let\mn \math_tags_mn - \let\ms \math_tags_ms - \let\apply\math_tags_apply + \enforced\let\mo \math_tags_mo + \enforced\let\mi \math_tags_mi + \enforced\let\mn \math_tags_mn + \enforced\let\ms \math_tags_ms + \enforced\let\apply\math_tags_apply \to\everymathematics % \def\mlimitsfunction #1{\mathlimopcomm{{\mr#1}} @@ -908,11 +907,11 @@ % % \def\currentmscaledstyle{rm} % will be plugged into the typeface text=ss option % -% \unexpanded\def\math_function_style_opnolimits #1{\mathop{\mscaledtext{#1}}\nolimits} -% \unexpanded\def\math_function_style_mfunction #1{\mscaledtext{\math_tags_function{#1}}} -% \unexpanded\def\math_function_style_mfunctionlabeltext#1{\mscaledtext{\math_tags_functionlabeltext{#1}}} +% \protected\def\math_function_style_opnolimits #1{\mathop{\mscaledtext{#1}}\nolimits} +% \protected\def\math_function_style_mfunction #1{\mscaledtext{\math_tags_function{#1}}} +% \protected\def\math_function_style_mfunctionlabeltext#1{\mscaledtext{\math_tags_functionlabeltext{#1}}} % -% \unexpanded\def\setmathfunctionstyle#1% rm ss tt (can be made faster if needed) +% \protected\def\setmathfunctionstyle#1% rm ss tt (can be made faster if needed) % {\doifsomething{#1} % {\def\currentmscaledstyle{#1}% % \let\mathopnolimits \math_function_style_opnolimits @@ -921,14 +920,14 @@ \def\currentmscaledstyle{rm} % will be plugged into the typeface text=ss option -\unexpanded\def\mscaledtext#1% +\permanent\protected\def\mscaledtext#1% {\mathchoice {\hbox{\csname\currentmscaledstyle\endcsname\tf #1}} {\hbox{\csname\currentmscaledstyle\endcsname\tf #1}} {\hbox{\csname\currentmscaledstyle\endcsname\tfx #1}} {\hbox{\csname\currentmscaledstyle\endcsname\tfxx#1}}} -\unexpanded\def\setmathfunctionstyle#1% +\permanent\protected\def\setmathfunctionstyle#1% {\setupmathematics[\c!functionstyle=#1]} % for old times sake %D Usage: @@ -965,12 +964,12 @@ \newtoks\activatedmathcharacters -\unexpanded\def\activatemathcharacter#1% +\permanent\protected\def\activatemathcharacter#1% {\appendtoks \global\mathcode#1=\activemathcharcode \to \activatedmathcharacters} -\def\activatemathcharacters +\permanent\def\activatemathcharacters {\the\activatedmathcharacters} % beware, not runtime, so has to happen at format generation @@ -1121,7 +1120,7 @@ % \let\prime\math_prime_indeed % so this is needed % \to \everydump % -% \unexpanded\def\math_prime_indeed +% \protected\def\math_prime_indeed % {\iffontchar\textfont\zerocount"FE325\relax % ^\bgroup % \expandafter\math_prime_indeed_virtual % virtual mess (using funny signal) @@ -1167,7 +1166,7 @@ % $\char26$ gives an error because it expands to an active character that % then becomes an & which is then seen as an alignment character; anyway, -% even when we switch like this the diufferen tmeaning only happens when +% even when we switch like this the different meaning only happens when % we're in math mode which can be delayed till we're in a cell \bgroup @@ -1178,19 +1177,19 @@ \glet\specialmathaligntab\normalmathaligntab - \unexpanded\gdef\obeymathcatcodes + \permanent\protected\gdef\obeymathcatcodes {\let _\normalsubscript \let ^\normalsuperscript \def &\specialmathaligntab } - \doglobal \appendtoks - \let _\normalsubscript - \let ^\normalsuperscript - \let &\specialmathaligntab - \to \everymathematics + \doglobal\appendtoks + \enforced\let _\normalsubscript + \enforced\let ^\normalsuperscript + \enforced\let &\specialmathaligntab + \to \everymathematics - % \unexpanded\gdef\normalmathampersands + % \permanent\protected\gdef\normalmathampersands % {\let\specialmathaligntab\mathampersand} \egroup @@ -1262,43 +1261,43 @@ %D Even more drastic (this code will move as nonknuthmode is default now) -% \unexpanded\def\enableasciimode +% \protected\def\enableasciimode % {\ctxlua{resolvers.macros.enablecomment()}% % \glet\enableasciimode\relax} % -% \unexpanded\def\asciimode +% \protected\def\asciimode % {\catcodetable\txtcatcodes % \enableasciimode % \nonknuthmode} % -% \unexpanded\def\startasciimode +% \protected\def\startasciimode % {\pushcatcodetable % \catcodetable\txtcatcodes % \enableasciimode % \nonknuthmode} % -% \unexpanded\def\stopasciimode +% \protected\def\stopasciimode % {\popcatcodetable % \ifconditional\knuthmode\else\donknuthmode\fi} -\unexpanded\def\enableasciimode +\permanent\protected\def\enableasciimode {\clf_enableasciimode} % relaxes itself -\unexpanded\def\asciimode +\permanent\protected\def\asciimode {\catcodetable\txtcatcodes \clf_enableasciimode} -\unexpanded\def\startasciimode +\permanent\protected\def\startasciimode {\pushcatcodetable \catcodetable\txtcatcodes \clf_enableasciimode} -\unexpanded\def\stopasciimode +\permanent\protected\def\stopasciimode {\popcatcodetable} %D Needed for unicode: -\def\nulloperator{\mathortext{\mathop{\emptyhbox}}{\emptyhbox}} +\permanent\def\nulloperator{\mathortext{\mathop{\emptyhbox}}{\emptyhbox}} %D Memory saver: @@ -1361,7 +1360,7 @@ \fi \to \everyswitchmathematics -\unexpanded\def\math_basics_synchronize_direction +\protected\def\math_basics_synchronize_direction {\mathdirection\ifconditional\c_math_right_to_left\directionrighttoleft\else\directionlefttoright\fi} % Not \everymathematics as it comes too late and I'm not in the mood for a mixed mode @@ -1444,9 +1443,9 @@ % only used local -\unexpanded\def\mathgreekupright{\c_attr_mathgreek"222\relax} -\unexpanded\def\mathgreekitalic {\c_attr_mathgreek"333\relax} -\unexpanded\def\mathgreekdefault{\c_attr_mathgreek"000\relax} +\permanent\protected\def\mathgreekupright{\c_attr_mathgreek"222\relax} +\permanent\protected\def\mathgreekitalic {\c_attr_mathgreek"333\relax} +\permanent\protected\def\mathgreekdefault{\c_attr_mathgreek"000\relax} \let\mathgreeknormal\mathgreekupright \let\mathgreeknone \mathgreekdefault @@ -1581,8 +1580,8 @@ % \newconditional\automathpunctuation % -% \unexpanded\def\enablemathpunctuation {\settrue \automathpunctuation} -% \unexpanded\def\disablemathpunctuation{\setfalse\automathpunctuation} +% \protected\def\enablemathpunctuation {\settrue \automathpunctuation} +% \protected\def\disablemathpunctuation{\setfalse\automathpunctuation} % % \appendtoks % \doifelse{\mathematicsparameter\v!autopunctuation}\v!yes\settrue\setfalse\automathpunctuation @@ -1593,8 +1592,8 @@ % % \def\math_punctuation_next{\ifx\nexttoken\blankspace\signalcharacter\fi} % -% \unexpanded\def\math_punctuation_comma {\textcomma \futurelet\nexttoken\math_punctuation_next} -% \unexpanded\def\math_punctuation_period{\textperiod\futurelet\nexttoken\math_punctuation_next} +% \protected\def\math_punctuation_comma {\textcomma \futurelet\nexttoken\math_punctuation_next} +% \protected\def\math_punctuation_period{\textperiod\futurelet\nexttoken\math_punctuation_next} % % \setnewconstant\c_math_comma "002C % \setnewconstant\c_math_period "002E @@ -1605,17 +1604,17 @@ % \catcode\c_math_comma \activecatcode % \catcode\c_math_period\activecatcode % -% \unexpanded\gdef\math_punctuation_initialize_indeed +% \protected\gdef\math_punctuation_initialize_indeed % {\mathcode\c_math_comma \c_math_special % \mathcode\c_math_period\c_math_special % \let,\math_punctuation_comma % \let.\math_punctuation_period % \c_attr_mathpunctuation\plustwo} % -% \unexpanded\gdef\math_punctuation_initialize_yes +% \protected\gdef\math_punctuation_initialize_yes % {\c_attr_mathpunctuation\plustwo} % -% \unexpanded\gdef\math_punctuation_initialize_nop +% \protected\gdef\math_punctuation_initialize_nop % {\c_attr_mathpunctuation\plusone} % % \egroup @@ -1636,11 +1635,11 @@ % \def\math_punctuation_comma_next {\ifx\nexttoken\blankspace\mathpunct\else\mathord\fi{\textcomma }} % \def\math_punctuation_period_next{\ifx\nexttoken\blankspace\mathpunct\else\mathord\fi{\textperiod}} % -% \unexpanded\def\math_punctuation_nop_comma {\mathpunct{\textcomma}} -% \unexpanded\def\math_punctuation_nop_period{\mathord{\textperiod}} +% \protected\def\math_punctuation_nop_comma {\mathpunct{\textcomma}} +% \protected\def\math_punctuation_nop_period{\mathord{\textperiod}} % -% \unexpanded\def\math_punctuation_all_comma {\futurelet\nexttoken\math_punctuation_comma_next} -% \unexpanded\def\math_punctuation_all_period{\futurelet\nexttoken\math_punctuation_period_next} +% \protected\def\math_punctuation_all_comma {\futurelet\nexttoken\math_punctuation_comma_next} +% \protected\def\math_punctuation_all_period{\futurelet\nexttoken\math_punctuation_period_next} % % \let\math_punctuation_yes_comma \math_punctuation_all_comma % \let\math_punctuation_yes_period\math_punctuation_nop_period @@ -1665,19 +1664,19 @@ \edef\math_set_o_both {\math_set_o_period\math_set_o_comma} \edef\math_set_p_both {\math_set_p_period\math_set_p_comma} -\unexpanded\def\math_punctuation_nop_comma {\begingroup\math_set_p_comma ,\endgroup} -\unexpanded\def\math_punctuation_nop_period {\begingroup\math_set_o_period .\endgroup} -\unexpanded\def\math_punctuation_nop_semicolon{\begingroup\math_set_p_semicolon;\endgroup} +\protected\def\math_punctuation_nop_comma {\begingroup\math_set_p_comma ,\endgroup} +\protected\def\math_punctuation_nop_period {\begingroup\math_set_o_period .\endgroup} +\protected\def\math_punctuation_nop_semicolon{\begingroup\math_set_p_semicolon;\endgroup} % todo: use new lookahead stuff -\unexpanded\def\math_punctuation_all_comma {\futurelet\nexttoken\math_punctuation_comma_next} -\unexpanded\def\math_punctuation_all_period {\futurelet\nexttoken\math_punctuation_period_next} -\unexpanded\def\math_punctuation_all_semicolon{\futurelet\nexttoken\math_punctuation_semicolon_next} +\protected\def\math_punctuation_all_comma {\futurelet\nexttoken\math_punctuation_comma_next} +\protected\def\math_punctuation_all_period {\futurelet\nexttoken\math_punctuation_period_next} +\protected\def\math_punctuation_all_semicolon{\futurelet\nexttoken\math_punctuation_semicolon_next} - \let\math_punctuation_yes_comma \math_punctuation_all_comma - \let\math_punctuation_yes_period \math_punctuation_nop_period - \let\math_punctuation_yes_semicolon\math_punctuation_all_semicolon + \let\math_punctuation_yes_comma \math_punctuation_all_comma + \let\math_punctuation_yes_period \math_punctuation_nop_period + \let\math_punctuation_yes_semicolon\math_punctuation_all_semicolon \def\math_punctuation_comma_next {\begingroup\Umathcode\c_math_comma \ifx\nexttoken\blankspace\mathordcode\else\mathordcode\fi\zerocount\c_math_comma ,\endgroup} \def\math_punctuation_period_next {\begingroup\Umathcode\c_math_period \ifx\nexttoken\blankspace\mathordcode\else\mathordcode\fi\zerocount\c_math_period .\endgroup} @@ -1815,7 +1814,7 @@ % 6 = scriptscript % 7 = crampedscriptscript -\def\uncramped#1% +\permanent\def\uncramped#1% {{\ifmathstyle \or \displaystyle \or \or \textstyle \or @@ -1823,7 +1822,7 @@ \or \scriptscriptstyle \fi #1}} -\def\cramped#1% +\permanent\def\cramped#1% {{\ifmathstyle \crampeddisplaystyle \or \or % 0 -> 1 \crampedtextstyle \or \or % 2 -> 3 @@ -1831,11 +1830,11 @@ \crampedscriptscriptstyle \fi % 6 -> 7 #1}} -\def\triggermathstyle#1{\Ustyle\numexpr#1\relax} -%def\mathstyletrigger#1{\numexpr#1\relax} -\let\mathstyletrigger \firstofoneargument +\permanent\def\triggermathstyle#1{\Ustyle\numexpr#1\relax} +%permanent\def\mathstyletrigger#1{\numexpr#1\relax} +\permanent\let\mathstyletrigger \firstofoneargument -\def\triggeredmathstyleparameter#1% to bypass the relax +\permanent\def\triggeredmathstyleparameter#1% to bypass the relax {\ifcase\numexpr\normalmathstyle\relax #1\displaystyle \or % 0 #1\crampeddisplaystyle \or % 1 @@ -1848,7 +1847,7 @@ % error \fi} -\def\mathstylefont#1% #1 is number (\normalmathstyle) +\permanent\def\mathstylefont#1% #1 is number (\normalmathstyle) {\ifcase\numexpr#1\relax \textfont \or \textfont \or @@ -1861,7 +1860,7 @@ \textfont \fi\fam} % was \zerocount -\def\somemathstylefont#1% #1 is number (\normalmathstyle) +\permanent\def\somemathstylefont#1% #1 is number (\normalmathstyle) {\ifcase\numexpr#1\relax \textfont \or \textfont \or @@ -1874,7 +1873,7 @@ \textfont \fi} -\def\mathsmallstylefont#1% #1 is number (\normalmathstyle) +\permanent\def\mathsmallstylefont#1% #1 is number (\normalmathstyle) {\ifcase\numexpr#1\relax \scriptfont \or \scriptfont \or @@ -1887,7 +1886,7 @@ \scriptfont \fi\fam} % was \zerocount -\def\mathstyleface#1% #1 is number (\normalmathstyle) +\permanent\def\mathstyleface#1% #1 is number (\normalmathstyle) {\ifcase\numexpr#1\relax \textface \or \textface \or @@ -1900,7 +1899,7 @@ \textface \fi} -\def\mathsmallstyleface#1% #1 is number (\normalmathstyle) +\permanent\def\mathsmallstyleface#1% #1 is number (\normalmathstyle) {\ifcase\numexpr#1\relax \scriptface \or \scriptface \or @@ -1913,7 +1912,7 @@ \scriptface \fi} -\def\mathstylecommand#1#2#3% +\permanent\def\mathstylecommand#1#2#3% {\ifcase\numexpr\normalmathstyle\relax \expandafter#1\or \expandafter#1\or @@ -1925,7 +1924,7 @@ \expandafter#3\else \expandafter#1\fi} -% \def\textstyleface#1% #1 is number (\normalmathstyle) +% \permanent\def\textstyleface#1% #1 is number (\normalmathstyle) % {\ifcase\numexpr#1\relax % \tf \or % \tf \or @@ -1938,7 +1937,7 @@ % \tf % \fi} -\unexpanded\def\verbosemathstyle#1% #1 is number (\normalmathstyle) +\permanent\protected\def\verbosemathstyle#1% #1 is number (\normalmathstyle) {{\normalexpanded{\relax\darkgray\ttxx[\number#1:\ifcase\numexpr#1\relax display\or % 0 crampeddisplay\or % 1 @@ -1950,13 +1949,13 @@ crampedscriptscript\else % 7 unknown\fi]}}} -\unexpanded\def\showmathstyle{\verbosemathstyle\normalmathstyle} +\permanent\protected\def\showmathstyle{\verbosemathstyle\normalmathstyle} %D Handy too: -\def\mathcharwd{\fontcharwd\mathstylefont\normalmathstyle} -\def\mathcharht{\fontcharht\mathstylefont\normalmathstyle} -\def\mathchardp{\fontchardp\mathstylefont\normalmathstyle} +\permanent\def\mathcharwd{\fontcharwd\mathstylefont\normalmathstyle} +\permanent\def\mathcharht{\fontcharht\mathstylefont\normalmathstyle} +\permanent\def\mathchardp{\fontchardp\mathstylefont\normalmathstyle} %D Some dimension fun: @@ -1965,7 +1964,7 @@ %D A plain inheritance: -\def\mathpalette#1#2% +\permanent\def\mathpalette#1#2% {\mathchoice {#1\displaystyle {#2}}% {#1\textstyle {#2}}% @@ -1982,40 +1981,40 @@ % to be tested: {#1} but it could have side effects -% \unexpanded\def\mathstylehbox#1% sensitive for: a \over b => {a\over b} or \frac{a}{b} +% \protected\def\mathstylehbox#1% sensitive for: a \over b => {a\over b} or \frac{a}{b} % {\normalexpanded{\hbox\bgroup % \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup} -\unexpanded\def\mathstylehbox#1#% sensitive for: a \over b => {a\over b} or \frac{a}{b} +\permanent\protected\def\mathstylehbox#1#% sensitive for: a \over b => {a\over b} or \frac{a}{b} {\math_style_hbox{#1}} -\unexpanded\def\math_style_hbox#1#2% sensitive for: a \over b => {a\over b} or \frac{a}{b} +\protected\def\math_style_hbox#1#2% sensitive for: a \over b => {a\over b} or \frac{a}{b} {\normalexpanded{\hbox#1\bgroup \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#2\stopimath\egroup} -\unexpanded\def\mathstylevbox#1% +\permanent\protected\def\mathstylevbox#1% {\normalexpanded{\vbox\bgroup \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup} -\unexpanded\def\mathstylevcenter#1% +\permanent\protected\def\mathstylevcenter#1% {\normalexpanded{\vcenter\bgroup \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup} -\unexpanded\def\mathstylevcenteredhbox#1% +\permanent\protected\def\mathstylevcenteredhbox#1% {\normalexpanded{\vcenter\bgroup\hbox\bgroup \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup\egroup} -\unexpanded\def\mathstylevcenteredvbox#1% +\permanent\protected\def\mathstylevcenteredvbox#1% {\normalexpanded{\vcenter\bgroup\vbox\bgroup \startimath\triggermathstyle\normalmathstyle}\mathsurround\zeropoint#1\stopimath\egroup\egroup} -\unexpanded\def\setmathsmalltextbox#1#2#% +\permanent\protected\def\setmathsmalltextbox#1#2#% {\normalizebodyfontsize\m_math_text_choice_face{\mathsmallstyleface\normalmathstyle}% \setbox#1#2\bgroup \font_basics_switchtobodyfont\m_math_text_choice_face \let\next} -\unexpanded\def\setmathtextbox#1#2#% +\permanent\protected\def\setmathtextbox#1#2#% {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}% \setbox#1#2\bgroup \font_basics_switchtobodyfont\m_math_text_choice_face @@ -2042,7 +2041,7 @@ %D \HL %D \stoptabulate -\def\triggerdisplaystyle +\permanent\def\triggerdisplaystyle {\ifmathstyle \displaystyle \or \crampeddisplaystyle \or @@ -2054,7 +2053,7 @@ \crampeddisplaystyle \or \fi} -\def\triggertextstyle +\permanent\def\triggertextstyle {\ifmathstyle \textstyle \or \crampedtextstyle \or @@ -2066,7 +2065,7 @@ \crampedtextstyle \else \fi} -\def\triggerscriptstyle +\permanent\def\triggerscriptstyle {\ifmathstyle \scriptstyle \or \crampedscriptstyle \or @@ -2078,7 +2077,7 @@ \crampedscriptstyle \or \fi} -\def\triggerscriptscriptstyle +\permanent\def\triggerscriptscriptstyle {\ifmathstyle \scriptscriptstyle \or \crampedscriptscriptstyle \or @@ -2090,21 +2089,21 @@ \crampedscriptscriptstyle \or \fi} -\def\triggeruncrampedstyle +\permanent\def\triggeruncrampedstyle {\ifmathstyle \or \displaystyle \or \or \textstyle \or \or \scriptstyle \or \or \scriptscriptstyle \fi} -\def\triggercrampedstyle +\permanent\def\triggercrampedstyle {\ifmathstyle \crampeddisplaystyle \or \or \crampedtextstyle \or \or \crampedscriptstyle \or \or \crampedscriptscriptstyle \fi} -\def\triggersmallstyle +\permanent\def\triggersmallstyle {\ifmathstyle \scriptstyle \or \crampedscriptstyle \or @@ -2116,7 +2115,7 @@ \crampedscriptscriptstyle \or \fi} -\def\triggeruncrampedsmallstyle +\permanent\def\triggeruncrampedsmallstyle {\ifmathstyle \scriptstyle \or \scriptstyle \or @@ -2128,7 +2127,7 @@ \scriptscriptstyle \or \fi} -\def\triggercrampedsmallstyle +\permanent\def\triggercrampedsmallstyle {\ifmathstyle \crampedscriptstyle \or \crampedscriptstyle \or @@ -2140,7 +2139,7 @@ \crampedscriptscriptstyle \or \fi} -\def\triggerbigstyle +\permanent\def\triggerbigstyle {\ifmathstyle \displaystyle \or \crampeddisplaystyle \or @@ -2152,7 +2151,7 @@ \crampedscriptstyle \or \fi} -\def\triggeruncrampedbigstyle +\permanent\def\triggeruncrampedbigstyle {\ifmathstyle \displaystyle \or \displaystyle \or @@ -2164,7 +2163,7 @@ \scriptstyle \or \fi} -\def\triggercrampedbigstyle +\permanent\def\triggercrampedbigstyle {\ifmathstyle \crampeddisplaystyle \or \crampeddisplaystyle \or @@ -2178,10 +2177,10 @@ \newcount\c_math_saved_style -\unexpanded\def\pushmathstyle % assumes begingroup .. endgroup +\permanent\protected\def\pushmathstyle % assumes begingroup .. endgroup {\c_math_saved_style\mathstyle} -\unexpanded\def\popmathstyle +\permanent\protected\def\popmathstyle {\ifnum\mathstyle=\c_math_saved_style\else \triggermathstyle\c_math_saved_style \fi} @@ -2266,7 +2265,7 @@ \fi } -\unexpanded\def\math_style_set#1% +\protected\def\math_style_set#1% {\edef\m_math_style_asked{#1}% \ifempty\m_math_style_asked \else \math_style_set_indeed @@ -2274,7 +2273,7 @@ \let\setmathstyle\math_style_set -\def\installmathstyle#1#2% +\permanent\def\installmathstyle#1#2% {\ifcsname\??mathstylecommand#1\endcsname \else \setvalue{\??mathstylecommand#1}{#2}% \fi} @@ -2295,13 +2294,13 @@ \setvalue{\??mathstylecommand\v!small }{\c_math_styles_state_size \plusone} \setvalue{\??mathstylecommand\v!big }{\c_math_styles_state_size \plustwo} -\unexpanded\def\setupmathstyle[#1]% +\permanent\protected\def\setupmathstyle[#1]% {\edef\m_math_style_asked{#1}% \ifempty\m_math_style_asked \else \math_style_set_indeed \fi} -\unexpanded\def\usemathstyleparameter#1% faster local variant +\permanent\protected\def\usemathstyleparameter#1% faster local variant {\edef\m_math_style_asked{#1\c!mathstyle}% \ifempty\m_math_style_asked \else \math_style_set_indeed @@ -2317,10 +2316,7 @@ \installcorenamespace {mathstyle} -\unexpanded\def\definemathstyle - {\dodoubleargument\math_style_define} - -\def\math_style_define[#1][#2]% +\permanent\tolerant\protected\def\definemathstyle[#1]#*[#2]% {\c_math_styles_state_style \zerocount \c_math_styles_state_cramped\zerocount \c_math_styles_state_size \zerocount @@ -2386,7 +2382,7 @@ %D %D \typebuffer \getbuffer -\unexpanded\def\startmathstyle[#1]% +\permanent\protected\def\startmathstyle[#1]% {\edef\m_math_style_asked{#1}% \ifempty\m_math_style_asked \let\stopmathstyle\relax @@ -2398,7 +2394,7 @@ \let\stopmathstyle\relax -\unexpanded\def\startusemathstyleparameter#1% +\permanent\protected\def\startusemathstyleparameter#1% {\edef\m_math_style_asked{#1\c!mathstyle}% \ifempty\m_math_style_asked \let\stopusemathstyleparameter\relax @@ -2482,32 +2478,34 @@ %mathscriptboxmode \plusthree % lists and boxes with \boundary=1 (also for testing and demo) \mathrulethicknessmode\plusone % adaptive -\unexpanded\def\mathtext {\mathortext{\math_text_choice_font\relax}\hbox} -\unexpanded\def\mathword {\mathortext{\math_text_choice_word\relax}\hbox} +\permanent\protected\def\mathtext {\mathortext{\math_text_choice_font\relax}\hbox} +\permanent\protected\def\mathword {\mathortext{\math_text_choice_word\relax}\hbox} -\unexpanded\def\mathtexttf{\mathortext{\math_text_choice_font\tf}\hbox} -\unexpanded\def\mathtextit{\mathortext{\math_text_choice_font\it}\hbox} -\unexpanded\def\mathtextsl{\mathortext{\math_text_choice_font\sl}\hbox} -\unexpanded\def\mathtextbf{\mathortext{\math_text_choice_font\bf}\hbox} -\unexpanded\def\mathtextbi{\mathortext{\math_text_choice_font\bi}\hbox} -\unexpanded\def\mathtextbs{\mathortext{\math_text_choice_font\bs}\hbox} +\permanent\protected\def\mathtexttf{\mathortext{\math_text_choice_font\tf}\hbox} +\permanent\protected\def\mathtextit{\mathortext{\math_text_choice_font\it}\hbox} +\permanent\protected\def\mathtextsl{\mathortext{\math_text_choice_font\sl}\hbox} +\permanent\protected\def\mathtextbf{\mathortext{\math_text_choice_font\bf}\hbox} +\permanent\protected\def\mathtextbi{\mathortext{\math_text_choice_font\bi}\hbox} +\permanent\protected\def\mathtextbs{\mathortext{\math_text_choice_font\bs}\hbox} -\unexpanded\def\mathwordtf{\mathortext{\math_text_choice_word\tf}\hbox} -\unexpanded\def\mathwordit{\mathortext{\math_text_choice_word\it}\hbox} -\unexpanded\def\mathwordsl{\mathortext{\math_text_choice_word\sl}\hbox} -\unexpanded\def\mathwordbf{\mathortext{\math_text_choice_word\bf}\hbox} -\unexpanded\def\mathwordbi{\mathortext{\math_text_choice_word\bi}\hbox} -\unexpanded\def\mathwordbs{\mathortext{\math_text_choice_word\bs}\hbox} +\permanent\protected\def\mathwordtf{\mathortext{\math_text_choice_word\tf}\hbox} +\permanent\protected\def\mathwordit{\mathortext{\math_text_choice_word\it}\hbox} +\permanent\protected\def\mathwordsl{\mathortext{\math_text_choice_word\sl}\hbox} +\permanent\protected\def\mathwordbf{\mathortext{\math_text_choice_word\bf}\hbox} +\permanent\protected\def\mathwordbi{\mathortext{\math_text_choice_word\bi}\hbox} +\permanent\protected\def\mathwordbs{\mathortext{\math_text_choice_word\bs}\hbox} %D Safeguard against redefinitions: \appendtoks - \let\_\normalunderscore % is textunderscore or fakeunderscore + \enforced\let\_\normalunderscore % is textunderscore or fakeunderscore \to \everymathematics %D Because we may overload \type {\text} in other (structuring) macros, we say: -\appendtoks \let\text\mathtext \to \everymathematics +\appendtoks + \enforced\let\text\mathtext +\to \everymathematics %D The next code is derived from plain \TEX. The names will change! @@ -2537,7 +2535,7 @@ % this can become an option: -\unexpanded\def\math_display_align_hack % I don't like the global, maybe we should push and pop +\protected\def\math_display_align_hack % I don't like the global, maybe we should push and pop {\glet\math_display_align_hack_indeed\math_display_align_hack_remove_skip \math_openup\displayopenupvalue % was \math_openup\jot \everycr{\noalign{\math_display_align_hack_indeed}}} @@ -2557,7 +2555,7 @@ %D Text in math: -\unexpanded\def\mathortext +\permanent\protected\def\mathortext {\ifmmode \expandafter\firstoftwoarguments \else @@ -2570,9 +2568,9 @@ \ifdefined\text\else \let\text\hbox \fi -% \unexpanded\def\mathoptext#1{\mathop{\text{#1}}} +% \protected\def\mathoptext#1{\mathop{\text{#1}}} -\unexpanded\def\mathoptext +\permanent\protected\def\mathoptext {\normalizebodyfontsize\m_math_text_choice_face{\mathstyleface\normalmathstyle}% %\showmathstyle \dowithnextbox @@ -2597,15 +2595,15 @@ % new: -\unexpanded\def\smallmathsymbol#1% +\permanent\protected\def\smallmathsymbol#1% {\mathematics{\mathbin{\normalexpanded{\raise.15\exheight\hbox{\normalstartimath \triggermathstyle{\the\numexpr\normalmathstyle+2\relax}#1% \normalstopimath}}}}} % this should be a primitive: -\def\mathextensiblecode#1#2{\clf_extensiblecode\numexpr#1\relax\numexpr#2\relax} -\def\mathhorizontalcode#1#2{\clf_horizontalcode\numexpr#1\relax\numexpr#2\relax} +\permanent\def\mathextensiblecode#1#2{\clf_extensiblecode\numexpr#1\relax\numexpr#2\relax} +\permanent\def\mathhorizontalcode#1#2{\clf_horizontalcode\numexpr#1\relax\numexpr#2\relax} % experimental: @@ -2662,18 +2660,18 @@ {\let\math_inline_openup_start_yes\math_inline_openup_traced_start} {\let\math_inline_openup_start_yes\math_inline_openup_normal_start} -\unexpanded\def\math_inline_openup_normal_start +\protected\def\math_inline_openup_normal_start {\scratchheight\dimexpr\ht\scratchbox+\m_math_inline_openup_ht\relax \scratchdepth \dimexpr\dp\scratchbox+\m_math_inline_openup_dp\relax \vrule\s!width\zeropoint\s!height\scratchheight\s!depth\scratchdepth\relax \begingroup \let\math_inline_openup_stop\math_inline_openup_normal_stop} -\unexpanded\def\math_inline_openup_normal_stop +\protected\def\math_inline_openup_normal_stop {\endgroup \vrule\s!width\zeropoint\s!height\scratchheight\s!depth\scratchdepth\relax} -\unexpanded\def\math_inline_openup_traced_start +\protected\def\math_inline_openup_traced_start {\scratchtopoffset \ht\scratchbox \scratchbottomoffset\dp\scratchbox \scratchheight \dimexpr\scratchtopoffset +\m_math_inline_openup_ht\relax @@ -2687,7 +2685,7 @@ \begingroup \let\math_inline_openup_stop\math_inline_openup_traced_stop} -\unexpanded\def\math_inline_openup_traced_stop +\protected\def\math_inline_openup_traced_stop {\endgroup \kern-\emwidth \begingroup @@ -2702,7 +2700,7 @@ \def\math_inline_openup_start_nop {\let\math_inline_openup_stop\relax} -\unexpanded\def\openedupimath +\permanent\protected\def\openedupimath {\dontleavehmode \begingroup \ifmmode @@ -2711,7 +2709,7 @@ \expandafter\openedupimath_text \fi} -\unexpanded\def\openedupimath_math#1% +\protected\def\openedupimath_math#1% {\setbox\scratchbox\mathstylehbox{#1}% \ifdim\ht\scratchbox>\strutht \math_inline_openup_start_yes @@ -2724,7 +2722,7 @@ \math_inline_openup_stop \endgroup} -\unexpanded\def\openedupimath_text#1% +\protected\def\openedupimath_text#1% {\setbox\scratchbox\hbox{\startimath#1\stopimath}% \ifdim\ht\scratchbox>\strutht \math_inline_openup_start_yes @@ -2743,14 +2741,14 @@ % % 0x002B=plus 0x2212=minus 0x2013=endash -\unexpanded\def\mathplus {+} -\unexpanded\def\mathminus {\ifmmode –\orelse\iffontchar\font`−−\else –\fi} -\unexpanded\def\mathplusminus{±} +\permanent\protected\def\mathplus {+} +\permanent\protected\def\mathminus {\ifmmode –\orelse\iffontchar\font`−−\else –\fi} +\permanent\protected\def\mathplusminus{±} %D The \type {\displaywidth} is only known inside a display formula, so we need to catch %D it when still zero. -\def\checkeddisplaywidth % hsize if zero +\permanent\def\checkeddisplaywidth % hsize if zero {\dimexpr \ifzeropt\displaywidth \hsize @@ -2759,7 +2757,7 @@ \fi \relax} -\def\maximizeddisplaywidth % larger than zero but within hsize +\permanent\def\maximizeddisplaywidth % larger than zero but within hsize {\dimexpr \ifzeropt\displaywidth \hsize @@ -2801,7 +2799,7 @@ \installcorenamespace{mathrules} -\unexpanded\def\enablemathrules{\letgvalue{\??mathrules\fontclass}\plusone} +\permanent\protected\def\enablemathrules{\letgvalue{\??mathrules\fontclass}\plusone} \appendtoks \mathrulesmode\ifcsname\??mathrules\fontclass\endcsname @@ -2824,10 +2822,10 @@ % \NC \tex {f6} \tex {emspace} \NC \tex {b6} \NC {\darkred\vl}\f6{\darkblue\vl} \NC ${\darkred\vl}\f6{\darkblue\vl}$ \NC \NR % \stoptabulate -% \unexpanded\def\negenspace{\kern-.5\emwidth} -% \unexpanded\def\negemspace{\kern- \emwidth} +% \protected\def\negenspace{\kern-.5\emwidth} +% \protected\def\negemspace{\kern- \emwidth} % -% \unexpanded\def\math_f#1% +% \protected\def\math_f#1% % {\ifcase#1\or % \hairspace % \or @@ -2842,7 +2840,7 @@ % \emspace % \fi} % -% \unexpanded\def\math_b#1% +% \protected\def\math_b#1% % {\ifcase#1\or % \neghairspace % \or @@ -2864,16 +2862,16 @@ %D Experiment -\unexpanded\def\math_scripts_stack +\permanent\protected\def\math_scripts_stack {\c_attr_mathunstack\attributeunsetvalue} -\unexpanded\def\math_scripts_unstack +\permanent\protected\def\math_scripts_unstack {\clf_enablescriptunstacking \c_attr_mathunstack\plusone} \appendtoks - \let\stackscripts \math_scripts_stack - \let\unstackscripts\math_scripts_unstack + \enforced\let\stackscripts \math_scripts_stack + \enforced\let\unstackscripts\math_scripts_unstack \to \everymathematics %D Expensive (tracing and inject) but a primitive (using factors) is tricky as we @@ -2916,7 +2914,7 @@ %D $\mathopenupparameter\Umathradicalvgap{10.5}\sqrt[3]{x}$ %D \stoptyping -\unexpanded\def\mathopenupparameter#1#2% +\permanent\protected\def\mathopenupparameter#1#2% {\ifmathparameter#1\displaystyle \or\frozen#1\displaystyle #2#1\displaystyle \fi \ifmathparameter#1\crampeddisplaystyle \or\frozen#1\crampeddisplaystyle #2#1\crampeddisplaystyle \fi \ifmathparameter#1\textstyle \or\frozen#1\textstyle #2#1\textstyle \fi @@ -2942,13 +2940,13 @@ %D \getbuffer %D \stoplines -\unexpanded\def\tomathord {\Umathclass\zerocount} -\unexpanded\def\tomathop {\Umathclass\plusone } % \mathinfix -\unexpanded\def\tomathbin {\Umathclass\plustwo } -\unexpanded\def\tomathrel {\Umathclass\plusthree} -\unexpanded\def\tomathopen {\Umathclass\plusfour } % \mathprefix -\unexpanded\def\tomathclose{\Umathclass\plusfive } % \mathsuffix -\unexpanded\def\tomathpunct{\Umathclass\plussix } +\permanent\protected\def\tomathord {\Umathclass\zerocount} +\permanent\protected\def\tomathop {\Umathclass\plusone } % \mathinfix +\permanent\protected\def\tomathbin {\Umathclass\plustwo } +\permanent\protected\def\tomathrel {\Umathclass\plusthree} +\permanent\protected\def\tomathopen {\Umathclass\plusfour } % \mathprefix +\permanent\protected\def\tomathclose{\Umathclass\plusfive } % \mathsuffix +\permanent\protected\def\tomathpunct{\Umathclass\plussix } %D Prescripts. These work in \CONTEXT\ because we have the super- and subscript %D triggers enabled as active characters but when we would have @@ -2991,14 +2989,14 @@ % \newtoks \everystartimath % \newtoks \everystopimath % -% \unexpanded\def\startimath{\Ustartmath\the\everystartimath} -% \unexpanded\def\stopimath {\the\everystopimath\Ustopmath} +% \protected\def\startimath{\Ustartmath\the\everystartimath} +% \protected\def\stopimath {\the\everystopimath\Ustopmath} % -% \unexpanded\def\m% +% \protected\def\m% % {\relax % \ifmmode\expandafter\math_m_stay\else\expandafter\math_m_math\fi} % -% \unexpanded\def\math_m_math#1% +% \protected\def\math_m_math#1% % {\startimath#1\stopimath} % % \let\math_m_stay\firstofoneargument diff --git a/tex/context/base/mkiv/math-noa.lmt b/tex/context/base/mkiv/math-noa.lmt new file mode 100644 index 000000000..25e1823e2 --- /dev/null +++ b/tex/context/base/mkiv/math-noa.lmt @@ -0,0 +1,2399 @@ +if not modules then modules = { } end modules ['math-noa'] = { + version = 1.001, + optimize = true, + comment = "companion to math-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- beware: this is experimental code and there will be a more generic (attribute value +-- driven) interface too but for the moment this is ok (sometime in 2015-2016 i will +-- start cleaning up as by then the bigger picture is clear and code has been used for +-- years; the main handlers will get some extensions) +-- +-- we will also make dedicated processors (faster) +-- +-- beware: names will change as we wil make noads.xxx.handler i.e. xxx +-- subnamespaces + +-- 20D6 -> 2190 +-- 20D7 -> 2192 + +-- todo: most is mathchar_code so we can have simple dedicated loops + +-- nota bene: uunderdelimiter uoverdelimiter etc are radicals (we have 5 types) + +local next, tonumber = next, tonumber +local utfchar, utfbyte = utf.char, utf.byte +local formatters, gmatch = string.formatters, string.gmatch +local sortedhash = table.sortedhash +local insert, remove = table.insert, table.remove +local div, round = math.div, math.round +local bor, band = bit32.bor, bit32.band + +local fonts = fonts +local nodes = nodes +local node = node +local mathematics = mathematics +local context = context + +local otf = fonts.handlers.otf +local otffeatures = fonts.constructors.features.otf +local registerotffeature = otffeatures.register + +local privateattribute = attributes.private +local registertracker = trackers.register +local registerdirective = directives.register +local logreporter = logs.reporter +local setmetatableindex = table.setmetatableindex + +local colortracers = nodes.tracers.colors + +local trace_remapping = false registertracker("math.remapping", function(v) trace_remapping = v end) +local trace_processing = false registertracker("math.processing", function(v) trace_processing = v end) +local trace_analyzing = false registertracker("math.analyzing", function(v) trace_analyzing = v end) +local trace_normalizing = false registertracker("math.normalizing", function(v) trace_normalizing = v end) +local trace_collapsing = false registertracker("math.collapsing", function(v) trace_collapsing = v end) +local trace_fixing = false registertracker("math.fixing", function(v) trace_foxing = v end) +local trace_patching = false registertracker("math.patching", function(v) trace_patching = v end) +local trace_goodies = false registertracker("math.goodies", function(v) trace_goodies = v end) +local trace_variants = false registertracker("math.variants", function(v) trace_variants = v end) +local trace_alternates = false registertracker("math.alternates", function(v) trace_alternates = v end) +local trace_italics = false registertracker("math.italics", function(v) trace_italics = v end) +local trace_kernpairs = false registertracker("math.kernpairs", function(v) trace_kernpairs = v end) +local trace_domains = false registertracker("math.domains", function(v) trace_domains = v end) +local trace_families = false registertracker("math.families", function(v) trace_families = v end) +local trace_fences = false registertracker("math.fences", function(v) trace_fences = v end) +local trace_unstacking = false registertracker("math.unstack", function(v) trace_unstacking = v end) + +local check_coverage = true registerdirective("math.checkcoverage", function(v) check_coverage = v end) + +local report_processing = logreporter("mathematics","processing") +local report_remapping = logreporter("mathematics","remapping") +local report_normalizing = logreporter("mathematics","normalizing") +local report_collapsing = logreporter("mathematics","collapsing") +local report_fixing = logreporter("mathematics","fixing") +local report_patching = logreporter("mathematics","patching") +local report_goodies = logreporter("mathematics","goodies") +local report_variants = logreporter("mathematics","variants") +local report_alternates = logreporter("mathematics","alternates") +local report_italics = logreporter("mathematics","italics") +local report_kernpairs = logreporter("mathematics","kernpairs") +local report_domains = logreporter("mathematics","domains") +local report_families = logreporter("mathematics","families") +local report_fences = logreporter("mathematics","fences") +local report_unstacking = logreporter("mathematics","unstack") + +local a_mathrendering = privateattribute("mathrendering") +local a_exportstatus = privateattribute("exportstatus") + +local nuts = nodes.nuts +local nodepool = nuts.pool +local tonut = nuts.tonut +local nutstring = nuts.tostring + +local setfield = nuts.setfield +local setlink = nuts.setlink +local setlist = nuts.setlist +local setnext = nuts.setnext +local setprev = nuts.setprev +local setchar = nuts.setchar +local setfam = nuts.setfam +local setsubtype = nuts.setsubtype +local setattr = nuts.setattr +local setattrlist = nuts.setattrlist +local setwidth = nuts.setwidth +local setheight = nuts.setheight +local setdepth = nuts.setdepth + +local getfield = nuts.getfield +local getnext = nuts.getnext +local getprev = nuts.getprev +local getboth = nuts.getboth +local getid = nuts.getid +local getsubtype = nuts.getsubtype +local getchar = nuts.getchar +local getfont = nuts.getfont +local getfam = nuts.getfam +local getattr = nuts.getattr +local getattrs = nuts.getattrs +local getlist = nuts.getlist +local getwidth = nuts.getwidth +local getheight = nuts.getheight +local getdepth = nuts.getdepth + +local getnucleus = nuts.getnucleus +local getsub = nuts.getsub +local getsup = nuts.getsup +local getsubpre = nuts.getsubpre +local getsuppre = nuts.getsuppre + +local setnucleus = nuts.setnucleus +local setsub = nuts.setsub +local setsup = nuts.setsup +local setsubpre = nuts.setsubpre +local setsuppre = nuts.setsuppre + +local flush_node = nuts.flush +local copy_node = nuts.copy +local slide_nodes = nuts.slide +local set_visual = nuts.setvisual + +local mlist_to_hlist = nuts.mlist_to_hlist + +local new_kern = nodepool.kern +local new_submlist = nodepool.submlist +local new_noad = nodepool.noad +local new_delimiter = nodepool.delimiter +local new_fence = nodepool.fence + +local fonthashes = fonts.hashes +local fontdata = fonthashes.identifiers +local fontcharacters = fonthashes.characters +local fontitalics = fonthashes.italics + +local variables = interfaces.variables +local texsetattribute = tex.setattribute +local texgetattribute = tex.getattribute +local getfontoffamily = tex.getfontoffamily +local unsetvalue = attributes.unsetvalue +local implement = interfaces.implement + +local v_reset = variables.reset + +local chardata = characters.data + +noads = noads or { } -- todo: only here +local noads = noads + +noads.processors = noads.processors or { } +local processors = noads.processors + +noads.handlers = noads.handlers or { } +local handlers = noads.handlers + +local tasks = nodes.tasks +local enableaction = tasks.enableaction +local setaction = tasks.setaction + +local nodecodes = nodes.nodecodes +local noadcodes = nodes.noadcodes +local fencecodes = nodes.fencecodes + +local ordnoad_code = noadcodes.ord +local opdisplaylimitsnoad_code = noadcodes.opdisplaylimits +local oplimitsnoad_code = noadcodes.oplimits +local opnolimitsnoad_code = noadcodes.opnolimits +local binnoad_code = noadcodes.bin +local relnode_code = noadcodes.rel +local opennoad_code = noadcodes.open +local closenoad_code = noadcodes.close +local punctnoad_code = noadcodes.punct +local innernoad_code = noadcodes.inner +local undernoad_code = noadcodes.under +local overnoad_code = noadcodes.over +local vcenternoad_code = noadcodes.vcenter +local ordlimitsnoad_code = noadcodes.ordlimits or oplimitsnoad_code + +local noad_code = nodecodes.noad -- attr nucleus sub sup +local accent_code = nodecodes.accent -- attr nucleus sub sup accent +local radical_code = nodecodes.radical -- attr nucleus sub sup left degree +local fraction_code = nodecodes.fraction -- attr nucleus sub sup left right +local subbox_code = nodecodes.subbox -- attr list +local submlist_code = nodecodes.submlist -- attr list +local mathchar_code = nodecodes.mathchar -- attr fam char +local mathtextchar_code = nodecodes.mathtextchar -- attr fam char +local delimiter_code = nodecodes.delimiter -- attr small_fam small_char large_fam large_char +----- style_code = nodecodes.style -- attr style +----- parameter_code = nodecodes.parameter -- attr style +local math_choice = nodecodes.choice -- attr display text script scriptscript +local fence_code = nodecodes.fence -- attr subtype + +local leftfence_code = fencecodes.left +local middlefence_code = fencecodes.middle +local rightfence_code = fencecodes.right + +-- local mathclasses = mathematics.classes +-- local fenceclasses = { +-- [leftfence_code] = mathclasses.open, +-- [middlefence_code] = mathclasses.middle, +-- [rightfence_code] = mathclasses.close, +-- } + +-- this initial stuff is tricky as we can have removed and new nodes with the same address +-- the only way out is a free-per-page list of nodes (not bad anyway) + +-- local gf = getfield local gt = setmetatableindex("number") getfield = function(n,f) gt[f] = gt[f] + 1 return gf(n,f) end mathematics.GETFIELD = gt +-- local sf = setfield local st = setmetatableindex("number") setfield = function(n,f,v) st[f] = st[f] + 1 sf(n,f,v) end mathematics.SETFIELD = st + +local function process(start,what,n,parent) + + if n then + n = n + 1 + else + n = 0 + end + -- + local initial = start + -- + slide_nodes(start) -- we still miss a prev in noads -- fences test code + -- + while start do + local id = getid(start) + if trace_processing then + if id == noad_code then + report_processing("%w%S, class %a",n*2,nutstring(start),noadcodes[getsubtype(start)]) + elseif id == mathchar_code then + local char = getchar(start) + local font = getfont(start) + local fam = getfam(start) + report_processing("%w%S, family %a, font %a, char %a, shape %c",n*2,nutstring(start),fam,font,char,char) + else + report_processing("%w%S",n*2,nutstring(start)) + end + end + local proc = what[id] + if proc then + -- report_processing("start processing") + local done, newstart, newinitial = proc(start,what,n,parent) -- prev is bugged: or getprev(start) + if newinitial then + initial = newinitial -- temp hack .. we will make all return head + if newstart then + start = newstart + -- report_processing("stop processing (new start)") + else + -- report_processing("quit processing (done)") + break + end + else + if newstart then + start = newstart + -- report_processing("stop processing (new start)") + else + -- report_processing("stop processing") + end + end + elseif id == noad_code then + -- single characters are like this + local noad = getnucleus(start) if noad then process(noad,what,n,start) end -- list + noad = getsup (start) if noad then process(noad,what,n,start) end -- list + noad = getsub (start) if noad then process(noad,what,n,start) end -- list + if getsubpre then + noad = getsuppre (start) if noad then process(noad,what,n,start) end -- list + noad = getsubpre (start) if noad then process(noad,what,n,start) end -- list + end + elseif id == mathchar_code or id == mathtextchar_code or id == delimiter_code then + break + elseif id == subbox_code or id == submlist_code then + local noad = getlist(start) if noad then process(noad,what,n,start) end -- list (not getlist !) + elseif id == fraction_code then + local noad = getfield(start,"num") if noad then process(noad,what,n,start) end -- list + noad = getfield(start,"denom") if noad then process(noad,what,n,start) end -- list + noad = getfield(start,"left") if noad then process(noad,what,n,start) end -- delimiter + noad = getfield(start,"right") if noad then process(noad,what,n,start) end -- delimiter + elseif id == math_choice then + local noad = getfield(start,"display") if noad then process(noad,what,n,start) end -- list + noad = getfield(start,"text") if noad then process(noad,what,n,start) end -- list + noad = getfield(start,"script") if noad then process(noad,what,n,start) end -- list + noad = getfield(start,"scriptscript") if noad then process(noad,what,n,start) end -- list + elseif id == fence_code then + local noad = getfield(start,"delimiter") if noad then process(noad,what,n,start) end -- delimiter + elseif id == radical_code then + local noad = getnucleus(start) if noad then process(noad,what,n,start) end -- list + noad = getsup (start) if noad then process(noad,what,n,start) end -- list + noad = getsub (start) if noad then process(noad,what,n,start) end -- list + if getsubpre then + noad = getsuppre (start) if noad then process(noad,what,n,start) end -- list + noad = getsubpre (start) if noad then process(noad,what,n,start) end -- list + end + noad = getfield(start,"left") if noad then process(noad,what,n,start) end -- delimiter + noad = getfield(start,"degree") if noad then process(noad,what,n,start) end -- list + elseif id == accent_code then + local noad = getnucleus(start) if noad then process(noad,what,n,start) end -- list + noad = getsup (start) if noad then process(noad,what,n,start) end -- list + noad = getsub (start) if noad then process(noad,what,n,start) end -- list + if getsubpre then + noad = getsuppre (start) if noad then process(noad,what,n,start) end -- list + noad = getsubpre (start) if noad then process(noad,what,n,start) end -- list + end + noad = getfield(start,"accent") if noad then process(noad,what,n,start) end -- list + noad = getfield(start,"bot_accent") if noad then process(noad,what,n,start) end -- list + -- elseif id == style_code then + -- -- has a next + -- elseif id == parameter_code then + -- -- has a next + -- else + -- -- glue, penalty, etc + end + start = getnext(start) + end + if not parent then + return initial -- only first level -- for now + end +end + +local function processnested(current,what,n) + local noad = nil + local id = getid(current) + if id == noad_code then + noad = getnucleus(current) if noad then process(noad,what,n,current) end -- list + noad = getsup (current) if noad then process(noad,what,n,current) end -- list + noad = getsub (current) if noad then process(noad,what,n,current) end -- list + if getsubpre then + noad = getsuppre (current) if noad then process(noad,what,n,current) end -- list + noad = getsubpre (current) if noad then process(noad,what,n,current) end -- list + end + elseif id == subbox_code or id == submlist_code then + noad = getlist(current) if noad then process(noad,what,n,current) end -- list (not getlist !) + elseif id == fraction_code then + noad = getfield(current,"num") if noad then process(noad,what,n,current) end -- list + noad = getfield(current,"denom") if noad then process(noad,what,n,current) end -- list + noad = getfield(current,"left") if noad then process(noad,what,n,current) end -- delimiter + noad = getfield(current,"right") if noad then process(noad,what,n,current) end -- delimiter + elseif id == math_choice then + noad = getfield(current,"display") if noad then process(noad,what,n,current) end -- list + noad = getfield(current,"text") if noad then process(noad,what,n,current) end -- list + noad = getfield(current,"script") if noad then process(noad,what,n,current) end -- list + noad = getfield(current,"scriptscript") if noad then process(noad,what,n,current) end -- list + elseif id == fence_code then + noad = getfield(current,"delimiter") if noad then process(noad,what,n,current) end -- delimiter + elseif id == radical_code then + noad = getnucleus(current) if noad then process(noad,what,n,current) end -- list + noad = getsup (current) if noad then process(noad,what,n,current) end -- list + noad = getsub (current) if noad then process(noad,what,n,current) end -- list + if getsubpre then + noad = getsuppre (current) if noad then process(noad,what,n,current) end -- list + noad = getsubpre (current) if noad then process(noad,what,n,current) end -- list + end + noad = getfield(current,"left") if noad then process(noad,what,n,current) end -- delimiter + noad = getfield(current,"degree") if noad then process(noad,what,n,current) end -- list + elseif id == accent_code then + noad = getnucleus(current) if noad then process(noad,what,n,current) end -- list + noad = getsup (current) if noad then process(noad,what,n,current) end -- list + noad = getsub (current) if noad then process(noad,what,n,current) end -- list + if getsubpre then + noad = getsuppre (current) if noad then process(noad,what,n,current) end -- list + noad = getsubpre (current) if noad then process(noad,what,n,current) end -- list + end + noad = getfield(current,"accent") if noad then process(noad,what,n,current) end -- list + noad = getfield(current,"bot_accent") if noad then process(noad,what,n,current) end -- list + end +end + +local function processstep(current,process,n,id) + local noad = nil + local id = id or getid(current) + if id == noad_code then + noad = getnucleus(current) if noad then process(noad,n,current) end -- list + noad = getsup (current) if noad then process(noad,n,current) end -- list + noad = getsub (current) if noad then process(noad,n,current) end -- list + if getsubpre then + noad = getsuppre (current) if noad then process(noad,n,current) end -- list + noad = getsubpre (current) if noad then process(noad,n,current) end -- list + end + elseif id == subbox_code or id == submlist_code then + noad = getlist(current) if noad then process(noad,n,current) end -- list (not getlist !) + elseif id == fraction_code then + noad = getfield(current,"num") if noad then process(noad,n,current) end -- list + noad = getfield(current,"denom") if noad then process(noad,n,current) end -- list + noad = getfield(current,"left") if noad then process(noad,n,current) end -- delimiter + noad = getfield(current,"right") if noad then process(noad,n,current) end -- delimiter + elseif id == math_choice then + noad = getfield(current,"display") if noad then process(noad,n,current) end -- list + noad = getfield(current,"text") if noad then process(noad,n,current) end -- list + noad = getfield(current,"script") if noad then process(noad,n,current) end -- list + noad = getfield(current,"scriptscript") if noad then process(noad,n,current) end -- list + elseif id == fence_code then + noad = getfield(current,"delimiter") if noad then process(noad,n,current) end -- delimiter + elseif id == radical_code then + noad = getnucleus(current) if noad then process(noad,n,current) end -- list + noad = getsup (current) if noad then process(noad,n,current) end -- list + noad = getsub (current) if noad then process(noad,n,current) end -- list + if getsubpre then + noad = getsuppre (current) if noad then process(noad,n,current) end -- list + noad = getsubpre (current) if noad then process(noad,n,current) end -- list + end + noad = getfield(current,"left") if noad then process(noad,n,current) end -- delimiter + noad = getfield(current,"degree") if noad then process(noad,n,current) end -- list + elseif id == accent_code then + noad = getnucleus(current) if noad then process(noad,n,current) end -- list + noad = getsup (current) if noad then process(noad,n,current) end -- list + noad = getsub (current) if noad then process(noad,n,current) end -- list + if getsubpre then + noad = getsuppre (current) if noad then process(noad,n,current) end -- list + noad = getsubpre (current) if noad then process(noad,n,current) end -- list + end + noad = getfield(current,"accent") if noad then process(noad,n,current) end -- list + noad = getfield(current,"bot_accent") if noad then process(noad,n,current) end -- list + end +end + +local function processnoads(head,actions,banner) + if trace_processing then + report_processing("start %a",banner) + head = process(head,actions) + report_processing("stop %a",banner) + else + head = process(head,actions) + end + return head +end + +noads.process = processnoads +noads.processnested = processnested +noads.processouter = process + +-- experiment (when not present fall back to fam 0) -- needs documentation + +local unknowns = { } +local checked = { } -- simple case +local tracked = false trackers.register("fonts.missing", function(v) tracked = v end) +local cached = setmetatableindex("table") -- complex case + +local function errorchar(font,char) + local done = unknowns[char] + if done then + unknowns[char] = done + 1 + else + unknowns[char] = 1 + end + if tracked then + -- slower as we check each font too and we always replace as math has + -- more demands than text + local fake = cached[font][char] + if fake then + return fake + else + local kind, fake = fonts.checkers.placeholder(font,char) + if not fake or kind ~= "char" then + fake = 0x3F + end + cached[font][char] = fake + return fake + end + else + -- only simple checking, report at the end so one should take + -- action anyway ... we can miss a few checks but that is ok + -- as there is at least one reported + if not checked[char] then + if trace_normalizing then + report_normalizing("character %C is not available",char) + end + checked[char] = true + end + return 0x3F + end +end + +-- 0-2 regular +-- 3-5 bold +-- 6-8 pseudobold + +-- this could best be integrated in the remapper, and if we run into problems, we +-- might as well do this + +do + + local families = { } + local a_mathfamily = privateattribute("mathfamily") + local boldmap = mathematics.boldmap + + local familymap = { [0] = + "regular", + "regular", + "regular", + "bold", + "bold", + "bold", + "pseudobold", + "pseudobold", + "pseudobold", + } + + families[fraction_code] = function(pointer,what,n,parent) + local a = getattr(pointer,a_mathfamily) + if a and a >= 0 then + if a > 0 then + setattr(pointer,a_mathfamily,0) + if a > 5 then + a = a - 3 + end + end + setfam(pointer,a) + end + processnested(pointer,families,n+1) + end + + families[noad_code] = function(pointer,what,n,parent) + local a = getattr(pointer,a_mathfamily) + if a and a >= 0 then + if a > 0 then + setattr(pointer,a_mathfamily,0) + if a > 5 then + a = a - 3 + end + end + setfam(pointer,a) + end + processnested(pointer,families,n+1) + end + + families[mathchar_code] = function(pointer) + if getfam(pointer) == 0 then + local a = getattr(pointer,a_mathfamily) + if a and a > 0 then + setattr(pointer,a_mathfamily,0) + if a > 5 then + local char = getchar(pointer) + local bold = boldmap[char] + local newa = a - 3 + if not bold then + if trace_families then + report_families("no bold replacement for %C, family %s with remap %s becomes %s with remap %s",char,a,familymap[a],newa,familymap[newa]) + end + setfam(pointer,newa) + elseif not fontcharacters[getfontoffamily(newa)][bold] then + if trace_families then + report_families("no bold character for %C, family %s with remap %s becomes %s with remap %s",char,a,familymap[a],newa,familymap[newa]) + end + if newa > 3 then + setfam(pointer,newa-3) + end + else + setattr(pointer,a_exportstatus,char) + setchar(pointer,bold) + if trace_families then + report_families("replacing %C by bold %C, family %s with remap %s becomes %s with remap %s",char,bold,a,familymap[a],newa,familymap[newa]) + end + setfam(pointer,newa) + end + else + local char = getchar(pointer) + if not fontcharacters[getfontoffamily(a)][char] then + if trace_families then + report_families("no bold replacement for %C",char) + end + else + if trace_families then + report_families("family of %C becomes %s with remap %s",char,a,familymap[a]) + end + setfam(pointer,a) + end + end + end + end + end + families[delimiter_code] = function(pointer) + if getfield(pointer,"small_fam") == 0 then + local a = getattr(pointer,a_mathfamily) + if a and a > 0 then + setattr(pointer,a_mathfamily,0) + if a > 5 then + -- no bold delimiters in unicode + a = a - 3 + end + local char = getfield(pointer,"small_char") + local okay = fontcharacters[getfontoffamily(a)][char] + if okay then + setfield(pointer,"small_fam",a) + elseif a > 2 then + setfield(pointer,"small_fam",a-3) + end + local char = getfield(pointer,"large_char") + local okay = fontcharacters[getfontoffamily(a)][char] + if okay then + setfield(pointer,"large_fam",a) + elseif a > 2 then + setfield(pointer,"large_fam",a-3) + end + else + setfield(pointer,"small_fam",0) + setfield(pointer,"large_fam",0) + end + end + end + + -- will become: + + -- families[delimiter_code] = function(pointer) + -- if getfam(pointer) == 0 then + -- local a = getattr(pointer,a_mathfamily) + -- if a and a > 0 then + -- setattr(pointer,a_mathfamily,0) + -- if a > 5 then + -- -- no bold delimiters in unicode + -- a = a - 3 + -- end + -- local char = getchar(pointer) + -- local okay = fontcharacters[getfontoffamily(a)][char] + -- if okay then + -- setfam(pointer,a) + -- elseif a > 2 then + -- setfam(pointer,a-3) + -- end + -- else + -- setfam(pointer,0) + -- end + -- end + -- end + + families[mathtextchar_code] = families[mathchar_code] + + function handlers.families(head,style,penalties) + processnoads(head,families,"families") + return true -- not needed + end + +end + +-- character remapping + +do + + local a_mathalphabet = privateattribute("mathalphabet") + local a_mathgreek = privateattribute("mathgreek") + + local relocate = { } + + local remapalphabets = mathematics.remapalphabets + local fallbackstyleattr = mathematics.fallbackstyleattr + local setnodecolor = colortracers.set + + local function report_remap(tag,id,old,new,extra) + report_remapping("remapping %s in font (%s,%s) from %C to %C%s", + tag,id,fontdata[id].properties.fontname or "",old,new,extra) + end + + local function checked(pointer) + local char = getchar(pointer) + local font = getfont(pointer) + local data = fontcharacters[font] + if not data[char] then + local specials = characters.data[char].specials + if specials and (specials[1] == "char" or specials[1] == "font") then + local newchar = specials[#specials] + if trace_remapping then + report_remap("fallback",font,char,newchar) + end + if trace_analyzing then + setnodecolor(pointer,"font:isol") + end + setattr(pointer,a_exportstatus,char) -- testcase: exponentiale + setchar(pointer,newchar) + return true + end + end + end + + -- We can optimize this if we really think that math is a bottleneck which it never + -- really is. + + relocate[mathchar_code] = function(pointer) + local g = getattr(pointer,a_mathgreek) or 0 + local a = getattr(pointer,a_mathalphabet) or 0 + -- local g, a = getattrs(pointer,a_mathgreek,a_mathalphabet) + -- if not a then a = 0 end + -- if not g then g = 0 end + local char = getchar(pointer) + local font = getfont(pointer) + local characters = fontcharacters[font] + if a > 0 or g > 0 then + if a > 0 then + -- not really critital but we could use properties + setattr(pointer,a_mathgreek,0) + end + if g > 0 then + -- not really critital but we could use properties + setattr(pointer,a_mathalphabet,0) + end + local newchar = remapalphabets(char,a,g) + if newchar then + local newchardata = characters[newchar] + if newchardata then + if trace_remapping then + report_remap("char",font,char,newchar,newchardata.commands and " (virtual)" or "") + end + if trace_analyzing then + setnodecolor(pointer,"font:isol") + end + setchar(pointer,newchar) + return true + else + local fallback = fallbackstyleattr(a) + if fallback then + local newchar = remapalphabets(char,fallback,g) + if newchar then + if characters[newchar] then + if trace_remapping then + report_remap("char",font,char,newchar," (fallback remapping used)") + end + if trace_analyzing then + setnodecolor(pointer,"font:isol") + end + setchar(pointer,newchar) + return true + elseif trace_remapping then + report_remap("char",font,char,newchar," fails (no fallback character)") + end + elseif trace_remapping then + report_remap("char",font,char,newchar," fails (no fallback remap character)") + end + elseif trace_remapping then + report_remap("char",font,char,newchar," fails (no fallback style)") + end + end + elseif trace_remapping then + local chardata = characters[char] + if chardata and chardata.commands then + report_remap("char",font,char,char," (virtual)") + end + end + end + if not characters[char] then + setchar(pointer,errorchar(font,char)) + end + if trace_analyzing then + setnodecolor(pointer,"font:medi") + end + if check_coverage then + return checked(pointer) + end + end + + relocate[mathtextchar_code] = function(pointer) + if trace_analyzing then + setnodecolor(pointer,"font:init") + end + end + + relocate[delimiter_code] = function(pointer) + if trace_analyzing then + setnodecolor(pointer,"font:fina") + end + end + + function handlers.relocate(head,style,penalties) + processnoads(head,relocate,"relocate") + return true -- not needed + end + +end + +-- rendering (beware, not exported) + +do + + local render = { } + + local rendersets = mathematics.renderings.numbers or { } -- store + + render[mathchar_code] = function(pointer) + local attr = getattr(pointer,a_mathrendering) + if attr and attr > 0 then + local char = getchar(pointer) + local renderset = rendersets[attr] + if renderset then + local newchar = renderset[char] + if newchar then + local font = getfont(pointer) + local characters = fontcharacters[font] + if characters and characters[newchar] then + setchar(pointer,newchar) + setattr(pointer,a_exportstatus,char) + end + end + end + end + end + + function handlers.render(head,style,penalties) + processnoads(head,render,"render") + return true -- not needed + end + +end + +-- some resize options (this works ok because the content is +-- empty and no larger next will be forced) +-- +-- beware: we don't use \delcode but \Udelcode and as such have +-- no large_fam; also, we need to check for subtype and/or +-- small_fam not being 0 because \. sits in 0,0 by default +-- +-- todo: just replace the character by an ord noad +-- and remove the right delimiter as well + +do + + local a_mathsize = privateattribute("mathsize") -- this might move into other fence code + local resize = { } + + resize[fence_code] = function(pointer) + local subtype = getsubtype(pointer) + if subtype == leftfence_code or subtype == rightfence_code then + local a = getattr(pointer,a_mathsize) + if a and a > 0 then + local method = div(a,100) + local size = a % 100 + setattr(pointer,a_mathsize,0) + local delimiter = getfield(pointer,"delimiter") + local chr = getchar(delimiter) + if chr > 0 then + local fam = getfam(delimiter) + local id = getfontoffamily(fam) + if id > 0 then + local data = fontdata[id] + local char = mathematics.big(data,chr,size,method) + local ht = getheight(pointer) + local dp = getdepth(pointer) + if ht == 1 or dp == 1 then -- 1 scaled point is a signal + local chardata = data.characters[char] + if ht == 1 then + setheight(pointer,chardata.height) + end + if dp == 1 then + setdepth(pointer,chardata.depth) + end + end + if trace_fences then + report_fences("replacing %C by %C using method %a and size %a",chr,char,method,size) + end + setchar(delimiter,char) + end + end + end + end + end + + function handlers.resize(head,style,penalties) + processnoads(head,resize,"resize") + return true -- not needed + end + +end + +-- still not perfect: + +do + + local a_autofence = privateattribute("mathautofence") + local autofences = { } + local dummyfencechar = 0x2E + + local function makefence(what,char) + local d = new_delimiter() -- todo: attr + local f = new_fence() -- todo: attr + if char then + local sym = getnucleus(char) + local chr = getchar(sym) + local fam = getfam(sym) + if chr == dummyfencechar then + chr = 0 + end + setchar(d,chr) + setfam(d,fam) + flush_node(sym) + end + setattrlist(d,char) + setattrlist(f,char) + setsubtype(f,what) + setfield(f,"delimiter",d) + setfield(f,"class",-1) -- tex itself does this, so not fenceclasses[what] + return f + end + + local function show(where,pointer) + print("") + local i = 0 + for n in nuts.traverse(pointer) do + i = i + 1 + print(i,where,nuts.tonode(n)) + end + print("") + end + + local function makelist(middle,noad,f_o,o_next,c_prev,f_c) +-- report_fences( +-- "middle %s, noad %s, open %s, opennext %s, closeprev %s, close %s", +-- middle or "?", +-- noad or "?", +-- f_o or "?", +-- o_next or "?", +-- c_prev or "?", +-- f_c or "?" +-- ) + local list = new_submlist() + setsubtype(noad,innernoad_code) + setnucleus(noad,list) + setlist(list,f_o) + setlink(f_o,o_next) -- prev of list is nil + setlink(c_prev,f_c) -- next of list is nil +-- show("list",f_o) + if middle and next(middle) then + local prev = f_o + local current = o_next + while current ~= f_c do + local midl = middle[current] + local next = getnext(current) + if midl then + local fence = makefence(middlefence_code,current) + setnucleus(current) + flush_node(current) + middle[current] = nil + -- replace_node + setlink(prev,fence,next) + prev = fence + else + prev = current + end + current = next + end + end + return noad + end + + -- relinking is now somewhat overdone + + local function convert_both(open,close,middle) + local o_next = getnext(open) + if o_next == close then + return close + else + local c_prev, c_next = getboth(close) + local f_o = makefence(leftfence_code,open) + local f_c = makefence(rightfence_code,close) + makelist(middle,open,f_o,o_next,c_prev,f_c) + setnucleus(close) + flush_node(close) + -- open is now a list + setlink(open,c_next) + return open + end + end + + local function convert_open(open,last,middle) -- last is really last (final case) + local f_o = makefence(leftfence_code,open) + local f_c = makefence(rightfence_code) + local o_next = getnext(open) + makelist(middle,open,f_o,o_next,last,nil) + -- open is now a list + setlink(open,l_next) + return open + end + + local function convert_close(first,close,middle) + local f_o = makefence(leftfence_code) + local f_c = makefence(rightfence_code,close) + local c_prev = getprev(close) + local f_next = getnext(first) + makelist(middle, close, f_o,f_next,c_prev,f_c) + -- close is now a list + if c_prev ~= first then + setlink(first,close) + end + return close + end + + local stacks = setmetatableindex("table") + + -- 1=open 2=close 3=middle 4=both + + local function processfences(pointer,n,parent) + local current = pointer + local last = pointer + local start = pointer + local done = false + local initial = pointer + local stack = nil + local middle = nil -- todo: use properties + while current do +-- show("before",pointer) + local id = getid(current) + if id == noad_code then + local a = getattr(current,a_autofence) + if a and a > 0 then + local stack = stacks[n] + setattr(current,a_autofence,0) -- hm, better use a property + local level = #stack + if a == 1 then + if trace_fences then + report_fences("%2i: level %i, handling %s, action %s",n,level,"open","open") + end + insert(stack,current) + elseif a == 2 then + local open = remove(stack) + if open then + if trace_fences then + report_fences("%2i: level %i, handling %s, action %s",n,level,"close","both") + end + current = convert_both(open,current,middle) + elseif current == start then + if trace_fences then + report_fences("%2i: level %i, handling %s, action %s",n,level,"close","skip") + end + else + if trace_fences then + report_fences("%2i: level %i, handling %s, action %s",n,level,"close","close") + end + current = convert_close(initial,current,middle) + if not parent then + initial = current + end + end + elseif a == 3 then + if trace_fences then + report_fences("%2i: level %i, handling %s, action %s",n,level,"middle","middle") + end + if middle then + middle[current] = last + else + middle = { [current] = last } + end + elseif a == 4 then + if not stack or #stack == 0 then + if trace_fences then + report_fences("%2i: level %i, handling %s, action %s",n,level,"both","open") + end + insert(stack,current) + else + local open = remove(stack) + if open then + if trace_fences then + report_fences("%2i: level %i, handling %s, action %s",n,level,"both","both") + end + current = convert_both(open,current,middle) + elseif current == start then + if trace_fences then + report_fences("%2i: level %i, handling %s, action %s",n,level,"both","skip") + end + else + if trace_fences then + report_fences("%2i: level %i, handling %s, action %s",n,level,"both","close") + end + current = convert_close(initial,current,middle) + if not parent then + initial = current + end + end + end + end + done = true + else + processstep(current,processfences,n+1,id) + end + else + -- next at current level + processstep(current,processfences,n,id) + end +-- show("after",pointer) + last = current + current = getnext(current) + end + if done then + local stack = stacks[n] + local s = #stack + if s > 0 then + for i=1,s do + local open = remove(stack) + if trace_fences then + report_fences("%2i: level %i, handling %s, action %s",n,#stack,"flush","open") + end + last = convert_open(open,last,middle) + end +-- show("done",pointer) + end + end + end + + -- we can have a first changed node .. an option is to have a leading dummy node in math + -- lists like the par node as it can save a lot of mess + + local enabled = false + + implement { + name = "enableautofences", + onlyonce = true, + actions = function() + enableaction("math","noads.handlers.autofences") + enabled = true + end + } + + function handlers.autofences(head,style,penalties) + if enabled then -- tex.modes.c_math_fences_auto + -- inspect(nodes.totree(head)) + processfences(head,1) + -- inspect(nodes.totree(head)) + end + end + +end + +-- normalize scripts + +do + + local unscript = { } noads.processors.unscript = unscript + local superscripts = characters.superscripts + local subscripts = characters.subscripts + local fractions = characters.fractions + local replaced = { } + + local function replace(pointer,what,n,parent) + pointer = parent -- we're following the parent list (chars trigger this) + local next = getnext(pointer) + local start_super, stop_super, start_sub, stop_sub + local mode = "unset" + while next and getid(next) == noad_code do + local nextnucleus = getnucleus(next) + if nextnucleus and getid(nextnucleus) == mathchar_code and not getsub(next) and not getsup(next) then + local char = getchar(nextnucleus) + local s = superscripts[char] + if s then + if not start_super then + start_super = next + mode = "super" + elseif mode == "sub" then + break + end + stop_super = next + next = getnext(next) + setchar(nextnucleus,s) + replaced[char] = (replaced[char] or 0) + 1 + if trace_normalizing then + report_normalizing("superscript %C becomes %C",char,s) + end + else + local s = subscripts[char] + if s then + if not start_sub then + start_sub = next + mode = "sub" + elseif mode == "super" then + break + end + stop_sub = next + next = getnext(next) + setchar(nextnucleus,s) + replaced[char] = (replaced[char] or 0) + 1 + if trace_normalizing then + report_normalizing("subscript %C becomes %C",char,s) + end + else + break + end + end + else + break + end + end + if start_super then + if start_super == stop_super then + setsup(pointer,getnucleus(start_super)) + else + local list = new_submlist() -- todo attr + setlist(list,start_super) + setsup(pointer,list) + end + if mode == "super" then + setnext(pointer,getnext(stop_super)) + end + setnext(stop_super) + end + if start_sub then + +-- if mode == "sub" then +-- local sup = getsup(pointer) +-- if sup and not getsub(pointer) then +-- local nxt = getnext(pointer) +-- local new = new_noad(pointer) +-- setnucleus(new,new_submlist()) +-- setlink(pointer,new,nxt) +-- pointer = new +-- end +-- end + + if start_sub == stop_sub then + setsub(pointer,getnucleus(start_sub)) + else + local list = new_submlist() -- todo attr + setlist(list,start_sub) + setsub(pointer,list) + end + if mode == "sub" then + setnext(pointer,getnext(stop_sub)) + end + setnext(stop_sub) + end + -- we could return stop + end + + unscript[mathchar_code] = replace -- not noads as we need to recurse + + function handlers.unscript(head,style,penalties) + processnoads(head,unscript,"unscript") + return true -- not needed + end + +end + +do + + local unstack = { } noads.processors.unstack = unstack + local enabled = false + local a_unstack = privateattribute("mathunstack") + + unstack[noad_code] = function(pointer) + if getattr(pointer,a_unstack) then + local sup = getsup(pointer) + local sub = getsub(pointer) + if sup and sub then + -- if trace_unstacking then + -- report_unstacking() -- todo ... what to show ... + -- end + local nxt = getnext(pointer) + local new = new_noad(pointer) + setnucleus(new,new_submlist()) + setsub(pointer) + setsub(new,sub) + setlink(pointer,new,nxt) + end + end + end + + function handlers.unstack(head,style,penalties) + if enabled then + processnoads(head,unstack,"unstack") + return true -- not needed + end + end + + implement { + name = "enablescriptunstacking", + onlyonce = true, + actions = function() + enableaction("math","noads.handlers.unstack") + enabled = true + end + } + +end + +do + + local function collected(list) + if list and next(list) then + local n, t = 0, { } + for k, v in sortedhash(list) do + n = n + 1 + t[n] = formatters["%C"](k) + end + return formatters["% t (n=%s)"](t,n) + end + end + + statistics.register("math script replacements", function() + return collected(replaced) + end) + + statistics.register("unknown math characters", function() + return collected(unknowns) + end) + +end + +-- math alternates: (in xits lgf: $ABC$ $\cal ABC$ $\mathalternate{cal}\cal ABC$) +-- math alternates: (in lucidaot lgf: $ABC \mathalternate{italic} ABC$) + +-- todo: set alternate for specific symbols +-- todo: no need to do this when already loaded +-- todo: use a fonts.hashes.mathalternates + +do + + local last = 0 + + local known = setmetatableindex(function(t,k) + local v = bor(0,2^last) + t[k] = v + last = last + 1 + return v + end) + + local defaults = { + dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" }, + -- zero = { feature = 'zero', value = 1, comment = "Slashed or Dotted Zero" }, -- in no math font (yet) + } + + local function initializemathalternates(tfmdata) + local goodies = tfmdata.goodies + local autolist = defaults -- table.copy(defaults) + + local function setthem(newalternates) + local resources = tfmdata.resources -- was tfmdata.shared + local mathalternates = resources.mathalternates + local alternates, attributes, registered, presets + if mathalternates then + alternates = mathalternates.alternates + attributes = mathalternates.attributes + registered = mathalternates.registered + else + alternates, attributes, registered = { }, { }, { } + mathalternates = { + attributes = attributes, + alternates = alternates, + registered = registered, + presets = { }, + resets = { }, + hashes = setmetatableindex("table") + } + resources.mathalternates = mathalternates + end + -- + for name, data in sortedhash(newalternates) do + if alternates[name] then + -- ignore + else + local attr = known[name] + attributes[attr] = data + alternates[name] = attr + registered[#registered+1] = attr + end + end + end + + if goodies then + local done = { } + for i=1,#goodies do + -- first one counts + -- we can consider sharing the attributes ... todo (only once scan) + local mathgoodies = goodies[i].mathematics + local alternates = mathgoodies and mathgoodies.alternates + if alternates then + if trace_goodies then + report_goodies("loading alternates for font %a",tfmdata.properties.name) + end + for k, v in next, autolist do + if not alternates[k] then + alternates[k] = v + end + end + setthem(alternates) + return + end + end + end + + if trace_goodies then + report_goodies("loading default alternates for font %a",tfmdata.properties.name) + end + setthem(autolist) + + end + + registerotffeature { + name = "mathalternates", + description = "additional math alternative shapes", + initializers = { + base = initializemathalternates, + node = initializemathalternates, + } + } + + -- local getalternate = otf.getalternate (runtime new method so ...) + + -- todo: not shared but copies ... one never knows + + local a_mathalternate = privateattribute("mathalternate") + local alternate = { } -- processors.alternate = alternate + local fontdata = fonts.hashes.identifiers + local fontresources = fonts.hashes.resources + + local function getalternate(fam,tag,current) + local resources = fontresources[getfontoffamily(fam)] + local attribute = unsetvalue + if resources then + local mathalternates = resources.mathalternates + if mathalternates then + local presets = mathalternates.presets + if presets then + local resets = mathalternates.resets + attribute = presets[tag] + if not attribute then + attribute = 0 + local alternates = mathalternates.alternates + for s in gmatch(tag,"[^, ]+") do + if s == v_reset then + resets[tag] = true + current = unsetvalue + else + local a = alternates[s] -- or known[s] + if a then + attribute = bor(attribute,a) + end + end + end + if attribute == 0 then + attribute = unsetvalue + end + presets[tag] = attribute + elseif resets[tag] then + current = unsetvalue + end + end + end + end + if attribute > 0 and current and current > 0 then + return bor(current,attribute) + else + return attribute + end + end + + local function presetalternate(fam,tag) + texsetattribute(a_mathalternate,getalternate(fam,tag)) + end + + implement { + name = "presetmathalternate", + actions = presetalternate, + arguments = { "integer", "string" } + } + + local function setalternate(fam,tag) + local a = texgetattribute(a_mathalternate) + local v = getalternate(fam,tag,a) + texsetattribute(a_mathalternate,v) + end + + implement { + name = "setmathalternate", + actions = setalternate, + arguments = { "integer", "string" } + } + + alternate[mathchar_code] = function(pointer) -- slow + local a = getattr(pointer,a_mathalternate) + if a and a > 0 then + setattr(pointer,a_mathalternate,0) + local fontid = getfont(pointer) + local resources = fontresources[fontid] + if resources then + local mathalternates = resources.mathalternates + if mathalternates then + local attributes = mathalternates.attributes + local registered = mathalternates.registered + local hashes = mathalternates.hashes + for i=1,#registered do + local r = registered[i] + if band(a,r) ~= 0 then + local char = getchar(pointer) + local alt = hashes[i][char] + if alt == nil then + local what = attributes[r] + alt = otf.getalternate(fontdata[fontid],char,what.feature,what.value) or false + if alt == char then + alt = false + end + hashes[i][char] = alt + end + if alt then + if trace_alternates then + local what = attributes[r] + report_alternates("alternate %a, value %a, replacing glyph %U by glyph %U", + tostring(what.feature),tostring(what.value),getchar(pointer),alt) + end + setchar(pointer,alt) + break + end + end + end + end + end + end + end + + function handlers.alternates(head,style,penalties) + processnoads(head,alternate,"alternate") + return true -- not needed + end + +end + +-- italics: we assume that only characters matter +-- +-- = we check for correction first because accessing nodes is slower +-- = the actual glyph is not that important (we can control it with numbers) + +-- Italic correction in luatex math is (was) a mess. There are all kind of assumptions based on +-- old fonts and new fonts. Eventually there should be a flag that can signal to ignore all +-- those heuristics. We want to deal with it ourselves also in the perspective of mixed math +-- and text. Also, for a while in context we had to deal with a mix of virtual math fonts and +-- real ones. + +-- in opentype the italic correction of a limop is added to the width and luatex does +-- some juggling that we want to avoid but we need to do something here (in fact, we could +-- better fix the width of the character) + +do + + local a_mathitalics = privateattribute("mathitalics") + + local italics = { } + local default_factor = 1/20 + + local setcolor = colortracers.set + local resetcolor = colortracers.reset + local italic_kern = new_kern + + local c_positive_d = "trace:dg" + local c_negative_d = "trace:dr" + + local function insert_kern(current,kern) + local sub = new_submlist() -- todo: attr + local noad = new_noad() -- todo: attr + setlist(sub,kern) + setnext(kern,noad) + setnucleus(noad,current) + return sub + end + + registertracker("math.italics.visualize", function(v) + if v then + italic_kern = function(k) + local n = new_kern(k) -- todo: attr + set_visual(n,"italic") + return n + end + else + italic_kern = new_kern + end + end) + + local function getcorrection(method,font,char) -- -- or character.italic -- (this one is for tex) + + local visual = chardata[char].visual + + if method == 1 then + -- check on state + local italics = fontitalics[font] + if italics then + local character = fontcharacters[font][char] + if character then + local correction = character.italic + if correction and correction ~= 0 then + return correction, visual + end + end + end + elseif method == 2 then + -- no check + local character = fontcharacters[font][char] + if character then + local correction = character.italic + if correction and correction ~= 0 then + return correction, visual + end + end + elseif method == 3 then + -- check on visual + if visual == "it" or visual == "bi" then + local character = fontcharacters[font][char] + if character then + local correction = character.italic + if correction and correction ~= 0 then + return correction, visual + end + end + end + elseif method == 4 then + -- combination of 1 and 3 + local italics = fontitalics[font] + if italics and (visual == "it" or visual == "bi") then + local character = fontcharacters[font][char] + if character then + local correction = character.italic + if correction and correction ~= 0 then + return correction, visual + end + end + end + end + + end + + italics[mathchar_code] = function(pointer,what,n,parent) + local method = getattr(pointer,a_mathitalics) + if method and method > 0 and method < 100 then + local char = getchar(pointer) + local font = getfont(pointer) + local correction, visual = getcorrection(method,font,char) + if correction and correction ~= 0 then + local next_noad = getnext(parent) + if not next_noad then + if n == 1 then + -- only at the outer level .. will become an option (always,endonly,none) + if trace_italics then + report_italics("method %a, flagging italic correction %p between %C and end math",method,correction,char) + end + if correction > 0 then + correction = correction + 100 + else + correction = correction - 100 + end + correction = round(correction) + setattr(pointer,a_mathitalics,correction) + setattr(parent,a_mathitalics,correction) + return -- so no reset later on + end + end + end + end + setattr(pointer,a_mathitalics,unsetvalue) + end + + function handlers.italics(head,style,penalties) + processnoads(head,italics,"italics") + return true -- not needed + end + + local enable = function() + enableaction("math", "noads.handlers.italics") + if trace_italics then + report_italics("enabling math italics") + end + -- we enable math (unless already enabled elsewhere) + typesetters.italics.enablemath() + enable = false + end + + -- best do this only on math mode (less overhead) + + function mathematics.setitalics(name) + if enable then + enable() + end + texsetattribute(a_mathitalics,name and name ~= v_reset and tonumber(name) or unsetvalue) -- maybe also v_none + end + + function mathematics.getitalics(name) + if enable then + enable() + end + context(name and name ~= v_reset and tonumber(name) or unsetvalue) + end + + function mathematics.resetitalics() + texsetattribute(a_mathitalics,unsetvalue) + end + + implement { + name = "initializemathitalics", + actions = enable, + onlyonce = true, + } + + implement { + name = "setmathitalics", + actions = mathematics.setitalics, + arguments = "string", + } + + implement { + name = "getmathitalics", + actions = mathematics.getitalics, + arguments = "string", + } + + implement { + name = "resetmathitalics", + actions = mathematics.resetitalics + } + +end + +do + + -- math kerns (experiment) in goodies: + -- + -- mathematics = { + -- kernpairs = { + -- [0x1D44E] = { + -- [0x1D44F] = 400, -- 𝑎𝑏 + -- } + -- }, + -- } + + local a_kernpairs = privateattribute("mathkernpairs") + local kernpairs = { } + + local function enable() + enableaction("math", "noads.handlers.kernpairs") + if trace_kernpairs then + report_kernpairs("enabling math kern pairs") + end + enable = false + end + + implement { + name = "initializemathkernpairs", + actions = enable, + onlyonce = true, + } + + local hash = setmetatableindex(function(t,font) + local g = fontdata[font].goodies + local m = g and g[1] and g[1].mathematics + local k = m and m.kernpairs + t[font] = k + return k + end) + + -- no correction after prime because that moved to a superscript + + kernpairs[mathchar_code] = function(pointer,what,n,parent) + if getattr(pointer,a_kernpairs) == 1 then + local font = getfont(pointer) + local list = hash[font] + if list then + local first = getchar(pointer) + local found = list[first] + if found then + local next = getnext(parent) + if next and getid(next) == noad_code then + pointer = getnucleus(next) + if pointer then + if getfont(pointer) == font then + local second = getchar(pointer) + local kern = found[second] + if kern then + kern = kern * fonts.hashes.parameters[font].hfactor + if trace_kernpairs then + report_kernpairs("adding %p kerning between %C and %C",kern,first,second) + end + setlink(parent,new_kern(kern),getnext(parent)) -- todo: attr + end + end + end + end + end + end + end + end + + function handlers.kernpairs(head,style,penalties) + processnoads(head,kernpairs,"kernpairs") + return true -- not needed + end + +end + +-- primes and such + +do + + -- is validpair stil needed? + + local a_mathcollapsing = privateattribute("mathcollapsing") + local collapse = { } + local mathlists = characters.mathlists + local validpair = { + [ordnoad_code] = true, + [opdisplaylimitsnoad_code] = true, + [oplimitsnoad_code] = true, + [opnolimitsnoad_code] = true, + [binnoad_code] = true, -- new + [relnode_code] = true, + [opennoad_code] = true, -- new + [closenoad_code] = true, -- new + [punctnoad_code] = true, -- new + [innernoad_code] = false, + [undernoad_code] = false, + [overnoad_code] = false, + [vcenternoad_code] = false, + [ordlimitsnoad_code] = true, + } + + local reported = setmetatableindex("table") + + collapse[mathchar_code] = function(pointer,what,n,parent) + + if parent and mathlists[getchar(pointer)] then + local found, last, lucleus, lsup, lsub, category + local tree = mathlists + local current = parent + while current and validpair[getsubtype(current)] do + local nucleus = getnucleus(current) -- == pointer + local sub = getsub(current) + local sup = getsup(current) + local char = getchar(nucleus) + if char then + local match = tree[char] + if match then + local method = getattr(current,a_mathcollapsing) + if method and method > 0 and method <= 3 then + local specials = match.specials + local mathlist = match.mathlist + local ligature + if method == 1 then + ligature = specials + elseif method == 2 then + ligature = specials or mathlist + else -- 3 + ligature = mathlist or specials + end + if ligature then + category = mathlist and "mathlist" or "specials" + found = ligature + last = current + lucleus = nucleus + lsup = sup + lsub = sub + end + tree = match + if sub or sup then + break + else + current = getnext(current) + end + else + break + end + else + break + end + else + break + end + end + if found and last and lucleus then + local id = getfont(lucleus) + local characters = fontcharacters[id] + local replace = characters and characters[found] + if not replace then + if not reported[id][found] then + reported[id][found] = true + report_collapsing("%s ligature %C from %s","ignoring",found,category) + end + elseif trace_collapsing then + report_collapsing("%s ligature %C from %s","creating",found,category) + end + setchar(pointer,found) + local l = getnext(last) + local c = getnext(parent) + if lsub then + setsub(parent,lsub) + setsub(last) + end + if lsup then + setsup(parent,lsup) + setsup(last) + end + while c ~= l do + local n = getnext(c) + flush_node(c) + c = n + end + setlink(parent,l) + end + end + end + + function noads.handlers.collapse(head,style,penalties) + processnoads(head,collapse,"collapse") + return true -- not needed + end + + local enable = function() + enableaction("math", "noads.handlers.collapse") + if trace_collapsing then + report_collapsing("enabling math collapsing") + end + enable = false + end + + implement { + name = "initializemathcollapsing", + actions = enable, + onlyonce = true, + } + +end + +do + -- inner under over vcenter + + local fixscripts = { } + local movesub = { + -- primes + [0x2032] = 0xFE932, + [0x2033] = 0xFE933, + [0x2034] = 0xFE934, + [0x2057] = 0xFE957, + -- reverse primes + [0x2035] = 0xFE935, + [0x2036] = 0xFE936, + [0x2037] = 0xFE937, + } + + mathematics.virtualize(movesub) + + local options_supported = tokens.defined("Unosuperscript") + + local function fixsupscript(parent,current,current_char,new_char) + if new_char ~= current_char and new_char ~= true then + setchar(current,new_char) + if trace_fixing then + report_fixing("fixing subscript, replacing superscript %U by %U",current_char,new_char) + end + else + if trace_fixing then + report_fixing("fixing subscript, superscript %U",current_char) + end + end + if options_supported then + setfield(parent,"options",0x08+0x22) + end + end + + -- local function movesubscript(parent,current_nucleus,oldchar,newchar) + -- local prev = getprev(parent) + -- if prev and getid(prev) == noad_code then + -- local psup = getsup(prev) + -- local psub = getsub(prev) + -- if not psup and not psub then + -- fixsupscript(prev,current_nucleus,oldchar,newchar) + -- local nucleus = getnucleus(parent) + -- local sub = getsub(parent) + -- setsup(prev,nucleus) + -- setsub(prev,sub) + -- local dummy = copy_node(nucleus) + -- setchar(dummy,0) + -- setnucleus(parent,dummy) + -- setsub(parent) + -- elseif not psup then + -- fixsupscript(prev,current_nucleus,oldchar,newchar) + -- local nucleus = getnucleus(parent) + -- setsup(prev,nucleus) + -- local dummy = copy_node(nucleus) + -- setchar(dummy,0) + -- setnucleus(parent,dummy) + -- end + -- end + -- end + + local function move_none_none(parent,prev,nuc,oldchar,newchar) + fixsupscript(prev,nuc,oldchar,newchar) + local sub = getsub(parent) + setsup(prev,nuc) + setsub(prev,sub) + local dummy = copy_node(nuc) + setchar(dummy,0) + setnucleus(parent,dummy) + setsub(parent) + end + + local function move_none_psub(parent,prev,nuc,oldchar,newchar) + fixsupscript(prev,nuc,oldchar,newchar) + setsup(prev,nuc) + local dummy = copy_node(nuc) + setchar(dummy,0) + setnucleus(parent,dummy) + end + + fixscripts[mathchar_code] = function(pointer,what,n,parent,nested) -- todo: switch to turn in on and off + if parent then + local oldchar = getchar(pointer) + local newchar = movesub[oldchar] + if newchar then + local nuc = getnucleus(parent) + if pointer == nuc then + local sub = getsub(pointer) + local sup = getsup(pointer) + if sub then + if sup then + -- print("[char] sub sup") + else + -- print("[char] sub ---") + end + elseif sup then + -- print("[char] --- sup") + else + local prev = getprev(parent) + if prev and getid(prev) == noad_code then + local psub = getsub(prev) + local psup = getsup(prev) + if psub then + if psup then + -- print("sub sup [char] --- ---") + else + -- print("sub --- [char] --- ---") + move_none_psub(parent,prev,nuc,oldchar,newchar) + end + elseif psup then + -- print("--- sup [char] --- ---") + else + -- print("[char] --- ---") + move_none_none(parent,prev,nuc,oldchar,newchar) + end + else + -- print("no prev [char]") + end + end + else + -- print("[char]") + end + end + end + end + + function noads.handlers.fixscripts(head,style,penalties) + processnoads(head,fixscripts,"fixscripts") + return true -- not needed + end + +end + +-- variants + +do + + local variants = { } + local validvariants = { -- fast check on valid + [0x2229] = 0xFE00, [0x222A] = 0xFE00, + [0x2268] = 0xFE00, [0x2269] = 0xFE00, + [0x2272] = 0xFE00, [0x2273] = 0xFE00, + [0x228A] = 0xFE00, [0x228B] = 0xFE00, + [0x2293] = 0xFE00, [0x2294] = 0xFE00, + [0x2295] = 0xFE00, + [0x2297] = 0xFE00, + [0x229C] = 0xFE00, + [0x22DA] = 0xFE00, [0x22DB] = 0xFE00, + [0x2A3C] = 0xFE00, [0x2A3D] = 0xFE00, + [0x2A9D] = 0xFE00, [0x2A9E] = 0xFE00, + [0x2AAC] = 0xFE00, [0x2AAD] = 0xFE00, + [0x2ACB] = 0xFE00, [0x2ACC] = 0xFE00, + } + + variants[mathchar_code] = function(pointer,what,n,parent) -- also set export value + local char = getchar(pointer) + local selector = validvariants[char] + if selector then + local next = getnext(parent) + if next and getid(next) == noad_code then + local nucleus = getnucleus(next) + if nucleus and getid(nucleus) == mathchar_code and getchar(nucleus) == selector then + local variant + local tfmdata = fontdata[getfont(pointer)] + local mathvariants = tfmdata.resources.variants -- and variantdata + if mathvariants then + mathvariants = mathvariants[selector] + if mathvariants then + variant = mathvariants[char] + end + end + if variant then + setchar(pointer,variant) + setattr(pointer,a_exportstatus,char) -- we don't export the variant as it's visual markup + if trace_variants then + report_variants("variant (%U,%U) replaced by %U",char,selector,variant) + end + else + if trace_variants then + report_variants("no variant (%U,%U)",char,selector) + end + end + setprev(next,pointer) + setnext(parent,getnext(next)) + flush_node(next) + end + end + end + end + + function handlers.variants(head,style,penalties) + processnoads(head,variants,"unicode variant") + return true -- not needed + end + +end + +-- for manuals + +do + + local classes = { } + local colors = { + [relnode_code] = "trace:dr", + [ordnoad_code] = "trace:db", + [binnoad_code] = "trace:dg", + [opennoad_code] = "trace:dm", + [closenoad_code] = "trace:dm", + [punctnoad_code] = "trace:dc", + -- [opdisplaylimitsnoad_code] = "", + -- [oplimitsnoad_code] = "", + -- [opnolimitsnoad_code] = "", + -- [ordlimitsnoad_code] = "", + -- [innernoad_code = "", + -- [undernoad_code] = "", + -- [overnoad_code] = "", + -- [vcenternoad_code] = "", + } + + local setcolor = colortracers.set + local resetcolor = colortracers.reset + + classes[mathchar_code] = function(pointer,what,n,parent) + local color = colors[getsubtype(parent)] + if color then + setcolor(pointer,color) + else + resetcolor(pointer) + end + end + + function handlers.classes(head,style,penalties) + processnoads(head,classes,"classes") + return true -- not needed + end + + registertracker("math.classes",function(v) + setaction("math","noads.handlers.classes",v) + end) + +end + +-- experimental + +do + + -- mathematics.registerdomain { + -- name = "foo", + -- parents = { "bar" }, + -- characters = { + -- [0x123] = { char = 0x234, class = binary }, + -- }, + -- } + + local domains = { } + local categories = { } + local numbers = { } + local a_mathdomain = privateattribute("mathdomain") + mathematics.domains = categories + local permitted = { + ordinary = ordnoad_code, + binary = binnoad_code, + relation = relnode_code, + punctuation = punctnoad_code, + inner = innernoad_code, + } + + function mathematics.registerdomain(data) + local name = data.name + if not name then + return + end + local attr = #numbers + 1 + categories[name] = data + numbers[attr] = data + data.attribute = attr + -- we delay hashing + return attr + end + + local enable + + enable = function() + enableaction("math", "noads.handlers.domains") + if trace_domains then + report_domains("enabling math domains") + end + enable = false + end + + function mathematics.setdomain(name) + if enable then + enable() + end + local data = name and name ~= v_reset and categories[name] + texsetattribute(a_mathdomain,data and data.attribute or unsetvalue) + end + + function mathematics.getdomain(name) + if enable then + enable() + end + local data = name and name ~= v_reset and categories[name] + context(data and data.attribute or unsetvalue) + end + + implement { + name = "initializemathdomain", + actions = enable, + onlyonce = true, + } + + implement { + name = "setmathdomain", + arguments = "string", + actions = mathematics.setdomain, + } + + implement { + name = "getmathdomain", + arguments = "string", + actions = mathematics.getdomain, + } + + local function makehash(data) + local hash = { } + local parents = data.parents + if parents then + local function merge(name) + if name then + local c = categories[name] + if c then + local hash = c.hash + if not hash then + hash = makehash(c) + end + for k, v in next, hash do + hash[k] = v + end + end + end + end + if type(parents) == "string" then + merge(parents) + elseif type(parents) == "table" then + for i=1,#parents do + merge(parents[i]) + end + end + end + local characters = data.characters + if characters then + for k, v in next, characters do + -- local chr = n.char + local cls = v.class + if cls then + v.code = permitted[cls] + else + -- invalid class + end + hash[k] = v + end + end + data.hash = hash + return hash + end + + domains[mathchar_code] = function(pointer,what,n,parent) + local attr = getattr(pointer,a_mathdomain) + if attr then + local domain = numbers[attr] + if domain then + local hash = domain.hash + if not hash then + hash = makehash(domain) + end + local char = getchar(pointer) + local okay = hash[char] + if okay then + local chr = okay.char + local cls = okay.code + if chr and chr ~= char then + setchar(pointer,chr) + end + if cls and cls ~= getsubtype(parent) then + setsubtype(parent,cls) + end + end + end + end + end + + function handlers.domains(head,style,penalties) + processnoads(head,domains,"domains") + return true -- not needed + end + +end + +-- just for me + +function handlers.showtree(head,style,penalties) + inspect(nodes.totree(tonut(head))) +end + +registertracker("math.showtree",function(v) + setaction("math","noads.handlers.showtree",v) +end) + +-- also for me + +do + + local applyvisuals = nuts.applyvisuals + local visual = false + + function handlers.makeup(head) + applyvisuals(head,visual) + end + + registertracker("math.makeup",function(v) + visual = v + setaction("math","noads.handlers.makeup",v) + end) + +end + +-- the normal builder + +do + + local force_penalties = false + + -- registertracker("math.penalties",function(v) + -- force_penalties = v + -- end) + + function builders.kernel.mlist_to_hlist(head,style,penalties) + return mlist_to_hlist(head,style,force_penalties or penalties) + end + + -- function builders.kernel.mlist_to_hlist(head,style,penalties) + -- local h = mlist_to_hlist(head,style,force_penalties or penalties) + -- inspect(nodes.totree(h,true,true,true)) + -- return h + -- end + + implement { + name = "setmathpenalties", + arguments = "integer", + actions = function(p) + force_penalties = p > 0 + end, + } + +end + +local actions = tasks.actions("math") -- head, style, penalties + +local starttiming, stoptiming = statistics.starttiming, statistics.stoptiming + +function processors.mlist_to_hlist(head,style,penalties) + starttiming(noads) + head = actions(head,style,penalties) + stoptiming(noads) + return head +end + +callbacks.register('mlist_to_hlist',processors.mlist_to_hlist,"preprocessing math list") + +-- tracing + +statistics.register("math processing time", function() + return statistics.elapsedseconds(noads) +end) diff --git a/tex/context/base/mkiv/math-noa.lua b/tex/context/base/mkiv/math-noa.lua index 188363847..1fb763a3b 100644 --- a/tex/context/base/mkiv/math-noa.lua +++ b/tex/context/base/mkiv/math-noa.lua @@ -203,7 +203,7 @@ local subbox_code = nodecodes.subbox -- attr list local submlist_code = nodecodes.submlist -- attr list local mathchar_code = nodecodes.mathchar -- attr fam char local mathtextchar_code = nodecodes.mathtextchar -- attr fam char -local delim_code = nodecodes.delim -- attr small_fam small_char large_fam large_char +local delimiter_code = nodecodes.delimiter -- attr small_fam small_char large_fam large_char ----- style_code = nodecodes.style -- attr style ----- parameter_code = nodecodes.parameter -- attr style local math_choice = nodecodes.choice -- attr display text script scriptscript @@ -282,7 +282,7 @@ local function process(start,what,n,parent) noad = getsuppre (start) if noad then process(noad,what,n,start) end -- list noad = getsubpre (start) if noad then process(noad,what,n,start) end -- list end - elseif id == mathchar_code or id == mathtextchar_code or id == delim_code then + elseif id == mathchar_code or id == mathtextchar_code or id == delimiter_code then break elseif id == subbox_code or id == submlist_code then local noad = getlist(start) if noad then process(noad,what,n,start) end -- list (not getlist !) @@ -583,7 +583,7 @@ do end end end - families[delim_code] = function(pointer) + families[delimiter_code] = function(pointer) if getfield(pointer,"small_fam") == 0 then local a = getattr(pointer,a_mathfamily) if a and a > 0 then @@ -615,7 +615,7 @@ do -- will become: - -- families[delim_code] = function(pointer) + -- families[delimiter_code] = function(pointer) -- if getfam(pointer) == 0 then -- local a = getattr(pointer,a_mathfamily) -- if a and a > 0 then @@ -758,7 +758,7 @@ do end end - relocate[delim_code] = function(pointer) + relocate[delimiter_code] = function(pointer) if trace_analyzing then setnodecolor(pointer,"font:fina") end diff --git a/tex/context/base/mkiv/math-pln.mkxl b/tex/context/base/mkiv/math-pln.mkxl new file mode 100644 index 000000000..2e090c224 --- /dev/null +++ b/tex/context/base/mkiv/math-pln.mkxl @@ -0,0 +1,245 @@ +%D \module +%D [ file=math-pln, +%D version=2001.11.16, +%D title=\CONTEXT\ Math Macros, +%D subtitle=Plain Helpers, +%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 collect some Plain \TEX\ leftovers. + +\writestatus{loading}{ConTeXt Math Macros / Plain Helpers} + +\unprotect + +% we need proper unicode: + +\def\relbar{\mathrel{\smash-}} % - has the same height as + .. no clue what this refers to + +% might change + +\protected\def\hrulefill{\leaders\hrule\hfill} +\protected\def\dotfill {\cleaders\hbox{\normalstartimath\mathsurround\zeropoint\mkern1.5mu.\mkern1.5mu\normalstopimath}\hfill} + +% will move + +\def\oalign#1% + {\leavevmode % plain tex uses this + \vtop + {\baselineskip\zeroskip + \lineskip.25\exheight + \ialign{\alignmark\alignmark\crcr#1\crcr}}} + +\def\ooalign % chars over each other + {\lineskiplimit-\maxdimen + \oalign} + +% needs checking + +\def\choose{\atopwithdelims()} +\def\brack {\atopwithdelims[]} +\def\brace {\atopwithdelims\{\}} + +% needs checking + +\protected\def\buildrel#1\over#2% + {\mathrel{\mathop{\kern\zeropoint#2}\limits^{#1}}} + +\protected\def\bmod + {\nonscript + \mskip-\medmuskip + \mkern5mu + \mfunction{mod}% + \penalty900 + \mkern5mu + \nonscript + \mskip-\medmuskip} + +\protected\def\pmod#1% + {\allowbreak + \mkern18mu + (\mfunction{mod}\mskip\medmuskip#1)} + +\protected\def\cases#1% + {\left\{% + \mskip\thinmuskip + \vcenter + {\normalbaselines + \mathsurround\zeropoint + \ialign{% + \normalstartimath\alignmark\alignmark\hfil\normalstopimath + \aligntab + \quad\alignmark\alignmark\hfil + \crcr + #1% + \crcr}}% + \right.} + +\protected\def\matrix#1% + {\emptyhbox + \mskip\thinmuskip + \vcenter + {\normalbaselines + \mathsurround\zeropoint + \ialign{% + \hfil\normalstartimath\alignmark\alignmark\normalstopimath\hfil + \aligntab + \aligntab + \quad\hfil\normalstartimath\alignmark\alignmark\normalstopimath\hfil + \crcr + \mathstrut + \crcr + \noalign{\kern-\baselineskip} + #1\crcr + \mathstrut + \crcr + \noalign{\kern-\baselineskip}}}% + \mskip\thinmuskip} + +\protected\def\pmatrix#1% + {\left(\matrix{#1}\right)} + +% \protected\def\openup +% {\afterassignment\math_openup\scratchdimen=} +% +% \def\math_openup +% {\advance\lineskip \scratchdimen +% \advance\baselineskip \scratchdimen +% \advance\lineskiplimit\scratchdimen} + +\let\math_closeup\relax + +\protected\def\math_openup + {\afterassignment\math_openup_indeed\scratchdimen} + +\def\math_openup_indeed + {\protected\edef\math_closeup + {\lineskip \the\lineskip + \baselineskip \the\baselineskip + \lineskiplimit\the\lineskiplimit + \relax}% + \advance \lineskip \scratchdimen + \advance \baselineskip \scratchdimen + \advance \lineskiplimit \scratchdimen} + +\let\openup \math_openup +\def\closeup{\math_closeup} % dynamic + +\protected\def\displaylines#1% + {\the\mathdisplayaligntweaks + \tabskip\zeroskip + \halign + {\hbox to \displaywidth{% + \normalstartimath\tabskip\zeroskip\everycr\emptytoks\hfil\displaystyle\alignmark\alignmark\hfil\normalstopimath}\crcr + #1\crcr}} + +%D This comes from plain but I gave it a \CONTEXT\ touch: + +\permanent\def\math_border_NC_indeed + {\enforced\global\def\math_border_NC{\aligntab}} + +\aliased\let\math_border_NC\math_border_NC_indeed + +\permanent\def\math_border_NR + {\enforced\global\let\math_border_NC\math_border_NC_indeed + \cr} + +\protected\def\math_border_matrix#1#2#3% adapted plain + {\begingroup + % + \setbox\scratchbox\hbox\bgroup + \mr B% + \egroup + \scratchdimenone\wd\scratchbox + % + \scratchdimentwo.2\bodyfontsize + % + \mathsurround\zeropoint + % + \enforced\def\NC{\math_border_NC}% + \enforced\def\NR{\math_border_NR}% + % + \gdef\m_math_border_matrix + {\kern\scratchdimentwo + \glet\m_math_border_matrix\relax}% + % + \setbox\scratchboxone\vbox\bgroup + \everycr{\noalign\bgroup\m_math_border_matrix\egroup}% + \tabskip \zeroskip + \halign{% \ialign resets everycr + \startimath\alignmark\alignmark\stopimath + \hfil + \kern\dimexpr\scratchdimentwo+\scratchdimenone\relax + \aligntab + \thinspace + \hfil + \startimath\alignmark\alignmark\stopimath + \hfil + \aligntab + \aligntab + \quad + \hfil + \startimath\alignmark\alignmark\stopimath + \hfil + \crcr + \omit + \strut + \hfil + \crcr + \noalign{\kern-\baselineskip}% + #3\crcr + \omit + \strut + \cr}% + \egroup + \setbox\scratchboxtwo\vbox\bgroup + \unvcopy\scratchboxone + \global\setbox\globalscratchbox\lastbox + \egroup + \setbox\scratchboxtwo\hbox\bgroup + \unhbox\globalscratchbox + \unskip + \global\setbox\globalscratchbox\lastbox + \egroup + \setbox\scratchboxtwo\hbox\bgroup + \startimath + \kern\dimexpr\wd\globalscratchbox-\scratchdimenone\relax + \left#1\relax + \kern-\wd\globalscratchbox + \global\setbox\globalscratchbox\vbox\bgroup + \box\globalscratchbox + \kern\scratchdimentwo + \egroup + \vcenter\bgroup + \kern-\ht\globalscratchbox + \unvbox\scratchboxone + \kern-\baselineskip + \egroup + \thinspace + \right#2\relax + \stopimath + \egroup + \null + \thickspace + \vbox\bgroup + \kern\ht\globalscratchbox + \box\scratchboxtwo + \egroup + % + \endgroup} + +\permanent\protected\def\bordermatrix {\math_border_matrix()} +\permanent\protected\def\bbordermatrix{\math_border_matrix[]} + +\permanent\protected\def\startbordermatrix #1\stopbordermatrix {\math_border_matrix(){#1}} +\permanent\protected\def\startbbordermatrix#1\stopbbordermatrix{\math_border_matrix[]{#1}} + +\permanent\let\stopbordermatrix \relax +\permanent\let\stopbbordermatrix\relax + +\protect \endinput diff --git a/tex/context/base/mkiv/math-tag.lmt b/tex/context/base/mkiv/math-tag.lmt new file mode 100644 index 000000000..eb58b5450 --- /dev/null +++ b/tex/context/base/mkiv/math-tag.lmt @@ -0,0 +1,596 @@ +if not modules then modules = { } end modules ['math-tag'] = { + version = 1.001, + comment = "companion to math-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- todo: have a local list with local tags that then get appended +-- todo: use tex.getmathcodes (no table) + +-- use lpeg matchers + +local find, match = string.find, string.match +local insert, remove, concat = table.insert, table.remove, table.concat + +local attributes = attributes +local nodes = nodes + +local nuts = nodes.nuts +local tonut = nuts.tonut + +local getnext = nuts.getnext +local getid = nuts.getid +local getchar = nuts.getchar +local getfont = nuts.getfont +local getlist = nuts.getlist +local getfield = nuts.getfield +local getdisc = nuts.getdisc +local getsubtype = nuts.getsubtype +local getattr = nuts.getattr +local getattrlist = nuts.getattrlist +local setattr = nuts.setattr +----- getcomponents = nuts.getcomponents -- not really needed +local getwidth = nuts.getwidth + +local getnucleus = nuts.getnucleus +local getsub = nuts.getsub +local getsup = nuts.getsup + +local set_attributes = nuts.setattributes + +local nextnode = nuts.traversers.node + +local nodecodes = nodes.nodecodes + +local noad_code = nodecodes.noad -- attr nucleus sub sup +local accent_code = nodecodes.accent -- attr nucleus sub sup accent +local radical_code = nodecodes.radical -- attr nucleus sub sup left degree +local fraction_code = nodecodes.fraction -- attr nucleus sub sup left right +local subbox_code = nodecodes.subbox -- attr list +local submlist_code = nodecodes.submlist -- attr list +local mathchar_code = nodecodes.mathchar -- attr fam char +local mathtextchar_code = nodecodes.mathtextchar -- attr fam char +local delimiter_code = nodecodes.delimiter -- attr small_fam small_char large_fam large_char +local style_code = nodecodes.style -- attr style +local choice_code = nodecodes.choice -- attr display text script scriptscript +local fence_code = nodecodes.fence -- attr subtype + +local accentcodes = nodes.accentcodes +local fencecodes = nodes.fencecodes + +local fixedtopaccent_code = accentcodes.fixedtop +local fixedbottomaccent_code = accentcodes.fixedbottom +local fixedbothaccent_code = accentcodes.fixedboth + +local leftfence_code = fencecodes.left +local middlefence_code = fencecodes.middle +local rightfence_code = fencecodes.right + +local kerncodes = nodes.kerncodes + +local fontkern_code = kerncodes.fontkern +local italickern_code = kerncodes.italickern + +local hlist_code = nodecodes.hlist +local vlist_code = nodecodes.vlist +local glyph_code = nodecodes.glyph +local disc_code = nodecodes.disc +local glue_code = nodecodes.glue +local kern_code = nodecodes.kern +local math_code = nodecodes.math + +local processnoads = noads.process + +local a_tagged = attributes.private('tagged') +local a_mathcategory = attributes.private('mathcategory') +local a_mathmode = attributes.private('mathmode') + +local tags = structures.tags + +local start_tagged = tags.start +local restart_tagged = tags.restart +local stop_tagged = tags.stop +local taglist = tags.taglist + +local chardata = characters.data + +local getmathcodes = tex.getmathcodes +local mathcodes = mathematics.codes +local ordinary_mathcode = mathcodes.ordinary +local variable_mathcode = mathcodes.variable + +local fromunicode16 = fonts.mappings.fromunicode16 +local fontcharacters = fonts.hashes.characters + +local report_tags = logs.reporter("structure","tags") + +local process + +local function processsubsup(start) + -- At some point we might need to add an attribute signaling the + -- super- and subscripts because TeX and MathML use a different + -- order. The mrows are needed to keep mn's separated. + local nucleus = getnucleus(start) + local sup = getsup(start) + local sub = getsub(start) + if sub then + if sup then + setattr(start,a_tagged,start_tagged("msubsup")) + -- start_tagged("mrow") + process(nucleus) + -- stop_tagged() + start_tagged("mrow", { subscript = true }) + process(sub) + stop_tagged() + start_tagged("mrow", { superscript = true }) + process(sup) + stop_tagged() + stop_tagged() + else + setattr(start,a_tagged,start_tagged("msub")) + -- start_tagged("mrow") + process(nucleus) + -- stop_tagged() + start_tagged("mrow") + process(sub) + stop_tagged() + stop_tagged() + end + elseif sup then + setattr(start,a_tagged,start_tagged("msup")) + -- start_tagged("mrow") + process(nucleus) + -- stop_tagged() + start_tagged("mrow") + process(sup) + stop_tagged() + stop_tagged() + else + process(nucleus) + end +end + +-- todo: check function here and keep attribute the same + +-- todo: variants -> original + +local actionstack = { } +local fencesstack = { } + +-- glyph nodes and such can happen in under and over stuff + +-- local function getunicode(n) -- instead of getchar +-- local char = getchar(n) +-- -- local font = getfontoffamily(getfield(n,"fam")) +-- local font = getfont(n) +-- local data = fontcharacters[font][char] +-- return data.unicode or char +-- end + +local function getunicode(n) -- instead of getchar + -- local char, font = isglyph(n) -- no, we have a mathchar + local char, font = getchar(n), getfont(n) + local data = fontcharacters[font][char] + return data.unicode or char -- can be a table but unlikely for math characters +end + +------------------- + +local content = { } +local found = false + +content[mathchar_code] = function() found = true end + +local function hascontent(head) + found = false + processnoads(head,content,"content") + return found +end + +-------------------- + +-- todo: use properties + +-- local function showtag(n,id,old) +-- local attr = getattr(n,a_tagged) +-- local curr = tags.current() +-- report_tags("%s, node %s, attr %s:%s (%s), top %s (%s)", +-- old and "before" or "after ", +-- nodecodes[id], +-- getattrlist(n), +-- attr or "?",attr and taglist[attr].tagname or "?", +-- curr or "?",curr and taglist[curr].tagname or "?" +-- ) +-- end + +process = function(start) -- we cannot use the processor as we have no finalizers (yet) + local mtexttag = nil + while start do + local id = getid(start) +-- showtag(start,id,true) + if id == glyph_code or id == disc_code then + if not mtexttag then + mtexttag = start_tagged("mtext") + end + setattr(start,a_tagged,mtexttag) + elseif mtexttag and id == kern_code and (getsubtype(start) == fontkern_code or getsubtype(start) == italickern_code) then -- italickern + setattr(start,a_tagged,mtexttag) + else + if mtexttag then + stop_tagged() + mtexttag = nil + end + if id == mathchar_code then + local char = getchar(start) + local code = getmathcodes(char) + local tag + if code == ordinary_mathcode or code == variable_mathcode then + local ch = chardata[char] + local mc = ch and ch.mathclass + if mc == "number" then + tag = "mn" + elseif mc == "variable" or not mc then -- variable is default + tag = "mi" + else + tag = "mo" + end + else + tag = "mo" + end + local a = getattr(start,a_mathcategory) + if a then + setattr(start,a_tagged,start_tagged(tag,{ mathcategory = a })) + else + setattr(start,a_tagged,start_tagged(tag)) -- todo: a_mathcategory + end + stop_tagged() + -- showtag(start,id,false) + break -- okay? + elseif id == mathtextchar_code then -- or id == glyph_code + -- check for code + local a = getattr(start,a_mathcategory) + if a then + setattr(start,a_tagged,start_tagged("ms",{ mathcategory = a })) -- mtext + else + setattr(start,a_tagged,start_tagged("ms")) -- mtext + end + stop_tagged() + -- showtag(start,id,false) + break + elseif id == delimiter_code then + -- check for code + setattr(start,a_tagged,start_tagged("mo")) + stop_tagged() + -- showtag(start,id,false) + break + elseif id == style_code then + -- has a next + elseif id == noad_code then + -- setattr(start,a_tagged,tags.current()) + processsubsup(start) + elseif id == subbox_code or id == hlist_code or id == vlist_code then + -- keep an eye on subbox_code and see what ends up in there + local attr = getattr(start,a_tagged) + if not attr then + -- just skip + else + local specification = taglist[attr] + if specification then + local tag = specification.tagname + if tag == "formulacaption" then + -- skip + elseif tag == "mstacker" then + local list = getlist(start) + if list then + process(list) + end + else + if tag ~= "mstackertop" and tag ~= "mstackermid" and tag ~= "mstackerbot" then + tag = "mtext" + end + local text = start_tagged(tag) + setattr(start,a_tagged,text) + local list = getlist(start) + if not list then + -- empty list + elseif not attr then + -- box comes from strange place + set_attributes(list,a_tagged,text) -- only the first node ? + else + -- Beware, the first node in list is the actual list so we definitely + -- need to nest. This approach is a hack, maybe I'll make a proper + -- nesting feature to deal with this at another level. Here we just + -- fake structure by enforcing the inner one. + -- + -- todo: have a local list with local tags that then get appended + -- + local tagdata = specification.taglist + local common = #tagdata + 1 + local function runner(list,depth) -- quite inefficient + local cache = { } -- we can have nested unboxed mess so best local to runner + local keep = nil + -- local keep = { } -- win case we might need to move keep outside + for n, id, subtype in nextnode, list do + local mth = id == math_code and subtype + if mth == 0 then -- hm left_code + -- insert(keep,text) + keep = text + text = start_tagged("mrow") + common = common + 1 + end + local aa = getattr(n,a_tagged) + if aa then + local ac = cache[aa] + if not ac then + local tagdata = taglist[aa].taglist + local extra = #tagdata + if common <= extra then + for i=common,extra do + ac = restart_tagged(tagdata[i]) -- can be made faster + end + for i=common,extra do + stop_tagged() -- can be made faster + end + else + ac = text + end + cache[aa] = ac + end + setattr(n,a_tagged,ac) + else + setattr(n,a_tagged,text) + end + if id == hlist_code or id == vlist_code then + runner(getlist(n),depth+1) + elseif id == glyph_code then + -- this should not be needed + -- local components = getcomponents(n) -- unlikely set + -- if components then + -- runner(getcomponent,depth+1) + -- end + elseif id == disc_code then + -- this should not be needed + local pre, post, replace = getdisc(n) + if pre then + runner(pre,depth+1) + end + if post then + runner(post,depth+1) + end + if replace then + runner(replace,depth+1) + end + end + if mth == 1 then + stop_tagged() + -- text = remove(keep) + text = keep + common = common - 1 + end + end + end + runner(list,0) + end + stop_tagged() + end + end + end + elseif id == submlist_code then -- normally a hbox + local list = getlist(start) + if list then + local attr = getattr(start,a_tagged) + local last = attr and taglist[attr] + if last then + local tag = last.tagname + local detail = last.detail + if tag == "maction" then + if detail == "" then + setattr(start,a_tagged,start_tagged("mrow")) + process(list) + stop_tagged() + elseif actionstack[#actionstack] == action then + setattr(start,a_tagged,start_tagged("mrow")) + process(list) + stop_tagged() + else + insert(actionstack,action) + setattr(start,a_tagged,start_tagged("mrow",{ detail = action })) + process(list) + stop_tagged() + remove(actionstack) + end + elseif tag == "mstacker" then -- or tag == "mstackertop" or tag == "mstackermid" or tag == "mstackerbot" then + -- looks like it gets processed twice + -- do we still end up here ? + setattr(start,a_tagged,restart_tagged(attr)) -- so we just reuse the attribute + process(list) + stop_tagged() + else + setattr(start,a_tagged,start_tagged("mrow")) + process(list) + stop_tagged() + end + else -- never happens, we're always document + setattr(start,a_tagged,start_tagged("mrow")) + process(list) + stop_tagged() + end + end + elseif id == fraction_code then + local num = getfield(start,"num") + local denom = getfield(start,"denom") + local left = getfield(start,"left") + local right = getfield(start,"right") + if left then + setattr(left,a_tagged,start_tagged("mo")) + process(left) + stop_tagged() + end + setattr(start,a_tagged,start_tagged("mfrac")) + process(num) + process(denom) + stop_tagged() + if right then + setattr(right,a_tagged,start_tagged("mo")) + process(right) + stop_tagged() + end + elseif id == choice_code then + local display = getfield(start,"display") + local text = getfield(start,"text") + local script = getfield(start,"script") + local scriptscript = getfield(start,"scriptscript") + if display then + process(display) + end + if text then + process(text) + end + if script then + process(script) + end + if scriptscript then + process(scriptscript) + end + elseif id == fence_code then + local subtype = getsubtype(start) + local delim = getfield(start,"delimiter") + if subtype == leftfence_code then + -- left + local properties = { } + insert(fencesstack,properties) + setattr(start,a_tagged,start_tagged("mfenced",properties)) -- needs checking + if delim then + start_tagged("ignore") + local chr = getchar(delim) + if chr ~= 0 then + properties.left = chr + end + process(delim) + stop_tagged() + end + start_tagged("mrow") -- begin of subsequence + elseif subtype == middlefence_code then + -- middle + if delim then + start_tagged("ignore") + local top = fencesstack[#fencesstack] + local chr = getchar(delim) + if chr ~= 0 then + local mid = top.middle + if mid then + mid[#mid+1] = chr + else + top.middle = { chr } + end + end + process(delim) + stop_tagged() + end + stop_tagged() -- end of subsequence + start_tagged("mrow") -- begin of subsequence + elseif subtype == rightfence_code then + local properties = remove(fencesstack) + if not properties then + report_tags("missing right fence") + properties = { } + end + if delim then + start_tagged("ignore") + local chr = getchar(delim) + if chr ~= 0 then + properties.right = chr + end + process(delim) + stop_tagged() + end + stop_tagged() -- end of subsequence + stop_tagged() + else + -- can't happen + end + elseif id == radical_code then + local left = getfield(start,"left") + local degree = getfield(start,"degree") + if left then + start_tagged("ignore") + process(left) -- root symbol, ignored + stop_tagged() + end + if degree and hascontent(degree) then + setattr(start,a_tagged,start_tagged("mroot")) + processsubsup(start) + process(degree) + stop_tagged() + else + setattr(start,a_tagged,start_tagged("msqrt")) + processsubsup(start) + stop_tagged() + end + elseif id == accent_code then + local subtype = getsubtype(start) + local accent = getfield(start,"accent") + local bot_accent = getfield(start,"bot_accent") + if bot_accent then + if accent then + setattr(start,a_tagged,start_tagged("munderover", { + accent = true, + top = getunicode(accent), + bottom = getunicode(bot_accent), + topfixed = subtype == fixedtopaccent_code or subtype == fixedbothaccent_code, + bottomfixed = subtype == fixedbottomaccent_code or subtype == fixedbothaccent_code, + })) + processsubsup(start) + process(bot_accent) + process(accent) + stop_tagged() + else + setattr(start,a_tagged,start_tagged("munder", { + accent = true, + bottom = getunicode(bot_accent), + bottomfixed = subtype == fixedbottomaccent_code or subtype == fixedbothaccent_code, + })) + processsubsup(start) + process(bot_accent) + stop_tagged() + end + elseif accent then + setattr(start,a_tagged,start_tagged("mover", { + accent = true, + top = getunicode(accent), + topfixed = subtype == fixedtopaccent_code or subtype == fixedbothaccent_code, + })) + processsubsup(start) + process(accent) + stop_tagged() + else + processsubsup(start) + end + elseif id == glue_code then + -- setattr(start,a_tagged,start_tagged("mspace",{ width = getwidth(start) })) + setattr(start,a_tagged,start_tagged("mspace")) + stop_tagged() + else + setattr(start,a_tagged,start_tagged("merror", { detail = nodecodes[i] })) + stop_tagged() + end + end +-- showtag(start,id,false) + start = getnext(start) + end + if mtexttag then + stop_tagged() + end +end + +function noads.handlers.tags(head,style,penalties) + start_tagged("math", { mode = (getattr(head,a_mathmode) == 1) and "display" or "inline" }) + setattr(head,a_tagged,start_tagged("mrow")) +-- showtag(head,getid(head),true) + process(head) +-- showtag(head,getid(head),false) + stop_tagged() + stop_tagged() +end diff --git a/tex/context/base/mkiv/math-tag.lua b/tex/context/base/mkiv/math-tag.lua index 9267e0f39..41373fcb5 100644 --- a/tex/context/base/mkiv/math-tag.lua +++ b/tex/context/base/mkiv/math-tag.lua @@ -52,7 +52,7 @@ local subbox_code = nodecodes.subbox -- attr list local submlist_code = nodecodes.submlist -- attr list local mathchar_code = nodecodes.mathchar -- attr fam char local mathtextchar_code = nodecodes.mathtextchar -- attr fam char -local delim_code = nodecodes.delim -- attr small_fam small_char large_fam large_char +local delimiter_code = nodecodes.delimiter -- attr small_fam small_char large_fam large_char local style_code = nodecodes.style -- attr style local choice_code = nodecodes.choice -- attr display text script scriptscript local fence_code = nodecodes.fence -- attr subtype @@ -259,7 +259,7 @@ process = function(start) -- we cannot use the processor as we have no finalizer stop_tagged() -- showtag(start,id,false) break - elseif id == delim_code then + elseif id == delimiter_code then -- check for code setattr(start,a_tagged,start_tagged("mo")) stop_tagged() diff --git a/tex/context/base/mkiv/math-toy.mkxl b/tex/context/base/mkiv/math-toy.mkxl index 4cc65aaa6..510872e3b 100644 --- a/tex/context/base/mkiv/math-toy.mkxl +++ b/tex/context/base/mkiv/math-toy.mkxl @@ -27,19 +27,18 @@ %D $\dorecurse{199}{x_{#1} \ifodd#1\relax\Plus\else\Minus\fi} x_{200} \Equal n$ \blank %D \stoptyping -\unexpanded\def\definemathtoysymbol - {\dotripleargument\math_toy_define_symbol} +\permanent\tolerant\protected\def\definemathtoysymbol[#1]#*[#2]#*[#3]% + {\ifarguments\or\or\or + \setuevalue{#1}{\math_toy_define_symbol_indeed{\mathcodechecked{#2}}{#3}}% + \fi} -\def\math_toy_define_symbol[#1][#2][#3]% - {\setuevalue{#1}{\math_toy_define_symbol_indeed{\mathcodechecked{#2}}{#3}}} - -\unexpanded\def\math_toy_define_symbol_traced#1#2% +\protected\def\math_toy_define_symbol_traced#1#2% {\normalexpanded{\discretionary class #1 % {$\Ustyle\number\mathstyle \darkred #2$}% {$\Ustyle\number\mathstyle \darkblue #2$}% {$\Ustyle\number\mathstyle \darkgreen #2$}}} -\unexpanded\def\math_toy_define_symbol_normal#1#2% +\protected\def\math_toy_define_symbol_normal#1#2% {\normalexpanded{\discretionary class #1 % {$\Ustyle\number\mathstyle #2$}% {$\Ustyle\number\mathstyle #2$}% diff --git a/tex/context/base/mkiv/meta-blb.lua b/tex/context/base/mkiv/meta-blb.lua index 9ee57d80d..c690f3902 100644 --- a/tex/context/base/mkiv/meta-blb.lua +++ b/tex/context/base/mkiv/meta-blb.lua @@ -293,7 +293,7 @@ function mp.mf_inject_blob(category,str) newblob(category,str) -- only for tracing mp_category = category mp_str = str - tex.runtoks("mpblobtext") + tex.runlocal("mpblobtext") end interfaces.implement { diff --git a/tex/context/base/mkiv/meta-ini.mkxl b/tex/context/base/mkiv/meta-ini.mkxl index 28fe09b9e..2ca54a38b 100644 --- a/tex/context/base/mkiv/meta-ini.mkxl +++ b/tex/context/base/mkiv/meta-ini.mkxl @@ -11,6 +11,8 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. +%D Some lmtx upgrading work needs to be done here. + % initializations: % % - pass settings from tex to mp (delayed expansion) @@ -87,10 +89,7 @@ %D Anyway, the whole multiple engine mechanism is to keep her gnuplot from %D interfering. -\unexpanded\def\startMPdefinitions - {\dosinglegroupempty\meta_start_definitions} - -\def\meta_start_definitions#1#2\stopMPdefinitions +\permanent\tolerant\protected\def\startMPdefinitions#=#:#2\stopMPdefinitions {\let\m_meta_saved_instance\currentMPinstance \edef\currentMPinstance{#1}% \ifempty\currentMPinstance @@ -99,65 +98,48 @@ \gtoksapp\t_meta_definitions{#2}% \let\currentMPinstance\m_meta_saved_instance} -\let\stopMPdefinitions\relax - -\unexpanded\def\startMPextensions - {\dosinglegroupempty\meta_start_extensions} +\permanent\let\stopMPdefinitions\relax -\def\meta_start_extensions#1#2\stopMPextensions % we could use buffers instead +\permanent\tolerant\protected\def\startMPextensions#=#:#2\stopMPextensions % we could use buffers instead {\clf_setmpextensions{#1}{#2}} -\let\stopMPextensions\relax +\permanent\let\stopMPextensions\relax -\unexpanded\def\startMPinitializations#1\stopMPinitializations % for all instances, when enabled +\permanent\protected\def\startMPinitializations#1\stopMPinitializations % for all instances, when enabled {\gtoksapp\t_meta_initializations{#1}} -\let\stopMPinitializations\relax - -\unexpanded\def\startMPinclusions - {\dosingleempty\meta_start_inclusions} - -\unexpanded\def\meta_start_inclusions[#1]% - {\edef\m_meta_option{#1}% - \dosinglegroupempty\meta_start_inclusions_indeed} +\permanent\let\stopMPinitializations\relax -\def\meta_start_inclusions_indeed#1#2\stopMPinclusions - {\let\m_meta_saved_instance\currentMPinstance - \edef\currentMPinstance{#1}% +\permanent\tolerant\protected\def\startMPinclusions[#1]#*#=#:#3\stopMPinclusions + {\let\m_meta_saved_instance\currentMPinstance % \pushmacro + \edef\currentMPinstance{#2}% \ifempty\currentMPinstance \let\currentMPinstance\defaultMPinstance \fi - \ifx\m_meta_option\!!plustoken \else + \iftok{#1}{+}\else \global\t_meta_inclusions\emptytoks \fi - \gtoksapp\t_meta_inclusions{#2}% - \let\currentMPinstance\m_meta_saved_instance} + \gtoksapp\t_meta_inclusions{#3}% + \let\currentMPinstance\m_meta_saved_instance} % \popmacro -\let\stopMPinclusions\relax +\permanent\let\stopMPinclusions\relax % The next was broken since we added instances so it will go away! -\unexpanded\def\MPinclusions - {\dosingleempty\meta_inclusions} - -\def\meta_inclusions[#1]% - {\edef\m_meta_option{#1}% - \dodoublegroupempty\meta_inclusions_indeed} - -\def\meta_inclusions_indeed#1#2% +\permanent\tolerant\protected\def\MPinclusions[#1]#:#*#=#:#*#=% {\let\m_meta_saved_instance\currentMPinstance - \ifx\m_meta_option\!!plustoken \else + \iftok{#1}{+}\else \global\t_meta_inclusions\emptytoks \fi - \ifsecondargument - \edef\currentMPinstance{#1}% - \ifx\currentMPinstance\empty + \ifparameter#3\or + \edef\currentMPinstance{#2}% + \ifempty\currentMPinstance \let\currentMPinstance\defaultMPinstance \fi - \gtoksapp\t_meta_inclusions{#2}% + \gtoksapp\t_meta_inclusions{#3}% \else \let\currentMPinstance\defaultMPinstance - \gtoksapp\t_meta_inclusions{#1}% + \gtoksapp\t_meta_inclusions{#2}% \fi \let\currentMPinstance\m_meta_saved_instance} @@ -184,7 +166,7 @@ \t_meta_inclusions \emptytoks % in case we redefine \to \everydefineMPinstance -\unexpanded\def\resetMPinstance[#1]% +\permanent\protected\def\resetMPinstance[#1]% {\writestatus\m!metapost{reset will be implemented when needed}} \def\meta_analyze_graphicname[#1]% @@ -201,7 +183,7 @@ {\let\meta_show_properties\meta_show_properties_indeed} {\let\meta_show_properties\donothing} -\unexpanded\def\meta_analyze_graphicname_indeed[#1::#2::#3]% instance :: +\protected\def\meta_analyze_graphicname_indeed[#1::#2::#3]% instance :: {\edef\currentMPgraphicname{#2}% \ifempty\currentMPgraphicname \edef\currentMPgraphicname{#1}% @@ -296,7 +278,7 @@ \meta_relocate_graphic \popMPboundingbox} -\unexpanded\def\meta_process_graphic_instance#1% +\protected\def\meta_process_graphic_instance#1% {\edef\currentMPinstance{#1}% \ifempty\currentMPinstance \let\currentMPinstance\defaultMPinstance @@ -304,7 +286,7 @@ \edef\currentMPformat{\MPinstanceparameter\s!format}% \meta_process_graphic} -\unexpanded\def\meta_process_graphic#1% todo: extensions and inclusions outside beginfig +\protected\def\meta_process_graphic#1% todo: extensions and inclusions outside beginfig {\meta_start_current_graphic \forgetall \edef\p_extensions{\MPinstanceparameter\s!extensions}% @@ -329,7 +311,7 @@ \let\meta_process_graphic_figure_start\relax \let\meta_process_graphic_figure_stop \relax -\unexpanded\def\processMPfigurefile#1% special case: obeys beginfig .. endfig and makes pages +\permanent\protected\def\processMPfigurefile#1% special case: obeys beginfig .. endfig and makes pages {\begingroup \let\normal_meta_process_graphic_start\meta_process_graphic_start \let\normal_meta_process_graphic_stop \meta_process_graphic_stop @@ -348,7 +330,7 @@ % \csname\??mpgraphic#1\endcsname ; % ; is safeguard % \fi} % -% \unexpanded\def\meta_enable_include % public +% \protected\def\meta_enable_include % public % {\let\meta_handle_use_graphic \thirdofthreearguments % \let\meta_handle_reusable_graphic\thirdofthreearguments} % @@ -363,7 +345,7 @@ % so we cannot overload unless we let back to the original meanings each graphic % ... a better solution is: -\def\includeMPgraphic#1% gets expanded ! +\permanent\def\includeMPgraphic#1% gets expanded ! {\ifcsname\??mpgraphic#1\endcsname \doubleexpandafter\fourthoffourarguments\lastnamedcs ; % ; is safeguard \fi} @@ -374,31 +356,31 @@ \newif\ifMPdrawingdone \MPdrawingdonefalse -\unexpanded\def\finalizeMPdrawing +\permanent\protected\def\finalizeMPdrawing {\MPdrawingdonetrue} \let\MPdrawingdata\empty -\unexpanded\def\resetMPdrawing +\permanent\protected\def\resetMPdrawing {\glet\MPdrawingdata\empty \global\MPdrawingdonefalse} -\unexpanded\def\pushMPdrawing +\permanent\protected\def\pushMPdrawing {\globalpushmacro\MPdrawingdata \glet\MPdrawingdata\empty} -\unexpanded\def\popMPdrawing +\permanent\protected\def\popMPdrawing {\globalpopmacro\MPdrawingdata} -\unexpanded\def\getMPdrawing +\permanent\protected\def\getMPdrawing {\ifMPdrawingdone \expandafter\meta_process_graphic\expandafter{\MPdrawingdata}% is this expansion still needed? \fi} -\def\startMPdrawing - {\dosingleempty\meta_start_drawing} +\permanent\tolerant\def\startMPdrawing[#1]% todo: use pickup #: + {\meta_start_drawing#1} -\def\meta_start_drawing[#1]#2\stopMPdrawing % to be redone, this ascii stuff +\def\meta_start_drawing#1#2\stopMPdrawing % to be redone, this ascii stuff {\relax \bgroup \meta_enable_include @@ -406,21 +388,21 @@ \xdef\MPdrawingdata{\MPdrawingdata\asciia}% \egroup} -\let\stopMPdrawing\relax +\permanent\let\stopMPdrawing\relax -\def\MPdrawing#1% +\permanent\def\MPdrawing#1% {\relax \bgroup \meta_enable_include \xdef\MPdrawingdata{\MPdrawingdata#1}% \egroup} -\unexpanded\def\startMPclip#1#2\stopMPclip % todo: store at the lua end or just store less +\permanent\protected\def\startMPclip#1#2\stopMPclip % todo: store at the lua end or just store less {\setgvalue{\??mpclip#1}{#2}} -\let\stopMPclip\relax +\permanent\let\stopMPclip\relax -\unexpanded\def\meta_grab_clip_path#1#2#3% +\protected\def\meta_grab_clip_path#1#2#3% {\begingroup \d_overlay_width #2\relax \d_overlay_height#3\relax @@ -458,7 +440,7 @@ %D Since we want labels to follow the document settings, we also set the font %D related variables. -\unexpanded\def\MPfontsizehskip#1% +\permanent\protected\def\MPfontsizehskip#1% {\dontleavehmode \begingroup \definedfont[#1]% @@ -509,41 +491,33 @@ \def\meta_prepare_variable_default{\MPcolor{black}} % just to be sure we use a color but ... -\unexpanded\def\setupMPvariables - {\dodoubleempty\meta_setup_variables} - -\def\meta_setup_variables[#1][#2]% - {\ifsecondargument - \getrawparameters[\??graphicvariable#1:][#2]% - \else +\permanent\tolerant\protected\def\setupMPvariables[#1]#*[#2]% + {\ifarguments + \or \getrawparameters[\??graphicvariable:][#1]% + \else + \getrawparameters[\??graphicvariable#1:][#2]% \fi} -\unexpanded\def\presetMPvariable - {\dodoubleargument\meta_preset_variable} - -\def\meta_preset_variable[#1][#2=#3]% +\permanent\tolerant\protected\def\presetMPvariable[#1]#*[#2=#3]% {\ifcsname\??graphicvariable#1:#2\endcsname \else \setvalue{\??graphicvariable#1:#2}{#3}% \fi} -\def\MPrawvar#1#2% no checking +\permanent\def\MPrawvar#1#2% no checking {\begincsname\??graphicvariable#1:#2\endcsname} -\def\MPvariable#1% todo: could be a framed chain +\permanent\def\MPvariable#1% todo: could be a framed chain {\begincsname\??graphicvariable\currentmpvariableclass:#1\endcsname} -\unexpanded\def\useMPvariables - {\dodoubleargument\meta_use_variables} - -\def\meta_use_variables[#1][#2]% +\permanent\tolerant\protected\def\useMPvariables[#1]#*[#2]% {\edef\currentmpvariableclass{#1}% \meta_prepare_variables{#2}} -\unexpanded\def\meta_prepare_variables#1% +\protected\def\meta_prepare_variables#1% {\processcommalist[#1]\meta_prepare_variable} -\unexpanded\def\meta_prepare_variable#1% +\protected\def\meta_prepare_variable#1% {\edef\m_meta_current_variable_template {\??graphicvariable\currentmpvariableclass:#1}% \edef\m_meta_current_variable @@ -554,10 +528,10 @@ \expandafter\meta_prepare_variable_yes \fi} -\unexpanded\def\meta_prepare_instance_variables +\protected\def\meta_prepare_instance_variables {\expandafter\processcommalist\expandafter[\m_meta_instance_variables]\meta_prepare_instance_variable} -\unexpanded\def\meta_prepare_instance_variable#1% +\protected\def\meta_prepare_instance_variable#1% {\edef\m_meta_current_variable_template {\??graphicvariable\currentmpvariableclass:#1}% \edef\m_meta_current_variable @@ -617,6 +591,8 @@ %D \stopuniqueMPgraphic %D \stoptyping +% todo: frozen or not? + \def\overlaystamp % watch the \MPcolor, since colors can be redefined {\the\d_overlay_width :% \the\d_overlay_height :% @@ -647,39 +623,39 @@ % hm, isn't this already done elsewhere? -\unexpanded\def\meta_obey_box_depth +\protected\def\meta_obey_box_depth {\setbox\b_meta_graphic\hpack\bgroup \raise\MPlly\box\b_meta_graphic \egroup} -\unexpanded\def\meta_ignore_box_depth +\protected\def\meta_ignore_box_depth {\normalexpanded - {\meta_obey_box_depth % hence the \unexpanded + {\meta_obey_box_depth % hence the \protected \wd\b_meta_graphic\the\wd\b_meta_graphic \ht\b_meta_graphic\the\ht\b_meta_graphic \dp\b_meta_graphic\the\dp\b_meta_graphic}} -\unexpanded\def\meta_obey_box_origin +\protected\def\meta_obey_box_origin {\setbox\b_meta_graphic\hpack\bgroup \kern\MPllx\raise\MPlly\box\b_meta_graphic \egroup} -\unexpanded\def\obeyMPboxdepth {\let\meta_relocate_box\meta_obey_box_depth} -\unexpanded\def\ignoreMPboxdepth{\let\meta_relocate_box\meta_ignore_box_depth} -\unexpanded\def\obeyMPboxorigin {\let\meta_relocate_box\meta_obey_box_origin} -\unexpanded\def\normalMPboxdepth{\let\meta_relocate_box\relax} +\permanent\protected\def\obeyMPboxdepth {\let\meta_relocate_box\meta_obey_box_depth} +\permanent\protected\def\ignoreMPboxdepth{\let\meta_relocate_box\meta_ignore_box_depth} +\permanent\protected\def\obeyMPboxorigin {\let\meta_relocate_box\meta_obey_box_origin} +\permanent\protected\def\normalMPboxdepth{\let\meta_relocate_box\relax} \let\meta_relocate_box\relax -\unexpanded\def\meta_place_graphic % the converter also displaces so in fact we revert +\protected\def\meta_place_graphic % the converter also displaces so in fact we revert {\meta_relocate_box \box\b_meta_graphic} -\unexpanded\def\meta_reuse_box#1#2#3#4#5% space delimiting would save some tokens +\protected\def\meta_reuse_box#1#2#3#4#5% space delimiting would save some tokens {\MPllx#2\MPlly#3\MPurx#4\MPury#5% \hpack{\forcecolorhack\getobject{MP}{#1}}} % else no proper color intent -\unexpanded\def\meta_use_box +\protected\def\meta_use_box {\setunreferencedobject{MP}} \def\meta_handle_unique_graphic#1#2#3% when there are too many, we can store data at the lua end, although, @@ -697,21 +673,20 @@ \fi \endgroup} -\unexpanded\def\startuniqueMPgraphic +% todo: we partially expand + +\protected\def\startuniqueMPgraphic {\dodoublegroupempty\meta_start_unique_graphic} -\let\stopuniqueMPgraphic\relax +\permanent\let\stopuniqueMPgraphic\relax \def\meta_start_unique_graphic#1% {\normalexpanded{\meta_start_unique_graphic_indeed{#1}}} -\unexpanded\def\meta_start_unique_graphic_indeed#1#2#3\stopuniqueMPgraphic +\permanent\protected\def\meta_start_unique_graphic_indeed#1#2#3\stopuniqueMPgraphic {\setgvalue{\??mpgraphic#1}{\meta_handle_unique_graphic{#1}{#2}{#3}}} -\unexpanded\def\uniqueMPgraphic - {\dodoublegroupempty\meta_unique_graphic} - -\def\meta_unique_graphic#1#2% +\permanent\tolerant\protected\def\uniqueMPgraphic#=#*#=% {\meta_begin_graphic_group{#1}% \setupMPvariables[#1][#2]% \begincsname\??mpgraphic#1\endcsname\empty @@ -728,26 +703,26 @@ \meta_process_graphic{#3}% \endgroup} -\unexpanded\def\startuseMPgraphic +\permanent\protected\def\startuseMPgraphic % todo, modernize {\dodoublegroupempty\meta_start_use_graphic} -\let\stopuseMPgraphic\relax +\permanent\let\stopuseMPgraphic\relax \def\meta_start_use_graphic#1% {\normalexpanded{\meta_start_use_graphic_indeed{#1}}} -\unexpanded\def\meta_start_use_graphic_indeed#1#2#3\stopuseMPgraphic +\protected\def\meta_start_use_graphic_indeed#1#2#3\stopuseMPgraphic {\setgvalue{\??mpgraphic#1}{\meta_handle_use_graphic{#1}{#2}{#3}}} -\unexpanded\def\startusableMPgraphic % redundant but handy +\permanent\protected\def\startusableMPgraphic % redundant but handy % todo, modernize {\dodoublegroupempty\meta_start_usable_graphic} -\let\stopusableMPgraphic\relax +\permanent\let\stopusableMPgraphic\relax \def\meta_start_usable_graphic#1% {\normalexpanded{\meta_start_usable_graphic_indeed{#1}}} -\unexpanded\def\meta_start_usable_graphic_indeed#1#2#3\stopusableMPgraphic +\protected\def\meta_start_usable_graphic_indeed#1#2#3\stopusableMPgraphic {\setgvalue{\??mpgraphic#1}{\meta_handle_use_graphic{#1}{#2}{#3}}} \def\meta_handle_reusable_graphic#1#2#3% @@ -764,21 +739,18 @@ \csname\??mpgraphic#1\endcsname\empty \endgroup} -\unexpanded\def\startreusableMPgraphic +\permanent\protected\def\startreusableMPgraphic % todo, modernize {\dodoublegroupempty\meta_start_reusable_graphic} -\let\stopreusableMPgraphic\relax +\permanent\let\stopreusableMPgraphic\relax \def\meta_start_reusable_graphic#1% {\normalexpanded{\meta_start_reusable_graphic_indeed{#1}}} -\unexpanded\def\meta_start_reusable_graphic_indeed#1#2#3\stopreusableMPgraphic +\protected\def\meta_start_reusable_graphic_indeed#1#2#3\stopreusableMPgraphic {\setgvalue{\??mpgraphic#1}{\meta_handle_reusable_graphic{#1}{#2}{#3}}} -\unexpanded\def\useMPgraphic - {\dodoublegroupempty\meta_use_graphic} - -\def\meta_use_graphic#1#2% +\permanent\tolerant\protected\def\useMPgraphic#=#*#=% {\meta_begin_graphic_group{#1}% \ifcsname\??mpgraphic#1\endcsname \edef\usedMPgraphicname{#1}% @@ -795,8 +767,8 @@ \fi \meta_end_graphic_group} -\let\reuseMPgraphic \useMPgraphic % we can save a setup here if needed -\let\reusableMPgraphic\reuseMPgraphic % we can save a setup here if needed +\aliased\let\reuseMPgraphic \useMPgraphic % we can save a setup here if needed +\aliased\let\reusableMPgraphic\reuseMPgraphic % we can save a setup here if needed %D \macros %D {startuniqueMPpagegraphic,uniqueMPpagegraphic} @@ -815,22 +787,19 @@ \MPcolor\overlaycolor :% \MPcolor\overlaylinecolor} -\unexpanded\def\startuniqueMPpagegraphic +\permanent\tolerant\protected\def\startuniqueMPpagegraphic % todo the modern way {\dodoublegroupempty\meta_start_unique_page_graphic} -\let\stopuniqueMPpagegraphic\relax +\permanent\let\stopuniqueMPpagegraphic\relax \def\meta_start_unique_page_graphic#1% {\normalexpanded{\meta_start_unique_page_graphic_indeed{#1}}} -\unexpanded\def\meta_start_unique_page_graphic_indeed#1#2#3\stopuniqueMPpagegraphic % inefficient, double storage - {\setgvalue{\??mpgraphic o:#1}{\meta_handle_unique_graphic{o:#1}{#2}{#3}}% % but these also keep the state - \setgvalue{\??mpgraphic e:#1}{\meta_handle_unique_graphic{e:#1}{#2}{#3}}} % and meaning will be redefined +\protected\def\meta_start_unique_page_graphic_indeed#1#2#3\stopuniqueMPpagegraphic % inefficient, double storage + {\setgvalue{\??mpgraphic o:#1}{\meta_handle_unique_graphic{o:#1}{#2}{#3}}% % but these also keep the state + \setgvalue{\??mpgraphic e:#1}{\meta_handle_unique_graphic{e:#1}{#2}{#3}}} % and meaning will be redefined -\unexpanded\def\uniqueMPpagegraphic - {\dodoublegroupempty\meta_unique_page_graphic} - -\def\meta_unique_page_graphic#1#2% +\permanent\tolerant\protected\def\uniqueMPpagegraphic#=#=% {\meta_begin_graphic_group{#1}% \let\overlaystamp\overlaypagestamp \setupMPvariables[\m_meta_page_prefix:#1][#2]% prefix is new here @@ -849,36 +818,30 @@ %D Since we need to feed \METAPOST\ with expanded dimensions, we introduce a %D dedicated expansion engine. We redefine \type {\extendMPoverlaystamp} to -\unexpanded\def\extendMPoverlaystamp#1% +\permanent\protected\def\extendMPoverlaystamp#1% {\processcommalist[#1]\meta_extend_overlay_stamp} \def\meta_extend_overlay_stamp#1% {\meta_prepare_instance_variable{#1}% \edef\overlaystamp{\overlaystamp:\MPvariable{#1}}} -\unexpanded\def\getMPdata {\clf_getMPdata} - \let\rawMPdata \clf_getMPdata +\permanent\protected\def\getMPdata {\clf_getMPdata} + \let\rawMPdata \clf_getMPdata % we need frozen at the lua end -\unexpanded\def\getMPstored{\clf_getMPstored} - \let\rawMPstored \clf_getMPstored +\permanent\protected\def\getMPstored{\clf_getMPstored} + \let\rawMPstored \clf_getMPstored % we need frozen at the lua end %D We need this trick because we need to make sure that the tex scanner sees %D newlines and does not quit. Also, we do need to flush the buffer under a normal %D catcode regime in order to expand embedded tex macros. As usual with buffers, %D \type {#1} can be a list. -\unexpanded\def\processMPbuffer - {\dosingleempty\meta_process_buffer} - -\def\meta_process_buffer[#1]% +\permanent\tolerant\protected\def\processMPbuffer[#1]% {\meta_begin_graphic_group{#1}% \meta_process_graphic{\clf_feedback{\currentMPgraphicname}}% \meta_end_graphic_group} -\unexpanded\def\runMPbuffer - {\dosingleempty\meta_run_buffer} - -\def\meta_run_buffer[#1]% processing only +\permanent\tolerant\protected\def\runMPbuffer[#1]% {\startnointerference\meta_process_buffer[#1]\stopnointerference} %D \macros @@ -887,12 +850,12 @@ %D In order to synchronize the main \TEX\ run and the runs local to \METAPOST, %D environments can be passed. -\unexpanded\def\startMPenvironment +\protected\def\startMPenvironment {\begingroup - \catcode\endoflineasciicode \ignorecatcode - \dosingleempty\meta_start_environment} + \catcode\endoflineasciicode\ignorecatcode + \meta_start_environment} -\def\meta_start_environment[#1]#2\stopMPenvironment +\tolerant\def\meta_start_environment[#1]#:#2\stopMPenvironment {\endgroup \edef\m_meta_option{#1} \ifx\m_meta_option\s!reset @@ -904,12 +867,12 @@ \fi \clf_mptexset{\detokenize{#2}}} -\let\stopMPenvironment\relax +\permanent\let\stopMPenvironment\relax -\unexpanded\def\resetMPenvironment +\protected\def\resetMPenvironment {\clf_mptexreset} -\unexpanded\def\useMPenvironmentbuffer[#1]% +\protected\def\useMPenvironmentbuffer[#1]% {\clf_mptexsetfrombuffer{#1}} %D This command takes \type {[reset]} as optional argument. @@ -926,56 +889,35 @@ %D %D The most simple case: -\unexpanded\def\startMPcode - {\dosinglegroupempty\meta_start_code} - -\let\stopMPcode\relax - -\def\meta_start_code - {\iffirstargument - \expandafter\meta_start_code_instance - \else - \expandafter\meta_start_code_standard - \fi} - -\def\meta_start_code_instance#1#2\stopMPcode +\permanent\tolerant\protected\def\startMPcode#=#:#2\stopMPcode {\begingroup \edef\currentMPinstance{#1}% + \ifempty\currentMPinstance + \let\currentMPinstance\defaultMPinstance + \fi \let\currentMPgraphicname\empty \edef\currentMPformat{\MPinstanceparameter\s!format}% \meta_enable_include \meta_process_graphic{#2}% \endgroup} -\def\meta_start_code_standard#1#2\stopMPcode - {\begingroup - \let\currentMPinstance\defaultMPinstance - \let\currentMPgraphicname\empty - \edef\currentMPformat{\MPinstanceparameter\s!format}% - \meta_process_graphic{#2}% - \endgroup} +\permanent\let\stopMPcode\relax -\unexpanded\def\MPcode - {\dodoublegroupempty\meta_code} +%D This one is not optimized because it's only used for small snippets, if it +%D is used at all. -\def\meta_code - {\ifsecondargument - \expandafter\meta_code_instance +\permanent\tolerant\protected\def\MPcode#=#:#*#=% + {\ifparameter#1\or + \meta_begin_graphic_group{#1}% + \meta_enable_include + \meta_process_graphic{#2}% + \meta_end_graphic_group \else - \expandafter\meta_code_standard + \let\currentMPinstance\defaultMPinstance + \meta_enable_include + \meta_process_graphic{#1}% \fi} -\def\meta_code_instance#1#2% - {\meta_begin_graphic_group{#1}% - \meta_enable_include - \meta_process_graphic{#2}% - \meta_end_graphic_group} - -\def\meta_code_standard#1#2% - {\let\currentMPinstance\defaultMPinstance - \meta_enable_include - \meta_process_graphic{#1}} - % a bit nasty (also needed for compatibility: % \startMPrun input mp-www.mp ; \stopMPrun @@ -986,25 +928,16 @@ \let\MPruninstance\defaultMPinstance -\unexpanded\def\useMPrun#1#2% name n +\permanent\protected\def\useMPrun#1#2% name n {\begingroup \def\MPaskedfigure{#2}% - \doifelsenothing{#1} - {\useMPgraphic{mprun}}% - {\useMPgraphic{#1}}% + \normalexpanded{\useMPgraphic{\iftok{#1}\emptytoks mprun\else#1\fi}}% \endgroup} -\unexpanded\def\startMPrun - {\dosinglegroupempty\meta_start_run} - -\def\meta_start_run#1#2\stopMPrun - {\iffirstargument - \startuseMPgraphic{#1}#2\stopuseMPgraphic - \else - \startuseMPgraphic{mprun}#2\stopuseMPgraphic - \fi} +\permanent\tolerant\protected\def\startMPrun#=#:#2\stopMPrun + {\normalexpanded{\startuseMPgraphic{\iftok{#1}\emptytoks mprun\else#1\fi}}#2\stopuseMPgraphic} -\let\stopMPrun\relax +\permanent\let\stopMPrun\relax %D The \type {\resetMPenvironment} is a quick way to erase %D the token list. @@ -1031,7 +964,7 @@ %D Loading specific \METAPOST\ related definitions is %D accomplished by: -\unexpanded\def\useMPlibrary[#1]{\clf_useMPlibrary{#1}} +\permanent\protected\def\useMPlibrary[#1]{\clf_useMPlibrary{#1}} %D \macros %D {setMPtext, MPtext, MPstring, MPbetex} @@ -1048,13 +981,13 @@ \installcorenamespace{mptext} -\unexpanded\def\setMPtext#1#2% todo : #1 must be made : safe - {\defconvertedargument\ascii{#2}% +\permanent\protected\def\setMPtext#1#2% todo : #1 must be made : safe + {\defconvertedargument\ascii{#2}% hm, kind of old fashioned, this \dodoglobal\letvalue{\??mptext#1}\ascii} -\def\MPtext #1{\begincsname\??mptext#1\endcsname\empty} -\def\MPstring#1{"\begincsname\??mptext#1\endcsname\empty"} -\def\MPbetex #1{btex \begincsname\??mptext#1\endcsname\space etex} +\permanent\def\MPtext #1{\begincsname\??mptext#1\endcsname\empty} +\permanent\def\MPstring#1{"\begincsname\??mptext#1\endcsname\empty"} +\permanent\def\MPbetex #1{btex \begincsname\??mptext#1\endcsname\space etex} %D In order to communicate conveniently with the \TEX\ engine, we introduce some %D typesetting variables. @@ -1139,11 +1072,11 @@ \to \everyMPgraphic \appendtoks - \let \# \letterhash - \let \_ \letterunderscore - \let \& \letterampersand - \let \{ \letteropenbrace - \let \} \letterclosebrace + \enforced\let\#\letterhash + \enforced\let\_\letterunderscore + \enforced\let\&\letterampersand + \enforced\let\{\letteropenbrace + \enforced\let\}\letterclosebrace \to \everyMPgraphic %D \macros @@ -1205,7 +1138,7 @@ %D You won't believe me if I tell you what funny side effects can occur. One took me %D over a day to uncover when processing the screen version of the \METAFUN\ manual. -\def\doifelseMPgraphic#1% +\permanent\def\doifelseMPgraphic#1% {\ifcsname\??mpgraphic #1\endcsname\expandafter\firstoftwoarguments \orelse \ifcsname\??mpgraphic o:#1\endcsname\expandafter\firstoftwoarguments \orelse \ifcsname\??mpgraphic e:#1\endcsname\expandafter\firstoftwoarguments \else @@ -1285,22 +1218,16 @@ %D %D \typebuffer \getbuffer -\unexpanded\def\startstaticMPfigure#1#2\stopstaticMPfigure +\permanent\protected\def\startstaticMPfigure#1#2\stopstaticMPfigure {\startreusableMPgraphic{\??mpstaticgraphic#1}#2\stopreusableMPgraphic} -\unexpanded\def\startstaticMPgraphic - {\dodoublegroupempty\meta_start_static_graphic} - -\def\meta_start_static_graphic#1#2#3\stopstaticMPgraphic +\permanent\tolerant\protected\def\startstaticMPgraphic#=#:#=#:#3\stopstaticMPgraphic {\startreusableMPgraphic{\??mpstaticgraphic#1}{#2}#3\stopreusableMPgraphic} -\let\stopstaticMPfigure \relax -\let\stopstaticMPgraphic\relax - -\unexpanded\def\usestaticMPfigure - {\dodoubleempty\meta_use_static_figure} +\permanent\let\stopstaticMPfigure \relax +\permanent\let\stopstaticMPgraphic\relax -\def\meta_use_static_figure[#1][#2]% +\permanent\tolerant\protected\def\usestaticMPfigure[#1]#*[#2]% {\ifsecondargument \scale[#2]{\reuseMPgraphic{\??mpstaticgraphic#1}}% \else @@ -1309,8 +1236,8 @@ %D Goody for preventing overflows: -%def\MPdivten[#1]{\withoutpt\the\dimexpr#1pt/10\relax} -\def\MPdivten[#1]{\thewithoutunit\dimexpr#1pt/10\relax} +%frozen\def\MPdivten[#1]{\withoutpt\the\dimexpr#1pt/10\relax} +\permanent\def\MPdivten[#1]{\thewithoutunit\dimexpr#1pt/10\relax} %D There is no way to distinguish the black color that you get when you issue a %D \type {draw} without color specification from a color that has an explicit black @@ -1384,9 +1311,9 @@ %D $(x,y) = (\MPrunset{point}{,})$ %D \stoptyping -\def\MPrunvar #1{\clf_mprunvar{#1}} \let\mprunvar\MPrunvar -\def\MPruntab#1#2{\clf_mpruntab{#1}#2\relax} \let\mpruntab\MPruntab % #2 is number -\def\MPrunset#1#2{\clf_mprunset{#1}{#2}} \let\mprunset\MPrunset +\permanent\def\MPrunvar #1{\clf_mprunvar{#1}} \let\mprunvar\MPrunvar +\permanent\def\MPruntab#1#2{\clf_mpruntab{#1}#2\relax} \let\mpruntab\MPruntab % #2 is number +\permanent\def\MPrunset#1#2{\clf_mprunset{#1}{#2}} \let\mprunset\MPrunset \prependtoks \clf_mppushvariables \to \everybeforepagebody \appendtoks \clf_mppopvariables \to \everyafterpagebody @@ -1396,22 +1323,13 @@ %D We also provide an outputless run: -\unexpanded\def\startMPcalculation +\permanent\tolerant\protected\def\startMPcalculation#=#:#2\stopMPcalculation {\begingroup \setbox\nextbox\hpack\bgroup - \dosinglegroupempty\meta_start_calculation} - -\let\stopMPcalculation\relax - -\def\meta_start_calculation - {\iffirstargument - \expandafter\meta_start_calculation_instance - \else - \expandafter\meta_start_calculation_standard - \fi} - -\def\meta_start_calculation_instance#1#2\stopMPcalculation - {\edef\currentMPinstance{#1}% + \edef\currentMPinstance{#1}% + \ifempty\currentMPinstance + \let\currentMPinstance\defaultMPinstance + \fi \let\currentMPgraphicname\empty \edef\currentMPformat{\MPinstanceparameter\s!format}% \meta_enable_include @@ -1419,13 +1337,7 @@ \egroup \endgroup} -\def\meta_start_calculation_standard#1#2\stopMPcalculation - {\let\currentMPinstance\defaultMPinstance - \let\currentMPgraphicname\empty - \edef\currentMPformat{\MPinstanceparameter\s!format}% - \meta_process_graphic{#2;draw origin}% - \egroup - \endgroup} +\permanent\let\stopMPcalculation\relax %D \macros %D {setupMPgraphics} @@ -1466,9 +1378,9 @@ %D Some more helpers (see \type {meta-grd.mkiv} for an example of usage): -\def\MPdpar#1#2{\the\dimexpr#1#2\relax\empty} -\def\MPnpar#1#2{\the\numexpr#1#2\relax\empty} -\def\MPspar#1#2{"#1#2"} +\permanent\def\MPdpar#1#2{\the\dimexpr#1#2\relax\empty} +\permanent\def\MPnpar#1#2{\the\numexpr#1#2\relax\empty} +\permanent\def\MPspar#1#2{"#1#2"} %D Done. diff --git a/tex/context/base/mkiv/meta-mac.mkxl b/tex/context/base/mkiv/meta-mac.mkxl index 7ced2aff9..76b7396ae 100644 --- a/tex/context/base/mkiv/meta-mac.mkxl +++ b/tex/context/base/mkiv/meta-mac.mkxl @@ -13,40 +13,16 @@ \unprotect -\unexpanded\def\defineMPparameterset[#1]{\clf_lmt_parameters_define{#1}} -\unexpanded\def\presetMPparameters [#1]{\clf_lmt_parameters_preset{#1}} -\unexpanded\def\resetMPparameters [#1]{\clf_lmt_parameters_reset {#1}} +\permanent\protected\def\defineMPparameterset[#1]{\clf_lmt_parameters_define{#1}} +\permanent\protected\def\presetMPparameters [#1]{\clf_lmt_parameters_preset{#1}} +\permanent\protected\def\resetMPparameters [#1]{\clf_lmt_parameters_reset {#1}} -% \unexpanded\def\useMPgraphic -% {\doifnextoptionalelse\meta_use_MP_graphic_yes\meta_use_MP_graphic_nop} - -% \def\meta_use_MP_graphic_nop -% {\dodoublegroupempty\meta_use_graphic} - -% \def\meta_use_MP_graphic_yes -% {\dodoubleempty\meta_use_graphic_new} - -% \def\meta_use_graphic_new[#1][#2]% -% {\begingroup -% % If really needed weh can use grouplevel but normally these graphics are -% % not nested. -% \clf_lmt_parameters_preset{#1}[#2]% -% \meta_use_graphic{#1}{}% -% \clf_lmt_parameters_reset{#1}% -% \endgroup} - -\unexpanded\def\useMPmacro - {\dotripleempty\meta_use_macro} - -\def\meta_use_macro[#1][#2][#3]% - {\ifthirdargument - \meta_begin_graphic_group{#1}% +\permanent\tolerant\protected\def\useMPmacro[#1]#*[#2]#*[#3]% + {\ifarguments\or + \let\currentMPinstance\defaultMPinstance \meta_enable_include - \clf_lmt_parameters_preset{#2}[#3]% - \meta_process_graphic{lmt_#2;}% - \clf_lmt_parameters_reset{#2}% - \meta_end_graphic_group - \orelse\ifsecondargument + \meta_process_graphic{lmt_#1;}% + \or \doifelseassignment{#2} {\let\currentMPinstance\defaultMPinstance \meta_enable_include @@ -57,10 +33,13 @@ \meta_enable_include \meta_process_graphic{lmt_#1;}% \meta_end_graphic_group}% - \else - \let\currentMPinstance\defaultMPinstance + \or + \meta_begin_graphic_group{#1}% \meta_enable_include - \meta_process_graphic{lmt_#1;}% + \clf_lmt_parameters_preset{#2}[#3]% + \meta_process_graphic{lmt_#2;}% + \clf_lmt_parameters_reset{#2}% + \meta_end_graphic_group \fi} \protect diff --git a/tex/context/base/mkiv/mlib-pdf.lua b/tex/context/base/mkiv/mlib-pdf.lua index 3945ffcfe..e737b5d86 100644 --- a/tex/context/base/mkiv/mlib-pdf.lua +++ b/tex/context/base/mkiv/mlib-pdf.lua @@ -363,18 +363,20 @@ end local stack = { } local function pushproperties(figure) + -- maybe there will be getters in lmtx local boundingbox = figure:boundingbox() + local slot = figure:charcode() or 0 local properties = { llx = boundingbox[1], lly = boundingbox[2], urx = boundingbox[3], ury = boundingbox[4], - slot = figure:charcode(), + slot = slot, width = figure:width(), height = figure:height(), depth = figure:depth(), - italic = figure:italcorr(), - number = figure:charcode() or 0, + italic = figure:italcorr(), -- figure:italic() in lmtx + number = slot, } insert(stack,properties) metapost.properties = properties diff --git a/tex/context/base/mkiv/mlib-pdf.mkxl b/tex/context/base/mkiv/mlib-pdf.mkxl index 763e7ecdd..90a5b5a86 100644 --- a/tex/context/base/mkiv/mlib-pdf.mkxl +++ b/tex/context/base/mkiv/mlib-pdf.mkxl @@ -30,7 +30,7 @@ \ifdefined\MPbox \else \newbox \MPbox \fi -\unexpanded\def\setMPboundingbox#1#2#3#4% at some point we might pass them as base or scaled points +\permanent\protected\def\setMPboundingbox#1#2#3#4% at some point we might pass them as base or scaled points {\global\MPllx #1\onebasepoint \global\MPlly #2\onebasepoint \global\MPurx #3\onebasepoint @@ -38,7 +38,7 @@ \global\MPwidth \dimexpr\MPurx-\MPllx\relax \global\MPheight\dimexpr\MPury-\MPlly\relax} -\unexpanded\def\resetMPboundingbox +\permanent\protected\def\resetMPboundingbox {\global\MPwidth \zeropoint \global\MPheight\zeropoint \global\MPllx \zeropoint @@ -48,8 +48,8 @@ \let\popMPboundingbox\relax -\unexpanded\def\pushMPboundingbox - {\edef\popMPboundingbox +\permanent\protected\def\pushMPboundingbox + {\enforced\permanent\protected\edef\popMPboundingbox {\global\MPwidth \the\MPwidth \global\MPheight\the\MPheight \global\MPllx \the\MPllx @@ -60,14 +60,14 @@ % we need to combine these -\unexpanded\def\repositionMPboxindeed +\permanent\protected\def\repositionMPboxindeed {\setbox\MPbox\hpack\bgroup \kern-\MPllx \raise-\MPlly \box\MPbox \egroup} -\unexpanded\def\repositionMPbox +\permanent\protected\def\repositionMPbox {\ifzeropt\MPllx \ifzeropt\MPlly % okay @@ -78,20 +78,9 @@ \repositionMPboxindeed \fi} -\unexpanded\def\finalizeMPbox - {\repositionMPbox - \setbox\MPbox\vpack to \MPheight\bgroup - \vfill - \hsize\MPwidth - \smashbox\MPbox - \box\MPbox - \egroup - \wd\MPbox\MPwidth - \ht\MPbox\MPheight} - % combined -\unexpanded\def\finalizeMPbox +\permanent\protected\def\finalizeMPbox {\boxxoffset\MPbox-\MPllx\relax \boxyoffset\MPbox\dimexpr\boxyoffset\MPbox-\MPheight-\MPlly\relax \wd\MPbox\MPwidth @@ -99,9 +88,9 @@ % MPLIB specific: -\def\MPLIBtoPDF{\clf_mpflushliteral} % expanded +\permanent\def\MPLIBtoPDF{\clf_mpflushliteral} % expanded -\unexpanded\def\startMPLIBtoPDF#1#2#3#4% +\permanent\protected\def\startMPLIBtoPDF#1#2#3#4% {\meta_process_graphic_figure_start \dostarttagged\t!mpgraphic\empty \naturalhpack attr \imageattribute \plusone \bgroup @@ -111,7 +100,7 @@ % \forgetall % already done elsewhere \noindent} % forces the proper cm in the backend -\unexpanded\def\stopMPLIBtoPDF +\permanent\protected\def\stopMPLIBtoPDF {\egroup \finalizeMPbox \box\MPbox @@ -119,7 +108,7 @@ \dostoptagged \meta_process_graphic_figure_stop} -\def\MPLIBflushreset % This can (will) move to the Lua end. +\permanent\protected\def\MPLIBflushreset % This can (will) move to the Lua end. {\clf_mpflushreset} %D Kind of special: @@ -136,19 +125,21 @@ % \directMPgraphic{input "test.mp" ;} % \stoptext -\let\normalstartMPLIBtoPDF\startMPLIBtoPDF -\let\normalstopMPLIBtoPDF \stopMPLIBtoPDF +\aliased\let\normalstartMPLIBtoPDF\startMPLIBtoPDF +\aliased\let\normalstopMPLIBtoPDF \stopMPLIBtoPDF + +\permanent\protected\def\directstartMPLIBtoPDF{\startTEXpage\normalstartMPLIBtoPDF} +\permanent\protected\def\directstopMPLIBtoPDF {\normalstopMPLIBtoPDF\stopTEXpage} -\unexpanded\def\directstartMPLIBtoPDF{\startTEXpage\normalstartMPLIBtoPDF} -\unexpanded\def\directstopMPLIBtoPDF {\normalstopMPLIBtoPDF\stopTEXpage} +% can become \permanent\protected\def\directMPgraphic#=#*#=% but best test first -\unexpanded\def\directMPgraphic +\permanent\protected\def\directMPgraphic {\dodoublegroupempty\mlib_direct_graphic} \def\mlib_direct_graphic#1#2% makes pages (todo: make boxes) {\meta_begin_graphic_group{#1}% - \let\startMPLIBtoPDF\directstartMPLIBtoPDF - \let\stopMPLIBtoPDF \directstopMPLIBtoPDF + \enforced\let\startMPLIBtoPDF\directstartMPLIBtoPDF + \enforced\let\stopMPLIBtoPDF \directstopMPLIBtoPDF \meta_start_current_graphic \forgetall \edef\p_extensions{\MPinstanceparameter\s!extensions}% diff --git a/tex/context/base/mkiv/mlib-pps.lua b/tex/context/base/mkiv/mlib-pps.lua index e34bfe5f9..140acd185 100644 --- a/tex/context/base/mkiv/mlib-pps.lua +++ b/tex/context/base/mkiv/mlib-pps.lua @@ -25,7 +25,7 @@ local setmacro = interfaces.setmacro local texsetbox = tex.setbox local textakebox = tex.takebox -- or: nodes.takebox -local texruntoks = tex.runtoks +local texrunlocal = tex.runlocal local copy_list = node.copy_list local flush_list = node.flush_list local setmetatableindex = table.setmetatableindex @@ -858,7 +858,7 @@ local tx_reset, tx_process do mp_t = nil top.texstrings[mp_index] = str top.texregimes[mp_index] = regime or -1 - texruntoks("mptexttoks") + texrunlocal("mptexttoks") local box = textakebox("mptextbox") top.textexts[mp_target] = box mp.triplet(bp*box.width,bp*box.height,bp*box.depth) @@ -922,7 +922,7 @@ local tx_reset, tx_process do if overload then top.texstrings[mp_index] = map.template or map.label or "error" top.texregimes[mp_index] = regime or -1 - texruntoks("mptexttoks") + texrunlocal("mptexttoks") local box = textakebox("mptextbox") or new_hlist() width = bp * box.width where = overload.where @@ -930,7 +930,7 @@ local tx_reset, tx_process do -- the real text top.texstrings[mp_index] = overload and overload.text or text or "error" top.texregimes[mp_index] = regime or -1 - texruntoks("mptexttoks") + texrunlocal("mptexttoks") local box = textakebox("mptextbox") or new_hlist() local twd = bp * box.width local tht = bp * box.height @@ -1047,7 +1047,7 @@ local tx_reset, tx_process do local mp_hash = prescript.tx_cache local box if mp_hash == "no" then - texruntoks("mptexttoks") + texrunlocal("mptexttoks") box = textakebox("mptextbox") else local cache = data.texhash @@ -1080,7 +1080,7 @@ local tx_reset, tx_process do if box then box = copy_list(box) else - texruntoks("mptexttoks") + texrunlocal("mptexttoks") box = textakebox("mptextbox") cache[mp_hash] = box end @@ -1163,7 +1163,7 @@ local gt_reset, gt_process do if not graphics[index] then mp_index = index mp_str = str - texruntoks("mpgraphictexttoks") + texrunlocal("mpgraphictexttoks") end end @@ -1584,7 +1584,7 @@ local ot_reset, ot_process do mp_index = index mp_kind = kind mp_str = str - texruntoks("mpoutlinetoks") + texrunlocal("mpoutlinetoks") end end diff --git a/tex/context/base/mkiv/mult-aux.mkxl b/tex/context/base/mkiv/mult-aux.mkxl index 1df5bcf24..c1c99edbd 100644 --- a/tex/context/base/mkiv/mult-aux.mkxl +++ b/tex/context/base/mkiv/mult-aux.mkxl @@ -21,7 +21,7 @@ \unprotect -\edef\??empty{\Uchar25} \letvalue{\Uchar25}\empty % hex 19 +\immutable\edef\??empty{\Uchar25} \immutable\letvalue{\Uchar25}\empty % hex 19 % \edef\s!parent{\Uchar29} % inlining  is ugly, a tiny bit faster, but neglectable on a run @@ -174,26 +174,17 @@ \let\m_mult_interfaces_namespace\empty -\def\mult_interfaces_get_parameters#1[#2% - {\if\noexpand#2]% - \expandafter\gobbleoneargument - \else - \def\m_mult_interfaces_namespace{#1}% - \expandafter\mult_interfaces_get_parameters_indeed - \fi#2} +\def\mult_interfaces_get_parameters#1[% + {\def\m_mult_interfaces_namespace{#1}% + \futureexpandis]\gobbleoneargument\mult_interfaces_get_parameters_indeed} -\def\mult_interfaces_get_parameters_indeed#1]% namespace already set +\def\mult_interfaces_get_parameters_indeed#1]% {\mult_interfaces_get_parameters_item#1\ignorearguments\ignorearguments} -\def\mult_interfaces_get_parameters_item_next - {\expandafterspaces\mult_interfaces_get_parameters_item} - -\def\mult_interfaces_get_parameters_item#1,% - {\ifarguments - % done - \else +\def\mult_interfaces_get_parameters_item#*#1,% + {\ifarguments \else \mult_interfaces_get_parameters_item_okay#1,\ignorearguments - \expandafter\mult_interfaces_get_parameters_item_next + \expandafter\mult_interfaces_get_parameters_item \fi} \def\mult_interfaces_get_parameters_item_okay#1=#2,% @@ -219,25 +210,16 @@ \or \mult_interfaces_get_parameters_item_error \else - \expandafter\def\csname\m_mult_interfaces_namespace#1\endcsname{#2}% + \defcsname\m_mult_interfaces_namespace#1\endcsname{#2}% \fi} -% \def\mult_interfaces_get_parameters_item_error#0\csname#2#3\endcsname#0% -% {\if,#3\else\mult_interfaces_get_parameters_error_indeed{#2}{#3}\fi} - - \def\mult_interfaces_get_parameters_item_error#-\csname#1#2\endcsname#-% + \def\mult_interfaces_get_parameters_item_error#-\defcsname#1#2\endcsname#-% {\if,#2\else\mult_interfaces_get_parameters_error_indeed{#1}{#2}\fi} \stopinterface %D Used? -% \def\mult_check_for_assignment_indeed#0=#2#0^^^^0004% -% {\if#2^^^^0003\assignmentfalse\else\assignmenttrue\fi} -% -% \def\mult_check_for_assignment_indeed_begin_#0=#2#0^^^^0004% -% {\if#2^^^^0003} - \def\mult_check_for_assignment_indeed#-=#1#-^^^^0004% {\if#1^^^^0003\assignmentfalse\else\assignmenttrue\fi} @@ -258,20 +240,13 @@ %D and that only the high level setup commands are used with language specific %D interfaces. -% \protected\def\mult_interfaces_let #1#2{\expandafter\let \csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} -% \protected\def\mult_interfaces_lete#1#2{\expandafter\let \csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname\empty} -% \protected\def\mult_interfaces_def #1#2{\expandafter\def \csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} -% \protected\def\mult_interfaces_edef#1#2{\expandafter\edef\csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} -% \protected\def\mult_interfaces_gdef#1#2{\expandafter\gdef\csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} -% \protected\def\mult_interfaces_xdef#1#2{\expandafter\xdef\csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} - % \startinterface english - \protected\def\mult_interfaces_let #1#2{\expandafter \let\csname#1#2\endcsname} - \protected\def\mult_interfaces_lete#1#2{\expandafter \let\csname#1#2\endcsname\empty} - \protected\def\mult_interfaces_def #1#2{\expandafter \def\csname#1#2\endcsname} - \protected\def\mult_interfaces_edef#1#2{\expandafter\edef\csname#1#2\endcsname} - \protected\def\mult_interfaces_gdef#1#2{\expandafter\gdef\csname#1#2\endcsname} - \protected\def\mult_interfaces_xdef#1#2{\expandafter\xdef\csname#1#2\endcsname} + \protected\def\mult_interfaces_let #1#2{\letcsname#1#2\endcsname} + \protected\def\mult_interfaces_lete#1#2{\letcsname#1#2\endcsname\empty} + \protected\def\mult_interfaces_def #1#2{\defcsname#1#2\endcsname} + \protected\def\mult_interfaces_edef#1#2{\edefcsname#1#2\endcsname} + \protected\def\mult_interfaces_gdef#1#2{\globaldef\csname#1#2\endcsname} + \protected\def\mult_interfaces_xdef#1#2{\globaledef\csname#1#2\endcsname} % \stopinterface %D Do, we only interface the assignment definition: @@ -279,7 +254,7 @@ \protected\def\mult_interfaces_adef#1#2{\expandafter\def \csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} \startinterface english - \protected\def\mult_interfaces_adef#1#2{\expandafter \def\csname#1#2\endcsname} + \protected\def\mult_interfaces_adef#1#2{\defcsname#1#2\endcsname} \stopinterface % the commented detokenized variant that backtracks ... needs testing usage first @@ -299,19 +274,17 @@ \def\mult_interfaces_detokenize{\expandafter\expandafter\expandafter\detokenize\expandafter\expandafter\expandafter} \protected\def\mult_interfaces_install_parameter_handler#1#2#3#4#5#6#7#8#9% inlining \csname*\endcsname is more efficient (#3 and #6 only) - {\ifx#2\relax\let#2\empty\fi % it is hardly faster but produces less expansion tracing - \def#3##1{\csname\ifcsname#1#2:##1\endcsname#1#2:##1\else\expandafter#5\csname#1#2:\s!parent\endcsname{##1}\fi\endcsname}% - \def#4##1##2{\ifcsname##1:##2\endcsname##1:##2\else\expandafter#5\csname##1:\s!parent\endcsname{##2}\fi}% - %\def#5##1##2{\ifx##1\relax\??empty\else#4{##1}{##2}\fi}% is {} needed around ##1 ? - %\def#5##1##2{\ifx##1\relax\??empty\else#4##1{##2}\fi}% is {} needed around ##1 ? - %\def#5##1##2{\ifx##1\relax^^^^0019\else#4##1{##2}\fi}% is {} needed around ##1 ? - \edef#5##1##2{\noexpand\ifx##1\relax\??empty\noexpand\else\noexpand#4##1{##2}\noexpand\fi}% is {} needed around ##1 ? - \def#6##1##2{\csname\ifcsname#1##1:##2\endcsname#1##1:##2\else\expandafter#5\csname#1##1:\s!parent\endcsname{##2}\fi\endcsname}% - \def#7##1{\detokenize\expandafter\expandafter\expandafter{\csname#1#2:##1\endcsname}}% always root, no backtrack - \def#8##1{\begincsname#1#2:##1\endcsname} - \def#9##1##2{\expandafter\let\expandafter##1\csname\ifcsname#1#2:##2\endcsname#1#2:##2\else\expandafter#5\csname#1#2:\s!parent\endcsname{##2}\fi\endcsname}} - -\protected\def\installparameterhandler#1#2% + {\ifx#2\relax\let#2\empty\fi % it is hardly faster but produces less expansion tracing + \frozen\def#3##1{\csname\ifcsname#1#2:##1\endcsname#1#2:##1\else\expandafter#5\csname#1#2:\s!parent\endcsname{##1}\fi\endcsname}% + \frozen\def#4##1##2{\ifcsname##1:##2\endcsname##1:##2\else\expandafter#5\csname##1:\s!parent\endcsname{##2}\fi}% + \frozen\edef#5##1##2{\noexpand\ifx##1\relax\??empty\noexpand\else\noexpand#4##1{##2}\noexpand\fi}% is {} needed around ##1 ? + \frozen\def#6##1##2{\csname\ifcsname#1##1:##2\endcsname#1##1:##2\else\expandafter#5\csname#1##1:\s!parent\endcsname{##2}\fi\endcsname}% + \frozen\def#7##1{\detokenize\expandafter\expandafter\expandafter{\csname#1#2:##1\endcsname}}% always root, no backtrack + \frozen\def#8##1{\begincsname#1#2:##1\endcsname}% + % TODO + \frozen\def#9##1##2{\expandafter\let\expandafter##1\csname\ifcsname#1#2:##2\endcsname#1#2:##2\else\expandafter#5\csname#1#2:\s!parent\endcsname{##2}\fi\endcsname}} + +\permanent\protected\def\installparameterhandler#1#2% {\normalexpanded {\mult_interfaces_install_parameter_handler {\noexpand#1}% \??aa @@ -325,10 +298,10 @@ \expandafter\noexpand\csname letfrom#2parameter\endcsname}} % strict#2parameter is gone \protected\def\mult_interfaces_install_root_parameter_handler#1#2#3% - {\def#2##1{\detokenize\expandafter\expandafter\expandafter{\csname#1:##1\endcsname}}% always root - \def#3##1{\begincsname#1:##1\endcsname}} + {\frozen\def#2##1{\detokenize\expandafter\expandafter\expandafter{\csname#1:##1\endcsname}}% always root + \frozen\def#3##1{\begincsname#1:##1\endcsname}} -\protected\def\installrootparameterhandler#1#2% +\permanent\protected\def\installrootparameterhandler#1#2% {\normalexpanded {\mult_interfaces_install_root_parameter_handler {\noexpand#1}% \??aa @@ -337,18 +310,17 @@ \protected\def\mult_interfaces_install_parameter_hash_handler#1#2#3#4#5#6#7#8#9% {\ifx#2\relax\let#2\empty\fi - \def#3##1{#1#4{#1#2}{##1}:}% leading #1 was missing .. is this one used? - \def#4##1##2{\ifcsname##1:##2\endcsname##1\else\expandafter#5\csname##1:\s!parent\endcsname{##2}\fi}% - %\def#5##1##2{\ifx##1\relax\else#4{##1}{##2}\fi}% - \def#5##1##2{\ifx##1\relax\else#4##1{##2}\fi}% - \def#6{#1#2:}% - \def#7##1{#1##1:}% - %\def#8{\ifx#2\empty\orelse\ifcsname#1#2:\s!parent\endcsname\else\expandafter\let\csname#1#2:\s!parent\endcsname#1\fi}% - \def#8{\ifempty#2\orelse\ifcsname#1#2:\s!parent\endcsname\else\expandafter\let\csname#1#2:\s!parent\endcsname#1\fi}% - \protected\def#9##1{\expandafter\edef\csname#1##1:\s!parent\endcsname{#1#2}}} - -\protected\def\installparameterhashhandler#1#2% - {\expandafter\let\csname#2namespace\endcsname#1% + \frozen\def#3##1{#1#4{#1#2}{##1}:}% leading #1 was missing .. is this one used? + \frozen\def#4##1##2{\ifcsname##1:##2\endcsname##1\else\expandafter#5\csname##1:\s!parent\endcsname{##2}\fi}% + \frozen\def#5##1##2{\ifx##1\relax\else#4##1{##2}\fi}% + \frozen\def#6{#1#2:}% + \frozen\def#7##1{#1##1:}% + \frozen\def#8{\ifempty#2\orelse\ifcsname#1#2:\s!parent\endcsname\else\letcsname#1#2:\s!parent\endcsname#1\fi}% + \frozen\protected\def#9##1{\edefcsname#1##1:\s!parent\endcsname{#1#2}}} + +\permanent\protected\def\installparameterhashhandler#1#2% +% {\expandafter\let\csname#2namespace\endcsname#1% + {\letcsname#2namespace\endcsname#1% \normalexpanded {\mult_interfaces_install_parameter_hash_handler {\noexpand#1}% \??aa @@ -365,23 +337,16 @@ % todo: inline the def/let -% \protected\def\mult_interfaces_install_parameter_set_handler#1#2#3#4#5#6% -% {\ifx#2\relax\let#2\empty\fi -% \protected\def#3{\mult_interfaces_def {#1#2:}}% ##1 {##2} (braces are mandate) -% \protected\def#4{\mult_interfaces_edef{#1#2:}}% ##1 {##2} (braces are mandate) -% \protected\def#5{\mult_interfaces_let {#1#2:}}% ##1 ##2 -% \protected\def#6{\mult_interfaces_lete{#1#2:}}}% ##1 -% % \startinterface english \protected\def\mult_interfaces_install_parameter_set_handler#1#2#3#4#5#6% {\ifx#2\relax\let#2\empty\fi - \protected\def#3##1{\expandafter \def\csname#1#2:##1\endcsname}% ##1 {##2} (braces are mandate) - \protected\def#4##1{\expandafter\edef\csname#1#2:##1\endcsname}% ##1 {##2} (braces are mandate) - \protected\def#5##1{\expandafter \let\csname#1#2:##1\endcsname}% ##1 ##2 - \protected\def#6##1{\expandafter \let\csname#1#2:##1\endcsname\empty}}% ##1 + \frozen\protected\def#3##1{\defcsname#1#2:##1\endcsname}% ##1 {##2} (braces are mandate) + \frozen\protected\def#4##1{\edefcsname#1#2:##1\endcsname}% ##1 {##2} (braces are mandate) + \frozen\protected\def#5##1{\letcsname#1#2:##1\endcsname}% ##1 ##2 + \frozen\protected\def#6##1{\letcsname#1#2:##1\endcsname\empty}}% ##1 % \stopinterface -\protected\def\installparametersethandler#1#2% +\permanent\protected\def\installparametersethandler#1#2% {\normalexpanded {\mult_interfaces_install_parameter_set_handler {\noexpand#1}% \??aa @@ -398,23 +363,19 @@ \let\currentcolorparameter\empty \protected\def\mult_interfaces_install_style_and_color_handler#1#2#3#4% - {\protected\def#2##1##2% style color + {\frozen\protected\def#2##1##2% style color {\edef\currentstyleparameter{#1{##1}}% this name is public (can also set color e.g. in underline) - %\ifx\currentstyleparameter\empty\else\dousecurrentstyleparameter\fi \ifempty\currentstyleparameter\else\dousecurrentstyleparameter\fi \edef\currentcolorparameter{#1{##2}}% this name is public (so we do this after the style switch) - %\ifx\currentcolorparameter\empty\else\dousecurrentcolorparameter\fi}% \ifempty\currentcolorparameter\else\dousecurrentcolorparameter\fi}% - \protected\def#3##1% style + \frozen\protected\def#3##1% style {\edef\currentstyleparameter{#1{##1}}% this name is public - %\ifx\currentstyleparameter\empty\else\dousecurrentstyleparameter\fi}% \ifempty\currentstyleparameter\else\dousecurrentstyleparameter\fi}% - \protected\def#4##1% color + \frozen\protected\def#4##1% color {\edef\currentcolorparameter{#1{##1}}% this name is public - %\ifx\currentcolorparameter\empty\else\dousecurrentcolorparameter\fi}}% \ifempty\currentcolorparameter\else\dousecurrentcolorparameter\fi}} -\protected\def\installstyleandcolorhandler#1#2% +\permanent\protected\def\installstyleandcolorhandler#1#2% {\normalexpanded {\mult_interfaces_install_style_and_color_handler \expandafter\noexpand\csname #2parameter\endcsname @@ -424,123 +385,107 @@ \let\definehandlerparent\empty -% \def\mult_check_for_parent#1#2#3#4% -% {\ifcsname#1#4:\s!parent\endcsname \else \ifx#4\empty \else -% \writestatus\m!system{error: invalid parent #4 for #3, #4 defined too (best check it)}% -% \expandafter\edef\csname#1#4:\s!parent\endcsname{#2}% -% \fi \fi} - \def\mult_check_for_parent#1#2#3#4% {\ifcsname#1#4:\s!parent\endcsname\orelse\ifx#4\empty\else \writestatus\m!system{error: invalid parent #4 for #3, #4 defined too (best check it)}% - \expandafter\edef\csname#1#4:\s!parent\endcsname{#2}% +% \expandafter\edef\csname#1#4:\s!parent\endcsname{#2}% + \edefcsname#1#4:\s!parent\endcsname{#2}% \fi} -%def\mult_interfaces_chain#1#2{\ifcsname#1#2:\s!chain\endcsname\csname#1#2:\s!chain\endcsname\space\fi} -%def\getparentchain #1#2{\ifcsname#1#2:\s!chain\endcsname\csname#1#2:\s!chain\endcsname\fi} -%def\getcurrentparentchain#1#2{\ifcsname#1#2:\s!chain\endcsname\csname#1#2:\s!chain\endcsname\fi} - \def\mult_interfaces_chain#1#2{\ifcsname#1#2:\s!chain\endcsname\lastnamedcs\space\fi} \def\getparentchain #1#2{\begincsname#1#2:\s!chain\endcsname} \def\getcurrentparentchain#1#2{\begincsname#1#2:\s!chain\endcsname} -\protected\def\mult_interfaces_install_define_handler#1#2#3#4#5#6#7#8#9% why is \expanded still needed in clones - {\ifx#4\relax\let#4\empty\fi % see \defineregister - \protected\def#2{\dotripleempty#5}% +\protected\def\mult_interfaces_install_define_handler#1#2#3#4#5#6#7#8% why is \expanded still needed in clones + {\ifx#4\relax\let#4\empty\fi % see \defineregister + \newtoks#5% \newtoks#6% - \newtoks#7% - \protected\def#5[##1][##2][##3]% [child][parent][settings] | [child][settings] | [child][parent] | [child] - {\let#9#4% - \edef#4{##1}% - \ifthirdargument - \the#6% predefine - \edef#8{##2}% - \mult_check_for_parent{#1}{#3}#4#8% - \expandafter\edef\csname#1#4:\s!chain\endcsname{\mult_interfaces_chain#1{##2}##1}% - \expandafter\edef\csname#1#4:\s!parent\endcsname{#1##2}% - \mult_interfaces_get_parameters{#1#4:}[##3]% - \orelse\ifsecondargument - \the#6% predefine + \frozen\tolerant\protected\def#2[##1]##*[##2]##*[##3]% [child][parent][settings] | [child][settings] | [child][parent] | [child] + {\let#8#4% + % watch out: no \edef#4{##1} before the ifarguments because #1 can have macros + \ifarguments + \let#4\empty + \the#5% predefine + \let#7\empty + \letcsname#1#4:\s!chain\endcsname\empty + \edefcsname#1#4:\s!parent\endcsname{#3}% + \or + \edef#4{##1}% + \the#5% predefine + \let#7\empty + \edefcsname#1#4:\s!chain\endcsname{##1}% + \edefcsname#1#4:\s!parent\endcsname{#3}% + \or + \edef#4{##1}% + \the#5% predefine \relax - %\ifcondition\expandafter\mult_check_for_assignment_indeed_begin_\detokenize{##2}=^^^^0003^^^^0003^^^^0004% -% \ifcondition\mult_aux_no_assignment_indeed##2\ignorearguments -% \edef#8{##2}% -% \mult_check_for_parent{#1}{#3}#4#8% -% \expandafter\edef\csname#1#4:\s!chain\endcsname{\mult_interfaces_chain#1{##2}##1}% -% \expandafter\edef\csname#1#4:\s!parent\endcsname{#1##2}% -% \else -% \let#8\empty -% \expandafter\edef\csname#1#4:\s!chain\endcsname{##1}% -% \expandafter\edef\csname#1#4:\s!parent\endcsname{#3}% -% \mult_interfaces_get_parameters{#1#4:}[##2]% -% \fi \ifhastok={##2}% - \let#8\empty - \expandafter\edef\csname#1#4:\s!chain\endcsname{##1}% - \expandafter\edef\csname#1#4:\s!parent\endcsname{#3}% + \let#7\empty + \edefcsname#1#4:\s!chain\endcsname{##1}% + \edefcsname#1#4:\s!parent\endcsname{#3}% \mult_interfaces_get_parameters{#1#4:}[##2]% \else - \edef#8{##2}% - \ifempty#8% - \expandafter\edef\csname#1#4:\s!chain\endcsname{##1}% - \expandafter\edef\csname#1#4:\s!parent\endcsname{#3}% + \edef#7{##2}% + \ifempty#7% + \edefcsname#1#4:\s!chain\endcsname{##1}% + \edefcsname#1#4:\s!parent\endcsname{#3}% \else - \mult_check_for_parent{#1}{#3}#4#8% - \expandafter\edef\csname#1#4:\s!chain\endcsname{\mult_interfaces_chain#1{##2}##1}% - \expandafter\edef\csname#1#4:\s!parent\endcsname{#1##2}% + \mult_check_for_parent{#1}{#3}#4#7% + \edefcsname#1#4:\s!chain\endcsname{\mult_interfaces_chain#1{##2}##1}% + \edefcsname#1#4:\s!parent\endcsname{#1##2}% \fi \fi - \else - \the#6% predefine - \let#8\empty - \expandafter\edef\csname#1#4:\s!chain\endcsname{##1}% - \expandafter\edef\csname#1#4:\s!parent\endcsname{#3}% + \or + \edef#4{##1}% + \the#5% predefine + \edef#7{##2}% + \mult_check_for_parent{#1}{#3}#4#7% + \edefcsname#1#4:\s!chain\endcsname{\mult_interfaces_chain#1{##2}##1}% + \edefcsname#1#4:\s!parent\endcsname{#1##2}% + \mult_interfaces_get_parameters{#1#4:}[##3]% \fi - \the#7% - \let#4#9}} + \the#6% + \let#4#8}} -\protected\def\installdefinehandler#1#2#3% +\permanent\protected\def\installdefinehandler#1#2#3% {\normalexpanded {\mult_interfaces_install_define_handler {\noexpand#1}% \??aa \expandafter\noexpand\csname define#2\endcsname {\noexpand#3}% root \expandafter\noexpand\csname current#2\endcsname - \expandafter\noexpand\csname define_#2\endcsname % semi-public \expandafter\noexpand\csname everypreset#2\endcsname \expandafter\noexpand\csname everydefine#2\endcsname \expandafter\noexpand\csname current#2parent\endcsname \expandafter\noexpand\csname saved_defined_#2\endcsname}} -\protected\def\mult_interfaces_install_setup_handler#1#2#3#4#5#6#7#8#9% +\protected\def\mult_interfaces_install_setup_handler#1#2#3#4#5#6#7#8% {\ifx#3\relax\let#3\empty\fi - \protected\def#2{\dodoubleempty#4}% - \protected\def#6{\mult_interfaces_get_parameters{#1#3:}}% no every ! don't change it - \newtoks#5% - \newtoks#8% - \protected\def#4[##1][##2]% maybe helper - {\let#7#3% - \ifsecondargument - \def#9####1% we will have a simple one as well + \protected\def#5{\mult_interfaces_get_parameters{#1#3:}}% no every ! don't change it + \newtoks#4% + \newtoks#7% + \frozen\tolerant\protected\def#2[##1]##*[##2]% maybe helper + {\let#6#3% + \ifnum\lastarguments=\plustwo + \def#8####1% we will have a simple one as well {\edef#3{####1}% \mult_interfaces_get_parameters{#1#3:}[##2]% - \the#5}% - \processcommalist[##1]#9% + \the#4}% + \processcommalist[##1]#8% \else \let#3\empty \mult_interfaces_get_parameters{#1:}[##1]% - \the#5% + \the#4% \fi - \let#3#7% - \the#8}} + \let#3#6% + \the#7}} -\protected\def\installsetuphandler#1#2% +\permanent\protected\def\installsetuphandler#1#2% {\normalexpanded {\mult_interfaces_install_setup_handler {\noexpand#1}% \??aa \expandafter\noexpand\csname setup#2\endcsname \expandafter\noexpand\csname current#2\endcsname - \expandafter\noexpand\csname setup_#2\endcsname % semi-public \expandafter\noexpand\csname everysetup#2\endcsname \expandafter\noexpand\csname setupcurrent#2\endcsname \expandafter\noexpand\csname saved_setup_current#2\endcsname @@ -552,10 +497,9 @@ \let\doingrootsetnamed \plusthree % \setuplayout[name] \let\doingrootsetroot \plusfour % \setuplayout -\protected\def\mult_interfaces_install_switch_setup_handler_a#1#2#3#4#5% - {\ifx#3\relax\let#3\empty\fi - \protected\def#2{\dodoubleempty#4}% - \protected\def#5{\mult_interfaces_get_parameters{#1#3:}}} +\protected\def\mult_interfaces_install_switch_setup_handler_a#1#2#3% + {\ifx#2\relax\let#2\empty\fi + \frozen\protected\def#3{\mult_interfaces_get_parameters{#1#2:}}} \protected\def\mult_interfaces_install_switch_setup_handler_b#1#2#3#4#5#6#7#8#9% {\newtoks#5% @@ -563,37 +507,15 @@ \newtoks#8% \newtoks#9% \ifx#6\relax\let#6\empty\fi - \protected\def#4[##1][##2]% maybe helper - {\ifsecondargument % no commalist here - % \setuplayout[whatever][key=value] - \let#7#3% - \let#6#3% - \edef#3{##1}% - #2\doingrootsetupnamed - \mult_interfaces_get_parameters{#1#3:}[##2]% + \frozen\tolerant\protected\def#4[##1]##*[##2]% maybe helper + {\ifarguments + % \setuplayout + \let#6#3% % previous becomes current + \let#3\empty % current becomes empty + #2\doingrootsetroot \the#5% - \ifx#3#6\the#8\fi % only switchsetups if previous == current - \let#3#7% - \orelse\iffirstargument - %\ifcondition\expandafter\mult_check_for_assignment_indeed_begin_\detokenize{##1}=^^^^0003^^^^0003^^^^0004% -% \ifcondition\mult_aux_no_assignment_indeed##1\ignorearguments -% % \setuplayout[whatever] -% \let#6#3% % previous becomes current -% \edef#3{##1}% this will catch reset so one needs to test for it -% #2\doingrootsetnamed -% \the#5% % we can check for previous vs current -% \the#8% switchsetups -% \else -% % \setuplayout[key=value] -% \let#7#3% -% \let#6#3% -% \let#3\empty -% #2\doingrootsetuproot -% \mult_interfaces_get_parameters{#1:}[##1]% -% \the#5% -% \the#8% switchsetups -% \let#3#7% -% \fi + \the#8% switchsetups + \or \ifhastok={##1}% % \setuplayout[key=value] \let#7#3% @@ -620,111 +542,113 @@ \the#8% switchsetups \fi \fi - \else - % \setuplayout - \let#6#3% % previous becomes current - \let#3\empty % current becomes empty - #2\doingrootsetroot + \or + % \setuplayout[whatever][key=value] + \let#7#3% + \let#6#3% + \edef#3{##1}% + #2\doingrootsetupnamed + \mult_interfaces_get_parameters{#1#3:}[##2]% \the#5% - \the#8% switchsetups + \ifx#3#6\the#8\fi % only switchsetups if previous == current + \let#3#7% \fi #2\zerocount % mode is always zero at the end \the#9}} -\protected\def\installswitchsetuphandler#1#2% +\permanent\protected\def\installswitchsetuphandler#1#2% {\normalexpanded {\mult_interfaces_install_switch_setup_handler_a {\noexpand#1}% \??aa - \expandafter\noexpand\csname setup#2\endcsname \expandafter\noexpand\csname current#2\endcsname - \expandafter\noexpand\csname setup_#2\endcsname % semi-public \expandafter\noexpand\csname setupcurrent#2\endcsname \mult_interfaces_install_switch_setup_handler_b {\noexpand#1}% \??aa \expandafter\noexpand\csname #2setupmode\endcsname \expandafter\noexpand\csname current#2\endcsname - \expandafter\noexpand\csname setup_#2\endcsname % semi-public + \expandafter\noexpand\csname setup#2\endcsname \expandafter\noexpand\csname everysetup#2\endcsname \expandafter\noexpand\csname previous#2\endcsname \expandafter\noexpand\csname saved_setup_current#2\endcsname \expandafter\noexpand\csname everyswitch#2\endcsname \expandafter\noexpand\csname everysetup#2root\endcsname}} -\protected\def\mult_interfaces_install_auto_setup_handler#1#2#3#4#5#6#7#8#9% +\protected\def\mult_interfaces_install_auto_setup_handler#1#2#3#4#5#6#7#8% {\ifx#3\relax\let#3\empty\fi - \protected\def#2{\dotripleempty#4}% - \protected\def#6{\mult_interfaces_get_parameters{#1#3:}}% - \newtoks#5% - \def#4[##1][##2][##3]% - {\let#8#3% - \ifthirdargument - \def#9####1% - {\edef#3{####1}% - \expandafter\def\csname#1#3:\s!parent\endcsname{#1##2}% - \mult_interfaces_get_parameters{#1#3:}[##3]% always sets parent - \the#5}% - \processcommalist[##1]#9% - \orelse\ifsecondargument - \def#9####1% - {\edef#3{####1}% - #7% checks parent and sets if needed - \mult_interfaces_get_parameters{#1#3:}[##2]% - \the#5}% - \processcommalist[##1]#9% - \else + \frozen\protected\def#5{\mult_interfaces_get_parameters{#1#3:}}% + \newtoks#4% + \frozen\tolerant\protected\def#2[##1]##*[##2]##*[##3]% + {\let#7#3% + \ifarguments \let#3\empty - \mult_interfaces_get_parameters{#1:}[##1]% \the#5% + \or + \let#3\empty + \mult_interfaces_get_parameters{#1:}[##1]% + \the#4% + \or + \def#8####1% + {\edef#3{####1}% + #6% checks parent and sets if needed + \mult_interfaces_get_parameters{#1#3:}[##2]% + \the#4}% + \processcommalist[##1]#8% + \or + \def#8####1% + {\edef#3{####1}% + \defcsname#1#3:\s!parent\endcsname{#1##2}% + \mult_interfaces_get_parameters{#1#3:}[##3]% always sets parent + \the#4}% + \processcommalist[##1]#8% \fi - \let#3#8}} + \let#3#7}} -\protected\def\installautosetuphandler#1#2% +\permanent\protected\def\installautosetuphandler#1#2% {\normalexpanded {\mult_interfaces_install_auto_setup_handler {\noexpand#1}% \??aa \expandafter\noexpand\csname setup#2\endcsname \expandafter\noexpand\csname current#2\endcsname - \expandafter\noexpand\csname setup_#2\endcsname % semi-public \expandafter\noexpand\csname everysetup#2\endcsname \expandafter\noexpand\csname setupcurrent#2\endcsname \expandafter\noexpand\csname check#2parent\endcsname \expandafter\noexpand\csname saved_setup_current#2\endcsname \expandafter\noexpand\csname nested_setup_current#2\endcsname}} -\protected\def\installbasicparameterhandler#1#2% +\permanent\protected\def\installbasicparameterhandler#1#2% {\installparameterhandler {#1}{#2}% \installparameterhashhandler{#1}{#2}% \installparametersethandler {#1}{#2}% \installrootparameterhandler{#1}{#2}} -\protected\def\installbasicautosetuphandler#1#2#3% \??self name \??parent (can be \??self) +\permanent\protected\def\installbasicautosetuphandler#1#2#3% \??self name \??parent (can be \??self) {\installbasicparameterhandler{#1}{#2}% \installautosetuphandler {#1}{#2}} -\protected\def\installstylisticautosetuphandler#1#2#3% \??self name \??parent (can be \??self) +\permanent\protected\def\installstylisticautosetuphandler#1#2#3% \??self name \??parent (can be \??self) {\installbasicparameterhandler{#1}{#2}% \installautosetuphandler {#1}{#2}% \installstyleandcolorhandler {#1}{#2}} -\protected\def\installcommandhandler#1#2#3% \??self name \??parent (can be \??self) +\permanent\protected\def\installcommandhandler#1#2#3% \??self name \??parent (can be \??self) {\installbasicparameterhandler{#1}{#2}% \installdefinehandler {#1}{#2}{#3}% \installsetuphandler {#1}{#2}% \installstyleandcolorhandler {#1}{#2}} -\protected\def\installswitchcommandhandler#1#2#3% \??self name \??parent (can be \??self) +\permanent\protected\def\installswitchcommandhandler#1#2#3% \??self name \??parent (can be \??self) {\installbasicparameterhandler{#1}{#2}% \installdefinehandler {#1}{#2}{#3}% \installswitchsetuphandler {#1}{#2}% \installstyleandcolorhandler {#1}{#2}} -\protected\def\installautocommandhandler#1#2#3% automatically defined cloned setups +\permanent\protected\def\installautocommandhandler#1#2#3% automatically defined cloned setups {\installbasicparameterhandler{#1}{#2}% \installdefinehandler {#1}{#2}{#3}% \installautosetuphandler {#1}{#2}% \installstyleandcolorhandler {#1}{#2}} -\protected\def\installsimplecommandhandler#1#2#3% no define (experiment) - use \check*parent when defining +\permanent\protected\def\installsimplecommandhandler#1#2#3% no define (experiment) - use \check*parent when defining {\installbasicparameterhandler{#1}{#2}% \installsetuphandler {#1}{#2}% \installstyleandcolorhandler {#1}{#2}} @@ -741,13 +665,11 @@ %D We don't need colons for such simple cases. \protected\def\mult_interfaces_install_direct_parameter_handler#1#2#3#4#5% -%%{\def#3##1{\csname\ifcsname#1##1\endcsname#1##1\else\s!empty\fi\endcsname}% - {\def#3##1{\begincsname#1##1\endcsname}% - \def#4##1{\detokenize\expandafter\expandafter\expandafter{\csname#1##1\endcsname}}% - % \def#4##1{\mult_interfaces_detokenize{\csname\ifcsname#1#2:##1\endcsname#1#2:##1\else\expandafter#5\csname#1#2:\s!parent\endcsname{##1}\fi\endcsname}}% - \def#5##1{\begincsname#1##1\endcsname}} + {\frozen\def#3##1{\begincsname#1##1\endcsname}% + \frozen\def#4##1{\detokenize\expandafter\expandafter\expandafter{\csname#1##1\endcsname}}% + \frozen\def#5##1{\begincsname#1##1\endcsname}} -\protected\def\installdirectparameterhandler#1#2% +\permanent\protected\def\installdirectparameterhandler#1#2% {\normalexpanded {\mult_interfaces_install_direct_parameter_handler {\noexpand#1}% @@ -756,36 +678,28 @@ \expandafter\noexpand\csname detokenized#2parameter\endcsname \expandafter\noexpand\csname direct#2parameter\endcsname}} -\protected\def\mult_interfaces_install_direct_setup_handler#1#2#3#4#5% - {\protected\def#2{\dosingleempty#3}% - \newtoks#5% - \def#3[##1]{\mult_interfaces_get_parameters#1[##1]\the#5}% - \def#4{\mult_interfaces_get_parameters#1}} +\protected\def\mult_interfaces_install_direct_setup_handler#1#2#3#4% + {\newtoks#4% + \frozen\protected\def#2[##1]{\ifarguments\or\mult_interfaces_get_parameters#1[##1]\fi\the#4}% + \frozen\def#3{\mult_interfaces_get_parameters#1}} -\protected\def\installdirectsetuphandler#1#2% +\permanent\protected\def\installdirectsetuphandler#1#2% {\normalexpanded {\mult_interfaces_install_direct_setup_handler {\noexpand#1}% \??aa \expandafter\noexpand\csname setup#2\endcsname - \expandafter\noexpand\csname setup_#2\endcsname % semi-public \expandafter\noexpand\csname setupcurrent#2\endcsname % no \every (we use 'current' for consistency) \expandafter\noexpand\csname everysetup#2\endcsname}} -% \protected\def\mult_interfaces_install_direct_parameter_set_handler#1#2#3#4#5% -% {\protected\def#2{\mult_interfaces_def #1}% -% \protected\def#3{\mult_interfaces_edef#1}% -% \protected\def#4{\mult_interfaces_let #1}% -% \protected\def#5{\mult_interfaces_let #1\empty}}% - % \startinterface english \protected\def\mult_interfaces_install_direct_parameter_set_handler#1#2#3#4#5% - {\protected\def#2##1{\expandafter \def\csname#1##1\endcsname}% - \protected\def#3##1{\expandafter\edef\csname#1##1\endcsname}% - \protected\def#4##1{\expandafter \let\csname#1##1\endcsname}% - \protected\def#5##1{\expandafter \let\csname#1##1\endcsname\empty}}% + {\frozen\protected\def#2##1{\defcsname#1##1\endcsname}% + \frozen\protected\def#3##1{\edefcsname#1##1\endcsname}% + \frozen\protected\def#4##1{\letcsname#1##1\endcsname}% + \frozen\protected\def#5##1{\letcsname#1##1\endcsname\empty}}% % \stopinterface -\protected\def\installdirectparametersethandler#1#2% +\permanent\protected\def\installdirectparametersethandler#1#2% {\normalexpanded {\mult_interfaces_install_direct_parameter_set_handler {\noexpand#1}% \??aa @@ -794,15 +708,15 @@ \expandafter\noexpand\csname let#2parameter\endcsname \expandafter\noexpand\csname reset#2parameter\endcsname}} -\let\installdirectstyleandcolorhandler\installstyleandcolorhandler +\aliased\let\installdirectstyleandcolorhandler\installstyleandcolorhandler -\protected\def\installdirectcommandhandler#1#2% +\permanent\protected\def\installdirectcommandhandler#1#2% {\installdirectparameterhandler {#1}{#2}% \installdirectsetuphandler {#1}{#2}% \installdirectparametersethandler {#1}{#2}% \installdirectstyleandcolorhandler{#1}{#2}} -\protected\def\installsetuponlycommandhandler#1#2% +\permanent\protected\def\installsetuponlycommandhandler#1#2% {\installdirectparameterhandler{#1}{#2}% \installdirectsetuphandler {#1}{#2}% }% maybe \installdirectparametersethandler {#1}{#2}% @@ -830,67 +744,48 @@ % yes:\twoparameter{alpha}\par % yes:\twoparameter{beta}\par -\protected\def\relateparameterhandlers#1#2#3#4% {from} {instance} {to} {instance} - {\expandafter\edef\csname\csname#1namespace\endcsname#2:\s!parent\endcsname{\csname#3namespace\endcsname#4}} +\permanent\protected\def\relateparameterhandlers#1#2#3#4% {from} {instance} {to} {instance} + {\edefcsname\csname#1namespace\endcsname#2:\s!parent\endcsname{\csname#3namespace\endcsname#4}} -\protected\def\relateparameterhandlersbyns#1#2#3#4% {from} {instance} {to} {instance} - {\expandafter\edef\csname#1#2:\s!parent\endcsname{#3#4}} +\permanent\protected\def\relateparameterhandlersbyns#1#2#3#4% {from} {instance} {to} {instance} + {\edefcsname#1#2:\s!parent\endcsname{#3#4}} %D Here is another experiment: -\protected\def\installactionhandler#1% - {\normalexpanded - {\mult_interfaces_install_action_handler - {#1}% - \expandafter\noexpand\csname current#1\endcsname - \expandafter\noexpand\csname setupcurrent#1\endcsname - \expandafter\noexpand\csname #1_action\endcsname}} - -% \protected\def\mult_interfaces_install_action_handler#1#2#3#4% -% {\protected\expandafter\def\csname#1\endcsname{\dodoubleempty#4}% -% \protected\def#4[##1][##2]% -% {\begingroup -% \ifsecondargument -% \edef#2{##1}% -% #3[##2]% -% \orelse\iffirstargument -% \doifelseassignment{##1} -% {\let#2\empty -% #3[##1]}% -% {\edef#2{##1}}% -% \else -% \let#2\empty -% \fi -% \directsetup{handler:action:#1}% -% \endgroup}} - -\protected\def\mult_interfaces_install_action_handler#1#2#3#4% - {\protected\expandafter\def\csname#1\endcsname{\dodoubleempty#4}% - \protected\def#4[##1][##2]% +\protected\def\mult_interfaces_install_action_handler#1#2#3% +% {\frozen\tolerant\protected\expandafter\def\csname#1\endcsname[##1]##*[##2]% + {\frozen\tolerant\protected\defcsname#1\endcsname[##1]##*[##2]% {\begingroup - \ifsecondargument - \edef#2{##1}% - #3[##2]% - \orelse\iffirstargument + \ifarguments + \let#2\empty + \or %\ifcondition\expandafter\mult_check_for_assignment_indeed_begin_\detokenize{##1}=^^^^0003^^^^0003^^^^0004% -% \ifcondition\mult_aux_no_assignment_indeed##1\ignorearguments -% \edef#2{##1}% -% \else -% \let#2\empty -% #3[##1]% -% \fi + % \ifcondition\mult_aux_no_assignment_indeed##1\ignorearguments + % \edef#2{##1}% + % \else + % \let#2\empty + % #3[##1]% + % \fi \ifhastok={##1}% \let#2\empty #3[##1]% \else \edef#2{##1}% \fi - \else - \let#2\empty + \or + \edef#2{##1}% + #3[##2]% \fi \directsetup{handler:action:#1}% \endgroup}} +\permanent\protected\def\installactionhandler#1% + {\normalexpanded + {\mult_interfaces_install_action_handler + {#1}% + \expandafter\noexpand\csname current#1\endcsname + \expandafter\noexpand\csname setupcurrent#1\endcsname}} + % First we had, in tune with the regular system variables: % % \starttyping @@ -918,30 +813,23 @@ \newcount\c_mult_interfaces_n_of_namespaces -%def\v_interfaces_prefix_template{\number \c_mult_interfaces_n_of_namespaces>} -%def\v_interfaces_prefix_template{\characters\c_mult_interfaces_n_of_namespaces>} - -%def\v_interfaces_prefix_template % consistently %03i> -% {\ifnum\c_mult_interfaces_n_of_namespaces<\plusten00\orelse\ifnum\c_mult_interfaces_n_of_namespaces<\plushundred0\fi -% \number\c_mult_interfaces_n_of_namespaces>} - \def\v_interfaces_prefix_template {\number\c_mult_interfaces_n_of_namespaces>} -\protected\def\installnamespace#1% for modules and users +\permanent\protected\def\installnamespace#1% for modules and users {\ifcsname ????#1\endcsname \writestatus\m!system{duplicate user namespace '#1'}\wait \else \global\advance\c_mult_interfaces_n_of_namespaces\plusone - \expandafter\edef\csname ????#1\endcsname{\v_interfaces_prefix_template}% + \immutable\edefcsname ????#1\endcsname{\v_interfaces_prefix_template}% \fi} -\protected\def\installcorenamespace#1% +\permanent\protected\def\installcorenamespace#1% {\ifcsname ??#1\endcsname \writestatus\m!system{duplicate core namespace '#1'}\wait \else \global\advance\c_mult_interfaces_n_of_namespaces\plusone - \expandafter\edef\csname ??#1\endcsname{\v_interfaces_prefix_template}% + \immutable\edefcsname ??#1\endcsname{\v_interfaces_prefix_template}% \clf_registernamespace\c_mult_interfaces_n_of_namespaces{#1}% \fi} @@ -961,20 +849,19 @@ \letvalue\??dummy\empty - \def\dummyparameter #1{\begincsname\??dummy#1\endcsname} - \def\directdummyparameter #1{\begincsname\??dummy#1\endcsname} -\protected\def\setdummyparameter #1{\expandafter\def\csname\??dummy#1\endcsname} -\protected\def\setexpandeddummyparameter#1{\expandafter\edef\csname\??dummy#1\endcsname} -\protected\def\letdummyparameter #1{\expandafter\let\csname\??dummy#1\endcsname} +\permanent \def\dummyparameter #1{\begincsname\??dummy#1\endcsname} +\permanent \def\directdummyparameter #1{\begincsname\??dummy#1\endcsname} +\permanent\protected\def\setdummyparameter #1{\defcsname\??dummy#1\endcsname} +\permanent\protected\def\setexpandeddummyparameter#1{\edefcsname\??dummy#1\endcsname} +\permanent\protected\def\letdummyparameter #1{\letcsname\??dummy#1\endcsname} -% \protected\def\getdummyparameters -% {\mult_interfaces_get_parameters\??dummy} +\edef\mult_interfaces_dummy{\??dummy} % nor immutable -\protected\def\getdummyparameters[#1% +\permanent\protected\def\getdummyparameters[#1% {\if\noexpand#1]% \expandafter\gobbleoneargument \else - \let\m_mult_interfaces_namespace\??dummy + \let\m_mult_interfaces_namespace\mult_interfaces_dummy \expandafter\mult_interfaces_get_parameters_indeed \fi#1} @@ -1025,13 +912,10 @@ % % This is a user (module) command: -\protected\def\definenamespace - {\dodoubleargument\mult_interfaces_define_name_space} - -\def\mult_interfaces_define_name_space[#1][#2]% namespace settings +\permanent\tolerant\protected\def\definenamespace[#1]#*[#2]% namespace settings {\clf_definenamespace{#1}{#2}} -\def\listnamespaces +\permanent\protected\def\listnamespaces {\clf_listnamespaces} %D Helper: @@ -1040,61 +924,52 @@ %D \showparentchain{@@am}{left} %D \stoptyping -\protected\def\showparentchain#1#2% +\permanent\protected\def\showparentchain#1#2% {\writestatus\m!system{chain: [ \mult_interfaces_show_parent_chain{#1#2}]}} -% \def\mult_interfaces_show_parent_chain#1% -% {#1 => % -% \ifcsname#1:\s!parent\endcsname -% \expandafter\mult_interfaces_show_parent_chain\csname#1:\s!parent\endcsname -% \fi} - \def\mult_interfaces_show_parent_chain#1% {#1 => % \ifcsname#1:\s!parent\endcsname - %\expandafter\mult_interfaces_show_parent_chain\csname#1:\s!parent\endcsname \expandafter\mult_interfaces_show_parent_chain\lastnamedcs \fi} %D Another helper (needs to be applied): -\protected\def\doifelsecommandhandler#1#2% namespace name +\permanent\protected\def\doifelsecommandhandler#1#2% namespace name {\ifcsname#1#2:\s!parent\endcsname \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} -\let\doifcommandhandlerelse\doifelsecommandhandler +\aliased\let\doifcommandhandlerelse\doifelsecommandhandler -\protected\def\doifcommandhandler#1#2% namespace name +\permanent\protected\def\doifcommandhandler#1#2% namespace name {\ifcsname#1#2:\s!parent\endcsname \expandafter\firstofoneargument \else \expandafter\gobbleoneargument \fi} -\protected\def\doifnotcommandhandler#1#2% namespace name +\permanent\protected\def\doifnotcommandhandler#1#2% namespace name {\ifcsname#1#2:\s!parent\endcsname \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} -\let\doifcommandhandlerelse\doifelsecommandhandler - % another set of (fast) helpers (grep for usage): -\def\expandnamespaceparameter#1#2#3% \??xx \getp \c!xx \v!yy +\permanent\def\expandnamespaceparameter#1#2#3% \??xx \getp \c!xx \v!yy {\csname#1\ifcsname#1\expandafter\expandafter\expandafter\mult_aux_expand_namespace_parameter#2#3} \def\mult_aux_expand_namespace_parameter#1#2% \cs \v!yy {#1\endcsname#1\else#2\fi\endcsname} -\def\expandnamespacemacro#1#2#3% \??xx \some_edefed_cs \c!yy +\permanent\def\expandnamespacemacro#1#2#3% \??xx \some_edefed_cs \c!yy {\csname#1\ifcsname#1#2\endcsname#2\else#3\fi\endcsname} -\def\expandnamespacevalue#1#2% \??xx {...} \c!yy == optimized \expandcheckedcsname +\permanent\def\expandnamespacevalue#1#2% \??xx {...} \c!yy == optimized \expandcheckedcsname {\csname#1\ifcsname#1\normalexpanded{\noexpand\syst_helpers_expand_checked_value{#2}}} \def\syst_helpers_expand_checked_value#1#2% @@ -1120,11 +995,6 @@ % many assignments and mechanism that do are also slow; the advantage is mostly nicer % in tracing -\def\s!simple{simple} -\def\s!single{single} -\def\s!double{double} -\def\s!triple{triple} - \let\c_mult_set\relax \protected\def\mult_interfaces_install_definition_set#1#2#3#4#5#6#7% @@ -1134,23 +1004,23 @@ {\expandafter\let\expandafter\c_mult_set\csname #1_t_#6\endcsname \ifx\c_mult_set\relax \expandafter\newtoks\c_mult_set - \expandafter\let\csname #1_t_#6\endcsname\c_mult_set + \letcsname#1_t_#6\endcsname\c_mult_set \fi} - \protected\def#4##1% + \frozen\protected\def#4##1% {\pushmacro#6% \advance#3\plusone \edef#6{##1}% \unprotect}% - \protected\def#5% + \frozen\protected\def#5% {\protect \advance#3\minusone \popmacro#6}% - \protected\def#7##1% + \frozen\protected\def#7##1% {\edef#6{##1}% #2% \the\c_mult_set\relax}} -\protected\def\installdefinitionset#1#2% +\permanent\protected\def\installdefinitionset#1#2% {\normalexpanded {\mult_interfaces_install_definition_set {\noexpand#1}% \??aa @@ -1163,20 +1033,16 @@ \protected\def\mult_interfaces_install_definition_set_member#1#2#3#4#5#6#7#8#9% no everysetups etc {\let#5#2% - \protected\def#2% + \frozen\protected\def#2% {\ifcase#4\relax\expandafter#5\else\expandafter#6\fi}% - \protected\def#6% - {\dodoubleempty#7}% - \protected\def#7[##1][##2]% - {\ifsecondargument - %#3\c_mult_set\expandafter{\the\c_mult_set#9[##1][##2]}% - #3\toksapp\c_mult_set{#9[##1][##2]}% - \orelse\iffirstargument - %#3\c_mult_set\expandafter{\the\c_mult_set#8[##1]}% - #3\toksapp\c_mult_set{#8[##1]}% + \tolerant\protected\def#6[##1]##*[##2]% + {\ifarguments\or + #3\toksapp\c_mult_set{#7[##1]}% + \or + #3\toksapp\c_mult_set{#8[##1][##2]}% \fi}} -\protected\def\installdefinitionsetmember#1#2#3#4% +\permanent\protected\def\installdefinitionsetmember#1#2#3#4% {\normalexpanded {\mult_interfaces_install_definition_set_member {\noexpand#3}% \??aa @@ -1185,58 +1051,33 @@ \expandafter\noexpand\csname #2_nesting_depth\endcsname \expandafter\noexpand\csname normal_setup_#4\endcsname \expandafter\noexpand\csname delayed_setup_#4\endcsname - \expandafter\noexpand\csname do_delayed_setup_#4\endcsname \expandafter\noexpand\csname setup#4_\s!single\endcsname \expandafter\noexpand\csname setup#4_\s!double\endcsname}} %D Another experiment: \protected\def\mult_interfaces_install_parent_injector#1#2#3#4% - {\protected\def#4##1% - %{\ifx#3\empty + {\frozen\protected\def#4##1% {\ifempty#3% - \expandafter\def\csname#1#2:\s!parent\endcsname{#1##1}% + \defcsname#1#2:\s!parent\endcsname{#1##1}% \fi}} -\protected\def\installparentinjector#1#2% +\permanent\protected\def\installparentinjector#1#2% {\normalexpanded{\mult_interfaces_install_parent_injector {\noexpand#1}% \expandafter\noexpand\csname current#2\endcsname \expandafter\noexpand\csname current#2parent\endcsname \expandafter\noexpand\csname inject#2parent\endcsname}} -% Faster but not used that much to make a dent in performance. But, because it's -% cleaner anyway and also gives less tracing, we apply it a few times. - -% \protected\def\syst_helpers_install_macro_stack#1#2#3% -% {\xdef\m_syst_helpers_push_macro{\csstring#1}% -% \ifcsname#3\m_syst_helpers_push_macro\endcsname\else -% \expandafter\newcount\csname#3\m_syst_helpers_push_macro\endcsname -% \expandafter\edef\csname push_macro_\m_syst_helpers_push_macro\endcsname -% {\noexpand\expandafter\glet -% \noexpand\csname\m_syst_helpers_push_macro\noexpand\the\csname#3\m_syst_helpers_push_macro\endcsname\endcsname -% \noexpand#1% -% \global\advance\csname#3\m_syst_helpers_push_macro\endcsname\plusone}% -% \expandafter\edef\csname pop_macro_\m_syst_helpers_push_macro\endcsname -% {\global\advance\csname#3\m_syst_helpers_push_macro\endcsname\minusone -% \noexpand\expandafter#2% -% \noexpand\expandafter\noexpand#1% -% \noexpand\csname\m_syst_helpers_push_macro\noexpand\the\csname#3\m_syst_helpers_push_macro\endcsname\endcsname}% -% \fi} -% -% \protected\def\installmacrostack #1{\syst_helpers_install_macro_stack#1\let \??localpushedmacro } -% \protected\def\installglobalmacrostack#1{\syst_helpers_install_macro_stack#1\glet\??globalpushedmacro} - % The \LUA\ based variant is twice as fast as the above but as said, we don't use % this one that often. It's more about less tracing than speed here. -\protected\def\installmacrostack#1% +\permanent\protected\def\installmacrostack#1% {\ifdefined#1\else\let#1\empty\fi \protected\expandafter\gdef\csname push_macro_\csstring#1\endcsname{\localpushmacro#1}% \protected\expandafter\gdef\csname pop_macro_\csstring#1\endcsname{\localpopmacro #1}} - -\protected\def\installglobalmacrostack#1% +\permanent\protected\def\installglobalmacrostack#1% {\ifdefined#1\else\glet#1\empty\fi \protected\expandafter\gdef\csname push_macro_\csstring#1\endcsname{\globalpushmacro#1}% \protected\expandafter\gdef\csname pop_macro_\csstring#1\endcsname{\globalpopmacro #1}} @@ -1307,30 +1148,26 @@ \installcorenamespace{commalistprocessornext} \installcorenamespace{commalistprocessoraction} -\protected\def\installcommalistprocessor#1#2% 5 macro names overhead - {\protected\expandafter\edef\csname\??commalistprocessor#1\endcsname[% - % {\noexpand\futureexpandis]% - % \noexpand\gobbleoneargument - % \csname\??commalistprocessorpickup#1\endcsname} - %\protected\expandafter\edef\csname\??commalistprocessorpickup#1\endcsname +\permanent\protected\def\installcommalistprocessor#1#2% 5 macro names overhead + {\protected\edefcsname\??commalistprocessor#1\endcsname[% {\csname\??commalistprocessorwrap#1\endcsname\relax}% \relax preserves {} - \protected\expandafter\edef\csname\??commalistprocessorwrap#1\endcsname##1]% + \protected\edefcsname\??commalistprocessorwrap#1\endcsname##1]% {\csname\??commalistprocessorfirst#1\endcsname##1,]} - \protected\expandafter\edef\csname\??commalistprocessorfirst#1\endcsname\relax + \protected\edefcsname\??commalistprocessorfirst#1\endcsname\relax {\csname\??commalistprocessornext#1\endcsname}% - \protected\expandafter\edef\csname\??commalistprocessornext#1\endcsname + \protected\edefcsname\??commalistprocessornext#1\endcsname {\noexpand\futureexpandis]% \noexpand\gobbleoneargument \csname\??commalistprocessoraction#1\endcsname} - \protected\expandafter\edef\csname\??commalistprocessoraction#1\endcsname##1,% + \protected\edefcsname\??commalistprocessoraction#1\endcsname##1,% {\noexpand#2{##1}% \csname\??commalistprocessornext#1\endcsname}} -\protected\def\installcommalistprocessorcommand#1#2% \processor \action +\permanent\protected\def\installcommalistprocessorcommand#1#2% \processor \action {\edef\p_name{\csstring#2}% \installcommalistprocessor\p_name{#2}% \expandafter\let\expandafter#1\csname\??commalistprocessor\p_name\endcsname} -\protected\def\commalistprocessor#1{\csname\??commalistprocessor#1\endcsname} +\permanent\protected\def\commalistprocessor#1{\csname\??commalistprocessor#1\endcsname} \protect \endinput diff --git a/tex/context/base/mkiv/mult-def.lua b/tex/context/base/mkiv/mult-def.lua index ab26b7192..08baaf437 100644 --- a/tex/context/base/mkiv/mult-def.lua +++ b/tex/context/base/mkiv/mult-def.lua @@ -3770,7 +3770,7 @@ return { ["en"]="resetsystemmode", ["fr"]="razmodesysteme", }, - ["resettext"]={ + ["resettextcontent"]={ ["cs"]="resettextcontent", ["de"]="resettextcontent", ["en"]="resettextcontent", @@ -16239,6 +16239,9 @@ return { ["pe"]="پیشگفتار", ["ro"]="intro", }, + ["invertedshort"]={ + ["en"]="invertedshort", + }, ["italic"]={ ["cs"]="kurziva", ["de"]="italic", @@ -17168,6 +17171,9 @@ return { ["pe"]="نرمال", ["ro"]="normal", }, + ["normalshort"]={ + ["en"]="normalshort", + }, ["nospacing"]={ ["cs"]="nospacing", ["de"]="nospacing", @@ -17789,6 +17795,11 @@ return { ["pe"]="مراجعه", ["ro"]="referinta", }, + ["region"]={ + ["en"]="region", + ["fr"]="region", + ["nl"]="gebied", + }, ["register"]={ ["cs"]="rejstrik", ["de"]="register", diff --git a/tex/context/base/mkiv/mult-def.mkiv b/tex/context/base/mkiv/mult-def.mkiv index 78fcdf667..0a450e8b0 100644 --- a/tex/context/base/mkiv/mult-def.mkiv +++ b/tex/context/base/mkiv/mult-def.mkiv @@ -37,9 +37,9 @@ % some left-overs -\def\c!HL{HL} -\def\c!VL{VL} -\def\c!NL{NL} +\defineinterfaceconstant {HL} {HL} +\defineinterfaceconstant {VL} {VL} +\defineinterfaceconstant {NL} {NL} % stop todo diff --git a/tex/context/base/mkiv/mult-fmt.lua b/tex/context/base/mkiv/mult-fmt.lua index a91999afd..8d116c44f 100644 --- a/tex/context/base/mkiv/mult-fmt.lua +++ b/tex/context/base/mkiv/mult-fmt.lua @@ -38,6 +38,8 @@ local function limit(str,n) return str end +-- todo: use setmacro + function interfaces.setuserinterface(interface,response) local variables = interfaces.variables local constants = interfaces.constants diff --git a/tex/context/base/mkiv/mult-ini.lua b/tex/context/base/mkiv/mult-ini.lua index ef04fb622..9664342ab 100644 --- a/tex/context/base/mkiv/mult-ini.lua +++ b/tex/context/base/mkiv/mult-ini.lua @@ -233,92 +233,6 @@ end logs.setmessenger(context.verbatim.ctxreport) --- function interfaces.setuserinterface(interface,response) --- sharedstorage.currentinterface, currentinterface = interface, interface --- sharedstorage.currentresponse, currentresponse = response, response --- if environment.initex then --- local nofconstants = 0 --- local nofvariables = 0 --- local nofelements = 0 --- local nofcommands = 0 --- local nofformats = 0 --- local noftranslations = 0 --- local nofsetupstrings = 0 --- -- --- local t, f, s = { }, formatters["\\ui_c{%s}{%s}"], formatters["\\ui_s{%s}"] --- for given, constant in next, complete.constants do --- constant = constant[interface] or constant.en or given --- constants[constant] = given -- breedte -> width --- nofconstants = nofconstants + 1 --- if given == constant then --- t[nofconstants] = s(given) --- else --- t[nofconstants] = f(given,constant) --- end --- end --- contextsprint(prtcatcodes,concat(t)) --- -- --- local t, f = { }, formatters["\\ui_v{%s}{%s}"] --- for given, variable in next, complete.variables do --- variable = variable[interface] or variable.en or given --- variables[given] = variable -- ja -> yes --- nofvariables = nofvariables + 1 --- t[nofvariables] = f(given,variable) --- end --- contextsprint(prtcatcodes,concat(t)) --- -- --- local t, f = { }, formatters["\\ui_e{%s}{%s}"] --- for given, element in next, complete.elements do --- element = element[interface] or element.en or given --- elements[element] = given --- nofelements = nofelements + 1 --- t[nofelements] = f(given,element) --- end --- contextsprint(prtcatcodes,concat(t)) --- -- --- -- local t, n, f = { }, 0, formatters["\\ui_m{%s}{%s}"] --- local t, n, f = { }, 0, formatters["\\ui_a\\%s\\%s"] --- for given, command in next, complete.commands do --- command = command[interface] or command.en or given --- if command ~= given then --- n = n + 1 --- t[n] = f(given,command) --- end --- nofcommands = nofcommands + 1 --- end --- contextsprint(prtcatcodes,"\\toksapp\\everydump{"..concat(t).."}") --- -- --- for given, format in next, complete.messages.formats do --- formats[given] = format[interface] or format.en or given --- nofformats = nofformats + 1 --- end --- -- --- for given, translation in next, complete.messages.translations do --- translations[given] = translation[interface] or translation.en or given --- noftranslations = noftranslations + 1 --- end --- -- --- for given, setupstring in next, complete.setupstrings do --- setupstring = setupstring[interface] or setupstring.en or given --- setupstrings[given] = setupstring --- nofsetupstrings = nofsetupstrings + 1 --- end --- -- --- report_interface("definitions: %a constants, %a variables, %a elements, %a commands, %a formats, %a translations, %a setupstrings", --- nofconstants,nofvariables,nofelements,nofcommands,nofformats,noftranslations,nofsetupstrings) --- else --- report_interface("the language(s) can only be set when making the format") --- end --- interfaces.currentinterface = currentinterface --- interfaces.currentresponse = currentresponse --- end - --- interfaces.implement { --- name = "setuserinterface", --- actions = interfaces.setuserinterface, --- arguments = "2 strings", --- } - interfaces.cachedsetups = interfaces.cachedsetups or { } interfaces.hashedsetups = interfaces.hashedsetups or { } diff --git a/tex/context/base/mkiv/mult-ini.mkxl b/tex/context/base/mkiv/mult-ini.mkxl new file mode 100644 index 000000000..19c76d0cf --- /dev/null +++ b/tex/context/base/mkiv/mult-ini.mkxl @@ -0,0 +1,801 @@ +%D \module +%D [ file=mult-ini, +%D version=2008.10.22, % 1996.06.01, +%D title=\CONTEXT\ Multilingual 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 This module is a stripped down version of \type {mult-ini.tex}, which we keep +%D around as \type {mult-kep.tex} for sentimental reasons. There you will find some +%D more historic information. + +\writestatus{loading}{ConTeXt Multilingual Macros / Initialization} + +\unprotect + +\registerctxluafile{mult-ini}{} +\registerctxluafile{mult-fmt}{initexonly} + +%D \macros +%D [constanten,variabelen,commands] +%D {v!,c!,k!,s!,e!,m!,l!,r!,f!,p!,x!,y!} +%D +%D In the system modules we introduced some prefixed constants, variables (both +%D macros) and registers. Apart from a tremendous saving in terms of memory and a +%D gain in speed we use from now on prefixes when possible for just another reason: +%D consistency and multi||linguality. Systematically using prefixed macros enables +%D us to implement a multi||lingual user interface. Redefining these next set of +%D prefixes therefore can have desastrous results. +%D +%D \startlinecorrection +%D \starttable[|c|c|c|] +%D \HL +%D \NC \bf prefix \NC \bf meaning \NC \bf application \NC\SR +%D \HL +%D \NC \type{\c!prefix!} \NC c! \NC constant (direct) \NC\FR +%D \NC \type{\k!prefix!} \NC k! \NC constant (indirect) \NC\FR +%D \NC \type{\e!prefix!} \NC e! \NC element \NC\MR +%D \NC \type{\f!prefix!} \NC f! \NC file \NC\MR +%D \NC \type{\m!prefix!} \NC m! \NC age \NC\MR +%D \NC \type{\s!prefix!} \NC s! \NC system \NC\MR +%D \NC \type{\v!prefix!} \NC v! \NC variable \NC\MR +%D \HL +%D \stoptable +%D \stoplinecorrection +%D +%D In the single||lingual version we used \type {!}, \type {!!}, \type {!!!} and +%D \type {!!!!}. In the meantime some of these are obsolete (we had some 12 +%D originally). + +\immutable\def\c!prefix!{c!} +\immutable\def\k!prefix!{k!} +\immutable\def\e!prefix!{e!} +\immutable\def\f!prefix!{f!} % for the moment we keep this one +\immutable\def\m!prefix!{m!} +\immutable\def\s!prefix!{s!} +\immutable\def\v!prefix!{v!} + +%D \macros +%D [constants,variables,commands] +%D {@@,??} +%D +%D Variables generated by the system can be recognized on their prefix \type {@@}. +%D They are composed of a command (class) specific tag, which can be recognized on +%D \type {??}, and a system constant, which has the prefix \type {c!}. We'll se some +%D more of this. + +\immutable\def\??prefix {??} +\immutable\def\@@prefix {@@} + +%D Just to be complete we repeat some of the already defined system constants here. +%D Maybe their prefix \type {\s!} now falls into place. + +\def\s!next {next} \def\s!default {default} +\def\s!dummy {dummy} \def\s!unknown {unknown} + +\def\s!do {do} \def\s!dodo {dodo} + +\def\s!complex {complex} \def\s!start {start} +\def\s!simple {simple} \def\s!stop {stop} + +\def\s!true {true} +\def\s!false {false} + +%D The word \type {height} takes 6~token memory cells. The control sequence \type +%D {\height} on the other hand uses only one. Knowing this, we can improve the +%D performance of \TEX, both is terms of speed and memory usage, by using control +%D sequences instead of the words written in full. +%D +%D Where in the \ASCII\ file the second lines takes nine extra characters, \TEX\ +%D saves us 13~tokens. +%D +%D \starttyping +%D \hrule width 10pt height 2pt depth 1pt +%D \hrule \s!width 10pt \s!height 2pt \s!depth 1pt +%D \stoptyping +%D +%D One condition is that we have defined \type {\s!height}, \type {\s!width} and +%D \type {\s!depth} as respectively \type {height}, \type {width} and \type {depth}. +%D Using this scheme therefore only makes sense when a token sequence is used more +%D than once. Savings like this should of course be implemented in english, just +%D because \TEX\ is english. + +\def\s!width {width} +\def\s!height {height} +\def\s!depth {depth} +\def\s!spread {spread} +\def\s!plus {plus} +\def\s!minus {minus} +\def\s!to {to} + +\def\s!fil {fil} +\def\s!fill {fill} +\def\s!filll {filll} + +\def\s!attr {attr} +\def\s!axis {axis} +\def\s!both {both} +\def\s!bottom {bottom} +\def\s!left {left} +\def\s!options {options} +\def\s!orientation{orientation} +\def\s!reverse {reverse} +\def\s!right {right} +\def\s!top {top} +\def\s!xmove {xmove} +\def\s!xoffset {xoffset} +\def\s!ymove {ymove} +\def\s!yoffset {yoffset} + +%D \macros + +%D {defineinterfaceconstant, +%D defineinterfacevariable, +%D defineinterfaceelement, +%D definesystemvariable, +%D definesystemconstant, +%D definemessageconstant, +%D definefileconstant} +%D +%D The first part of this module is dedicated to dealing with multi||lingual +%D constants and variables. When \CONTEXT\ grew bigger and bigger in terms of bytes +%D and used string space, we switched to predefined constants. At the cost of more +%D hash table entries, the macros not only becase more compact, they became much +%D faster too. Maybe an even bigger advantage was that mispelling could no longer +%D lead to problems. Even a multi||lingual interface became possible. +%D +%D Constants |<|we'll introduce the concept of variables later on|>| are preceded by +%D a type specific prefix, followed by a \type {!}. To force consistency, we provide +%D a few commands for defining such constants. +%D +%D \starttyping +%D \defineinterfaceconstant {name} {meaning} +%D \defineinterfacevariable {name} {meaning} +%D \defineinterfaceelement {name} {meaning} +%D \stoptyping +%D +%D Which is the same as: +%D +%D \starttyping +%D \def\c!name{meaning} +%D \def\v!name{meaning} +%D \def\e!name{meaning} +%D \stoptyping + +%permanent\protected\def\defineinterfaceconstant #1#2{\immutable\expandafter\def\csname\c!prefix!#1\endcsname{#2}} +\permanent\protected\def\defineinterfacevariable #1#2{\immutable\expandafter\def\csname\v!prefix!#1\endcsname{#2}} +\permanent\protected\def\defineinterfaceelement #1#2{\immutable\expandafter\def\csname\e!prefix!#1\endcsname{#2}} + +%D Next come some interface independant constants: +%D +%D \starttyping +%D \definefileconstant {name} {meaning} +%D \stoptyping + +\permanent\protected\def\definefileconstant #1#2{\immutable\expandafter\def\csname\f!prefix!#1\endcsname{#2}} + +%D And finaly we have the one argument, space saving constants +%D +%D \starttyping +%D \definesystemconstant {name} +%D \definemessageconstant {name} +%D \stoptyping + +% for now we check if a system variable has been defined, till we fixed all duplicate definitions + +\permanent\protected\def\definesystemconstant #1{\immutable\expandafter\def\csname\s!prefix!#1\endcsname{#1}} +\permanent\protected\def\definemessageconstant #1{\immutable\expandafter\def\csname\m!prefix!#1\endcsname{#1}} + +%D In a parameter driven system, some parameters are shared by more system +%D components. In \CONTEXT\ we can distinguish parameters by a unique prefix. Such a +%D prefix is defined with: +%D +%D \starttyping +%D \definesystemvariable {name} +%D \stoptyping + +\permanent\protected\def\definesystemvariable#1{\immutable\expandafter\edef\csname\??prefix#1\endcsname{\@@prefix#1}} + +\definesystemvariable{ms} + +%D \macros +%D {selectinterface, +%D defaultinterface, currentinterface, currentresponses} +%D +%D With \type {\selectinterface} we specify the language we are going to use. The +%D system asks for the language wanted, and defaults to \type {\currentinterface} +%D when we just give \type {enter}. By default the message system uses the current +%D interface language, but \type {\currentresponses} can specify another language +%D too. +%D +%D Because we want to generate formats directly too, we do not ask for interface +%D specifications when these are already defined (like in cont-nl.tex and alike). + +\ifdefined\defaultinterface + + \permanent\protected\def\selectinterface + {\writestatus{interface}{defining \currentinterface\space interface}% + %writeline + \writestatus{interface}{using \currentresponses\space messages}% + %\writeline + \enforced\permanent\let\selectinterface\relax} + +\else + + \def\defaultinterface{english} + + \permanent\overloaded\protected\def\selectinterface + {\enforced\permanent\protected\def\selectinterface##1##2% + {\bgroup + \endlinechar\minusone + \global\read16 to ##1 + \egroup + \doifnothing\currentinterface{\let##1=##2}% + \doifundefined{\s!prefix!##1}{\let##1=##2}}% + \selectinterface\currentinterface\defaultinterface + \writestatus{interface}{defining \currentinterface\space interface}% + %\writeline + \selectinterface\currentresponses\currentinterface + \writestatus{interface}{using \currentresponses\space messages}% + %\writeline + \enforced\permanent\let\selectinterface\relax} + +\fi + +\ifdefined\currentinterface \else \let\currentinterface\defaultinterface \fi +\ifdefined\currentresponses \else \let\currentresponses\defaultinterface \fi + +%D \macros +%D {startinterface} +%D +%D Sometimes we want to define things only for specific interface languages. This +%D can be done by means of the selector: +%D +%D \starttyping +%D \startinterface language +%D +%D language specific definitions & commands +%D +%D \stopinterface +%D \stoptyping + +\permanent\protected\def\startinterface #1 + {\doifnot{#1}{all}{\doifnotinset\currentinterface{#1}{\gobbleuntil\stopinterface}}} + +\aliased\let\stopinterface\relax + +%D \macros +%D {startmessages, +%D getmessage, +%D showmessage, +%D makemessage} +%D +%D A package as large as \CONTEXT\ can hardly function without a decent message +%D mechanism. Due to its multi||lingual interface, the message subsystem has to be +%D multi||lingual too. A major drawback of this feature is that we have to code +%D messages. As a result, the source becomes less self documented. On the other +%D hand, consistency will improve. +%D +%D Because the overhead in terms of entries in the (already exhausted) hash table +%D has to be minimal, messages are packed in libraries. We can extract a message +%D from such a library in three ways: +%D +%D \starttyping +%D \getmessage {library} {tag} +%D \showmessage {library} {tag} {data} +%D \makemessage {library} {tag} {data} +%D \stoptyping +%D +%D The first command gets the message \type {tag} from the \type {library} +%D specified. The other commands take an extra argument: a list of items to be +%D inserted in the message text. While \type {\showmessage} shows the message at the +%D terminal, the other commands generate the message as text. Before we explain the +%D \type {data} argument, we give an example of a library. +%D +%D \starttyping +%D \startmessages english library: alfa +%D title: something +%D 1: first message +%D 2: second (--) message -- +%D \stopmessages +%D \stoptyping +%D +%D The first message is a simple one and can be shown with: +%D +%D \starttyping +%D \showmessage {alfa} {1} {} +%D \stoptyping +%D +%D The second message on the other hand needs some extra data: +%D +%D \starttyping +%D \showmessage {alfa} {2} {and last,to you} +%D \stoptyping +%D +%D This message is shown as: +%D +%D \starttyping +%D something : second (and last) message to you +%D \stoptyping +%D +%D As we can see, the title entry is shown with the message. The data fields are +%D comma separated and are specified in the message text by \type {--}. +%D +%D It is not required to define all messages in a library at once. We can add +%D messages to a library in the following way: +%D +%D \starttyping +%D \startmessages english library: alfa +%D 10: tenth message +%D \stopmessages +%D \stoptyping +%D +%D Because such definitions can take place in different modules, the system gives a +%D warning when a tag occurs more than once. The first occurrence takes preference +%D over later ones, so we had better use a save offset, as shown in the example. As +%D we can see, the title field is specified only the first time! +%D +%D Because we want to check for duplicate tags, the macros are a bit more +%D complicated than neccessary. The \NEWLINE\ token is used as message separator. +%D +%D For internal purposes one can use \type {\setmessagetext}, which puts the message +%D text asked for in \type {\currentmessagetext}. +%D +%D These will become obsolete: + +\permanent\protected\def\startmessages #1 library: #2 % + {\begingroup + \ifcsname\m!prefix!#2\endcsname\else\immutable\setgvalue{\m!prefix!#2}{#2}\fi + \catcode\endoflineasciicode\othercatcode + \doifelseinset{#1}{\currentresponses,all}\mult_messages_start_yes\mult_messages_start_nop{#2}} + +\def\mult_messages_start_yes#1#2\stopmessages + {\clf_setinterfacemessages{#1}{#2}% + \endgroup} + +\def\mult_messages_start_nop#1#2\stopmessages + {\endgroup} + +\let\stopmessages\relax + +\permanent\protected\def\setinterfacemessage#1#2#3% + {\ifcsname\m!prefix!#1\endcsname\else\immutable\setgvalue{\m!prefix!#1}{#1}\fi + \clf_setinterfacemessage{#1}{#2}{#3}} + +\pushoverloadmode + +\permanent\protected\def\setmessagetext #1#2{\relax\edef\currentmessagetext{\clf_getmessage{#1}{#2}}} +\permanent\protected\def\getmessage #1#2{\relax\clf_getmessage{#1}{#2}} +\permanent\protected\def\doifelsemessage #1#2{\relax\clf_doifelsemessage{#1}{#2}} +\permanent\protected\def\showmessage #1#2#3{\relax\clf_showmessage{#1}{#2}{#3}} +\permanent\protected\def\writestatus #1#2{\relax\clf_writestatus{#1}{#2}} +\permanent\protected\def\message {\relax\clf_message} + +\popoverloadmode + +\aliased\let\doifmessageelse\doifelsemessage + +\permanent\protected\def\inlinemessage #1{\dontleavehmode{\tttf#1}} +\permanent\protected\def\displaymessage#1{\blank\inlinemessage{#1}\blank} + +\permanent\let\getsetupstring\clf_getsetupstring +\permanent\let\rawsetupstring\clf_rawsetupstring + +%D For old times sake: + +\let\showwarning\showmessage + +%D \macros +%D {dosetvalue,dosetevalue,dosetgvalue,dosetxvalue,docopyvalue,doresetvalue} % dogetvalue +%D +%D We already defined these auxiliary macros in the system modules. Starting with +%D this module however, we have to take multi||linguality a bit more serious. +%D +%D In due time, when we exclusively use the parameter handler code, we can drop the +%D backmapping (\type{\c!k...}) and make \type {\c!c...} similar to \type {\v!...}. +%D In that case we can simply the following setters. + +\pushoverloadmode + +\permanent\protected\def\doletvalue #1#2{\expandafter\let \csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} +\permanent\protected\def\dosetvalue #1#2{\expandafter\def \csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} +\permanent\protected\def\dosetevalue #1#2{\expandafter\edef\csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} +\permanent\protected\def\dosetgvalue #1#2{\expandafter\gdef\csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} +\permanent\protected\def\dosetxvalue #1#2{\expandafter\xdef\csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname} +\permanent\protected\def\doresetvalue #1#2{\expandafter\let \csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname\empty} +\permanent\protected\def\doignorevalue#1#2#3{\expandafter\let \csname#1\ifcsname\k!prefix!#2\endcsname\csname\k!prefix!#2\endcsname\else#2\fi\endcsname\empty} + +\permanent\protected\def\docopyvalue#1#2#3% + {\ifcsname\k!prefix!#3\endcsname + \expandafter\def\csname#1\csname\k!prefix!#3\endcsname\expandafter\endcsname\expandafter + {\csname#2\csname\k!prefix!#3\endcsname\endcsname}% + \else + \expandafter\def\csname#1#3\expandafter\endcsname\expandafter + {\csname#2#3\endcsname}% + \fi} + +\startinterface english + + \permanent\protected\def\doletvalue #1#2{\expandafter \let\csname#1#2\endcsname} + \permanent\protected\def\dosetvalue #1#2{\expandafter \def\csname#1#2\endcsname} + \permanent\protected\def\dosetevalue #1#2{\expandafter\edef\csname#1#2\endcsname} + \permanent\protected\def\dosetgvalue #1#2{\expandafter\gdef\csname#1#2\endcsname} + \permanent\protected\def\dosetxvalue #1#2{\expandafter\xdef\csname#1#2\endcsname} + \permanent\protected\def\doresetvalue #1#2{\expandafter \let\csname#1#2\endcsname\empty} + \permanent\protected\def\doignorevalue#1#2#3{\expandafter \let\csname#1#2\endcsname\empty} + + \permanent\protected\def\docopyvalue#1#2#3% + {\expandafter\def\csname#1#3\expandafter\endcsname\expandafter + {\csname#2#3\endcsname}} + +\stopinterface + +\popoverloadmode + +%D We can now redefine some messages that will be introduced in the multi||lingual +%D system module. + +\permanent\protected\def\showassignerror #1#2{\showmessage\m!check1{#1,#2}} +\permanent\protected\def\showargumenterror#1#2{\showmessage\m!check2{#1,#2}} +\permanent\protected\def\showdefinederror #1#2{\showmessage\m!check3{#1,#2}} + +%D \CONTEXT\ is a parameter driven package. This means that users instruct the +%D system by means of variables, values and keywords. These instructions take the +%D form: +%D +%D \starttyping +%D \setupsomething[some variable=some value, another one=a keyword] +%D \stoptyping +%D +%D or by keyword only: +%D +%D \starttyping +%D \dosomething[this way,that way,no way] +%D \stoptyping +%D +%D Because the same variables can occur in more than one setup command, we have to +%D be able to distinguish them. This is achieved by assigning them a unique prefix. +%D +%D Imagine a setup command for boxed text, that enables us to specify the height and +%D width of the box. Behide the scenes the command +%D +%D \starttyping +%D \setupbox [width=12cm, height=3cm] +%D \stoptyping +%D +%D results in something like +%D +%D \starttyping +%D \ {12cm} +%D \ {3cm} +%D \stoptyping +%D +%D while a similar command for specifying the page dimensions +%D of an \cap {A4} page results in: +%D +%D \starttyping +%D \ {21.0cm} +%D \ {27.9cm} +%D \stoptyping +%D +%D The prefixes \type {} and \type {} are hidden from users and can +%D therefore be language independant. Variables on the other hand, differ for each +%D language: +%D +%D \starttyping +%D \ {} +%D \ {} +%D \ {} +%D \stoptyping +%D +%D In this example we can see that the assigned values or keywords are language +%D dependant too. This will be a complication when defining multi||lingual setup +%D files. +%D +%D A third phenomena is that variables and values can have a similar meaning. +%D +%D \starttyping +%D \ {} +%D \ {12cm} +%D \stoptyping +%D +%D A (minor) complication is that where in english we use \type {}, in dutch +%D we find both \type {} and \type {}. This means that when we use +%D some sort of translation table, we have to distinguish between the variables at +%D the left side and the fixed values at the right. +%D +%D The same goes for commands that are composed of different user supplied and/or +%D language specific elements. In english we can use: +%D +%D \starttyping +%D \
+%D \ +%D \stoptyping +%D +%D But in dutch we have the following: +%D +%D \starttyping +%D \ +%D \ +%D \stoptyping +%D +%D These subtle differences automatically lead to a solution where variables, +%D values, elements and other components have a similar logical name (used in +%D macro's) but a different meaning (supplied by the user). +%D +%D Our solution is one in which the whole system is programmed in terms of +%D identifiers with language specific meanings. In such an implementation, each +%D fixed variable is available as: +%D +%D \starttyping +%D \ +%D \stoptyping +%D +%D This means that for instance: +%D +%D \starttyping +%D \setupbox[width=12cm] +%D \stoptyping +%D +%D expands to something like: +%D +%D \starttyping +%D \def\boxwidth{12cm} +%D \stoptyping +%D +%D because we don't want to recode the source, a setup command in another language +%D has to expand to this variable, so: +%D +%D \starttyping +%D \setupblock[width=12cm] +%D \stoptyping +%D +%D has to result in the definition of \type {\boxwidth} too. This method enables us +%D to build compact, fast and readable code. +%D +%D An alternative method, which we considered using, uses a more indirect way. In +%D this case, both calls generate a different variable: +%D +%D \starttyping +%D \def\boxwidth {12cm} +%D \def\boxbreedte {12cm} +%D \stoptyping +%D +%D And because we don't want to recode those megabytes of already developed code, +%D this variable has to be called with something like: +%D +%D \starttyping +%D \valueof\box\width +%D \stoptyping +%D +%D where \type {\valueof} takes care of the translation of \type {width} or \type +%D {breedte} to \type {width} and combining this with \type {box} to \type +%D {\boxwidth}. +%D +%D One advantage of this other scheme is that, within certain limits, we can +%D implement an interface that can be switched to another language at will, while +%D the current approach fixes the interface at startup. There are, by the way, other +%D reasons too for not choosing this scheme. Switching user generated commands is +%D for instance impossible and a dual interface would therefore give a strange mix +%D of languages. +%D +%D Now let's work out the first scheme. Although the left hand of the assignment is +%D a variable from the users point of view, it is a constant in terms of the system. +%D Both \type {width} and \type {breedte} expand to \type {width} because in the +%D source we only encounter \type {width}. Such system constants are presented as +%D +%D \starttyping +%D \c!width +%D \stoptyping +%D +%D This constant is always equivalent to \type {width}. As we can see, we use \type +%D {c!} to mark this one as constant. Its dutch counterpart is: +%D +%D \starttyping +%D breedte +%D \stoptyping +%D +%D When we interpret a setup command each variable is translated to it's \type{c!} +%D counterpart. This means that \type {breedte} and \type{width} expand to \type +%D {breedte} and \type {\c!width} which both expand to \type {width}. That way user +%D variables become system constants. +%D +%D The interpretation is done by means of a general setup command \type +%D {\getparameters} that we introduced in the system module. Let us define some +%D simple setup command: +%D +%D \starttyping +%D \protected\def\setupbox[#1]% +%D {\getparameters[\??bx][#1]} +%D \stoptyping +%D +%D This command can be used as: +%D +%D \starttyping +%D \setupbox [width=3cm, height=1cm] +%D \stoptyping +%D +%D Afterwards we have two variables \type {\@@bxwidth} and \type {\@@bxheight} which +%D have the values \type {3cm} and \type {1cm} assigned. These variables are a +%D combinatiom of the setup prefix \type {\??bx}, which expands to \type {@@bx} and +%D the translated user supplied variables \type {width} and \type {height} or \type +%D {breedte} and \type {hoogte}, depending on the actual language. In dutch we just +%D say: +%D +%D \starttyping +%D \stelblokin [breedte=3cm,hoogte=1cm] +%D \stoptyping +%D +%D and get ourselves \type {\@@bxwidth} and \type {\@@bxheight} too. In the source +%D of \CONTEXT, we can recognize constants and variables on their leading \type +%D {c!}, \type {v!} etc., prefixes on \type {??} and composed variables on \type +%D {@@}. +%D +%D We already saw that user supplied keywords need some special treatment too. This +%D time we don't translate the keyword, but instead use in the source a variable +%D which meaning depends on the interface language. +%D +%D \starttyping +%D \v!left +%D \stoptyping +%D +%D Which can be used in macro's like: +%D +%D \starttyping +%D \processaction +%D [\@@bxlocation] +%D [ \v!left=>\dosomethingontheleft, +%D \v!middle=>\dosomthinginthemiddle, +%D \v!right=>\dosomethingontheright] +%D \stoptyping +%D +%D Because variables like \type {\@@bxlocation} can have a lot of meanings, +%D including tricky expandable tokens, we cannot translate this meaning when we +%D compare. This means that \type {\@@bxlocation} can be \type {left} of \type +%D {links} of whatever meaning suits the language. But because \type {\v!left} also +%D has a meaning that suits the language, we are able to compare. +%D +%D Although we know it sounds confusing we want to state two important +%D characteristics of the interface as described: +%D +%D \startnarrower \em +%D user variables become system constants +%D \stopnarrower +%D +%D and +%D +%D \startnarrower \em +%D user constants (keywords) become system variables +%D \stopnarrower +%D +%D The \type {\c!internal} is a left over from the time that the user interface +%D documents were not using a specification alongside a keyword specification but +%D used a shared file in which case we need to go in both directions. + +% temporary mkiv hack (we can best just store the whole table in memory) + +\permanent\overloaded\protected\def\setinterfaceconstant#1#2% + {\clf_setinterfaceconstant{#1}{#2}% + \immutable\expandafter\def\csname\c!prefix!#1\endcsname{#1}} + +\permanent\overloaded\protected\def\setinterfacevariable#1#2% + {\clf_setinterfacevariable{#1}{#2}% + \immutable\expandafter\def\csname\v!prefix!#1\endcsname{#2}} + +%D \macros +%D {defineinterfaceconstant} +%D +%D Next we redefine a previously defined macro to take care of interface translation +%D too. It's a bit redundant, because in these situations we could use the +%D c||version, but for documentation purposes the x||alternative comes in handy. + +\permanent\overloaded\protected\def\defineinterfaceconstant#1#2% + {\immutable\expandafter\def\csname\c!prefix!#1\endcsname{#2}} + +%D \macros +%D {startelements} +%D +%D Due to the object oriented nature of \CONTEXT, we also need to define the +%D elements that are used to build commands. +%D +%D Such elements sometimes are the same in different languages, but mostly they +%D differ. Things can get even confusing when we look at for instance the setup +%D commands. In english we say \type{\setup}, but in dutch we have: \type +%D {\stelin}. Such split elements are no problem, because we just define two +%D elements. When no second part is needed, we use a \type {-}: + +\permanent\overloaded\protected\def\setinterfaceelement#1#2% + {\clf_setinterfaceelement{#1}{#2}% + \ifcsname\e!prefix!#1\endcsname + \doifnotvalue{\e!prefix!#1}{#2}{\enforced\immutable\setvalue{\e!prefix!#1}{#2}}% + \else + \enforced\immutable\setvalue{\e!prefix!#1}{#2}% + \fi} + +\permanent\protected\def\setinterfacecommand#1#2% \frozen ? \permanent ? + {\doifnot{#1}{#2}% todo: let when already defined + {\expandafter\def\csname#2\expandafter\endcsname\expandafter{\csname#1\endcsname}}} + +%D We just ignore these: + +\permanent\protected\def\startvariables{\gobbleuntil\stopvariables} \let\stopvariables\relax +\permanent\protected\def\startconstants{\gobbleuntil\stopconstants} \let\stopconstants\relax +\permanent\protected\def\startelements {\gobbleuntil\stopelements } \let\stopelements \relax +\permanent\protected\def\startcommands {\gobbleuntil\stopcommands } \let\stopcommands \relax + +%D For at the \LUA\ end (experiment): + +\def\ui_c#1#2{\immutable\expandafter\gdef\csname\c!prefix!#1\endcsname{#1}% + \immutable\expandafter\gdef\csname\k!prefix!#2\endcsname{#1}} % backmapping from non english +\def\ui_s #1{\immutable\expandafter\gdef\csname\c!prefix!#1\endcsname{#1}% + \immutable\expandafter\gdef\csname\k!prefix!#1\endcsname{#1}} % backmapping from non english +\def\ui_v#1#2{\immutable\expandafter\gdef\csname\v!prefix!#1\endcsname{#2}} +\def\ui_e#1#2{\immutable\expandafter\gdef\csname\e!prefix!#1\endcsname{#2}} +\def\ui_a#1#2{\frozen\protected\def#2{#1}} % will go away + +\startinterface english + + \def\ui_c#1#2{\immutable\expandafter\gdef\csname\c!prefix!#1\endcsname{#1}} + \def\ui_s #1{\immutable\expandafter\gdef\csname\c!prefix!#1\endcsname{#1}} + +\stopinterface + +%D So much for the basic multi||lingual interface commands. The macro's can be +%D enhanced with more testing facilities, but for the moment they suffice. + +\ifdefined\zwnj \else \immutable\edef\zwnj{\directlua{utf.char(\number"200C)}} \fi % needed for cont-pe % maybe to char-utf.mkiv +\ifdefined\zwj \else \immutable\edef\zwj {\directlua{utf.char(\number"200D)}} \fi % needed for cont-pe % maybe to char-utf.mkiv + +%D \macros +%D {contextversion, contextversionnumber, contextversionno, +%D contextbanner, showcontextbanner, formatversion} +%D +%D Out of convenience we define the banners here. This might move to the \LUA\ end. + +\pushoverloadmode + +\permanent\overloaded\def\contextbanner + {ConTeXt \space + ver: \contextversion \space \contextmark \space \space + fmt: \formatversion \space \space + int: \currentinterface/\currentresponses} + +\permanent\overloaded\protected\def\showcontextbanner + {\writestatus\m!system\empty + \writestatus\m!system\contextbanner + \writestatus\m!system\empty} + +\immutable\overloaded\edef\formatversion + {\the\normalyear.\the\normalmonth.\the\normalday} + +\newcount\contextversionno + +\ifx\contextversion\undefined + \immutable\edef\contextversion{\the\normalyear.\the\normalmonth.\the\normalday\space 00:00} +\fi + +\permanent\overloaded\protected\def \contextversionnumber #1.#2.#3 #4:#5\relax{#1#2#3} + \contextversionno \expandafter\contextversionnumber\contextversion\relax +\immutable\overloaded \edef\contextversionnumber {\the\contextversionno\space\contextmark} + +\popoverloadmode + +%D \macros +%D {everydump} +%D +%D This one is only used when we generate the format. + +% \ifx\undefined\everydump +% \newtoks\everydump +% \def\dump{\the\everydump\global\everydump\emptytoks\glet\dump\relax\normaldump} +% \fi + +% \appendtoks \showcontextbanner \to \everydump + +\protect \endinput diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua index 6ca7a7a40..8cf89c40a 100644 --- a/tex/context/base/mkiv/mult-low.lua +++ b/tex/context/base/mkiv/mult-low.lua @@ -12,7 +12,7 @@ return { ["constants"] = { -- "zerocount", "minusone", "minustwo", "plusone", "plustwo", "plusthree", "plusfour", "plusfive", - "plussix", "plusseven", "pluseight", "plusnine", "plusten", "plussixteen", + "plussix", "plusseven", "pluseight", "plusnine", "plusten", "pluseleven", "plustwelve", "plussixteen", "plusfifty", "plushundred", "plusonehundred", "plustwohundred", "plusfivehundred", "plusthousand", "plustenthousand", "plustwentythousand", "medcard", "maxcard", "maxcardminusone", "zeropoint", "onepoint", "halfapoint", "onebasepoint", "maxcount", "maxdimen", "scaledpoint", "thousandpoint", @@ -67,15 +67,11 @@ return { "doublequoteasciicode", "singlequoteasciicode", "forwardslashasciicode", "primeasciicode", "hyphenasciicode", -- - "frozenhsizecode", "frozenleftskipcode", "frozenrightskipcode", "frozenhangindentcode", - "frozenhangaftercode", "frozenparindentcode", "frozenparfillskipcode", "frozenparfillleftskipcode", - "frozenadjustspacingcode", "frozenprotrudecharscode", "frozenpretolerancecode", "frozentolerancecode", - "frozenemergencystretchcode", "frozenloosenesscode", "frozenlastlinefitcode", "frozenlinepenaltycode", - "frozeninterlinepenaltycode", "frozenclubpenaltycode", "frozenwidowpenaltycode", - "frozendisplaywidowpenaltycode", "frozenbrokenpenaltycode", "frozenadjdemeritscode", - "frozendoublehyphendemeritscode", "frozenfinalhyphendemeritscode", "frozenparshapecode", - "frozeninterlinepenaltiescode", "frozenclubpenaltiescode", "frozenwidowpenaltiescode", - "frozendisplaywidowpenaltiescode", + "frozenhsizecode", "frozenskipcode", "frozenhangcode", "frozenindentcode", "frozenparfillcode", + "frozenadjustcode", "frozenprotrudecode", "frozentolerancecode", "frozenstretchcode", + "frozenloosenesscode", "frozenlastlinecode", "frozenlinepenaltycode", "frozenclubpenaltycode", + "frozenwidowpenaltycode", "frozendisplaypenaltycode", "frozenbrokenpenaltycode", + "frozendemeritscode", "frozenshapecode", "frozenlinecode", "frozenallcode", -- "activemathcharcode", -- @@ -85,7 +81,7 @@ return { -- "bottomlevelgroupcode", "simplegroupcode", "hboxgroupcode", "adjustedhboxgroupcode", "vboxgroupcode", "vtopgroupcode", "aligngroupcode", "noaligngroupcode", "outputgroupcode", "mathgroupcode", - "discgroupcode", "insertgroupcode", "vadjustgroupcode", "vcentergroupcode", "mathabovegroupcode", + "discretionarygroupcode", "insertgroupcode", "vadjustgroupcode", "vcentergroupcode", "mathabovegroupcode", "mathchoicegroupcode", "semisimplegroupcode", "mathshiftgroupcode", "mathleftgroupcode", "localboxgroupcode", "splitoffgroupcode", "splitkeepgroupcode", "preamblegroupcode", "alignsetgroupcode", "finrowgroupcode", "discretionarygroupcode", @@ -166,6 +162,14 @@ return { "permitgluehyphenationmodecode", "permitallhyphenationmodecode", "permitmathreplacehyphenationmodecode", -- "normalizelinemodecode", "indentskipmodecode", "swaphangindentmodecode", "swapparskipmodecode", "breakafterdirmodecode", + -- + "noligaturingcode", "nokerningcode", "noleftligaturecode", "noleftkerncode", "norightligaturecode", "norightkerncode", + "noexpansioncode", "noprotrusioncode", + -- + "frozenflagcode", "tolerantflagcode", "protectedflagcode", "primitiveflagcode", "permanentflagcode", "noalignedflagcode", "immutableflagcode", "mutableflagcode", + "globalflagcode", "overloadedflagcode", "immediateflagcode", "conditionalflagcode", "valueflagcode", "instanceflagcode", + -- + "continuewhenlmtxmode" }, ["helpers"] = { -- @@ -200,6 +204,7 @@ return { -- "strippedcsname","checkedstrippedcsname", -- + "nofarguments", "firstargumentfalse", "firstargumenttrue", "secondargumentfalse", "secondargumenttrue", "thirdargumentfalse", "thirdargumenttrue", @@ -477,7 +482,7 @@ return { "carryoverpar", "freezeparagraphproperties", "defrostparagraphproperties", "setparagraphfreezing", "forgetparagraphfreezing", - "updateparagraphproperties", "updateparagraphpenalties", "updateparagraphdemerits", "updateparagraphshapes", + "updateparagraphproperties", "updateparagraphpenalties", "updateparagraphdemerits", "updateparagraphshapes", "updateparagraphlines", -- "lastlinewidth", -- @@ -526,5 +531,13 @@ return { "ifbitwiseand", "bitwise", "bitwiseshift", "bitwiseflip", -- old ... very low level "textdir", "linedir", "pardir", "boxdir", + -- + "prelistbox", "postlistbox", "prelistcopy", "postlistcopy", "setprelistbox", "setpostlistbox", + -- + "noligaturing", "nokerning", "noexpansion", "noprotrusion", + -- + "futureletnexttoken", "defbackslashbreak", "letbackslashbreak", + -- + "pushoverloadmode", "popoverloadmode", } } diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua index 3f9b2e15a..1a2b9bfaa 100644 --- a/tex/context/base/mkiv/mult-prm.lua +++ b/tex/context/base/mkiv/mult-prm.lua @@ -54,6 +54,7 @@ return { "splitdiscards", "splitfirstmarks", "topmarks", + "tracingalignments", "tracingassigns", "tracinggroups", "tracingifs", @@ -234,6 +235,7 @@ return { "adjustspacingstretch", "afterassigned", "aftergrouped", + "aliased", "alignmark", "aligntab", "atendofgroup", @@ -246,7 +248,7 @@ return { "begincsname", "beginlocalcontrol", "boundary", - "boxattr", + "boxattribute", "boxdirection", "boxorientation", "boxtotal", @@ -261,9 +263,14 @@ return { "crampedscriptstyle", "crampedtextstyle", "csstring", + "defaliased", + "defcsname", "directlua", + "edefaliased", + "edefcsname", "efcode", "endlocalcontrol", + "enforced", "etoksapp", "etokspre", "everytab", @@ -278,6 +285,7 @@ return { "explicithyphenpenalty", "firstvalidlanguage", "fontid", + "fontspecifiedsize", "formatname", "frozen", "futuredef", @@ -288,6 +296,7 @@ return { "glet", "glyphdatafield", "glyphdimensionsmode", + "glyphoptions", "glyphscriptfield", "glyphstatefield", "gtoksapp", @@ -308,7 +317,7 @@ return { "ifcstok", "ifdimval", "ifempty", - "iffrozen", + "ifflags", "ifhastok", "ifhastoks", "ifhasxtoks", @@ -316,27 +325,29 @@ return { "ifmathparameter", "ifmathstyle", "ifnumval", - "ifprotected", + "ifparameter", "iftok", - "ifusercmd", "ignorearguments", "ignorepars", "immediate", - "immediateassigned", - "immediateassignment", + "immutable", "initcatcodetable", "insertht", + "instance", + "integerdef", "lastarguments", "lastnamedcs", "lastnodesubtype", "leftmarginkern", + "letaliased", "letcharcode", - "letdatacode", + "letcsname", "letfrozen", "letprotected", "linedirection", "linepar", "localbrokenpenalty", + "localcontrol", "localcontrolled", "localinterlinepenalty", "localleftbox", @@ -370,18 +381,21 @@ return { "mathstyle", "mathsurroundmode", "mathsurroundskip", + "mutable", + "noaligned", "noboundary", "nohrule", - "nokerns", - "noligs", "normalizelinemode", "nospaces", "novrule", "orelse", "orunless", "outputbox", + "overloaded", + "overloadmode", "parattr", "pardirection", + "permanent", "postexhyphenchar", "posthyphenchar", "prebinoppenalty", @@ -400,11 +414,13 @@ return { "setfontid", "snapshotpar", "supmarkmode", + "swapcsvalues", "textdirection", "thewithoutunit", "tokenized", "toksapp", "tokspre", + "tolerant", "tpack", "tracingfonts", "tracingmath", @@ -625,6 +641,7 @@ return { "font", "fontdimen", "fontname", + "fontspecifiedname", "futurelet", "gdef", "global", @@ -638,7 +655,6 @@ return { "hfill", "hfilneg", "hfuzz", - "hoffset", "holdinginserts", "hrule", "hsize", @@ -693,7 +709,6 @@ return { "looseness", "lower", "lowercase", - "mag", "mark", "mathaccent", "mathbin", @@ -712,6 +727,8 @@ return { "maxdeadcycles", "maxdepth", "meaning", + "meaningfull", + "meaningless", "medmuskip", "message", "middle", @@ -810,11 +827,14 @@ return { "thickmuskip", "thinmuskip", "time", + "todimension", + "tointeger", "toks", "toksdef", "tolerance", "topmark", "topskip", + "toscaled", "tracingcommands", "tracinglostchars", "tracingmacros", @@ -846,7 +866,6 @@ return { "vfill", "vfilneg", "vfuzz", - "voffset", "vrule", "vsize", "vskip", diff --git a/tex/context/base/mkiv/mult-sys.mkiv b/tex/context/base/mkiv/mult-sys.mkiv index f04f986fe..b4c006234 100644 --- a/tex/context/base/mkiv/mult-sys.mkiv +++ b/tex/context/base/mkiv/mult-sys.mkiv @@ -49,13 +49,13 @@ \definesystemconstant {bokmal} \definesystemconstant {nb} \definesystemconstant {catalan} \definesystemconstant {ca} \definesystemconstant {chinese} \definesystemconstant {cn} -\definesystemconstant {chinese} \definesystemconstant {cn} \definesystemconstant {croatian} \definesystemconstant {hr} \definesystemconstant {czech} \definesystemconstant {cs} \definesystemconstant {danish} \definesystemconstant {da} \definesystemconstant {dutch} \definesystemconstant {nl} \definesystemconstant {english} \definesystemconstant {en} \definesystemconstant {estonian} \definesystemconstant {et} +\definesystemconstant {esperanto} % \definesystemconstant {eo} \definesystemconstant {farsi} \definesystemconstant {fa} % just persian \definesystemconstant {finnish} \definesystemconstant {fi} \definesystemconstant {french} \definesystemconstant {fr} @@ -275,6 +275,7 @@ \definesystemconstant {start} \definesystemconstant {stop} \definesystemconstant {unknown} +\definesystemconstant {unexpanded} % translating setups is asking for a mess so we keep them as-is: @@ -408,8 +409,11 @@ \definesystemconstant {text} \definesystemconstant {paragraph} \definesystemconstant {margintext} +\definesystemconstant {themaintextcolor} \definesystemconstant {line} +\definesystemconstant {itemgroupcolumns} +\definesystemconstant {vfrac} \definesystemconstant {number} \definesystemconstant {symbol} \definesystemconstant {format} @@ -574,19 +578,19 @@ \defineinterfaceconstant {e} {e} % can go \defineinterfaceconstant {f} {f} % can go -\defineinterfaceconstant {s} {s} +%defineinterfaceconstant {s} {s} \defineinterfaceconstant {r} {r} \defineinterfaceconstant {g} {g} -\defineinterfaceconstant {b} {b} -\defineinterfaceconstant {c} {c} +%defineinterfaceconstant {b} {b} +%defineinterfaceconstant {c} {c} \defineinterfaceconstant {m} {m} -\defineinterfaceconstant {y} {y} +%defineinterfaceconstant {y} {y} \defineinterfaceconstant {k} {k} -\defineinterfaceconstant {a} {a} % alternative -\defineinterfaceconstant {t} {t} % transparency +%defineinterfaceconstant {a} {a} % alternative +%defineinterfaceconstant {t} {t} % transparency \defineinterfaceconstant {p} {p} % percentage -\defineinterfaceconstant {h} {h} -\defineinterfaceconstant {s} {s} +%defineinterfaceconstant {h} {h} +%defineinterfaceconstant {s} {s} \defineinterfaceconstant {v} {v} \defineinterfaceconstant {rgb} {rgb} @@ -673,7 +677,7 @@ \selectinterface -%D Ok, here are some more, because we've got ouselves some extensions to \CONTEXT. +%D Ok, here are some more, because we've got ourselves some extensions to \CONTEXT. \definemessageconstant {addresses} \definemessageconstant {documents} diff --git a/tex/context/base/mkiv/mult-sys.mkxl b/tex/context/base/mkiv/mult-sys.mkxl new file mode 100644 index 000000000..40fcb9c35 --- /dev/null +++ b/tex/context/base/mkiv/mult-sys.mkxl @@ -0,0 +1,596 @@ +%D \module +%D [ file=mult-sys, +%D version=1996.06.01, +%D title=\CONTEXT\ Multilingual 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. + +%D In boring module we define a lot of obscure but useful system constants. +%D By doing so we save lots of memory while at the same time we prevent +%D ourself making typing errors. + +\writestatus{loading}{ConTeXt Multilingual Macros / System} + +\unprotect + +%D This file is mostly the same as the \MKII\ variant but we keep extending +%D \MKIV, so it was bout time to have a dedicated variant. +%D +%D The constants are grouped in such a way that there is a minimal change of +%D conflicts. +%D +%D \starttyping +%D \definesystemconstants {word} +%D \definemessageconstant {word} +%D \stoptyping +%D +%D This commands generate \type{\s!word} and \type{\m!word}. + +\definesystemconstant {hans} +\definesystemconstant {taco} +\definesystemconstant {wolfgang} + +%D First we define some system constants used for both the multi||lingual +%D interface and multi||linguag typesetting. + +% definesystemconstant {slovene} +% definesystemconstant {cz} +% definesystemconstant {vn} + +\definesystemconstant {afrikaans} \definesystemconstant {af} +\definesystemconstant {ancientgreek} \definesystemconstant {agr} +\definesystemconstant {ancientlatin} \definesystemconstant {ala} +\definesystemconstant {arabic} \definesystemconstant {ar} +\definesystemconstant {bokmal} \definesystemconstant {nb} +\definesystemconstant {catalan} \definesystemconstant {ca} +\definesystemconstant {chinese} \definesystemconstant {cn} +\definesystemconstant {croatian} \definesystemconstant {hr} +\definesystemconstant {czech} \definesystemconstant {cs} +\definesystemconstant {danish} \definesystemconstant {da} +\definesystemconstant {dutch} \definesystemconstant {nl} +\definesystemconstant {english} \definesystemconstant {en} +\definesystemconstant {estonian} \definesystemconstant {et} +\definesystemconstant {esperanto} % \definesystemconstant {eo} +\definesystemconstant {farsi} \definesystemconstant {fa} % just persian +\definesystemconstant {finnish} \definesystemconstant {fi} +\definesystemconstant {french} \definesystemconstant {fr} +\definesystemconstant {gbenglish} \definesystemconstant {gb} +\definesystemconstant {german} \definesystemconstant {de} +\definesystemconstant {greek} \definesystemconstant {gr} +\definesystemconstant {hebrew} \definesystemconstant {he} +\definesystemconstant {yiddish} \definesystemconstant {yi} +\definesystemconstant {hungarian} \definesystemconstant {hu} +\definesystemconstant {italian} \definesystemconstant {it} +\definesystemconstant {japanese} \definesystemconstant {ja} +\definesystemconstant {korean} \definesystemconstant {kr} +\definesystemconstant {latin} \definesystemconstant {la} +\definesystemconstant {lithuanian} \definesystemconstant {lt} +\definesystemconstant {malayalam} \definesystemconstant {ml} +\definesystemconstant {norwegian} \definesystemconstant {no} +\definesystemconstant {nynorsk} \definesystemconstant {nn} +\definesystemconstant {persian} \definesystemconstant {pe} +\definesystemconstant {polish} \definesystemconstant {pl} +\definesystemconstant {portuguese} \definesystemconstant {pt} +\definesystemconstant {romanian} \definesystemconstant {ro} +\definesystemconstant {russian} \definesystemconstant {ru} +\definesystemconstant {slovak} \definesystemconstant {sk} +\definesystemconstant {slovenian} \definesystemconstant {sl} +\definesystemconstant {spanish} \definesystemconstant {es} +\definesystemconstant {swedish} \definesystemconstant {sv} +\definesystemconstant {thai} \definesystemconstant {th} % mojca mentioned it at BT2013 but we need more info +\definesystemconstant {turkish} \definesystemconstant {tr} +\definesystemconstant {turkmen} \definesystemconstant {tk} +\definesystemconstant {ukenglish} \definesystemconstant {uk} +\definesystemconstant {ukrainian} \definesystemconstant {ua} +\definesystemconstant {usenglish} \definesystemconstant {us} +\definesystemconstant {vietnamese} \definesystemconstant {vi} + +%D For proper \UNICODE\ support we need a few font related constants. + +\definesystemconstant {action} +\definesystemconstant {all} +\definesystemconstant {ampersand} +\definesystemconstant {ascii} +\definesystemconstant {attribute} +\definesystemconstant {attr} +\definesystemconstant {author} +\definesystemconstant {auto} +\definesystemconstant {axis} +\definesystemconstant {a} +\definesystemconstant {bf} +\definesystemconstant {big} +\definesystemconstant {binary} +\definesystemconstant {bi} +\definesystemconstant {blackboard} +\definesystemconstant {black} +\definesystemconstant {BoldItalic} +\definesystemconstant {BoldSlanted} +\definesystemconstant {Bold} +\definesystemconstant {bold} +\definesystemconstant {both} +\definesystemconstant {bottomfloat} +\definesystemconstant {bottom} +\definesystemconstant {box} +\definesystemconstant {bp} +\definesystemconstant {bs} +\definesystemconstant {b} +\definesystemconstant {calligraphy} +\definesystemconstant {Calligraphy} +\definesystemconstant {Caps} +\definesystemconstant {casual} +\definesystemconstant {Casual} +\definesystemconstant {catcodes} +\definesystemconstant {catcodetable} +\definesystemconstant {cc} +\definesystemconstant {cg} +\definesystemconstant {chain} +\definesystemconstant {check} +\definesystemconstant {child} +\definesystemconstant {cite} +\definesystemconstant {class} +\definesystemconstant {clone} +\definesystemconstant {cmyk} +\definesystemconstant {cm} +\definesystemconstant {code} +\definesystemconstant {collapsing} +\definesystemconstant {command} +\definesystemconstant {compare} +\definesystemconstant {complex} +\definesystemconstant {counter} +\definesystemconstant {cramped} +\definesystemconstant {current} +\definesystemconstant {c} +\definesystemconstant {data} +\definesystemconstant {dd} +\definesystemconstant {decimal} +\definesystemconstant {DefaultFont} +\definesystemconstant {default} +\definesystemconstant {depth} +\definesystemconstant {designsize} +\definesystemconstant {direction} +\definesystemconstant {display} +\definesystemconstant {document} +\definesystemconstant {dodo} +\definesystemconstant {done} +\definesystemconstant {double} +\definesystemconstant {do} +\definesystemconstant {dtp} +\definesystemconstant {dummy} +\definesystemconstant {d} +\definesystemconstant {edge} +\definesystemconstant {effect} +\definesystemconstant {empty} +\definesystemconstant {em} +\definesystemconstant {environment} +\definesystemconstant {extensions} +\definesystemconstant {external} +\definesystemconstant {ex} +\definesystemconstant {e} +\definesystemconstant {fallbacks} +\definesystemconstant {fallback} +\definesystemconstant {false} +\definesystemconstant {fax} +\definesystemconstant {features} +\definesystemconstant {file} +\definesystemconstant {filll} +\definesystemconstant {fill} +\definesystemconstant {fil} +\definesystemconstant {first} +\definesystemconstant {float} +\definesystemconstant {font} +\definesystemconstant {forget} +\definesystemconstant {format} +\definesystemconstant {fraktur} +\definesystemconstant {full} +\definesystemconstant {f} +\definesystemconstant {global} +\definesystemconstant {goodies} +\definesystemconstant {gray} +\definesystemconstant {handler} +\definesystemconstant {handwriting} +\definesystemconstant {Handwriting} +\definesystemconstant {hascaption} +\definesystemconstant {haslevel} +\definesystemconstant {hasnumber} +\definesystemconstant {hasparent} +\definesystemconstant {hassuffix} +\definesystemconstant {hastitle} +\definesystemconstant {head} +\definesystemconstant {height} +\definesystemconstant {hw} +\definesystemconstant {hyphenmin} +\definesystemconstant {indeed} +\definesystemconstant {initializations} +\definesystemconstant {insert} % maybe insertclass +\definesystemconstant {integral} +\definesystemconstant {internal} +\definesystemconstant {in} +\definesystemconstant {italics} +\definesystemconstant {Italic} +\definesystemconstant {italic} +%definesystemconstant {it} +\definesystemconstant {itemgroupcolumns} +\definesystemconstant {kernpairs} +\definesystemconstant {language} +\definesystemconstant {lcgreek} +\definesystemconstant {lefthyphenchar} +\definesystemconstant {lefthyphenmin} +\definesystemconstant {leftpage} +\definesystemconstant {left} +\definesystemconstant {level} +\definesystemconstant {ligatures} +\definesystemconstant {line} +\definesystemconstant {link} +\definesystemconstant {list} +\definesystemconstant {local} +\definesystemconstant {lua} +\definesystemconstant {mapping} +\definesystemconstant {map} +\definesystemconstant {margintext} +\definesystemconstant {margin} +\definesystemconstant {marker} +\definesystemconstant {MathBold} % not used +\definesystemconstant {MathRomanBold} +\definesystemconstant {MathRoman} +\definesystemconstant {math} +\definesystemconstant {Math} % not used +\definesystemconstant {mblr} +\definesystemconstant {mbrl} +\definesystemconstant {mb} +\definesystemconstant {middle} +\definesystemconstant {minus} +\definesystemconstant {mixedcolumn} +\definesystemconstant {mi} % maybe some day a special default vector +\definesystemconstant {mkii} +\definesystemconstant {mkiv} +\definesystemconstant {mm} +\definesystemconstant {mnem} % kind of generic short tag +\definesystemconstant {mode} +\definesystemconstant {MonoBoldItalic} +\definesystemconstant {MonoBoldSlanted} +\definesystemconstant {MonoBold} +\definesystemconstant {MonoCaps} +\definesystemconstant {MonoItalic} +\definesystemconstant {MonoSlanted} +\definesystemconstant {Mono} +\definesystemconstant {mono} +\definesystemconstant {mrlr} +\definesystemconstant {mrrl} +\definesystemconstant {mr} +\definesystemconstant {multi} +\definesystemconstant {name} +\definesystemconstant {next} +\definesystemconstant {nocite} +\definesystemconstant {nodepth} +\definesystemconstant {noheight} +\definesystemconstant {nomath} +\definesystemconstant {none} +\definesystemconstant {normal} +\definesystemconstant {Normal} +\definesystemconstant {nowidth} +\definesystemconstant {numbering} +\definesystemconstant {number} +\definesystemconstant {options} +\definesystemconstant {ord} +\definesystemconstant {orientation} +\definesystemconstant {otr} +\definesystemconstant {pagefloat} +\definesystemconstant {page} +\definesystemconstant {paragraph} +\definesystemconstant {parent} +\definesystemconstant {patterns} +\definesystemconstant {pc} +\definesystemconstant {pickup} +\definesystemconstant {plural} +\definesystemconstant {plus} +%definesystemconstant {pt} +\definesystemconstant {realpage} +\definesystemconstant {register} +\definesystemconstant {Regular} +\definesystemconstant {regular} +\definesystemconstant {rel} +\definesystemconstant {reset} +\definesystemconstant {reverse} +\definesystemconstant {rgb} +\definesystemconstant {righthyphenchar} +\definesystemconstant {righthyphenmin} +\definesystemconstant {rightpage} +\definesystemconstant {right} +\definesystemconstant {rm} +\definesystemconstant {rname} +\definesystemconstant {rscale} +\definesystemconstant {SansBoldItalic} +\definesystemconstant {SansBoldSlanted} +\definesystemconstant {SansBold} +\definesystemconstant {SansCaps} +\definesystemconstant {SansItalic} +\definesystemconstant {SansSlanted} +\definesystemconstant {Sans} +\definesystemconstant {sans} +\definesystemconstant {scriptscript} +\definesystemconstant {script} +\definesystemconstant {sc} +\definesystemconstant {second} +\definesystemconstant {section} +\definesystemconstant {SerifBoldItalic} +\definesystemconstant {SerifBoldSlanted} +\definesystemconstant {SerifBold} +\definesystemconstant {SerifCaps} +\definesystemconstant {SerifItalic} +\definesystemconstant {SerifSlanted} +\definesystemconstant {Serif} +\definesystemconstant {serif} +\definesystemconstant {setups} +\definesystemconstant {setup} +\definesystemconstant {set} +\definesystemconstant {themaintextcolor} +\definesystemconstant {simple} +\definesystemconstant {Simple} +\definesystemconstant {single} +\definesystemconstant {singular} +\definesystemconstant {size} +\definesystemconstant {slanted} +\definesystemconstant {Slanted} +%definesystemconstant {sl} +\definesystemconstant {smallcaps} +\definesystemconstant {small} +\definesystemconstant {somewhere} +\definesystemconstant {special} +\definesystemconstant {spec} +\definesystemconstant {spot} +\definesystemconstant {spread} +\definesystemconstant {sp} +\definesystemconstant {ss} +\definesystemconstant {start} +\definesystemconstant {stop} +\definesystemconstant {subpage} +\definesystemconstant {subtype} +\definesystemconstant {sub} +\definesystemconstant {Support} +\definesystemconstant {sygreek} +\definesystemconstant {symbol} +\definesystemconstant {system} % not yet interfaces messages +\definesystemconstant {text} +\definesystemconstant {tex} +\definesystemconstant {tf} +\definesystemconstant {third} +\definesystemconstant {topfloat} +\definesystemconstant {top} +\definesystemconstant {to} +\definesystemconstant {traditional} +\definesystemconstant {triple} +\definesystemconstant {true} +\definesystemconstant {tt} +\definesystemconstant {Type} +\definesystemconstant {ucgreek} +\definesystemconstant {uncramped} +\definesystemconstant {unexpanded} +\definesystemconstant {Unicode} +\definesystemconstant {unknown} +\definesystemconstant {userdata} +\definesystemconstant {userpage} +\definesystemconstant {user} +\definesystemconstant {vfrac} +\definesystemconstant {white} +\definesystemconstant {width} +\definesystemconstant {xml} +\definesystemconstant {xmove} +\definesystemconstant {xoffset} +\definesystemconstant {xx} +\definesystemconstant {x} +\definesystemconstant {ymove} +\definesystemconstant {yoffset} + +%D As the name of their define command states, the next set of constants is used in +%D the message macro's. + +\definemessageconstant {backend} +\definemessageconstant {check} +\definemessageconstant {chemicals} +\definemessageconstant {colors} +\definemessageconstant {columns} +\definemessageconstant {fields} +\definemessageconstant {figures} +\definemessageconstant {files} +\definemessageconstant {floatblocks} +\definemessageconstant {fonts} +\definemessageconstant {handlings} +\definemessageconstant {interactions} +\definemessageconstant {javascripts} +\definemessageconstant {languages} +\definemessageconstant {layouts} +\definemessageconstant {lua} +\definemessageconstant {metapost} +\definemessageconstant {publications} +\definemessageconstant {references} +\definemessageconstant {regimes} +\definemessageconstant {structures} +\definemessageconstant {symbols} +\definemessageconstant {system} +\definemessageconstant {textblocks} +\definemessageconstant {verbatims} +\definemessageconstant {versions} + +%D When we use numbers and dimensions the same applies as with the keywords like +%D \type {width} and \type {plus} mentioned earlier. + +\immutable\def\!!ten {10} +\immutable\def\!!twelve {12} +\immutable\def\!!hundred {100} +\immutable\def\!!thousand {1000} +\immutable\def\!!tenthousand {10000} +\immutable\def\!!maxcard {65536} +\immutable\def\!!medcard {32768} + +\immutable\def\!!zeropoint {0pt} +\immutable\def\!!onepoint {1pt} +\immutable\def\!!twopoint {2pt} +\immutable\def\!!threepoint {3pt} +\immutable\def\!!fourpoint {4pt} +\immutable\def\!!fivepoint {5pt} +\immutable\def\!!sixpoint {6pt} +\immutable\def\!!sevenpoint {7pt} +\immutable\def\!!eightpoint {8pt} +\immutable\def\!!ninepoint {9pt} +\immutable\def\!!tenpoint {10pt} +\immutable\def\!!elevenpoint {11pt} +\immutable\def\!!twelvepoint {12pt} +\immutable\def\!!fourteenpointfour {14.4pt} + +\immutable\def\!!plustoken {+} % todo: \??plustoken +\immutable\def\!!minustoken {-} % todo: \??minustoken + +\immutable\def\__unknown__ {\string\\//} % unlikely value + +%D Variables are composed of a command specific tag and a user supplied variable +%D (system constant). The tag \type {du} for instance is available as \type {\??du} +%D and expands to \type {@@du} in composed variables. + +\definesystemvariable {du} % dummy, will stay + +% bibl: + +\definesystemvariable {pv} % PublicationVariable +\definesystemvariable {pb} % PuBlication + +% needs checking (namespaces now) + +\definesystemvariable {fw} % simpleFonts by Wolfgang + +% old pragma + +\definesystemvariable {kt} % KonTakten +\definesystemvariable {kw} % KontaktWaarde +\definesystemvariable {st} % STickers +\definesystemvariable {km} % KenMerk + +% mkii + +\definesystemvariable {xf} % XML File (xtag) +\definesystemvariable {xp} % XML Processing (xtag, so still needed) +\definesystemvariable {fo} % xml FO (xtag) +\definesystemvariable {fx} % FoXet + +% mkiv + +%D Next we define some language independant one letter variables and keywords. We can +%D actually make these system variables. + +\defineinterfaceconstant {x} {x} +\defineinterfaceconstant {y} {y} +\defineinterfaceconstant {w} {w} +\defineinterfaceconstant {h} {h} +\defineinterfaceconstant {s} {s} +\defineinterfaceconstant {t} {t} + +\defineinterfaceconstant {a} {a} % can go +\defineinterfaceconstant {b} {b} % can go +\defineinterfaceconstant {c} {c} % can go +\defineinterfaceconstant {d} {d} % can go +\defineinterfaceconstant {e} {e} % can go +\defineinterfaceconstant {f} {f} % can go + +%defineinterfaceconstant {s} {s} +\defineinterfaceconstant {r} {r} +\defineinterfaceconstant {g} {g} +%defineinterfaceconstant {b} {b} +%defineinterfaceconstant {c} {c} +\defineinterfaceconstant {m} {m} +%defineinterfaceconstant {y} {y} +\defineinterfaceconstant {k} {k} +%defineinterfaceconstant {a} {a} % alternative +%defineinterfaceconstant {t} {t} % transparency +\defineinterfaceconstant {p} {p} % percentage +%defineinterfaceconstant {h} {h} +%defineinterfaceconstant {s} {s} +\defineinterfaceconstant {v} {v} + +\defineinterfaceconstant {rgb} {rgb} +\defineinterfaceconstant {cmyk} {cmyk} +\defineinterfaceconstant {mp} {mp} + +\defineinterfacevariable {rgb} {rgb} +\defineinterfacevariable {cmyk} {cmyk} +\defineinterfacevariable {mp} {mp} + +\defineinterfacevariable {s} {s} + +\defineinterfacevariable {a} {a} +\defineinterfacevariable {b} {b} +\defineinterfacevariable {c} {c} +\defineinterfacevariable {d} {d} + +%D Special purpose variables: + +\immutable\def\v!oddeven#1{\ifodd#1\v!odd\else\v!even\fi} + +%D The names of files and their extensions are fixed. \CONTEXT\ uses as less +%D files as possible. Utility files can be recognized by the first two +%D characters of the extension: \type {tu}. + +%definefileconstant {utilityfilename} {texutil} +%definefileconstant {blockextension} {tub} +%definefileconstant {figureextension} {tuf} +%definefileconstant {inputextension} {tui} +%definefileconstant {outputextension} {tuo} % tup for previous run +%definefileconstant {optionextension} {top} +%definefileconstant {temporaryextension} {tmp} +%definefileconstant {patternsextension} {pat} +%definefileconstant {hyphensextension} {hyp} +%definefileconstant {fontmapextension} {map} +\definefileconstant {bibextension} {bbl} + +%D These files are loaded at start||up. They may contain system specific setups (or +%D calls to other files), old macro's, to garantee compatibility and new macro's noy +%D yet present in the format. + +\definefileconstant {sysfilename} {cont-sys.mkiv} +\definefileconstant {newfilename} {cont-new.mkiv} +\definefileconstant {locfilename} {cont-loc.mkiv} +\definefileconstant {expfilename} {cont-exp.mkiv} +\definefileconstant {fntfilename} {cont-fnt.mkiv} % not yet used +\definefileconstant {gdsfilename} {cont-fnt.lfg} % not yet used + +%D The setup files for the language, font, color and special subsystems have a common +%D prefix. This means that we have at most three characters for unique filenames. + +\definefileconstant {colo_run} {colo-run} +\definefileconstant {font_run} {font-run} +\definefileconstant {page_run} {page-run} +\definefileconstant {symb_run} {symb-run} +\definefileconstant {publ_tra} {publ-tra} + +%D For figure inclusion we need(ed): + +%defineinterfaceconstant {tif} {tif} +%defineinterfaceconstant {eps} {eps} +%defineinterfaceconstant {mps} {mps} +%defineinterfaceconstant {jpg} {jpg} +%defineinterfaceconstant {pdf} {pdf} +%defineinterfaceconstant {png} {png} +%defineinterfaceconstant {avi} {avi} +%defineinterfaceconstant {mov} {mov} +%defineinterfaceconstant {svg} {svg} +\defineinterfaceconstant {tex} {tex} % Also gone? +%defineinterfaceconstant {tmp} {tmp} +%defineinterfaceconstant {cld} {cld} + +%D A careful reader will have noticed that in the module \type {mult-ini} we defined +%D \type {\selectinterface}. We were not yet able to actually select an interface, +%D because we still had to define the constants and variables. Now we've done so, +%D selection is permitted. + +\selectinterface + +%D Ok, here are some more, because we've got ourselves some extensions to \CONTEXT. + +\definemessageconstant {addresses} +\definemessageconstant {documents} + +\protect \endinput diff --git a/tex/context/base/mkiv/node-aux.lmt b/tex/context/base/mkiv/node-aux.lmt index ada376556..d952ec41b 100644 --- a/tex/context/base/mkiv/node-aux.lmt +++ b/tex/context/base/mkiv/node-aux.lmt @@ -21,7 +21,7 @@ local glyph_code = nodecodes.glyph local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local attributelist_code = nodecodes.attributelist -- temporary -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local nuts = nodes.nuts local tonut = nuts.tonut @@ -364,9 +364,9 @@ end do - local localparcodes = nodes.localparcodes - local hmodepar_code = localparcodes.hmode_par - local vmodepar_code = localparcodes.vmode_par + local parcodes = nodes.parcodes + local hmodepar_code = parcodes.hmode_par + local vmodepar_code = parcodes.vmode_par local getnest = tex.getnest local getsubtype = nuts.getsubtype @@ -374,7 +374,7 @@ do function nuts.setparproperty(action,...) local tail = tonut(getnest().tail) while tail do - if getid(tail) == localpar_code then + if getid(tail) == par_code then local s = getsubtype(tail) if s == hmodepar_code or s == vmodepar_code then return action(tail,...) diff --git a/tex/context/base/mkiv/node-aux.lua b/tex/context/base/mkiv/node-aux.lua index aa7dc0292..d3c537a3b 100644 --- a/tex/context/base/mkiv/node-aux.lua +++ b/tex/context/base/mkiv/node-aux.lua @@ -21,7 +21,7 @@ local glyph_code = nodecodes.glyph local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local attributelist_code = nodecodes.attributelist -- temporary -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local nuts = nodes.nuts local tonut = nuts.tonut @@ -382,9 +382,9 @@ end do - local localparcodes = nodes.localparcodes - local hmodepar_code = localparcodes.vmode_par - local vmodepar_code = localparcodes.hmode_par + local parcodes = nodes.parcodes + local hmodepar_code = parcodes.vmode_par + local vmodepar_code = parcodes.hmode_par local getnest = tex.getnest local getsubtype = nuts.getsubtype @@ -392,7 +392,7 @@ do function nuts.setparproperty(action,...) local tail = tonut(getnest().tail) while tail do - if getid(tail) == localpar_code then + if getid(tail) == par_code then local s = getsubtype(tail) if s == hmodepar_code or s == vmodepar_code then return action(tail,...) diff --git a/tex/context/base/mkiv/node-cmp.lmt b/tex/context/base/mkiv/node-cmp.lmt index e9e7e266d..21fd700f0 100644 --- a/tex/context/base/mkiv/node-cmp.lmt +++ b/tex/context/base/mkiv/node-cmp.lmt @@ -192,7 +192,6 @@ end local uses_font = direct.uses_font local has_glyph = direct.has_glyph local protrusion_skippable = direct.protrusion_skippable -local prepend_prevdepth = direct.prepend_prevdepth local make_extensible = direct.make_extensible function node.uses_font(n,f) @@ -207,11 +206,6 @@ function node.protrusion_skippable(n) return protrusion_skippable(todirect(n)) end -function node.prepend_prevdepth(n) - local n, d = prepend_prevdepth(todirect(n)) - return tonode(n), d -end - function node.make_extensible(...) local n = make_extensible(...) return n and tonode(n) or nil diff --git a/tex/context/base/mkiv/node-fin.lua b/tex/context/base/mkiv/node-fin.lua index ddcdcd9d0..373cce3ce 100644 --- a/tex/context/base/mkiv/node-fin.lua +++ b/tex/context/base/mkiv/node-fin.lua @@ -636,100 +636,3 @@ end statistics.register("attribute processing time", function() return statistics.elapsedseconds(attributes,"front- and backend") end) - --- -- -- - --- do --- --- local cleaners = { } --- local trace = true -- false --- --- function attributes.cleanup() --- if next(cleaners) then --- local values = setmetatableindex("table") --- --- if trace then --- starttiming(values) --- end --- --- local function check(l) --- for n, id in nextnode, l do --- if id == hlist_code or id == vlist_code or id == glue_code then --- local l = getlist(n) --- if l then --- check(l) --- end --- end --- for a in next, cleaners do --- local v = getattr(n,a) --- if v then --- -- values[a] = values[a] + 1 --- values[a][v] = true --- end --- end --- end --- end --- --- local top = texgetnest("ptr") --- for i=1,top do --- local l = texgetnest(i) --- if l then --- check(tonut(l.head)) --- end --- end --- --- do local l --- l = tonut(texlists.page_ins_head) if l then check(l) end --- l = tonut(texlists.contrib_head) if l then check(l) end --- l = tonut(texlists.page_discards_head) if l then check(l) end --- l = tonut(texlists.split_discards_head) if l then check(l) end --- l = tonut(texlists.page_head) if l then check(l) end --- end --- --- -- todo: traverseboxes --- --- for i=0,65535 do --- local b = getbox(i) --- if b then --- local l = getlist(b) --- if l then --- check(l) --- end --- end --- end --- --- for a, t in next, values do --- cleaners[a](a,t) --- end --- --- if trace then --- stoptiming(values) --- local a = table.sortedkeys(values) --- local t = statistics.elapsedtime(values) --- local r = tex.getcount("realpageno") --- if #a == 0 then --- logs.report("attributes","cleaning up at page %i took %s seconds, no attributes",r,t) --- else --- logs.report("attributes","cleaning up at page %i took %s seconds, attributes: % t",r,t,a) --- end --- end --- end --- end --- --- -- not yet used but when we do ... delay a call till we enable it (attr-ini.mkiv) --- --- -- local function show(a,t) for k, v in next, t do print(a,k) end end --- -- --- -- attributes.registercleaner(1, show) --- -- attributes.registercleaner(2, show) --- --- function attributes.registercleaner(a,f) --- cleaners[a] = f --- end --- --- implement { --- name = "cleanupattributes", --- actions = attributes.cleanup, --- } --- --- end diff --git a/tex/context/base/mkiv/node-fin.mkiv b/tex/context/base/mkiv/node-fin.mkiv index 81a8fec51..2bf0e0806 100644 --- a/tex/context/base/mkiv/node-fin.mkiv +++ b/tex/context/base/mkiv/node-fin.mkiv @@ -19,6 +19,7 @@ \unprotect \registerctxluafile{node-shp}{optimize} +% \registerctxluafile{node-fin}{autosuffix,optimize} % we might generalize this one \registerctxluafile{node-fin}{optimize} % we might generalize this one % we might have two variants at some point (efficiency) diff --git a/tex/context/base/mkiv/node-ini.lmt b/tex/context/base/mkiv/node-ini.lmt index f43896d79..5cce9030d 100644 --- a/tex/context/base/mkiv/node-ini.lmt +++ b/tex/context/base/mkiv/node-ini.lmt @@ -43,8 +43,6 @@ local dircodes = mark(getsubtypes("dir")) local glyphcodes = mark(getsubtypes("glyph")) local disccodes = mark(getsubtypes("disc")) local gluecodes = mark(getsubtypes("glue")) -local leadercodes = mark(getsubtypes("leader")) -local fillcodes = mark(getsubtypes("fill")) local boundarycodes = mark(getsubtypes("boundary")) local penaltycodes = mark(getsubtypes("penalty")) local kerncodes = mark(getsubtypes("kern")) @@ -54,7 +52,10 @@ local radicalcodes = mark(getsubtypes("radical")) local accentcodes = mark(getsubtypes("accent")) local fencecodes = mark(getsubtypes("fence")) ----- fractioncodes = mark(getsubtypes("fraction")) -local localparcodes = mark(getsubtypes("localpar")) +local parcodes = mark(getsubtypes("par")) + +local fillvalues = mark(getvalues("fill")) +local dirvalues = mark(getvalues("dir")) local function simplified(t) local r = { } @@ -65,12 +66,8 @@ local function simplified(t) end local nodecodes = simplified(node.types()) -local whatcodes = simplified(node.whatsits and node.whatsits() or { }) - -local dirvalues = mark(getvalues("dir")) -local gluevalues = mark(getvalues("glue")) -local whatcodes = { +local whatcodes = allocate { literal = 0x1, [0x1] = "literal", latelua = 0x2, [0x2] = "latelua", userdefined = 0x3, [0x3] = "userdefined", @@ -127,70 +124,112 @@ glyphcodes = allocate(swapped(glyphcodes,glyphcodes)) kerncodes = allocate(swapped(kerncodes,kerncodes)) penaltycodes = allocate(swapped(penaltycodes,penaltycodes)) mathcodes = allocate(swapped(mathcodes,mathcodes)) -fillcodes = allocate(swapped(fillcodes,fillcodes)) disccodes = allocate(swapped(disccodes,disccodes)) accentcodes = allocate(swapped(accentcodes,accentcodes)) fencecodes = allocate(swapped(fencecodes,fencecodes)) -localparcodes = allocate(swapped(localparcodes,localparcodes)) +parcodes = allocate(swapped(parcodes,parcodes)) rulecodes = allocate(swapped(rulecodes,rulecodes)) -leadercodes = allocate(swapped(leadercodes,leadercodes)) usercodes = allocate(swapped(usercodes,usercodes)) noadoptions = allocate(swapped(noadoptions,noadoptions)) + dirvalues = allocate(swapped(dirvalues,dirvalues)) -gluevalues = allocate(swapped(gluevalues,gluevalues)) literalvalues = allocate(swapped(literalvalues,literalvalues)) +fillvalues = allocate(swapped(fillvalues,fillvalues)) nodes.gluecodes = gluecodes nodes.dircodes = dircodes nodes.boundarycodes = boundarycodes nodes.noadcodes = noadcodes -nodes.nodecodes = nodecodes nodes.whatcodes = whatcodes nodes.listcodes = listcodes nodes.glyphcodes = glyphcodes nodes.kerncodes = kerncodes nodes.penaltycodes = penaltycodes nodes.mathcodes = mathcodes -nodes.fillcodes = fillcodes nodes.disccodes = disccodes nodes.accentcodes = accentcodes nodes.radicalcodes = radicalcodes nodes.fencecodes = fencecodes -nodes.localparcodes = localparcodes +nodes.parcodes = parcodes nodes.rulecodes = rulecodes -nodes.leadercodes = leadercodes nodes.usercodes = usercodes + nodes.noadoptions = noadoptions +nodes.fillvalues = fillvalues +nodes.fillcodes = fillvalues -- for now nodes.dirvalues = dirvalues -nodes.gluevalues = gluevalues nodes.literalvalues = literalvalues -nodes.subtypes = allocate { - [nodecodes.accent] = accentcodes, - [nodecodes.boundary] = boundarycodes, - [nodecodes.dir] = dircodes, - [nodecodes.disc] = disccodes, - [nodecodes.fence] = fencecodes, - [nodecodes.glue] = gluecodes, - [nodecodes.glyph] = glyphcodes, - [nodecodes.hlist] = listcodes, - [nodecodes.kern] = kerncodes, - [nodecodes.localpar] = localparcodes, - [nodecodes.math] = mathcodes, - [nodecodes.noad] = noadcodes, - [nodecodes.penalty] = penaltycodes, - [nodecodes.radical] = radicalcodes, - [nodecodes.rule] = rulecodes, - -- [nodecodes.user] = usercodes, - [nodecodes.vlist] = listcodes, - [nodecodes.whatsit] = whatcodes, +nodes.nodecodes = nodecodes + +-- local subtypes = allocate { +-- [nodecodes.glue] = gluecodes, +-- [nodecodes.dir] = dircodes, +-- [nodecodes.boundary] = boundarycodes, +-- [nodecodes.noad] = noadcodes, +-- [nodecodes.whatsit] = whatcodes, +-- [nodecodes.glyph] = glyphcodes, +-- [nodecodes.kern] = kerncodes, +-- [nodecodes.penalty] = penaltycodes, +-- [nodecodes.math] = mathcodes, +-- [nodecodes.disc] = disccodes, +-- [nodecodes.accent] = accentcodes, +-- [nodecodes.radical] = radicalcodes, +-- [nodecodes.fence] = fencecodes, +-- [nodecodes.par] = parcodes, +-- [nodecodes.rule] = rulecodes, + +-- [nodecodes.vlist] = listcodes, +-- [nodecodes.hlist] = listcodes, + +-- -- [nodecodes.list] = listcodes, + +-- -- [nodecodes.parameter] = parametercodes, +-- -- [nodecodes.user] = usercodes, +-- } + +-- for k in next, table.sortedkeys(subtypes) do +-- local v = nodecodes[k] +-- print(k,v) +-- if k and subtypes[k] then +-- subtypes[v] = subtypes[k] +-- end +-- end + +local subtypes = allocate { + glue = gluecodes, + dir = dircodes, + boundary = boundarycodes, + noad = noadcodes, + whatsit = whatcodes, + glyph = glyphcodes, + kern = kerncodes, + penalty = penaltycodes, + math = mathcodes, + disc = disccodes, + accent = accentcodes, + radical = radicalcodes, + fence = fencecodes, + par = parcodes, + rule = rulecodes, + + vlist = listcodes, + hlist = listcodes, + + -- list = listcodes, + + -- parameter = parametercodes, + -- user = usercodes, } -table.setmetatableindex(nodes.subtypes,function(t,k) - local v = { } - t[k] = v - return v -end) +for k, v in table.sortedhash(subtypes) do + local i = nodecodes[k] + if i and not subtypes[i] then + subtypes[i] = v + end +end + +nodes.subtypes = subtypes -- a few more friendly aliases: @@ -198,12 +237,15 @@ nodes.skipcodes = gluecodes nodes.directioncodes = dircodes nodes.whatsitcodes = whatcodes nodes.discretionarycodes = disccodes + nodes.directionvalues = dirvalues -nodes.skipvalues = gluevalues nodes.literalvalues = literalvalues glyphcodes.glyph = glyphcodes.character +gluecodes.parfillrightskip = gluecodes.parfillrightskip or gluecodes.parfillskip +gluecodes.parfillskip = gluecodes.parfillskip or gluecodes.parfillrightskip + listcodes.row = listcodes.alignment listcodes.column = listcodes.alignment @@ -212,28 +254,6 @@ kerncodes.italiccorrection = kerncodes.italiccorrection or 1 -- new literalvalues.direct = literalvalues.always -nodes.codes = allocate { -- mostly for listing - glue = skipcodes, - boundary = boundarycodes, - noad = noadcodes, - node = nodecodes, - hlist = listcodes, - vlist = listcodes, - glyph = glyphcodes, - kern = kerncodes, - penalty = penaltycodes, - math = mathnodes, - fill = fillcodes, - disc = disccodes, - whatsit = whatcodes, - accent = accentcodes, - fence = fencecodes, - rule = rulecodes, - leader = leadercodes, - user = usercodes, - noadoptions = noadoptions, -} - nodes.noadoptions = { set = 0x08, unused_1 = 0x00 + 0x08, @@ -246,36 +266,15 @@ nodes.noadoptions = { right = 0x14 + 0x08, } -local report_codes = logs.reporter("nodes","codes") - -function nodes.showcodes() - local t = { } - for name, codes in sortedhash(nodes.codes) do - local sorted = sortedkeys(codes) - for i=1,#sorted do - local s = sorted[i] - if type(s) ~= "number" then - t[#t+1] = { name, s, codes[s] } - end - end - end - formatcolumns(t) - for k=1,#t do - report_codes (t[k]) - end -end - -trackers.register("system.showcodes", nodes.showcodes) - -- We use the real node code numbers. -local texchardef = tex.chardef +local texsetintegervalue = tex.setintegervalue for i=0,nodecodes.glyph do - texchardef(nodecodes[i] .. "nodecode",i) + texsetintegervalue(nodecodes[i] .. "nodecode",i,"immutable") end for i=0,#gluecodes do - texchardef(gluecodes[i] .. "subtypecode",i) + texsetintegervalue(gluecodes[i] .. "subtypecode",i,"immutable") end -- tex.set("internalcodesmode",1) -- obsolete diff --git a/tex/context/base/mkiv/node-ini.lua b/tex/context/base/mkiv/node-ini.lua index ccbd726d9..3d49d01bd 100644 --- a/tex/context/base/mkiv/node-ini.lua +++ b/tex/context/base/mkiv/node-ini.lua @@ -78,7 +78,6 @@ local dircodes = mark(getsubtypes("dir")) local glyphcodes = mark(getsubtypes("glyph")) local disccodes = mark(getsubtypes("disc")) local gluecodes = mark(getsubtypes("glue")) -local leadercodes = mark(getsubtypes("leader")) local fillcodes = mark(getsubtypes("fill")) local boundarycodes = mark(getsubtypes("boundary")) local penaltycodes = mark(getsubtypes("penalty")) @@ -90,7 +89,7 @@ local radicalcodes = mark(getsubtypes("radical")) local accentcodes = mark(getsubtypes("accent")) local fencecodes = mark(getsubtypes("fence")) ----- fractioncodes = mark(getsubtypes("fraction")) -local localparcodes = allocate { [0] = "vmode_par", "local_box", "hmode_par", "penalty", "math" } +local parcodes = allocate { [0] = "vmode_par", "local_box", "hmode_par", "penalty", "math" } local function simplified(t) local r = { } @@ -160,15 +159,28 @@ margincodes = allocate(swapped(margincodes,margincodes)) disccodes = allocate(swapped(disccodes,disccodes)) accentcodes = allocate(swapped(accentcodes,accentcodes)) fencecodes = allocate(swapped(fencecodes,fencecodes)) -localparcodes = allocate(swapped(localparcodes,localparcodes)) +parcodes = allocate(swapped(parcodes,parcodes)) rulecodes = allocate(swapped(rulecodes,rulecodes)) -leadercodes = allocate(swapped(leadercodes,leadercodes)) usercodes = allocate(swapped(usercodes,usercodes)) noadoptions = allocate(swapped(noadoptions,noadoptions)) dirvalues = allocate(swapped(dirvalues,dirvalues)) gluevalues = allocate(swapped(gluevalues,gluevalues)) literalvalues = allocate(swapped(literalvalues,literalvalues)) +if not nodecodes.delimiter then + -- as in luametatex / lmtx + nodecodes.delimiter = nodecodes.delim + nodecodes[nodecodes.delimiter] = "delimiter" + nodecodes.delim = nil +end + +if not nodecodes.par then + -- as in luametatex / lmtx + local p = nodecodes.localpar + nodecodes.par = p + nodecodes[p] = "par" +end + if not gluecodes.indentskip then gluecodes.indentskip = gluecodes.userskip gluecodes.lefthangskip = gluecodes.userskip @@ -179,18 +191,7 @@ if not gluecodes.indentskip then gluecodes.parfillrightskip = gluecodes.parfillskip end -if CONTEXTLMTXMODE > 0 then - whatcodes.literal = 0x1 whatcodes[0x1] = "literal" - whatcodes.latelua = 0x2 whatcodes[0x2] = "latelua" - whatcodes.userdefined = 0x3 whatcodes[0x3] = "userdefined" - whatcodes.savepos = 0x4 whatcodes[0x4] = "savepos" - whatcodes.save = 0x5 whatcodes[0x5] = "save" - whatcodes.restore = 0x6 whatcodes[0x6] = "restore" - whatcodes.setmatrix = 0x7 whatcodes[0x7] = "setmatrix" - whatcodes.open = 0x8 whatcodes[0x8] = "open" - whatcodes.close = 0x9 whatcodes[0x9] = "close" - whatcodes.write = 0xA whatcodes[0xA] = "write" -elseif not whatcodes.literal then +if not whatcodes.literal then whatcodes.literal = whatcodes.pdfliteral whatcodes.save = whatcodes.pdfsave whatcodes.restore = whatcodes.pdfrestore @@ -214,9 +215,8 @@ nodes.disccodes = disccodes nodes.accentcodes = accentcodes nodes.radicalcodes = radicalcodes nodes.fencecodes = fencecodes -nodes.localparcodes = localparcodes +nodes.parcodes = parcodes nodes.rulecodes = rulecodes -nodes.leadercodes = leadercodes nodes.usercodes = usercodes nodes.noadoptions = noadoptions nodes.dirvalues = dirvalues @@ -233,7 +233,7 @@ nodes.subtypes = allocate { [nodecodes.glyph] = glyphcodes, [nodecodes.hlist] = listcodes, [nodecodes.kern] = kerncodes, - [nodecodes.localpar] = localparcodes, + [nodecodes.par] = parcodes, -- [nodecodes.marginkern] = margincodes, [nodecodes.math] = mathcodes, [nodecodes.noad] = noadcodes, @@ -295,7 +295,6 @@ nodes.codes = allocate { -- mostly for listing accent = accentcodes, fence = fencecodes, rule = rulecodes, - leader = leadercodes, user = usercodes, noadoptions = noadoptions, } diff --git a/tex/context/base/mkiv/node-ini.mkiv b/tex/context/base/mkiv/node-ini.mkiv index 8a3aa65df..b52695ef6 100644 --- a/tex/context/base/mkiv/node-ini.mkiv +++ b/tex/context/base/mkiv/node-ini.mkiv @@ -32,16 +32,16 @@ \registerctxluafile{node-tra}{} % we might split it off (module) \registerctxluafile{node-snp}{autosuffix} \registerctxluafile{node-tsk}{} -\registerctxluafile{node-tex}{} +\registerctxluafile{node-tex}{autosuffix} \registerctxluafile{node-dir}{} % experimental, not yet (and maybe never) used \registerctxluafile{node-pro}{} -\registerctxluafile{node-ser}{} +\registerctxluafile{node-ser}{autosuffix} \registerctxluafile{node-ext}{} \registerctxluafile{node-acc}{} % experimental %registerctxluafile{node-prp}{} % makes no sense (yet) \registerctxluafile{node-scn}{} \registerctxluafile{node-syn}{} -\registerctxluafile{node-par}{} +\registerctxluafile{node-par}{autosuffix} \newcount\c_node_tracers_show_box % box number diff --git a/tex/context/base/mkiv/node-ltp.lua b/tex/context/base/mkiv/node-ltp.lua index 6a36adf68..cf1d662a3 100644 --- a/tex/context/base/mkiv/node-ltp.lua +++ b/tex/context/base/mkiv/node-ltp.lua @@ -281,10 +281,10 @@ local unset_code = nodecodes.unset local marginkern_code = nodecodes.marginkern local dir_code = nodecodes.dir local boundary_code = nodecodes.boundary -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local protrusionboundary_code = nodes.boundarycodes.protrusion -local leaders_code = nodes.leadercodes.leaders +local leaders_code = nodes.gluecodes.leaders local indentlist_code = nodes.listcodes.indent local ligatureglyph_code = nodes.glyphcodes.ligature local cancel_code = nodes.dircodes.cancel @@ -1323,7 +1323,7 @@ do while current_break do - -- hm, here we have head == localpar and in the engine it's a temp node + -- hm, here we have head == par and in the engine it's a temp node head = inject_dirs_at_begin_of_line(dirstack,head) @@ -1463,7 +1463,7 @@ do p = nil end break - elseif id == localpar_code then + elseif id == par_code then break elseif id == temp_code then -- Go on. @@ -1560,29 +1560,29 @@ do start = insert_node_before(start,start,ls) end if normalize > 0 then - local localpar = nil - local localdir = nil + local par = nil + local dir = nil local indent = nil - local localpars = nil + local pars = nil local notflocal = 0 for n, id, subtype in nextnode, start do if id == hlist_code then if normalize > 1 and subtype == indentlist_code then indent = n end - elseif id == localpar_code then + elseif id == par_code then if start_of_par(n) then --- maybe subtype check instead - localpar = n + par = n elseif noflocals then noflocals = noflocals + 1 - localpars[noflocals] = n + pars[noflocals] = n else noflocals = 1 - localpars = { n } + pars = { n } end elseif id == dir_code then - if localpar and not localdir and subtype(n) == cancel_code then - localdir = n + if par and not dir and subtype(n) == cancel_code then + dir = n end end end @@ -1591,14 +1591,14 @@ do setattributelist(i,start) replace_node(indent,i) end - if localdir then - local d = new_direction((getdirection(localpar))) + if dir then + local d = new_direction((getdirection(par))) setattributelist(d,start) - replace_node(localpar,d) + replace_node(par,d) end - if localpars then + if pars then for i=1,noflocals do - start = remove_node(start,localpars[i],true) + start = remove_node(start,pars[i],true) end end end @@ -1719,7 +1719,7 @@ do local id = getid(next) if id == glyph_code then break - elseif id == localpar_code then + elseif id == par_code then -- nothing elseif id < math_code then -- messy criterium @@ -1756,7 +1756,7 @@ par.head = head if getnext(h) then report_parbuilders("something is left over") end - if getid(h) ~= localpar_code then + if getid(h) ~= par_code then report_parbuilders("no local par node") end end @@ -2454,7 +2454,7 @@ par.head = head if current then local id = getid(current) - if id == localpar_code then + if id == par_code then par.init_internal_left_box = getfield(current,"box_left") par.init_internal_left_box_width = getfield(current,"box_left_width") par.internal_pen_inter = getfield(current,"pen_inter") @@ -2617,7 +2617,7 @@ par.head = head p_active, n_active = try_break(getpenalty(current), unhyphenated_code, par, first_p, current, checked_expansion) elseif id == dir_code then par.line_break_dir = checked_line_dir(dirstack,current) or par.line_break_dir - elseif id == localpar_code then + elseif id == par_code then par.internal_pen_inter = getfield(current,"pen_inter") par.internal_pen_broken = getfield(current,"pen_broken") par.internal_left_box = getfield(current,"box_left") diff --git a/tex/context/base/mkiv/node-nut.lmt b/tex/context/base/mkiv/node-nut.lmt index d9edf2114..6b9dd803e 100644 --- a/tex/context/base/mkiv/node-nut.lmt +++ b/tex/context/base/mkiv/node-nut.lmt @@ -66,6 +66,7 @@ local nuts = { free = direct.free, getsynctexfields = direct.get_synctex_fields, getattr = direct.get_attribute, + getattrs = direct.get_attributes, getattributelist = direct.getattributelist, getattrlist = direct.getattributelist, getboth = d_getboth, @@ -88,8 +89,8 @@ local nuts = { getheight = direct.getheight, getid = d_getid, getkern = direct.getkern, - getlang = direct.getlang, - getlanguage = direct.getlang, + getlang = direct.getlanguage,-- will become obsolete + getlanguage = direct.getlanguage, getleader = direct.getleader, getlist = d_getlist, getnext = d_getnext, @@ -97,6 +98,7 @@ local nuts = { getnucleus = direct.getnucleus, getoffsets = direct.getoffsets, getorientation = direct.getorientation, + getoptions = direct.getoptions, getpenalty = direct.getpenalty, getpost = direct.getpost, getpre = direct.getpre, @@ -141,11 +143,13 @@ local nuts = { protect_glyphs = direct.protect_glyphs, protrusion_skippable = direct.protrusion_skippable, rangedimensions = direct.rangedimensions, + getglyphdimensions = direct.getglyphdimensions, + getkerndimension = direct.getkerndimension, remove = d_remove_node, reverse = direct.reverse, set_attribute = direct.set_attribute, - setsynctexfields = direct.set_synctex_fields, setattr = direct.set_attribute, + setattrs = direct.set_attributes, setattributelist = direct.setattributelist, setattrlist = direct.setattributelist, setboth = direct.setboth, @@ -167,8 +171,8 @@ local nuts = { setglyphdata = direct.setglyphdata, setheight = direct.setheight, setkern = direct.setkern, - setlang = direct.setlang, - setlanguage = direct.setlang, + setlang = direct.setlanguage, + setlanguage = direct.setlanguage, setleader = direct.setleader, setlink = d_setlink, setlist = direct.setlist, @@ -176,6 +180,7 @@ local nuts = { setnucleus = direct.setnucleus, setoffsets = direct.setoffsets, setorientation = direct.setorientation, + setoptions = direct.setoptions, setpenalty = direct.setpenalty, setpost = direct.setpost, setpre = direct.setpre, @@ -192,6 +197,7 @@ local nuts = { setsup = direct.setsup, setsuppre = direct.setsuppre, setsurround = direct.setkern, + setsynctexfields = direct.set_synctex_fields, setvalue = direct.setdata, -- obsolete setwhd = direct.setwhd, setwidth = direct.setwidth, @@ -207,6 +213,7 @@ local nuts = { traverse_glyph = direct.traverse_glyph, traverse_id = direct.traverse_id, traverse_list = direct.traverse_list, + traverse_content = direct.traverse_content, unprotect_glyph = direct.unprotect_glyph, unprotect_glyphs = direct.unprotect_glyphs, unset_attribute = direct.unset_attribute, @@ -215,9 +222,9 @@ local nuts = { vpack = direct.vpack, writable_spec = direct.writable_spec, write = direct.write, + append = direct.append, } - nodes.nuts = nuts nodes.is_node = is_node diff --git a/tex/context/base/mkiv/node-nut.lua b/tex/context/base/mkiv/node-nut.lua index 68d238b1a..c73397305 100644 --- a/tex/context/base/mkiv/node-nut.lua +++ b/tex/context/base/mkiv/node-nut.lua @@ -309,6 +309,11 @@ nuts.setglyphdata = direct.setglyphdata or function(n,d) set_attribute(n,0,d nuts.getruledata = direct.getglyphdata and getdata or function(n) return getfield(n,"transform") end nuts.setruledata = direct.setglyphdata and setdata or function(n,d) return setfield(n,"transform",d) end +-- maybe some day: [g|s]etglyphoptions and then use attribute for mkiv / generic but not now + +nuts.getoptions = direct.getoptions or function() return 0 end +nuts.setoptions = direct.setoptions or function() end + -- so far nuts.getnucleus = direct.getnucleus @@ -414,9 +419,9 @@ end if not nuts.start_of_par then - local localparcodes = nodes.localparcodes - local hmodepar_code = localparcodes.vmode_par - local vmodepar_code = localparcodes.hmode_par + local parcodes = nodes.parcodes + local hmodepar_code = parcodes.vmode_par + local vmodepar_code = parcodes.hmode_par local getsubtype = nuts.getsubtype diff --git a/tex/context/base/mkiv/node-par.lmt b/tex/context/base/mkiv/node-par.lmt new file mode 100644 index 000000000..af3125d23 --- /dev/null +++ b/tex/context/base/mkiv/node-par.lmt @@ -0,0 +1,48 @@ +if not modules then modules = { } end modules ['node-par'] = { + version = 1.001, + comment = "companion to node-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local starttiming = statistics.starttiming +local stoptiming = statistics.stoptiming + +local sequencers = utilities.sequencers + +-- This are called a lot! + +local actions = nodes.tasks.actions("everypar") + +local function everypar(head) + starttiming(builders) + head = actions(head) + stoptiming(builders) + return head +end + +callbacks.register("insert_par",everypar,"after paragraph start") + +local actions = sequencers.new { + name = "paragraph", + arguments = "mode,indented", + returnvalues = "indented", + results = "indented", +} + +sequencers.appendgroup(actions,"before") -- user +sequencers.appendgroup(actions,"system") -- private +sequencers.appendgroup(actions,"after" ) -- user + +local function paragraph(mode,indented) + local runner = actions.runner + if runner then + starttiming(builders) + indented = runner(mode,indented) + stoptiming(builders) + end + return indented +end + +callbacks.register("begin_paragraph",paragraph,"before paragraph start") diff --git a/tex/context/base/mkiv/node-par.lua b/tex/context/base/mkiv/node-par.lua index d89edf6f4..5a0f0d2e9 100644 --- a/tex/context/base/mkiv/node-par.lua +++ b/tex/context/base/mkiv/node-par.lua @@ -25,7 +25,7 @@ end callbacks.register("insert_local_par",everypar,"after paragraph start") local actions = sequencers.new { - name = "newgraf", + name = "paragraph", arguments = "mode,indented", returnvalues = "indented", results = "indented", @@ -35,7 +35,7 @@ sequencers.appendgroup(actions,"before") -- user sequencers.appendgroup(actions,"system") -- private sequencers.appendgroup(actions,"after" ) -- user -local function newgraf(mode,indented) +local function paragraph(mode,indented) local runner = actions.runner if runner then starttiming(builders) @@ -45,4 +45,4 @@ local function newgraf(mode,indented) return indented end -callbacks.register("new_graf",newgraf,"before paragraph start") +callbacks.register("new_graf",paragraph,"before paragraph start") diff --git a/tex/context/base/mkiv/node-ref.lua b/tex/context/base/mkiv/node-ref.lua index 2e035b2e0..2094fc2c7 100644 --- a/tex/context/base/mkiv/node-ref.lua +++ b/tex/context/base/mkiv/node-ref.lua @@ -94,7 +94,7 @@ local glue_code = nodecodes.glue local glyph_code = nodecodes.glyph local rule_code = nodecodes.rule local dir_code = nodecodes.dir -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local leftskip_code = gluecodes.leftskip local rightskip_code = gluecodes.rightskip @@ -420,7 +420,7 @@ local function inject_areas(head,attribute,make,stack,done,skip,parent,pardir,tx elseif id == dir_code then local direction, pop = getdirection(current) txtdir = not pop and direction -- we might need a stack - elseif id == localpar_code then + elseif id == par_code then if start_of_par(current) then pardir = getdirection(current) end diff --git a/tex/context/base/mkiv/node-res.lua b/tex/context/base/mkiv/node-res.lua index c27059003..03de8f843 100644 --- a/tex/context/base/mkiv/node-res.lua +++ b/tex/context/base/mkiv/node-res.lua @@ -26,7 +26,6 @@ local gluecodes = nodes.gluecodes local kerncodes = nodes.kerncodes local rulecodes = nodes.rulecodes local nodecodes = nodes.nodecodes -local leadercodes = nodes.leadercodes local boundarycodes = nodes.boundarycodes local usercodes = nodes.usercodes @@ -200,7 +199,7 @@ local correctionskip = register_nut(new_nut(glue_code,gluecodes.correctionski local temp = register_nut(new_nut(nodecodes.temp,0)) local noad = register_nut(new_nut(nodecodes.noad)) -local delimiter = register_nut(new_nut(nodecodes.delim)) +local delimiter = register_nut(new_nut(nodecodes.delimiter)) local fence = register_nut(new_nut(nodecodes.fence)) local submlist = register_nut(new_nut(nodecodes.submlist)) local accent = register_nut(new_nut(nodecodes.accent)) @@ -214,7 +213,7 @@ local choice = register_nut(new_nut(nodecodes.choice)) local boundary = register_nut(new_nut(nodecodes.boundary,boundarycodes.user)) local wordboundary = register_nut(new_nut(nodecodes.boundary,boundarycodes.word)) -local cleader = register_nut(copy_nut(glue)) setsubtype(cleader,leadercodes.cleaders) setglue(cleader,0,65536,0,2,0) +local cleader = register_nut(copy_nut(glue)) setsubtype(cleader,gluecodes.cleaders) setglue(cleader,0,65536,0,2,0) -- the dir field needs to be set otherwise crash: @@ -627,10 +626,10 @@ do return v end) - traversers.node = nodes.traverse (glyph) - traversers.char = nodes.traverse_char (glyph) - if nuts.traverse_glyph then traversers.glyph = nodes.traverse_glyph(glyph) end - if nuts.traverse_list then traversers.list = nodes.traverse_list (glyph) end + traversers.node = nodes.traverse (glyph) + traversers.char = nodes.traverse_char (glyph) + if nuts.traverse_glyph then traversers.glyph = nodes.traverse_glyph (glyph) end + if nuts.traverse_list then traversers.list = nodes.traverse_list (glyph) end nodes.traversers = traversers @@ -647,10 +646,11 @@ do return v end) - traversers.node = nuts.traverse (glyph) - traversers.char = nuts.traverse_char (glyph) - if nuts.traverse_glyph then traversers.glyph = nuts.traverse_glyph(glyph) end - if nuts.traverse_list then traversers.list = nuts.traverse_list (glyph) end + traversers.node = nuts.traverse (glyph) + traversers.char = nuts.traverse_char (glyph) + if nuts.traverse_glyph then traversers.glyph = nuts.traverse_glyph (glyph) end + if nuts.traverse_list then traversers.list = nuts.traverse_list (glyph) end + if nuts.traverse_content then traversers.content = nuts.traverse_content(glyph) end nuts.traversers = traversers diff --git a/tex/context/base/mkiv/node-rul.lua b/tex/context/base/mkiv/node-rul.lua index 830d97ff6..f60fb2406 100644 --- a/tex/context/base/mkiv/node-rul.lua +++ b/tex/context/base/mkiv/node-rul.lua @@ -75,7 +75,7 @@ local gluecodes = nodes.gluecodes local listcodes = nodes.listcodes local glyph_code = nodecodes.glyph -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local dir_code = nodecodes.dir local glue_code = nodecodes.glue local hlist_code = nodecodes.hlist @@ -588,7 +588,7 @@ function linefillers.handler(head) else break end - elseif id == localpar_code or id == dir_code then + elseif id == par_code or id == dir_code then -- go on elseif id == hlist_code then if getsubtype(head) == indentlist_code then diff --git a/tex/context/base/mkiv/node-scn.lua b/tex/context/base/mkiv/node-scn.lua index 055f5e20d..0ec1ba387 100644 --- a/tex/context/base/mkiv/node-scn.lua +++ b/tex/context/base/mkiv/node-scn.lua @@ -24,7 +24,6 @@ local setlist = nuts.setlist local end_of_math = nuts.end_of_math local nodecodes = nodes.nodecodes -local leadercodes = nodes.leadercodes local gluecodes = nodes.gluecodes local kerncodes = nodes.kerncodes @@ -43,8 +42,7 @@ local vlist_code = nodecodes.vlist local userskip_code = gluecodes.userskip local spaceskip_code = gluecodes.spaceskip local xspaceskip_code = gluecodes.xspaceskip - -local leaders_code = leadercodes.leaders +local leaders_code = gluecodes.leaders local fontkern_code = kerncodes.fontkern diff --git a/tex/context/base/mkiv/node-ser.lmt b/tex/context/base/mkiv/node-ser.lmt new file mode 100644 index 000000000..0d7f3ccad --- /dev/null +++ b/tex/context/base/mkiv/node-ser.lmt @@ -0,0 +1,285 @@ +if not modules then modules = { } end modules ['node-ser'] = { + version = 1.001, + comment = "companion to node-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local type, tostring = type, tostring +local concat, tohash, sortedkeys, sortedhash, printtable, serialize = table.concat, table.tohash, table.sortedkeys, table.sortedhash, table.print, table.serialize +local formatters, format, rep = string.formatters, string.format, string.rep + +local allocate = utilities.storage.allocate + +local context = context +local nodes = nodes +local node = node + +local getfields = node.fields + +local traverse = nodes.traverse +local is_node = nodes.is_node + +local nodecodes = nodes.nodecodes +local subtypes = nodes.subtypes + +local tonode = nodes.tonode +local tonut = nodes.tonut + +local hlist_code = nodecodes.hlist +local vlist_code = nodecodes.vlist + +local f_char = formatters["%U"] +local f_attr = formatters[""] +local f_recurse = formatters[""] + +-- flat : don't use next, but indexes +-- verbose : also add type + +local canbezero = { + integer = true, + dimension = true, + number = true, +} + +local canbelist = { + attribute = "", + node = "", + token = "", + attribute_list = "", + node_list = "", + token_list = "", +} + +local canbeignored = { + prev = "" +} + +local canbechar = { + char = true, + small_char = true, + large_char = true, +} + +local fieldtypes = table.setmetatableindex(function(t,k) + local v = getfields(k,true) or false + t[k] = v + return v +end) + +nodes.fieldtypes = fieldtypes + +local function astable(n) + n = tonode(n) + if n then + local fields = fieldtypes[n.id] + if fields then + local result = { } + for field, fieldtype in sortedhash(fields) do + local value = n[field] + if value then + if canbeignored[field] then + value = nil + elseif canbezero[fieldtype] and value == 0 then + value = nil + elseif canbelist[fieldtype] then + value = canbelist[fieldtype] + end + if value then + result[field] = value + end + end + end + local id = n.id + if id then + id = nodecodes[id] + result.id = id + local subtype = n.subtype + if subtype then + local subtypes = subtypes[id] + if subtypes then + result.subtype = subtypes[subtype] + end + end + end + return result + end + end +end + +nodes.astable = astable + +setinspector("node",function(v) if is_node(v) then printtable(astable(v),tostring(v)) return true end end) + +local function to_table(n,flat,verbose,noattributes,done) + local d = tonut(n) + if done[d] then + return f_recurse(d) + else + done[d] = true + local fields = fieldtypes[n.id] + if fields then + local result = { } + for field, fieldtype in sortedhash(fields) do + local value = n[field] + if value then + if fieldtype == "attribute_list" or fieldtype == "attribute" then + if noattributes then + result[value] = canbeignored[value] + else + result[value] = to_table(value,flat,verbose,noattributes,done) + end + elseif canbeignored[field] then + result[value] = canbeignored[value] + elseif not verbose and canbezero[fieldtype] and value == 0 then + value = nil + elseif canbelist[fieldtype] then + if flat then + result[value] = canbelist[value] + else + result[value] = to_table(value,flat,verbose,noattributes,done) + end + end + if value then + result[field] = value + end + end + end + if verbose then + local id = result.id + if id then + id = nodecodes[id] + result.id = id + local subtype = result.subtype + if subtype then + local subtypes = subtypes[id] + if subtypes then + result.subtype = subtypes[subtype] + end + end + end + for k, v in next, canbechar do + local v = result[k] + if v then + result[k] = f_char(v) + end + end + end + return result + end + end +end + +local function totable(n,flat,verbose,noattributes) -- nicest: n,true,true,true + if n then + local d = { } + if flat then + local t, tn = { }, 0 + while n do + tn = tn + 1 + local nt = to_table(n,flat,verbose,noattributes,d) + t[tn] = nt + nt.next = nil + nt.prev = nil + n = n.next + end + done = nil + return t + else + local t = to_table(n,flat,verbose,noattributes,d) + local n = n.next + if n then + t.next = totable(n,flat,verbose,noattributes,d) + end + return t + end + else + return { } + end +end + +nodes.totable = function(n,...) return totable(tonode(n),...) end +nodes.totree = function(n) return totable(tonode(n),true,true,true) end -- no attributes, todo: attributes in k,v list + +local function key(k) + return ((type(k) == "number") and "["..k.."]") or k +end + +function nodes.serialize(root,flat,verbose,noattributes,name) + return serialize(totable(tonode(root),flat,verbose,noattributes),name) +end + +function nodes.serializebox(n,flat,verbose,noattributes,name) + return serialize(totable(tex.box[n],flat,verbose,noattributes),name) +end + +function nodes.visualizebox(n,flat,verbose,noattributes,name) + context.tocontext(totable(tex.box[n],flat,verbose,noattributes),name) +end + +function nodes.list(head,n) -- name might change to nodes.type -- to be checked .. will move to module anyway + head = tonode(head) + if not n then + context.starttyping(true) + end + while head do + local id = head.id + context(rep(" ",n or 0) .. tostring(head) .. "\n") + if id == hlist_code or id == vlist_code then + nodes.list(head.list,(n or 0)+1) + end + head = head.next + end + if not n then + context.stoptyping(true) + end +end + +function nodes.print(head,n) + head = tonode(head) + while head do + local id = head.id + logs.writer(string.formatters["%w%S"],n or 0,head) + if id == hlist_code or id == vlist_code then + nodes.print(head.list,(n or 0)+1) + end + head = head.next + end +end + +-- quick hack, nicer is to have a proper expand per node type already prepared + +local function apply(n,action) + while n do + action(n) + local id = n.id + if id == hlist_code or id == vlist_code then + apply(n.list,action) + end + n = n.next + end +end + +nodes.apply = apply + +local nuts = nodes.nuts +local getid = nuts.getid +local getlist = nuts.getlist +local getnext = nuts.getnext + +local function apply(n,action) + while n do + action(n) + local id = getid(n) + if id == hlist_code or id == vlist_code then + local list = getlist(n,action) + if list then + apply(list,action) + end + end + n = getnext(n) + end +end + +nuts.apply = apply diff --git a/tex/context/base/mkiv/node-tex.lmt b/tex/context/base/mkiv/node-tex.lmt new file mode 100644 index 000000000..aae084740 --- /dev/null +++ b/tex/context/base/mkiv/node-tex.lmt @@ -0,0 +1,39 @@ +if not modules then modules = { } end modules ['node-tex'] = { + version = 1.001, + comment = "companion to node-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +builders = builders or { } +local kernel = builders.kernel or { } +builders.kernel = kernel + +local nuts = nodes.nuts + +local hyphenate = language.hyphenate + +local hyphenating = nuts.hyphenating +local ligaturing = nuts.ligaturing +local kerning = nuts.kerning + +function kernel.hyphenation(head) + return (hyphenate(head)) -- nodes ! +end + +function kernel.hyphenating(head) + return (hyphenating(head)) +end + +function kernel.ligaturing(head) + return (ligaturing(head)) +end + +function kernel.kerning(head) + return (kerning(head)) +end + +callbacks.register('hyphenate' , false, "normal hyphenation routine, called elsewhere") +callbacks.register('ligaturing', false, "normal ligaturing routine, called elsewhere") +callbacks.register('kerning' , false, "normal kerning routine, called elsewhere") diff --git a/tex/context/base/mkiv/node-tex.lua b/tex/context/base/mkiv/node-tex.lua index 5857fd2e6..cda6ff132 100644 --- a/tex/context/base/mkiv/node-tex.lua +++ b/tex/context/base/mkiv/node-tex.lua @@ -16,7 +16,6 @@ local hyphenate = lang.hyphenate local hyphenating = nuts.hyphenating local ligaturing = nuts.ligaturing local kerning = nuts.kerning -local cleanup = nuts.flush_components function kernel.hyphenation(head) return (hyphenate(head)) -- nodes ! @@ -34,14 +33,6 @@ function kernel.kerning(head) return (kerning(head)) end -if cleanup then - - function kernel.cleanup(head) - return (cleanup(head)) - end - -end - callbacks.register('hyphenate' , false, "normal hyphenation routine, called elsewhere") callbacks.register('ligaturing', false, "normal ligaturing routine, called elsewhere") callbacks.register('kerning' , false, "normal kerning routine, called elsewhere") diff --git a/tex/context/base/mkiv/node-tra.lua b/tex/context/base/mkiv/node-tra.lua index 2ebfaff12..a86dfb620 100644 --- a/tex/context/base/mkiv/node-tra.lua +++ b/tex/context/base/mkiv/node-tra.lua @@ -77,7 +77,7 @@ local glue_code = nodecodes.glue local kern_code = nodecodes.kern local rule_code = nodecodes.rule local dir_code = nodecodes.dir -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local whatsit_code = nodecodes.whatsit local dimenfactors = number.dimenfactors @@ -115,19 +115,6 @@ function nodes.handlers.checkglyphs(head,message) return false end -function nodes.handlers.checkforleaks(sparse) - local l = { } - local q = used_nodes() - for p, id in nextnode, q do - local s = table.serialize(nodes.astable(p,sparse),nodecodes[id]) - l[s] = (l[s] or 0) + 1 - end - flush_list(q) - for k, v in next, l do - report_nodes("%s * %s",v,k) - end -end - local fontcharacters -- = fonts.hashes.descriptions local function tosequence(start,stop,compact) @@ -167,7 +154,7 @@ local function tosequence(start,stop,compact) elseif id == dir_code then local d, p = getdirection(start) n = n + 1 ; t[n] = "[<" .. (p and "-" or "+") .. d .. ">]" -- todo l2r etc - elseif id == localpar_code and start_of_par(current) then + elseif id == par_code and start_of_par(current) then n = n + 1 ; t[n] = "[<" .. getdirection(start) .. ">]" -- todo l2r etc elseif compact then n = n + 1 ; t[n] = "[]" @@ -325,14 +312,6 @@ local function showsimplelist(h,depth,n) end end --- \startluacode --- callbacks.register('buildpage_filter',function() nodes.show_simple_list(tex.lists.contrib_head) end) --- \stopluacode --- \vbox{b\footnote{n}a} --- \startluacode --- callbacks.register('buildpage_filter',nil) --- \stopluacode - nodes.showsimplelist = function(h,depth) showsimplelist(h,depth,0) end local function listtoutf(h,joiner,textonly,last,nodisc) diff --git a/tex/context/base/mkiv/pack-box.mkxl b/tex/context/base/mkiv/pack-box.mkxl new file mode 100644 index 000000000..2f52939ce --- /dev/null +++ b/tex/context/base/mkiv/pack-box.mkxl @@ -0,0 +1,1114 @@ +%D \module +%D [ file=pack-box, +%D version=2002.04.12, +%D title=\CONTEXT\ Packaging Macros, +%D subtitle=Boxes, +%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 Packaging Macros / Boxes} + +%D This module contains all kind of macros for moving content around. Many +%D macros here come from other modules, but depencies made it more clear +%D to isolate them. We invite users to document the macros. They can be +%D handy shortcuts for otherwise complex tasks. + +\unprotect + +%D We need to set the size, else we get dimensions depending on the content, +%D which in itself is ok, but can lead to loops due to rounding errors (happened +%D in demo-obv). + +% \definelayer[\v!text-2][\c!position=\v!yes,\c!region=,\c!width=\d_overlay_width,\c!height=\d_overlay_height] +% \definelayer[\v!text-1][\c!position=\v!yes,\c!region=,\c!width=\d_overlay_width,\c!height=\d_overlay_height] +% \definelayer[\v!text+1][\c!position=\v!yes,\c!region=,\c!width=\d_overlay_width,\c!height=\d_overlay_height] +% \definelayer[\v!text+2][\c!position=\v!yes,\c!region=,\c!width=\d_overlay_width,\c!height=\d_overlay_height] + +\definelayer[\v!text-2][\c!position=\v!yes,\c!region=,\c!width=\textwidth,\c!height=\textheight] +\definelayer[\v!text-1][\c!position=\v!yes,\c!region=,\c!width=\textwidth,\c!height=\textheight] +\definelayer[\v!text+1][\c!position=\v!yes,\c!region=,\c!width=\textwidth,\c!height=\textheight] +\definelayer[\v!text+2][\c!position=\v!yes,\c!region=,\c!width=\textwidth,\c!height=\textheight] + +\permanent\protected\def\internaltextoverlay#1% will become more generic and installable + {\startoverlay % i.e. probably an overlay by itself + {\positionregionoverlay\textanchor{\v!text#1}}% see later + {\composedlayer {\v!text#1}}% + \stopoverlay} + +\defineoverlay[\v!text-2][\internaltextoverlay{-2}] +\defineoverlay[\v!text-1][\internaltextoverlay{-1}] +\defineoverlay[\v!text+1][\internaltextoverlay{+1}] +\defineoverlay[\v!text+2][\internaltextoverlay{+2}] + +\installcorenamespace {anchor} + +% produces a box too +% +% \anchor[text-1][preset=lefttop][framed settings]{HELLO WORLD} + +\permanent\tolerant\protected\def\defineanchor[#1]#*[#2]#*[#3]#*[#4]% name targetlayer layersetting framedsetting + {\setvalue{\??anchor#1}{\pack_anchors_process_defined{#2}{#3}{#4}}} + +\def\pack_anchors_process_defined#1#2#3% + {\tolerant\def\pack_anchors_process_defined_indeed[##1]##*[##2]% + {\ifarguments + \def\next{\pack_anchors_process_indeed{#1}{#2}{#3}}% + \or + \def\next{\pack_anchors_process_indeed{#1}{#2,##1}{#2,##1}}% + \or + \def\next{\pack_anchors_process_indeed{#1}{#2,##1}{#3,##2}}% + \fi + \next}% picks up a box + \pack_anchors_process_defined_indeed} + +\protected\def\anchor[#1]% + {\begingroup + \edef\currentanchor{#1}% + \ifcsname\??anchor\currentanchor\endcsname + \expandafter\lastnamedcs + \else + \expandafter\pack_anchor_notdefined + \fi} + +\tolerant\def\pack_anchor_notdefined[#1]#*[#2]% + {\ifarguments + \expandafter\gobbletwoarguments + \or + \expandafter\pack_anchor_notdefined_one + \else + \expandafter\pack_anchor_notdefined_two + \fi{#1}{#2}} + +\def\pack_anchor_notdefined_one #1#2{\dowithnextbox{\pack_anchors_process_finish\currentanchor{#1}{#1}}\vbox} +\def\pack_anchor_notdefined_two #1#2{\dowithnextbox{\pack_anchors_process_finish\currentanchor{#1}{#2}}\vbox} +\def\pack_anchors_process_indeed#1#2#3{\dowithnextbox{\pack_anchors_process_finish {#1}{#2}{#3}}\vbox} + +\newbox \b_pack_anchors +\newdimen\d_pack_anchors_width +\newdimen\d_pack_anchors_height +\newdimen\d_pack_anchors_depth + +% \definelayer[anchor] + +\newcount\c_pack_anchors_n +\newtoks \t_pack_anchors_flush + +\protected\def\pack_anchors_register#1#2% + {\global\advance\c_pack_anchors_n\plusone + \pagereference[\v!layer:\v!anchor:\number\c_pack_anchors_n]% + \putboxincache\v!anchor{\number\c_pack_anchors_n}\b_pack_anchors +% \xtoksapp\t_pack_anchors_flush{\pack_anchors_flush{\number\c_pack_anchors_n}{#1}{#2}}% + \doglobal\appendetoks + \pack_anchors_flush{\number\c_pack_anchors_n}{#1}{#2}% + \to \t_pack_anchors_flush + \glet\pack_anchors_flush_all\pack_anchors_flush_all_indeed} + +\protected\def\pack_anchors_flush#1#2#3% + {\doifelseboxincache\v!anchor{#1} + {\doifelsereferencefound{\v!layer:\v!anchor:#1} + {\ifnum\currentreferencerealpage=\realpageno\relax + \setlayer[#2][#3,\c!position=\v!no]{\directboxfromcache\v!anchor{#1}}% + \else + \donetrue + \fi + }\donetrue}% + \donetrue}% + +\protected\def\pack_anchors_flush_all_indeed + {\donefalse + \the\t_pack_anchors_flush + \ifdone\else + \global\t_pack_anchors_flush\emptytoks + \glet\pack_anchors_flush_all\relax + \fi} + +\let\pack_anchors_flush_all\relax + +\appendtoks + \pack_anchors_flush_all +\to \everybeforepagebody + +\def\pack_anchors_process_finish#1#2#3% brrr: we need to apply offset only once .. a bit messy + {\checkpositionoverlays + \setbox\b_pack_anchors\box\nextbox + \framed % could be a predefined framed but used seldom + [\c!offset=\v!overlay,\c!frame=\v!off,#3] + {\pack_anchors_register{#1}{#2}% + \novrule % hm, not needed as we frame the size (but kind of default) + \s!width \wd\b_pack_anchors + \s!height\ht\b_pack_anchors + \s!depth \dp\b_pack_anchors}% + \endgroup} + +% \setlayeranchored[text-1][preset=lefttop]{HELLO WORLD} produces a simple (empty) hbox +% synchronizes per page + +\permanent\tolerant\protected\def\setlayeranchored[#1]#*[#2]% + {\begingroup + \ifarguments + \dowithnextbox + {\endgroup}% + \or + \dowithnextbox + {\checkpositionoverlays + \setbox\b_pack_anchors\box\nextbox + \dontleavehmode\hpack{\pack_anchors_register{#1}{#2}}% + \endgroup}% + \fi + \hbox} + +% collectors + +\installcorenamespace{collectorbox} +\installcorenamespace{collector} + +\installcommandhandler \??collector {collector} \??collector + +\setupcollector + [\c!state=\v!start, + \c!x=\zeropoint, + \c!y=\zeropoint, + \c!offset=\zeropoint, + \c!rotation=, % geen 0 ! + \c!hoffset=\zeropoint, + \c!voffset=\zeropoint, + \c!location=rb, + \c!corner=] + +\appendtoks + \ifcsname\??collectorbox\currentcollector\endcsname \else + \expandafter\newbox\csname\??collectorbox\currentcollector\endcsname + \fi +\to \everydefinecollector + +\permanent\protected\def\resetcollector[#1]% + {\ifcsname\??collectorbox#1\endcsname + \global\setbox\lastnamedcs\emptybox + \fi} + +\newconditional\c_pack_boxes_collector_valid_box + +\let\b_pack_boxes_collector\scratchbox + +\def\pack_boxes_collector_check_box#1% + {\edef\currentcollector{#1}% + \ifcsname\??collectorbox\currentcollector\endcsname + \settrue\c_pack_boxes_collector_valid_box + \expandafter\let\expandafter\b_pack_boxes_collector\lastnamedcs + \else + \setfalse\c_pack_boxes_collector_valid_box + \writestatus{collector}{unknown collector \currentcollector}% + \fi} + +\permanent\tolerant\protected\def\setcollector[#1]#*[#2]% todo: keep reference point + {\bgroup + \pack_boxes_collector_check_box{#1}% + \ifconditional\c_pack_boxes_collector_valid_box + \setupcurrentcollector[#2]% + \expandafter\pack_boxes_collector_yes + \else + \expandafter\pack_boxes_collector_nop + \fi} + +\def\pack_boxes_collector_yes + {\forgetall + \dontcomplain + \dowithnextboxcs\pack_boxes_collector_finish\hbox} + +\let\pack_boxes_collector_nop\egroup + +\installcorenamespace{collectorcorners} + +\setvalue{\??collectorcorners\v!middle}% + {\ifdim\d_pack_layers_x_size>\zeropoint + \advance\d_pack_layers_x_position.5\d_pack_layers_x_size + \fi + \ifdim\d_pack_layers_y_size>\zeropoint + \advance\d_pack_layers_y_position.5\d_pack_layers_y_size + \fi} + +\setvalue{\??collectorcorners\v!bottom}% + {\ifdim\d_pack_layers_y_size>\zeropoint + \advance\d_pack_layers_y_position-\d_pack_layers_y_size + \d_pack_layers_y_position-\d_pack_layers_y_position + \fi} + +\setvalue{\??collectorcorners\v!right}% + {\ifdim\d_pack_layers_x_size>\zeropoint + \advance\d_pack_layers_x_position-\d_pack_layers_x_size + \d_pack_layers_x_position-\d_pack_layers_x_position + \fi} + +\def\pack_boxes_collector_check_corner#1% + {\ifcsname\??collectorcorners#1\endcsname + \lastnamedcs + \fi} + +\def\pack_boxes_collector_finish + {\edef\p_collector_rotation{\collectorparameter\c!rotation}% + \edef\p_collector_corner {\collectorparameter\c!corner}% + \ifx\p_collector_rotation\empty \else + \setbox\nextbox\hpack + {\rotate + [\c!location=\v!high, + \c!rotation=\p_collector_rotation] + {\box\nextbox}}% + \fi + \d_pack_layers_x_size\wd\b_pack_boxes_collector + \d_pack_layers_y_size\htdp\b_pack_boxes_collector + \d_pack_layers_x_position\dimexpr\collectorparameter\c!x+\collectorparameter\c!hoffset\relax + \d_pack_layers_y_position\dimexpr\collectorparameter\c!y+\collectorparameter\c!voffset\relax + \rawprocesscommacommand[\p_collector_corner]\pack_boxes_collector_check_corner + \setbox\nextbox\hpack + {\alignedbox[\collectorparameter\c!location]\vpack{\box\nextbox}}% + \boxmaxdepth\zeropoint % really needed, nice example + \global\advance\boxhdisplacement\d_pack_layers_x_position + \ifdim\boxhdisplacement<\zeropoint + \global\setbox\b_pack_boxes_collector\hpack + {\kern-\boxhdisplacement + \box\b_pack_boxes_collector}% + \fi + \global\advance\boxvdisplacement\d_pack_layers_y_position + \ifdim\boxvdisplacement<\zeropoint + \global\setbox\b_pack_boxes_collector\hpack + {\lower-\boxvdisplacement + \box\b_pack_boxes_collector}% + \fi + \d_pack_layers_x_size\wd\b_pack_boxes_collector + \d_pack_layers_y_size\htdp\b_pack_boxes_collector + \global\setbox\b_pack_boxes_collector\hpack + {\box\b_pack_boxes_collector + \kern\dimexpr + -\d_pack_layers_x_size + +\d_pack_layers_x_position + \ifdim\boxhdisplacement<\zeropoint + -\boxhdisplacement + \fi + \relax + \lower\d_pack_layers_y_position\hpack + {\ifdim\boxvdisplacement<\zeropoint + \lower-\boxvdisplacement + \fi + \box\nextbox}}% + % combine height and depth into depth only (later flushed as height) + \global\setbox\b_pack_boxes_collector\hpack + {\lower\ht\b_pack_boxes_collector\box\b_pack_boxes_collector}% + % just to be sure + \ifdim\wd\b_pack_boxes_collector<\d_pack_layers_x_size + \wd\b_pack_boxes_collector\d_pack_layers_x_size + \fi + \egroup} + +\permanent\protected\def\flushcollector[#1]% + {\bgroup + \pack_boxes_collector_check_box{#1}% + \ifconditional\c_pack_boxes_collector_valid_box + \edef\p_collector_state{\collectorparameter\c!state}% + \ifx\p_collector_state\v!stop \else + \vpack{\hpack{\raise + \dp\b_pack_boxes_collector + \ifx\p_collector_state\v!repeat\copy\else\box\fi\b_pack_boxes_collector}}% + \fi + \fi + \egroup} + +\permanent\protected\def\composedcollector#1% no [], handy as argument + {\flushcollector[#1]} + +\permanent\tolerant\protected\def\adaptcollector[#1]#*[#2]% % a typical case where \global\wd looks better in the code + {\begingroup + \pack_boxes_collector_check_box{#1}% + \ifconditional\c_pack_boxes_collector_valid_box + \letcollectorparameter\c!voffset\zeropoint + \letcollectorparameter\h!voffset\zeropoint + \setupcurrentcollector[#2]% + \global\wd\b_pack_boxes_collector\dimexpr\wd\b_pack_boxes_collector+\collectorparameter\c!hoffset\relax + \global\ht\b_pack_boxes_collector\dimexpr\ht\b_pack_boxes_collector+\collectorparameter\c!voffset\relax + \fi + \endgroup} + +%\definecollector[test] +%\setcollector[test] +% [location=rb] +% {\externalfigure[koe][frame=on,width=3cm]} +%\setcollector[test] +% [corner={right,bottom},location={left,top}] +% {\framed{gans}} +%\composedcollector{test} + +\definecollector + [caption] + +\permanent\tolerant\protected\def\collectedtext[#1]#*[#2]% for captions + {\pack_boxes_collector_text[#1][#2]} + +\def\pack_boxes_collector_text[#1][#2]#3% #3 is mandate so no tolerant here, so still two step + {\bgroup + \dowithnextbox + {\setcollector + [caption] + {\box\nextbox}% + \setcollector + [caption][#1]% + {\letdummyparameter\c!style\empty + \letdummyparameter\c!color\empty + \getdummyparameters[#2]% + \dousestyleparameter{\directdummyparameter\c!style}% + \setupinterlinespace + \normalexpanded{\framed[\c!foregroundcolor=\directdummyparameter\c!color,\c!foregroundstyle=\directdummyparameter\c!style},\c!frame=\v!overlay,#2]{#3}}% + \composedcollector{caption}% + \egroup}% + \hbox} + +% \collectedtext +% [corner={right,bottom},location={left,top}] +% [background=color,backgroundcolor=white,offset=0pt] +% {gans} +% {\externalfigure[koe][width=3cm]} +% +% \collectedtext +% [rotation=90,corner={right,bottom},location={right,top}] +% [frame=on,offset=0pt] +% {gans} +% {\externalfigure[koe][width=3cm]} +% +% \collectedtext +% [rotation=90,corner={left,bottom},location={left,top}] +% [frame=on,offset=0pt] +% {gans} +% {\externalfigure[koe][width=3cm]} + +\installcorenamespace {layeredtext} +\installcorenamespace {layeredtextlayer} +\installcorenamespace {layeredtextframed} + +\installsimpleframedcommandhandler \??layeredtext {layeredtext} \??layeredtext + +\newdimen\d_pack_layeredtexts_width +\newdimen\d_pack_layeredtexts_height + +\definelayer % private + [\??layeredtextlayer] + +\setuplayer % private + [\??layeredtextlayer] + [\c!width=\d_pack_layeredtexts_width, + \c!height=\d_pack_layeredtexts_height] + +\defineframed % private + [\??layeredtextframed] + [\c!offset=\v!overlay, + \c!frame=\v!off, + \c!background={\v!foreground,\??layeredtextlayer}, + \c!width=\d_pack_layeredtexts_width, + \c!height=\d_pack_layeredtexts_height] + +\setuplayeredtext % public (the attached data, usually small stuff, not the main thing) + [\c!frame=\v!overlay, + \c!color=, + \c!style=, + \c!foregroundcolor=\layeredtextparameter\c!color, + \c!foregroundstyle=\layeredtextparameter\c!style] + +\permanent\tolerant\protected\def\placelayeredtext[#1]#*[#2]#*[#3]#4% tag layersettings content(framed)settings content + {\bgroup + \edef\currentlayeredtext{#1}% + \checklayeredtextparent % bonus + \setupcurrentlayeredtext[#3]% + \dowithnextbox + {\d_pack_layeredtexts_width \wd\nextbox + \d_pack_layeredtexts_height\ht\nextbox + \begingroup % preserve \nextbox + \setlayer + [\??layeredtextlayer]% + [#2]% + {\setfalse\fontattributeisset + \uselayeredtextstyleparameter\c!style + \ifconditional\fontattributeisset + \setupinterlinespace + \fi + \inheritedlayeredtextframed{#4}}% + \endgroup + \placeframed[\??layeredtextframed]{\flushnextbox}% + \egroup}% + \hbox} + +\permanent\protected\def\layeredtext + {\placelayeredtext[]} + +% \layeredtext +% [corner={right,bottom},location={left,top}] +% [background=color,backgroundcolor=white,offset=0pt] +% {gans} +% {\externalfigure[koe][width=3cm]} +% +% \layeredtext +% [rotation=90,corner={right,bottom},location={right,top}] +% [frame=on,offset=0pt] +% {gans} +% {\externalfigure[koe][width=3cm]} +% +% \layeredtext +% [rotation=90,corner={left,bottom},location={left,top}] +% [frame=on,offset=0pt] +% {gans} +% {\externalfigure[koe][width=3cm]} + +\permanent\tolerant\protected\def\ornamenttext[#1]#*[#2]% takes another argument + {\bgroup + \doifelseassignment{#1} + {\letdummyparameter\c!alternative\v!a + \getdummyparameters[#1]% + \doifelse{\directdummyparameter\c!alternative}\v!a + {\egroup\collectedtext}% + {\egroup\layeredtext }% + [#1][#2]}% + {\egroup\getvalue{#1}}} + +\permanent\tolerant\protected\def\defineornament[#1]#*[#2]#*[#3]% + {\setuvalue{#1}{\pack_ornament_text[#2][#3]}} + +% \defineornament +% [affiliation] +% [rotation=90,corner={right,bottom},location={right,top}, +% hoffset=-.25ex] +% [frame=on,background=color,backgroundcolor=red,offset=0pt] +% +% \ruledhbox{\affiliation{gans}{\externalfigure[koe][width=3cm]}} +% +% \defineornament +% [affiliation] +% [rotation=90,corner={right,bottom},location={right,top}, +% hoffset=-.25ex,alternative=b] +% [frame=on,background=color,backgroundcolor=red,offset=0pt] +% +% \ruledhbox{\affiliation{gans}{\externalfigure[koe][width=3cm]}} +% +% \defineornament +% [affiliation] +% [rotation=90,corner={right,bottom},location={left,top}, +% hoffset=.25ex,voffset=.25ex,alternative=a] +% [background=color,style=\ss\tfxx,backgroundcolor=white,offset=0pt] +% +% \affiliation{photo}{\externalfigure[molen][width=3cm]} +% +% \defineornament +% [affiliation] +% [rotation=90,corner={right,bottom},location={left,top}, +% hoffset=.25ex,voffset=.25ex,alternative=b] +% [background=color,style=\ss\tfxx,backgroundcolor=white,offset=0pt] +% +% \affiliation{drawing}{\externalfigure[hakker][width=3cm]} + +\newcount\c_pack_boxes_bleeds + +\installcorenamespace {bleeding} + +\installdirectcommandhandler \??bleeding {bleeding} % \??bleeding + +\setupbleeding + [\c!location=l, + \c!stretch=\v!yes, + \c!width=3cm, + \c!height=3cm, + \c!offset=2mm, + \c!page=\v!no, + \c!voffset=\scratchoffset, % is set to \bleedingparameter\c!offset + \c!hoffset=\scratchoffset] % which often saves one resolve + +\def\bleedwidth {\the\hsize} % these are global ! +\def\bleedheight{\the\vsize} % these are global ! + +\newconditional\c_pack_boxes_l +\newconditional\c_pack_boxes_r +\newconditional\c_pack_boxes_t +\newconditional\c_pack_boxes_b + +\installcorenamespace{bleedinglocation} + +\setvalue{\??bleedinglocation t}{\settrue\c_pack_boxes_t\scratchhoffset\zeropoint} +\setvalue{\??bleedinglocation b}{\settrue\c_pack_boxes_b\scratchhoffset\zeropoint} +\setvalue{\??bleedinglocation l}{\settrue\c_pack_boxes_l\scratchvoffset\zeropoint} +\setvalue{\??bleedinglocation r}{\settrue\c_pack_boxes_r\scratchvoffset\zeropoint} +\setvalue{\??bleedinglocation bl}{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_b} +\setvalue{\??bleedinglocation lb}{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_b} +\setvalue{\??bleedinglocation br}{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_b} +\setvalue{\??bleedinglocation rb}{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_b} +\setvalue{\??bleedinglocation tl}{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_t} +\setvalue{\??bleedinglocation lt}{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_t} +\setvalue{\??bleedinglocation tr}{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_t} +\setvalue{\??bleedinglocation rt}{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_t} + +\permanent\tolerant\protected\def\bleed[#1]% + {\hbox\bgroup + \global\advance\c_pack_boxes_bleeds\plusone + % + \xdef\bleedwidth {\the\hsize}% + \xdef\bleedheight{\the\vsize}% + % + \edef\currentbgposition {bleed:\number\c_pack_boxes_bleeds}% + \edef\currentpageposition{page:0}% todo: per page + % + \setupcurrentbleeding[#1]% + % + \scratchwidth \bleedingparameter\c!width + \scratchheight \bleedingparameter\c!height + \scratchoffset \bleedingparameter\c!offset + \scratchhoffset\bleedingparameter\c!hoffset + \scratchvoffset\bleedingparameter\c!voffset + % + \setfalse\c_pack_boxes_l % left + \setfalse\c_pack_boxes_r % right + \setfalse\c_pack_boxes_t % top + \setfalse\c_pack_boxes_b % bottom + % + \csname\??bleedinglocation\bleedingparameter\c!location\endcsname + % + \doifelse{\bleedingparameter\c!stretch}\v!yes\donetrue\donefalse + % + \xdef\bleedwidth{\the\dimexpr + \ifdone + \ifconditional\c_pack_boxes_l + \scratchwidth+\MPx\currentbgposition-\MPx\currentpageposition + \else\ifconditional\c_pack_boxes_r + \paperwidth -\MPx\currentbgposition+\MPx\currentpageposition % not checked + \else + \scratchwidth + \fi\fi + \else + \scratchwidth + \fi+\scratchhoffset + \relax}% + \xdef\bleedheight{\the\dimexpr + \ifdone + \ifconditional\c_pack_boxes_t + \paperheight -\MPy\currentbgposition+\MPy\currentpageposition % not checked + \else\ifconditional\c_pack_boxes_b + \scratchheight+\MPy\currentbgposition-\MPy\currentpageposition + \MPh\currentbgposition % not checked (\MPh added) + \else + \scratchheight + \fi\fi + \else + \scratchheight + \fi+\scratchvoffset + \relax}% + \dowithnextboxcontentcs\pack_boxes_bleed_settings\pack_boxes_bleed_finish\hbox} + +\def\pack_boxes_bleed_settings + {\hsize\bleedwidth + \vsize\bleedheight} + +\def\pack_boxes_bleed_finish + {\doif{\bleedingparameter\c!page}\v!yes + {\setbox\nextbox\topskippedbox{\box\nextbox}}% + \setbox\nextbox\hpack to \scratchwidth + {\ifconditional\c_pack_boxes_l\hss\fi + \box\nextbox + \ifconditional\c_pack_boxes_r\hss\fi}% + \ifconditional\c_pack_boxes_b + \setbox\nextbox\hpack + {\lower\bleedheight\hpack{\raise\scratchheight\box\nextbox}}% + \fi + \wd\nextbox\scratchwidth + \ht\nextbox\scratchheight + \dp\nextbox\zeropoint + \ifdone + \hpos\currentbgposition{\box\nextbox}% + \else + \box\nextbox + \fi + \egroup} + +\defineexternalfigure + [bleed] % should be \v!bleed + [\c!width=\bleedwidth, + \c!height=\bleedheight] + +% \placefigure[left]{none} +% {\bleed[width=5cm,height=3cm,location=lt]{\externalfigure[koe][bleed]}} +% +% \input tufte +% +% \placefigure[left]{none} +% {\bleed[width=5cm,height=3cm,location=l]{\externalfigure[koe][bleed]}} +% +% \input tufte +% +% \placefigure[right]{none} +% {\bleed[width=5cm,height=3cm,location=r]{\externalfigure[koe][bleed]}} +% +% \input tufte +% +% \placefigure +% [top,none] +% {} % no caption +% {\bleed +% [hoffset=-\backspace, +% voffset=3mm, +% width=0cm, +% height=6\lineheight, +% page=yes, % correct for topskip +% location=lt] +% {\externalfigure[koe][bleed][frame=on]}} + +% \setlayerframed[layer id][layer settings][framed setting]{data} +% \setlayerframed[layer id][combined settings]{data} + +% tricky: offsets apply to both the layer and the framed; it makes sense to +% only apply the offset to ... + +\permanent\tolerant\protected\def\setlayerframed[#1]#*[#2]#*[#3] + {\ifarguments + % error + \or + \expandafter\pack_layers_set_framed_s + \or + \expandafter\pack_layers_set_framed_d + \or + \expandafter\pack_layers_set_framed_t + \fi[#1][#2][#3]} + +\def\pack_layers_set_framed_s[#1][#2][#3]% + {\setlayer[#1][\c!width=\wd\nextbox,\c!height=\ht\nextbox,\c!offset=\zeropoint]% + \normalframedwithsettings[\c!location=\v!normal]} % different kind of location + +\def\pack_layers_set_framed_d[#1][#2][#3]% + {\setlayer[#1][\c!width=\wd\nextbox,\c!height=\ht\nextbox,#2,\c!offset=\zeropoint]% + \normalframedwithsettings[\c!location=\v!normal,#2]} % different kind of location + +\def\pack_layers_set_framed_t[#1][#2][#3]% + {\setlayer[#1][#2]% + \normalframedwithsettings[#3]} + +\permanent\tolerant\protected\def\setlayertext[#1]#*[#2]#*[#3]% + {\bgroup + \letdummyparameter\c!align\empty + \letdummyparameter\c!width\hsize + \letdummyparameter\c!color\empty + \letdummyparameter\c!style\empty + \getdummyparameters[#3]% + \dowithnextboxcontent + {\forgetall + \hsize\directdummyparameter\c!width + \usealignparameter\directdummyparameter + \dousestyleparameter{\directdummyparameter\c!style}} + {\setlayer[#1][#2]{\strut\dousecolorparameter{\directdummyparameter\c!color}\flushnextbox}% maybe expand the color + \egroup}% + \vtop} + +% \setupbackgrounds +% [page] +% [background=pagefigures] +% +% \definelayer +% [pagefigures] +% [x=-2mm, +% y=-2mm, +% width=\paperwidth, +% height=\paperheight] +% +% \definelayerpreset [lefttop] [corner={left,top},location={right,bottom}] +% \definelayerpreset [righttop] [corner={right,top},location={left,bottom}] +% \definelayerpreset [leftbottom] [corner={left,bottom},location={right,top}] +% \definelayerpreset [rightbottom] [corner={right,bottom},location={left,top}] +% \definelayerpreset [middle] [corner=middle,location=middle] +% +% \setlayer[pagefigures][preset=lefttop] +% \setlayer[pagefigures][preset=righttop] +% \setlayer[pagefigures][preset=leftbottom] +% \setlayer[pagefigures][preset=rightbottom] + +\definelayerpreset + [\v!left\v!top] + [\c!corner={\v!left,\v!top},\c!location={\v!right,\v!bottom}] + +\definelayerpreset + [\v!right\v!top] + [\c!corner={\v!right,\v!top},\c!location={\v!left,\v!bottom}] + +\definelayerpreset + [\v!left\v!bottom] + [\c!corner={\v!left,\v!bottom},\c!location={\v!right,\v!top}] + +\definelayerpreset + [\v!right\v!bottom] + [\c!corner={\v!right,\v!bottom},\c!location={\v!left,\v!top}] + +\definelayerpreset + [\v!middle] + [\c!corner=\v!middle,\c!location=\v!middle] + +\definelayerpreset + [\v!middle\v!top] + [\c!location=\v!bottom,\c!corner=\v!top,\c!dx=.5\layerwidth] + +\definelayerpreset + [\v!middle\v!bottom] + [\c!location=\v!top,\c!corner=\v!bottom,\c!dx=.5\layerwidth] + +\definelayerpreset + [\v!middle\v!left] + [\c!location=\v!right,\c!corner=\v!left,\c!dy=.5\layerheight] + +\definelayerpreset + [\v!middle\v!right] + [\c!location=\v!left,\c!corner=\v!right,\c!dy=.5\layerheight] + +% left and right hanging: + +\definelayerpreset + [\v!left\v!top\v!left] + [\c!location={\v!left,\v!bottom},\c!corner={\v!left,\v!top}] + +\definelayerpreset + [\v!right\v!top\v!right] + [\c!location={\v!right,\v!bottom},\c!corner={\v!right,\v!top}] + +\installcorenamespace{alignedboxes} + +\permanent\tolerant\protected\def\alignedbox[#1]{\bgroup\serializecommalist[#1]\dowithnextboxcs\pack_boxes_aligned_finish} +\permanent\tolerant\protected\def\aligned [#1]{\bgroup\serializecommalist[#1]\dowithnextboxcs\pack_boxes_aligned_finish\hbox} + +\def\pack_boxes_aligned_finish + {\ifcsname\??alignedboxes\serializedcommalist\endcsname + \expandafter\lastnamedcs + \else + \expandafter\middlebox + \fi{\flushnextbox}% + \egroup} + +\letvalue{\??alignedboxes }\middlebox +\letvalue{\??alignedboxes\v!middle }\middlebox +\letvalue{\??alignedboxes\v!middle\v!middle}\middlebox +\letvalue{\??alignedboxes\v!left }\leftbox +\letvalue{\??alignedboxes\v!left \v!top }\lefttopbox +\letvalue{\??alignedboxes\v!left \v!bottom}\leftbottombox +\letvalue{\??alignedboxes\v!right }\rightbox +\letvalue{\??alignedboxes\v!right \v!top }\righttopbox +\letvalue{\??alignedboxes\v!right \v!bottom}\rightbottombox +\letvalue{\??alignedboxes\v!bottom }\bottombox +\letvalue{\??alignedboxes\v!bottom\v!left }\bottomleftbox +\letvalue{\??alignedboxes\v!bottom\v!right }\bottomrightbox +\letvalue{\??alignedboxes\v!top }\topbox +\letvalue{\??alignedboxes\v!top \v!left }\topleftbox +\letvalue{\??alignedboxes\v!top \v!right }\toprightbox +\letvalue{\??alignedboxes\v!line }\baselinemiddlebox % \v!grid is taken +\letvalue{\??alignedboxes\v!line \v!left }\baselineleftbox +\letvalue{\??alignedboxes\v!line \v!middle}\baselinemiddlebox +\letvalue{\??alignedboxes\v!line \v!right }\baselinerightbox +\letvalue{\??alignedboxes c}\middlebox +\letvalue{\??alignedboxes l}\leftbox +\letvalue{\??alignedboxes r}\rightbox +\letvalue{\??alignedboxes b}\bottombox +\letvalue{\??alignedboxes t}\topbox +\letvalue{\??alignedboxes lt}\lefttopbox +\letvalue{\??alignedboxes lb}\leftbottombox +\letvalue{\??alignedboxes rt}\righttopbox +\letvalue{\??alignedboxes rb}\rightbottombox +\letvalue{\??alignedboxes tl}\topleftbox +\letvalue{\??alignedboxes bl}\bottomleftbox +\letvalue{\??alignedboxes tr}\toprightbox +\letvalue{\??alignedboxes br}\bottomrightbox +\letvalue{\??alignedboxes m}\middlebox +\letvalue{\??alignedboxes g}\baselinemiddlebox +\letvalue{\??alignedboxes gl}\baselineleftbox +\letvalue{\??alignedboxes gc}\baselinemiddlebox +\letvalue{\??alignedboxes gr}\baselinerightbox + +% left/right/top/bottomoffset -> dimensions change +% x/y | method=fixed -> dimensions don't change + +\installcorenamespace{offsetbox} + +\installautocommandhandler \??offsetbox {offsetbox} \??offsetbox + +\setupoffsetbox + [\c!x=\zeropoint, + \c!y=\zeropoint, + \c!width=\wd\nextbox, + \c!height=\ht\nextbox, + \c!depth=\dp\nextbox, + \c!location=, + \c!leftoffset=\zeropoint, + \c!rightoffset=\zeropoint, + \c!topoffset=\zeropoint, + \c!bottomoffset=\zeropoint, + \c!method=] + +\aliased\let\setupoffset\setupoffsetbox + +\permanent\tolerant\protected\def\offsetbox[#1]% + {\bgroup + \pack_boxes_offset_check[#1]% + \dowithnextboxcs\pack_boxes_offsetfinish} + +\permanent\tolerant\protected\def\offset[#1]% + {\bgroup + \pack_boxes_offset_check[#1]% + \dowithnextboxcs\pack_boxes_offsetfinish\hbox} + +\newcount\c_pack_boxes_offset_level + +\def\pack_boxes_offset_check + {\advance\c_pack_boxes_offset_level\plusone + \edef\currentoffsetbox{\the\c_pack_boxes_offset_level}% + \checkoffsetboxparent + \setupcurrentoffsetbox} + +\def\pack_boxes_offsetfinish + {\donefalse + \scratchxposition \offsetboxparameter\c!x + \scratchyposition \offsetboxparameter\c!y + \scratchleftoffset \offsetboxparameter\c!leftoffset + \scratchrightoffset \offsetboxparameter\c!rightoffset + \scratchtopoffset \offsetboxparameter\c!topoffset + \scratchbottomoffset\offsetboxparameter\c!bottomoffset + \relax % really needed + \ifzeropt\scratchleftoffset \else\donetrue\fi + \ifzeropt\scratchrightoffset \else\donetrue\fi + \ifzeropt\scratchtopoffset \else\donetrue\fi + \ifzeropt\scratchbottomoffset\else\donetrue\fi + \ifdone + \edef\p_method{\offsetboxparameter\c!method}% + \ifx\p_method\v!fixed % new + \ifzeropt\scratchleftoffset + \ifzeropt\scratchrightoffset \else + \scratchxposition-\scratchrightoffset + \scratchrightoffset\zeropoint + \fi + \else + \scratchxposition\scratchleftoffset + \scratchleftoffset\zeropoint + \fi + \ifzeropt\scratchtopoffset + \ifzeropt\scratchbottomoffset \else + \scratchyposition-\scratchbottomoffset + \scratchbottomoffset\zeropoint + \fi + \else + \scratchyposition\scratchtopoffset + \scratchtopoffset\zeropoint + \fi + \donefalse + \fi + \fi + \ifdone + \setbox\nextbox\vpack + {\forgetall % already done + \offinterlineskip + \kern\scratchtopoffset + \hpack + {\kern\scratchleftoffset + \box\nextbox + \kern\scratchrightoffset}% + \kern\scratchbottomoffset}% + \ht\nextbox\htdp\nextbox + \dp\nextbox\zeropoint + \fi + \scratchwidth \offsetboxparameter\c!width + \scratchheight\offsetboxparameter\c!height + \scratchdepth \offsetboxparameter\c!depth + \edef\p_location{\offsetboxparameter\c!location}% + \setbox\nextbox\hpack + {\kern\scratchxposition + \lower\scratchyposition\hpack + {\ifx\p_location\empty + \box\nextbox + \else + \alignedbox[\p_location]\hpack{\box\nextbox}% + \fi}}% + \wd\nextbox\scratchwidth + \ht\nextbox\scratchheight + \dp\nextbox\scratchdepth + \box\nextbox + \egroup} + +%D \starttyping +%D \framed[offset=overlay]{\offset[leftoffset=1cm] +%D {\framed[offset=overlay]{\offset[rightoffset=1cm] +%D {\externalfigure[koe][width=1cm]}}}} +%D +%D \blank +%D +%D \framed[offset=overlay]{\offset[leftoffset=1cm] {\externalfigure[koe][width=5cm]}} \blank +%D \framed[offset=overlay]{\offset[rightoffset=1cm] {\externalfigure[koe][width=5cm]}} \blank +%D \framed[offset=overlay]{\offset[topoffset=1cm] {\externalfigure[koe][width=5cm]}} \blank +%D \framed[offset=overlay]{\offset[bottomoffset=1cm]{\externalfigure[koe][width=5cm]}} \blank +%D \stoptyping + +% \useMPlibrary[pre] \setupbackgrounds[page][background=pagegrid] +% +% \placefigure[left,none]{}{\offset[leftoffset=1cm] {\externalfigure[cow][width=3cm]}} \input tufte +% \placefigure[left,none]{}{\offset[rightoffset=1cm] {\externalfigure[cow][width=3cm]}} \input tufte +% \placefigure[left,none]{}{\offset[topoffset=1cm] {\externalfigure[cow][width=3cm]}} \input tufte +% \placefigure[left,none]{}{\offset[bottomoffset=1cm]{\externalfigure[cow][width=3cm]}} \input tufte + +% Some old code: +% +% \ltabbed{\romannumerals{3}}{\romannumerals{1}} test \endgraf +% \ltabbed{\romannumerals{3}}{\romannumerals{2}} test \endgraf +% \ltabbed{\romannumerals{3}}{\romannumerals{3}} test \endgraf +% +% \rtabbed{\romannumerals{3}}{\romannumerals{1}} test \endgraf +% \rtabbed{\romannumerals{3}}{\romannumerals{2}} test \endgraf +% \rtabbed{\romannumerals{3}}{\romannumerals{3}} test \endgraf +% +% \ctabbed{\romannumerals{3}}{\romannumerals{1}} test \endgraf +% \ctabbed{\romannumerals{3}}{\romannumerals{2}} test \endgraf +% \ctabbed{\romannumerals{3}}{\romannumerals{3}} test \endgraf + +\def\pack_boxes_tabbed#1#2#3#4% + {\dontleavehmode + \begingroup + \setbox\scratchbox\hpack{#3}% + \hpack to \wd\scratchbox{#1#4#2}% + \endgroup} + +\permanent\protected\def\ltabbed{\pack_boxes_tabbed\relax\hss} +\permanent\protected\def\rtabbed{\pack_boxes_tabbed\hss \relax} +\permanent\protected\def\ctabbed{\pack_boxes_tabbed\hss \hss} + +\let\mtabbed\ctabbed + +% to be documented + +\permanent\protected\def\phantombox[#1]% == \framed[\c!empty=\v!yes,\c!offset=\v!overlay,#1]{} + {\hpack\bgroup + \letdummyparameter\c!width \zeropoint + \letdummyparameter\c!height\zeropoint + \letdummyparameter\c!depth \zeropoint + \getdummyparameters[#1]% + \setbox\scratchbox\emptyhbox + \wd\scratchbox\directdummyparameter\c!width + \ht\scratchbox\directdummyparameter\c!height + \dp\scratchbox\directdummyparameter\c!depth + \box\scratchbox + \egroup} + +% \backgroundimage{1}{\hsize}{\vsize}{\externalfigure[cow][\c!width=3cm]} + +% \framed[offset=overlay,width=6cm,height=3cm]{\backgroundimage {1}{\hsize}{\vsize}{\externalfigure[cow][width=1cm]}} +% \framed[offset=overlay,width=6cm,height=3cm]{\backgroundimage {2}{\hsize}{\vsize}{\externalfigure[cow][width=1cm]}} +% \framed[offset=overlay,width=6cm,height=3cm]{\backgroundimage {3}{\hsize}{\vsize}{\externalfigure[cow][width=1cm]}} + +% \framed[offset=overlay,width=4cm,height=2cm]{\backgroundimagefill{1}{\hsize}{\vsize}{\externalfigure[cow][width=1cm]}} +% \framed[offset=overlay,width=4cm,height=2cm]{\backgroundimagefill{2}{\hsize}{\vsize}{\externalfigure[cow][width=1cm]}} +% \framed[offset=overlay,width=4cm,height=2cm]{\backgroundimagefill{3}{\hsize}{\vsize}{\externalfigure[cow][width=1cm]}} +% \framed[offset=overlay,width=2cm,height=4cm]{\backgroundimagefill{1}{\hsize}{\vsize}{\externalfigure[cow][width=1cm]}} +% \framed[offset=overlay,width=2cm,height=4cm]{\backgroundimagefill{2}{\hsize}{\vsize}{\externalfigure[cow][width=1cm]}} +% \framed[offset=overlay,width=2cm,height=4cm]{\backgroundimagefill{3}{\hsize}{\vsize}{\externalfigure[cow][width=1cm]}} +% +% \framed[offset=overlay,width=4cm,height=2cm]{\backgroundimagefill{1}{\hsize}{\vsize}{\externalfigure[mill]}} +% \framed[offset=overlay,width=4cm,height=2cm]{\backgroundimagefill{2}{\hsize}{\vsize}{\externalfigure[mill]}} +% \framed[offset=overlay,width=4cm,height=2cm]{\backgroundimagefill{3}{\hsize}{\vsize}{\externalfigure[mill]}} +% \framed[offset=overlay,width=2cm,height=4cm]{\backgroundimagefill{1}{\hsize}{\vsize}{\externalfigure[mill]}} +% \framed[offset=overlay,width=2cm,height=4cm]{\backgroundimagefill{2}{\hsize}{\vsize}{\externalfigure[mill]}} +% \framed[offset=overlay,width=2cm,height=4cm]{\backgroundimagefill{3}{\hsize}{\vsize}{\externalfigure[mill]}} + +\permanent\protected\def\backgroundimage#1#2#3% repeat hsize vsize + {\bgroup + \forgetall + \scratchcounter#1\relax + \scratchwidth #2\relax + \scratchheight #3\relax + \dowithnextboxcs\pack_boxes_background_image\hbox} + +\def\pack_boxes_background_image + {\offinterlineskip + \ifcase\scratchcounter + % just one + \else + \scratchdimen\scratchwidth \divide\scratchdimen\wd\nextbox\scratchnx\scratchdimen\advance\scratchnx\plusone\relax + \scratchdimen\scratchheight\divide\scratchdimen\ht\nextbox\scratchny\scratchdimen\advance\scratchny\plusone\relax + % to be considered: methods + \ifcase\scratchcounter + \or % x and y + \setbox\nextbox\hpack{\dorecurse\scratchnx{\copy\nextbox}}% + \setbox\nextbox\vpack{\dorecurse\scratchny{\copy\nextbox\endgraf}}% + \or % x + \setbox\nextbox\hpack{\dorecurse\scratchnx{\copy\nextbox}}% + \or % y + \setbox\nextbox\vpack{\dorecurse\scratchny{\copy\nextbox\endgraf}}% + \fi + \fi + \ifdim\wd\nextbox>\scratchwidth + \setbox\nextbox\hpack to \scratchwidth{\hss\box\nextbox\hss}% + \setbox\nextbox\hpack{\normalexpanded{\clip[\c!width=\the\scratchwidth,\c!height=\the\ht\nextbox]{\box\nextbox}}}% + \fi + \ifdim\ht\nextbox>\scratchheight + \setbox\nextbox\vpack to \scratchheight{\vss\box\nextbox\vss}% + \setbox\nextbox\hpack{\normalexpanded{\clip[\c!width=\the\wd\nextbox,\c!height=\the\scratchheight]{\box\nextbox}}}% + \fi + \box\nextbox + \egroup} + +\permanent\protected\def\backgroundimagefill#1#2#3% repeat hsize vsize + {\bgroup + \forgetall + \scratchcounter#1\relax + \scratchwidth #2\relax + \scratchheight #3\relax + \dowithnextboxcs\pack_boxes_background_image_fill\hbox} + +\def\pack_boxes_background_image_fill + {\offinterlineskip + \setbox\nextbox\hpack\bgroup + \ifdim\scratchwidth>\scratchheight + \scale[\c!width=\the\scratchwidth]{\box\nextbox}% + \else + \scale[\c!height=\the\scratchheight]{\box\nextbox}% + \fi + \egroup + \ifdim\wd\nextbox>\scratchwidth + \setbox\nextbox\hpack to \scratchwidth + {\ifcase\scratchcounter + \hss\box\nextbox\hss + \or + \box\nextbox\hss + \or + \hss\box\nextbox + \else + \hss\box\nextbox\hss + \fi}% + \setbox\nextbox\hpack + {\normalexpanded{\clip[\c!width=\the\scratchwidth,\c!height=\the\ht\nextbox]{\box\nextbox}}}% + \fi + \ifdim\ht\nextbox>\scratchheight + \setbox\nextbox\vpack to \scratchheight + {\ifcase\scratchcounter + \vss\box\nextbox\vss + \or + \box\nextbox\vss + \or + \vss\box\nextbox + \else + \vss\box\nextbox\vss + \fi}% + \setbox\nextbox\hpack + {\normalexpanded{\clip[\c!width=\the\wd\nextbox,\c!height=\the\scratchheight]{\box\nextbox}}}% + \fi + \box\nextbox + \egroup} + +\permanent\protected\def\overlayimage#1% + {\vpack to \overlayheight\bgroup + \vss + \hpack to \overlaywidth\bgroup + \hss + \externalfigure[#1][\c!factor=\v!min,\c!equalwidth=\overlaywidth,\c!equalheight=\overlayheight]% + \hss + \egroup + \vss + \egroup} + +\permanent\protected\def\clippedoverlayimage#1% + {\clip + [\c!width=\overlaywidth,\c!height=\overlayheight] + {\overlayimage{#1}}} + +\protect \endinput diff --git a/tex/context/base/mkiv/pack-com.mkxl b/tex/context/base/mkiv/pack-com.mkxl new file mode 100644 index 000000000..5b7a16359 --- /dev/null +++ b/tex/context/base/mkiv/pack-com.mkxl @@ -0,0 +1,949 @@ +%D \module +%D [ file=pack-com, % used to be in core-mis, +%D version=20120111, +%D title=\CONTEXT\ Packing Macros, +%D subtitle=Combinations, +%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 Packaging Macros / Combinations} + +\unprotect + +% \startfloatcombination will be redone ... we can decouple the floatcontent +% and caption and pass them to combinations so that we get better fit when the +% caption is wider than the float, testcase: +% +% \startfloatcombination [2*2] +% \placefigure[local]{alpha}{\externalfigure[cow.pdf][width=1cm]}% +% \placefigure[local]{beta} {\externalfigure[cow.pdf][width=2cm]}% +% \placefigure[local]{gamma}{\externalfigure[cow.pdf][width=3cm]} +% \placefigure[local]{delta}{\externalfigure[cow.pdf][width=4cm]} +% \stopfloatcombination + +%D We could of course map combinations onto one of the table mechanisms but as it +%D has served us well for ages we keep this one. The code has been cleaned up a bit +%D and mkiv'd. +%D +%D Okay ... I might luafy this one eventually. + +% \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 +% \startcombination[2] \combination {alpha} {a} \combination{beta} {b} \stopcombination + +%D We do support some structure but the order matters and currently it's only window +%D dressing: + +%D \starttyping +%D \let\startcontent\bgroup +%D \let\stopcontent \egroup +%D \let\startcaption\bgroup +%D \let\stopcaption \egroup +%D \stoptyping +%D +%D Of course we should have started with more structure as it would simply the code. +%D +%D \starttyping +%D \startcombination +%D \startcontent +%D \externalfigure[cow] +%D \stopcontent +%D \startcaption +%D Some cow. +%D \stopcaption +%D \startcontent +%D \externalfigure[cow] +%D \stopcontent +%D \startcaption +%D The same cow. +%D \stopcaption +%D \stopcombination +%D \stoptyping + +\ifdefined\dotagcombination \else \let\dotagcombination\relax \fi + +\newsystemmode{combination} + +\appendtoks + \globalresetsystemmode{combination}% +\to \everyinsidefloat + +\newcount\c_pack_combinations_nesting % local + +\newcount\c_pack_combinations_x % global +\newcount\c_pack_combinations_y % global +\newcount\c_pack_combinations_max % global + +\newdimen\d_pack_combinations_ht % global + +\newbox \b_pack_combinations_captions % global % can go +\newbox \b_pack_combinations_temp % global % can go +\newbox \b_pack_combinations_content % local +\newbox \b_pack_combinations_caption % local + +\installcorenamespace{combination} + +\installcommandhandler \??combination {combination} \??combination + +\initializeboxstack{\??combination captions} +\initializeboxstack{\??combination temp} + +\newcount\c_pack_combinations_x_saved +\newcount\c_pack_combinations_y_saved +\newcount\c_pack_combinations_max_saved + +\newdimen\d_pack_combinations_ht_saved + +\newbox \b_pack_combinations_captions_saved +\newbox \b_pack_combinations_temp_saved +\newbox \b_pack_combinations_content_saved +\newbox \b_pack_combinations_caption_saved + +\setfalse\c_strc_constructions_define_commands + +\def\pack_combinations_push + {\advance\c_pack_combinations_nesting\plusone + \ifnum\c_pack_combinations_nesting>\plusone + \c_pack_combinations_x_saved \c_pack_combinations_x + \c_pack_combinations_y_saved \c_pack_combinations_y + \c_pack_combinations_max_saved\c_pack_combinations_max + \d_pack_combinations_ht_saved \d_pack_combinations_ht + \setbox\b_pack_combinations_captions_saved\box\b_pack_combinations_captions + \setbox\b_pack_combinations_temp_saved \box\b_pack_combinations_temp + \setbox\b_pack_combinations_content_saved \box\b_pack_combinations_content + \setbox\b_pack_combinations_caption_saved \box\b_pack_combinations_caption + \else + \globalsetsystemmode{combination}% why global + \fi} + +\def\pack_combinations_pop + {\ifnum\c_pack_combinations_nesting>\plusone + \global\c_pack_combinations_x \c_pack_combinations_x_saved + \global\c_pack_combinations_y \c_pack_combinations_y_saved + \global\c_pack_combinations_max\c_pack_combinations_max_saved + \global\d_pack_combinations_ht \d_pack_combinations_ht_saved + \global\setbox\b_pack_combinations_captions\box\b_pack_combinations_captions_saved + \global\setbox\b_pack_combinations_temp \box\b_pack_combinations_temp_saved + \setbox\b_pack_combinations_content \box\b_pack_combinations_content_saved + \setbox\b_pack_combinations_caption \box\b_pack_combinations_caption_saved + \else + \globalresetsystemmode{combination}% why global + \fi + \advance\c_pack_combinations_nesting\minusone} + +\definelabel + [\v!combination] % handy for configuring + [\c!numberconversion=\v!character, + \c!text=] + +\settrue\c_strc_constructions_define_commands + +\setupcombination + [\c!width=\v!fit, + \c!height=\v!fit, + \c!distance=\emwidth, + \c!location=\v!bottom, % can be something {top,left} + \c!before=\blank, + \c!after=, + \c!inbetween={\blank[\v!medium]}, + %\c!style=, + %\c!color=, + \c!nx=2, % new + \c!ny=1, % new + \c!align=\v!middle] + +\let\setupcombinations\setupcombination % for the moment (we might distinguish) + +\installcorenamespace{combinationlocation} +\installcorenamespace{combinationalternative} + +\appendtoks + \setfalse\c_strc_constructions_define_commands + \normalexpanded + {\definelabel + [\v!combination:\currentcombination]% + [\v!combination\ifx\currentcombinationparent\empty\else:\currentcombinationparent\fi]}% + [\s!counter=\currentcombination,\c!levels=1]% + \settrue\c_strc_constructions_define_commands +\to \everydefinecombination + +\setvalue{\??combinationlocation\v!left }{\let\m_pack_combinations_leftfiller\relax} +\setvalue{\??combinationlocation\v!right }{\let\m_pack_combinations_rightfiller\relax} +\setvalue{\??combinationlocation\v!top }{\let\m_pack_combinations_valigner\depthonlybox} +\setvalue{\??combinationlocation\v!middle}{\let\m_pack_combinations_valigner\halfwaybox} + +\def\pack_combinations_location_reset + {\let\m_pack_combinations_rightfiller\hfil + \let\m_pack_combinations_leftfiller \hfil + \let\m_pack_combinations_valigner \firstofoneargument} + +\pack_combinations_location_reset + +\def\pack_combinations_location_step#1% + {\csname\??combinationlocation#1\endcsname} + +% formally ok: +% +% \protected\def\stopcombination +% {\egroup +% \egroup} +% +% more robust: +% +% \protected\def\stopcombination +% {{}{}{}{}{}{}{}{}% catches (at most 4) missing entries +% \egroup +% \egroup} +% +% even better: +% +% \protected\def\stopcombination +% {\bgroup +% \scratchtoks{{}}% +% \dorecurse\c_pack_combinations_y +% {\toksapp{{}{}}}% +% \expandafter\egroup\the\scratchtoks +% \egroup +% \dostoptagged +% \egroup} +% +% faster + +\protected\def\pack_common_content_start{\bgroup\ignorespaces} +\protected\def\pack_common_content_stop {\removeunwantedspaces\egroup} +\protected\def\pack_common_caption_start{\bgroup\ignorespaces} +\protected\def\pack_common_caption_stop {\removeunwantedspaces\egroup} + +\newtoks\everycombination + +\protected\def\stopcombination + {\bgroup\normalexpanded{\egroup{}\ntimes{{}{}}\c_pack_combinations_y}% brr + \dostoptagged + \egroup + \pack_combinations_pop + \egroup} + +\permanent\tolerant\protected\def\startcombination[#1]#*[#2]% can be simplified + {\bgroup % so we can grab a group + \pack_combinations_push + \edef\currentcombination{#1}% + \edef\currentcombinationspec{#2}% + \ifx\currentcombinationspec\empty + \ifcondition\validassignment{#1}% + \let\currentcombination\empty + \setupcurrentcombination[#1]% + \edef\currentcombinationspec{\combinationparameter\c!nx*\combinationparameter\c!ny*}% + \else + \doifelseinstring{*}\currentcombination + {\edef\currentcombinationspec{\currentcombination*\plusone*}% + \let\currentcombination\empty} + {\doifelsenumber\currentcombination + {\edef\currentcombinationspec{\currentcombination*\plusone*}% + \let\currentcombination\empty} + {\edef\currentcombinationspec{\combinationparameter\c!nx*\combinationparameter\c!ny*}}}% + \fi + \else + \ifcondition\validassignment{#2}% + \setupcurrentcombination[#2]% + \edef\currentcombinationspec{\combinationparameter\c!nx*\combinationparameter\c!ny*}% + \else + \edef\currentcombinationspec{\currentcombinationspec*\plusone*}% + \fi + \fi + % + \forgetall + % + \the\everycombination + % + \let\startcontent\pack_common_content_start + \let\stopcontent \pack_common_content_stop + \let\startcaption\pack_common_caption_start + \let\stopcaption \pack_common_caption_stop + % + \edef\p_height {\combinationparameter\c!height}% + \edef\p_width {\combinationparameter\c!width}% + \edef\p_location{\combinationparameter\c!location}% + \edef\p_distance{\combinationparameter\c!distance}% + % + \pack_combinations_location_reset + \rawprocesscommacommand[\p_location]\pack_combinations_location_step + % + \dostarttaggedchained\t!combination\currentcombination\??combination + \vbox \ifx\p_height\v!fit\else to \p_height \fi \bgroup + \let\combination\empty % permits \combination{}{} handy for cld + \normalexpanded{\pack_combinations_start_indeed[\currentcombinationspec]}} + +\let\pack_combinations_check_x_y\relax + +\protected\def\pack_combinations_start_indeed[#1*#2*#3]% + {\global\c_pack_combinations_x#1\relax + \global\c_pack_combinations_y#2\relax + \setexpandedcombinationparameter\c!nx{\the\c_pack_combinations_x}% in case we access it + \setexpandedcombinationparameter\c!ny{\the\c_pack_combinations_y}% in case we access it + \pack_combinations_check_x_y + \dotagcombination + \global\setbox\b_pack_combinations_captions\emptybox + \global\c_pack_combinations_max\c_pack_combinations_x + \multiply\c_pack_combinations_y\c_pack_combinations_x + \tabskip\zeropoint + \halign \ifx\p_width\v!fit\else to \p_width \fi \bgroup % repetitive preamble + \aligntab + \m_pack_combinations_leftfiller + \alignmark\alignmark + \m_pack_combinations_rightfiller + \aligntab + \tabskip\zeropoint \s!plus 1fill % \fillskip + \alignmark\alignmark + \cr + \pack_combinations_pickup} + +%D I've first considered using a constructor directly but it's more overhead and +%D some settings conflict with already used combination settings so instead we plug +%D in labels. This also permits extensions later on. + +\appendtoks + \edef\p_pack_combinations_alternative{\combinationparameter\c!alternative}% +\to \everydefinecombination + +\def\pack_combinations_pickup + {\dostarttagged\t!combinationpair\empty % better make this text + \dostarttagged\t!combinationcontent\empty + \assumelongusagecs\pack_combinations_pickup_content_indeed} + +\def\pack_combinations_pickup_content_indeed + {\dowithnextboxcs\pack_combinations_pickup_content\hbox} + +\def\pack_combinations_pickup_content % we want to add struts but still ignore an empty box + {\dostoptagged + \setbox\b_pack_combinations_content\box\nextbox + \dostarttagged\t!combinationcaption\empty + \expandnamespacemacro\??combinationalternative\p_pack_combinations_alternative\v!text} + +\setvalue{\??combinationalternative\v!text}% + {\assumelongusagecs\pack_combinations_alternative_text_indeed} + +\setvalue{\??combinationalternative\v!label}% + {\assumelongusagecs\pack_combinations_alternative_label_indeed} + +\def\pack_combinations_alternative_text_indeed + {\dowithnextboxcs\pack_combinations_pickup_caption\vtop\bgroup + \afterassignment\pack_combinations_caption_first + \let\nexttoken=} + +\def\pack_combinations_alternative_label_indeed + {\dowithnextboxcs\pack_combinations_pickup_caption\vtop\bgroup + \hsize\wd\b_pack_combinations_content + \usealignparameter\combinationparameter + \usecombinationstyleandcolor\c!style\c!color + \begstrut + \normalexpanded{\strc_labels_command[\v!combination\ifx\currentcombination\empty\else:\currentcombination\fi]}% + \endstrut + \egroup} + +\appendtoks + \edef\p_pack_combinations_alternative{\combinationparameter\c!alternative}% + \ifx\p_pack_combinations_alternative\v!label + \edef\p_continue{\combinationparameter\c!continue}% + \ifx\p_continue\v!yes \else + \normalexpanded{\strc_labels_reset{\v!combination\ifx\currentcombination\empty\else:\currentcombination\fi}{1}}% + \fi + \fi +\to \everycombination + +\def\pack_combinations_pickup_caption + {\dostoptagged + \dostoptagged + \setbox\b_pack_combinations_caption\box\nextbox + \pack_combinations_pickup_package_pair} + +\def\pack_combinations_caption_first + {\futurelet\nexttoken\pack_combinations_caption_second} + +\def\pack_combinations_caption_second + {\ifx\nexttoken\egroup + % the caption is empty + \orelse\ifx\nexttoken\stopcaption + % the caption is empty (new per 2014-05-24) + \else + % todo: \p_pack_combinations_alternative\v!none: no style, strut etc + \hsize\wd\b_pack_combinations_content + \usealignparameter\combinationparameter + \usecombinationstyleandcolor\c!style\c!color + \bgroup + \aftergroup\endstrut + \aftergroup\egroup + \begstrut + \fi} + +\def\pack_combinations_pickup_package_pair % we need to store the caption row + {\vbox + {\forgetall + \m_pack_combinations_valigner{\box\b_pack_combinations_content}% + % we need to save the caption for a next alignment line + \pack_combinations_save_caption}% + \ifnum\c_pack_combinations_y>\plusone + \global\advance\c_pack_combinations_y\minusone + \global\advance\c_pack_combinations_x\minusone + \ifcase\c_pack_combinations_x + \doubleexpandafter\pack_combinations_pickup_package_pair_a + \else + \doubleexpandafter\pack_combinations_pickup_package_pair_b + \fi + \else + \singleexpandafter\pack_combinations_pickup_package_pair_c + \fi} + +\def\pack_combinations_pickup_package_pair_a + {\cr + \pack_combinations_flush_captions + \noalign + {\forgetall + \global\setbox\b_pack_combinations_captions\emptybox + \nointerlineskip + \combinationparameter\c!after + \combinationparameter\c!before + \vss + \nointerlineskip}% + \global\c_pack_combinations_x\c_pack_combinations_max + \pack_combinations_pickup} + +\def\pack_combinations_pickup_package_pair_b + {\aligntab + \aligntab + \aligntab + \kern\p_distance + \aligntab + \pack_combinations_pickup} + +\def\pack_combinations_pickup_package_pair_c + {\cr + \pack_combinations_flush_captions + \egroup} + +\installcorenamespace{combinationcaption} + +\def\pack_combinations_save_caption + {\ifdim\htdp\b_pack_combinations_caption>\d_pack_combinations_ht + \global\d_pack_combinations_ht\htdp\b_pack_combinations_caption + \fi + \savebox{\??combinationcaption:\number\c_pack_combinations_nesting}{\number\c_pack_combinations_x}{\box\b_pack_combinations_caption}} + +\def\pack_combinations_flush_captions + {\noalign + {\ifdim\d_pack_combinations_ht>\zeropoint + \nointerlineskip % indeed + \combinationparameter\c!inbetween + \global\c_pack_combinations_x\c_pack_combinations_max + \glet\pack_combinations_flush_captions_indeed\pack_combinations_flush_captions_yes + \else + \glet\pack_combinations_flush_captions_indeed\pack_combinations_flush_captions_nop + \fi}% + \pack_combinations_flush_captions_indeed + \crcr} + +\def\pack_combinations_flush_captions_yes + {\vpack to \d_pack_combinations_ht\bgroup + \foundbox{\??combinationcaption:\number\c_pack_combinations_nesting}{\number\c_pack_combinations_x}% + \vss + \egroup + \global\advance\c_pack_combinations_x\minusone + \ifnum\c_pack_combinations_x>\zerocount % \c_pack_combinations_max + \expandafter\pack_combinations_flush_captions_yes_followup + \else + \global\d_pack_combinations_ht\zeropoint + \initializeboxstack{\??combinationcaption:\number-\c_pack_combinations_nesting}% + \fi} + +\let\pack_combinations_flush_captions_nop\donothing + +\def\pack_combinations_flush_captions_yes_followup + {\aligntab + \aligntab + \aligntab + \aligntab + \pack_combinations_flush_captions_indeed} + +%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 + +\protected\def\pack_combinations_float_hack_a#1% + {\strc_floats_build_box_separate_split{#1}% + \box\b_strc_floats_separate_content} + +\protected\def\pack_combinations_float_hack_b#1% + {\box\b_strc_floats_separate_caption} + +\permanent\tolerant\protected\def\startfloatcombination[#1]#*[#2]% + {\ifinsidefloat\else\dontleavehmode\fi % tricky, floatcombinations fail to align well otherwise + \vbox\bgroup + \strc_floats_build_box_separate_set + %\insidecolumnstrue % trick, forces no centering, todo: proper switch/feature + \postcenterfloatmethod\zerocount + \forcelocalfloats + \protected\def\stopfloatcombination{\pack_combinations_stop_float{#1}}} + +\let\stopfloatcombination\relax + +\def\pack_combinations_float_check_x_y + {\ifnum\numexpr\c_pack_combinations_x*\c_pack_combinations_y\relax<\noflocalfloats\relax + \global\c_pack_combinations_x\noflocalfloats + \global\c_pack_combinations_y\plusone + \fi + \let\pack_combinations_check_x_y\relax}% + +\def\pack_combinations_stop_float#1% + {\scratchtoks\emptytoks + \dorecurse\noflocalfloats + {\appendetoks + {\pack_combinations_float_hack_a{\recurselevel}}% + {\pack_combinations_float_hack_b{\recurselevel}}% + \to\scratchtoks}% brrr + \let\pack_combinations_check_x_y\pack_combinations_float_check_x_y + \expanded{\startcombination[#1]\the\scratchtoks}\stopcombination + \resetlocalfloats + \egroup} + +%D \macros +%D {definepairedbox, setuppairedbox, placepairedbox} +%D +%D Paired boxes, formally called legends, but from now on a legend is just an +%D instance, are primarily meant for typesetting some text alongside an +%D illustration. Although there is quite some variation possible, the functionality +%D is kept simple, if only because in most cases such pairs are typeset sober. +%D +%D The location specification accepts a pair, where the first keyword specifies the +%D arrangement, and the second one the alignment. The first key of the location pair +%D is one of \type {left}, \type {right}, \type {top} or \type {bottom}, while the +%D second key can also be \type {middle}. +%D +%D The first box is just collected in an horizontal box, but the second one is a +%D vertical box that gets passed the bodyfont and alignment settings. +%D +%D In many cases the table builders can be used instead, but as this mechanism is a +%D traditional \CONTEXT\ one we keep it around. + +%D \macros +%D {setuplegend, placelegend} +%D +%D It makes sense to typeset a legend to a figure in \TEX\ and not in a drawing +%D package. The macro \type {\placelegend} combines a figure (or something else) and +%D its legend. This command is just a paired box. +%D +%D The legend is placed according to \type {location}, being \type {bottom} or \type +%D {right}. The macro macro is used as follows. +%D +%D \starttyping +%D \placefigure +%D {whow} +%D {\placelegend +%D {\externalfigure[cow]} +%D {\starttabulate +%D \NC 1 \NC head \NC \NR +%D \NC 2 \NC legs \NC \NR +%D \NC 3 \NC tail \NC \NR +%D \stoptabulate}} +%D +%D \placefigure +%D {whow} +%D {\placelegend +%D {\externalfigure[cow]} +%D {\starttabulate[|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 \stoptabulate}} +%D +%D \placefigure +%D {whow} +%D {\placelegend[n=2] +%D {\externalfigure[cow]} +%D {\starttabulate +%D \NC 1 \NC head \NC \NR +%D \NC 2 \NC legs \NC \NR +%D \NC 3 \NC tail \NC \NR +%D \stoptabulate}} +%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 +%D \def\MytTestTwo#1#2% +%D {\placefigure +%D {whow} +%D {\placelegend[location={#1,#2}] +%D {\externalfigure[cow]} +%D {\starttabulate +%D \NC 1 \NC head \NC \NR +%D \NC 2 \NC legs \NC \NR +%D \NC 3 \NC tail \NC \NR +%D \stoptabulate}}} +%D +%D \def\MytTestOne#1{\processcommalist[left,right,top,bottom]{\MytTestTwo{#1}}} +%D +%D \processcommalist[left,right,top,bottom,middle]\MytTestOne +%D \stoptyping +%D +%D More structure is also possible (the order matters!): +%D +%D \starttyping +%D \startplacefigure[title=whow] +%D \startplacelegend[location={bottom,middle},color=red] +%D \startcontent +%D \externalfigure[cow] +%D \stopcontent +%D \startcaption +%D \starttabulate[|l|l|] +%D \NC 1 \NC head \NC \NR +%D \NC 2 \NC legs \NC \NR +%D \NC 3 \NC tail \NC \NR +%D \stoptabulate +%D \stopcaption +%D \stopplacelegend +%D \stopplacefigure +%D \stoptyping + +% todo: natural size + +\newsystemmode{pairedbox} + +\appendtoks + \globalresetsystemmode{pairedbox}% +\to \everyinsidefloat + +\installcorenamespace {pairedbox} + +\installcommandhandler \??pairedbox {pairedbox} \??pairedbox + +\setuppairedbox + [\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] + +% watch the hsize/vsize tricks + +\newbox \b_pack_pairedboxes_first +\newbox \b_pack_pairedboxes_second +\newdimen\s_pack_pairedboxes_size + +\appendtoks + \setuevalue{\e!setup\currentpairedbox\e!endsetup}{\setuppairedbox [\currentpairedbox]}% + \setuevalue{\e!place\currentpairedbox }{\placepairedbox [\currentpairedbox]}% one argument is mandate anyway + \setuevalue{\e!start\e!place\currentpairedbox }{\startplacepairedbox[\currentpairedbox]}% one argument is mandate anyway + \setuevalue{\e!stop\e!place \currentpairedbox }{\stopplacepairedbox }% +\to \everydefinepairedbox + +\permanent\tolerant\protected\def\startplacepairedbox[#1]#*[#2]% + {\bgroup + \edef\currentpairedbox{#1}% + \setupcurrentpairedbox[#2]% + \pairedboxparameter\c!before + \bgroup + \edef\p_location{\pairedboxparameter\c!location}% + \edef\p_n {\pairedboxparameter\c!n}% + % + \let\startcontent\pack_common_content_start + \let\stopcontent \pack_common_content_stop + \let\startcaption\pack_common_caption_start + \let\stopcaption \pack_common_caption_stop + % + \globalsetsystemmode{pairedbox}% + \pack_pairedboxes_before + \assumelongusagecs\pack_pairedboxes_first_pickup} + +\permanent\protected\def\stopplacepairedbox{} % we just pick up two boxes + +\let\placepairedbox\startplacepairedbox % we just pick up two boxes + +\def\pack_pairedboxes_first_pickup + {\dowithnextboxcs\pack_pairedboxes_first\hbox + \bgroup + \let\next=} + +\def\pack_pairedboxes_first + {\pack_pairedboxes_between + \assumelongusagecs\pack_pairedboxes_second_pickup} + +\def\pack_pairedboxes_second_pickup + {\dowithnextboxcs\pack_pairedboxes_second\vbox + \bgroup + \pack_pairedboxes_inside_second + \let\next=} + +\def\pack_pairedboxes_second + {\pack_pairedboxes_after + \egroup + \pairedboxparameter\c!after + \egroup} + +\newconditional\c_pack_pairedboxes_horizontal \settrue\c_pack_pairedboxes_horizontal + +\installcorenamespace{pairedboxnature} +\installcorenamespace{pairedboxalign} + +\let\pack_pairedboxes_fill_top \relax +\let\pack_pairedboxes_fill_bottom\relax + +\setvalue{\??pairedboxnature\v!left}% + {\settrue\c_pack_pairedboxes_horizontal + \let\pack_pairedboxes_flush\pack_pairedboxes_flush_left} + +\setvalue{\??pairedboxnature\v!right}% + {\settrue\c_pack_pairedboxes_horizontal + \let\pack_pairedboxes_flush\pack_pairedboxes_flush_right} + +\setvalue{\??pairedboxnature\v!top}% + {\setfalse\c_pack_pairedboxes_horizontal + \let\pack_pairedboxes_fill_top\relax + \let\pack_pairedboxes_fill_bottom\vss + \let\pack_pairedboxes_flush\pack_pairedboxes_flush_top} + +\setvalue{\??pairedboxnature\v!bottom}% + {\setfalse\c_pack_pairedboxes_horizontal + \let\pack_pairedboxes_fill_top\vss + \let\pack_pairedboxes_fill_bottom\relax + \let\pack_pairedboxes_flush\pack_pairedboxes_flush_bottom} + +\def\pack_pairedboxes_flush_left + {\box\b_pack_pairedboxes_second + \kern\pairedboxparameter\c!distance + \box\b_pack_pairedboxes_first} + +\def\pack_pairedboxes_flush_right + {\box\b_pack_pairedboxes_first + \kern\pairedboxparameter\c!distance + \box\b_pack_pairedboxes_second} + +\def\pack_pairedboxes_flush_top + {\box\b_pack_pairedboxes_second + \endgraf + \nointerlineskip + \pairedboxparameter\c!inbetween + \box\b_pack_pairedboxes_first} + +\def\pack_pairedboxes_flush_bottom + {\box\b_pack_pairedboxes_first + \endgraf + \nointerlineskip + \pairedboxparameter\c!inbetween + \box\b_pack_pairedboxes_second} + +\setvalue{\??pairedboxalign\v!left}% 0 + {\let\pack_pairedboxes_align_l\relax + \let\pack_pairedboxes_align_r\hss + \let\pack_pairedboxes_align_t\relax + \let\pack_pairedboxes_align_b\relax} + +\setvalue{\??pairedboxalign\v!right}% 1 + {\let\pack_pairedboxes_align_l\hss + \let\pack_pairedboxes_align_r\relax + \let\pack_pairedboxes_align_t\relax + \let\pack_pairedboxes_align_b\relax} + +\setvalue{\??pairedboxalign\v!high}% 2 + {\let\pack_pairedboxes_align_l\relax + \let\pack_pairedboxes_align_r\relax + \let\pack_pairedboxes_align_t\relax + \let\pack_pairedboxes_align_b\vss} + +\setvalue{\??pairedboxalign\v!low}% 3 + {\let\pack_pairedboxes_align_l\relax + \let\pack_pairedboxes_align_r\relax + \let\pack_pairedboxes_align_t\vss + \let\pack_pairedboxes_align_b\relax} + +\setvalue{\??pairedboxalign\v!middle}% 4 + {\let\pack_pairedboxes_align_l\hss + \let\pack_pairedboxes_align_r\hss + \let\pack_pairedboxes_align_t\vss + \let\pack_pairedboxes_align_b\vss} + +\setvalue{\??pairedboxalign\v!bottom}{\getvalue{\??pairedboxalign\v!low }} +\setvalue{\??pairedboxalign \v!top}{\getvalue{\??pairedboxalign\v!high}} + +\def\pack_pairedbox_valign#1{\setbox#1\vpack to \s_pack_pairedboxes_size{\pack_pairedboxes_align_t\box#1\pack_pairedboxes_align_b}} +\def\pack_pairedbox_halign#1{\setbox#1\hpack to \s_pack_pairedboxes_size{\pack_pairedboxes_align_l\box#1\pack_pairedboxes_align_r}} + +\def\pack_pairedboxes_before + {\ifx\p_location\empty + \csname\??pairedboxnature\v!left \endcsname + \csname\??pairedboxalign \v!middle\endcsname + \else + \getfromcommacommand[\p_location][1]% + \csname\??pairedboxnature + \ifcsname\??pairedboxnature\commalistelement\endcsname\commalistelement\else\v!left\fi + \endcsname + \getfromcommacommand[\p_location][2]% + \csname\??pairedboxalign + \ifcsname\??pairedboxalign\commalistelement\endcsname\commalistelement\else\v!middle\fi + \endcsname + \fi} + +\def\pack_pairedboxes_between + {\usebodyfontparameter\pairedboxparameter + \setbox\b_pack_pairedboxes_first\box\nextbox + \ifconditional\c_pack_pairedboxes_horizontal + \pack_pairedboxes_between_horizontal + \else + \pack_pairedboxes_between_vertical + \fi + \ifnum\p_n>\plusone + \setrigidcolumnhsize\hsize{\pairedboxparameter\c!distance}\p_n + \fi} + +\def\pack_pairedboxes_between_horizontal + {\scratchdistance\pairedboxparameter\c!distance + \scratchwidth\pairedboxparameter\c!maxwidth\relax + \setlocalhsize + \hsize\dimexpr\availablehsize-\wd\b_pack_pairedboxes_first-\scratchdistance\relax + \hsize\pairedboxparameter\c!width\relax % can be \hsize + \scratchdimen\dimexpr\wd\b_pack_pairedboxes_first+\scratchdistance\relax + \ifdim\dimexpr\hsize+\scratchdimen\relax>\scratchwidth + \hsize\dimexpr\scratchwidth-\scratchdimen\relax + \fi} + +\def\pack_pairedboxes_between_vertical + {\scratchwidth\pairedboxparameter\c!maxwidth\relax + \hsize\wd\b_pack_pairedboxes_first + \hsize\pairedboxparameter\c!width\relax % can be \hsize + \ifdim\hsize>\scratchwidth\relax + \hsize\scratchwidth + \fi} + +\def\pack_pairedboxes_after + {\setbox\b_pack_pairedboxes_second\vpack + {\ifnum\p_n>\plusone + \rigidcolumnbalance\nextbox + \else + \box\nextbox + \fi}% + \ifconditional\c_pack_pairedboxes_horizontal + \pack_pairedboxes_pack_horizontal + \else + \pack_pairedboxes_pack_vertical + \fi} + +\def\pack_pairedboxes_pack_horizontal + {\dontleavehmode\hbox\bgroup + \forgetall + \s_pack_pairedboxes_size\ht + \ifdim\ht\b_pack_pairedboxes_first>\ht\b_pack_pairedboxes_second + \b_pack_pairedboxes_first + \else + \b_pack_pairedboxes_second + \fi + \vsize\s_pack_pairedboxes_size + \ifdim\s_pack_pairedboxes_size<\pairedboxparameter\c!height\relax % can be \vsize + \s_pack_pairedboxes_size\pairedboxparameter\c!height + \fi + \ifdim\s_pack_pairedboxes_size>\pairedboxparameter\c!maxheight\relax + \s_pack_pairedboxes_size\pairedboxparameter\c!maxheight + \fi + \pack_pairedbox_valign\b_pack_pairedboxes_first + \pack_pairedbox_valign\b_pack_pairedboxes_second + \pack_pairedboxes_flush + \egroup} + +\def\pack_pairedboxes_pack_vertical + {\dontleavehmode\vpack\bgroup + \forgetall + \s_pack_pairedboxes_size\wd + \ifdim\wd\b_pack_pairedboxes_first>\wd\b_pack_pairedboxes_second + \b_pack_pairedboxes_first + \else + \b_pack_pairedboxes_second + \fi + \pack_pairedbox_halign\b_pack_pairedboxes_first + \pack_pairedbox_halign\b_pack_pairedboxes_second + \s_pack_pairedboxes_size\ht\b_pack_pairedboxes_second + \vsize\s_pack_pairedboxes_size + \ifdim\ht\b_pack_pairedboxes_second<\pairedboxparameter\c!height\relax % can be \vsize + \s_pack_pairedboxes_size\pairedboxparameter\c!height\relax % \relax needed + \fi + \ifdim\s_pack_pairedboxes_size>\pairedboxparameter\c!maxheight\relax % todo: totale hoogte + \s_pack_pairedboxes_size\pairedboxparameter\c!maxheight\relax % \relax needed + \fi + \ifdim\s_pack_pairedboxes_size>\ht\b_pack_pairedboxes_second + \setbox\b_pack_pairedboxes_second\vpack to \s_pack_pairedboxes_size + {\pack_pairedboxes_fill_top + \box\b_pack_pairedboxes_second + \pack_pairedboxes_fill_bottom}% \kern\zeropoint + \fi + \pack_pairedboxes_flush + \egroup} + +\def\pack_pairedboxes_inside_second + {\forgetall + \setupalign[\pairedboxparameter\c!align]% + \usepairedboxstyleandcolor\c!style\c!color + \tolerantTABLEbreaktrue % hm. + \blank[\v!disable]% use fast one + \everypar{\begstrut}} % also flushers here (see bTABLE) + +\definepairedbox[\v!legend] + +\permanent\protected\def\placeontopofeachother{\bgroup\dowithnextboxcs\pack_topofeachother_one\hbox} +\permanent\protected\def\placesidebyside {\bgroup\dowithnextboxcs\pack_sidebyside_one \hbox} + +\def\pack_topofeachother_one{\bgroup\setbox\scratchboxone\box\nextbox\dowithnextboxcs\pack_topofeachother_two\hbox} +\def\pack_sidebyside_one {\bgroup\setbox\scratchboxone\box\nextbox\dowithnextboxcs\pack_sidebyside_two \hbox} + +\def\pack_topofeachother_two{\setbox\scratchboxtwo\box\nextbox + \halign{\hss\alignmark\alignmark\hss\cr\box\scratchboxone\cr\box\scratchboxtwo\cr}% + \egroup\egroup} +\def\pack_sidebyside_two {\setbox\scratchboxtwo\box\nextbox + \valign{\vss\alignmark\alignmark\vss\cr\box\scratchboxone\cr\box\scratchboxtwo\cr}% + \egroup\egroup} + +\protect \endinput diff --git a/tex/context/base/mkiv/pack-lyr.mkxl b/tex/context/base/mkiv/pack-lyr.mkxl index 419c9f279..366eeff75 100644 --- a/tex/context/base/mkiv/pack-lyr.mkxl +++ b/tex/context/base/mkiv/pack-lyr.mkxl @@ -32,11 +32,10 @@ \ifdefined\defineoverlay \else \message{loaded to early} \wait \fi -\unexpanded\def\defineoverlay - {\dotripleempty\pack_framed_define_overlay} +\pushoverloadmode -\def\pack_framed_define_overlay[#1][#2][#3]% overlay [layer] content - {\ifthirdargument +\permanent\overloaded\tolerant\protected\def\defineoverlay[#1]#*[#2]#*[#3]% overlay [layer] content + {\ifnum\lastarguments=\plusthree %\writestatus{BEWARE}{This (overlay definition) has changed!}% temp \def\pack_framed_define_overlay_indeed##1{\setvalue{\??overlay##1}{\setlayer[#2]{\executedefinedoverlay{##1}{#3}}}}% \else @@ -44,6 +43,8 @@ \fi \processcommalist[#1]\pack_framed_define_overlay_indeed} +\popoverloadmode + %D We use the command handler code. The previous, more direct parameter handling was %D 25\% faster when no parameters were passed when adding content to a layer. %D However, when we pass for instance a preset, the new methos is some 10\% faster @@ -130,7 +131,7 @@ \newconditional\c_pack_layers_trace \newcount \c_pack_layers_current_data -\newbox\b_layers +\newbox\b_layers \pushoverloadmode \mutable\let\b_layers\b_layers \popoverloadmode \newdimen\d_pack_layers_x_size \newdimen\d_pack_layers_y_size @@ -178,7 +179,7 @@ \global\setbox\lastnamedcs\emptybox \fi} -\def\resetlayer[#1]% +\permanent\protected\def\resetlayer[#1]% {\pack_layers_reset_box{#1}% \pack_layers_reset_box{\v!left #1}% \pack_layers_reset_box{\v!right#1}% @@ -195,37 +196,33 @@ %D \setlayer [identifier] [optional parameters] {data} %D \stoptyping -\def\setcurrentlayerdimensions - {\dodoubleempty\pack_layers_set_current_dimensions} - -\def\pack_layers_set_current_dimensions[#1][#2]% name left|right +\permanent\tolerant\protected\def\setcurrentlayerdimensions[#1]#*[#2]% name left|right {\edef\currentlayerwidth {\thelayerwidth {#2#1}}% \edef\currentlayerheight{\thelayerheight{#2#1}}} -\def\thelayerwidth #1{\the\ifcsname\??layerbox#1\endcsname\wd\lastnamedcs\else\zeropoint\fi} -\def\thelayerheight#1{\the\ifcsname\??layerbox#1\endcsname\ht\lastnamedcs\else\zeropoint\fi} +\permanent\def\thelayerwidth #1{\the\ifcsname\??layerbox#1\endcsname\wd\lastnamedcs\else\zeropoint\fi} +\permanent\def\thelayerheight#1{\the\ifcsname\??layerbox#1\endcsname\ht\lastnamedcs\else\zeropoint\fi} -\unexpanded\def\setlayer - {\dotripleempty\pack_layers_set} - -\def\pack_layers_set[#1][#2][#3]% #4 == box do \fi is ok +\permanent\tolerant\protected\def\setlayer[#1]#*[#2]#*[#3]% #4 == box do \fi is ok {\bgroup + \nofarguments\lastarguments \checkpositionoverlays % otherwise funny regions \edef\currentlayer{#1}% \edef\p_pack_layers_state{\layerparameter\c!state}% \ifx\p_pack_layers_state\v!stop \dowithnextboxcs\egroup\hbox % no pack ? - \orelse\ifthirdargument - \pack_layers_set_indeed[#1][#2][#3]% + \orelse\ifnum\nofarguments=\plusthree + \edef\m_pack_layers_target{#2}% + \pack_layers_set_indeed{#3}% + \orelse\ifhastok={#2}% + \let\m_pack_layers_target\empty + \pack_layers_set_indeed{#2}% \else - \ifcondition\validassignment{#2}% - \pack_layers_set_indeed[#1][][#2]% - \else - \pack_layers_set_indeed[#1][#2][]% - \fi + \edef\m_pack_layers_target{#2}% + \pack_layers_set_indeed\empty \fi} -\def\pack_layers_set_indeed[#1][#2][#3]% #2 = links/rechts +\def\pack_layers_set_indeed#1% {\page_backgrounds_recalculate % brrr \global\advance\c_pack_layers_current_data\plusone \forgetall @@ -235,8 +232,7 @@ \settrue\c_pack_layers_trace \traceboxplacementtrue \fi - \edef\m_pack_layers_target{#2}% - \dowithnextbox{\pack_layers_set_finish{#3}}\hbox} + \dowithnextbox{\pack_layers_set_finish{#1}}\hbox} \def\pack_layers_set_finish#1% {\ifcsname\??layerbox\currentlayer\endcsname % can move up @@ -295,13 +291,15 @@ \doifinset\v!middle\p_pack_layers_corner\pack_layers_set_middle_positions \edef\m_pack_layers_page{\layerparameter\c!page}} -\unexpanded\def\definelayerpreset - {\dodoubleargument\pack_layers_define_preset} - -\def\pack_layers_define_preset[#1][#2]% - {\doifelseassignment{#2} - {\setvalue{\??layerpreset#1}{\setupcurrentlayer[#2]}} - {\setvalue{\??layerpreset#1}{\csname\??layerpreset#2\endcsname}}} +\permanent\tolerant\protected\def\definelayerpreset[#1]#*[#2]% + {\ifarguments + \or + \letvalue{\??layerpreset#1}\empty + \orelse\ifhastok={#2}% + \setvalue{\??layerpreset#1}{\setupcurrentlayer[#2]}% + \else + \setvalue{\??layerpreset#1}{\csname\??layerpreset#2\endcsname}% + \fi} \def\pack_layers_set_content#1% {\layerwidth \layerparameter\c!width % global (local later) @@ -477,7 +475,7 @@ %D \macros %D {doifelselayerdata} -\def\doifelselayerdata#1% +\permanent\def\doifelselayerdata#1% {\ifcsname\??layerbox#1\endcsname %\ifvoid\csname\??layerbox#1\endcsname \ifvoid\lastnamedcs @@ -500,7 +498,7 @@ % todo: setups before flush, handy hook -\unexpanded\def\flushlayer[#1]% quite core, so optimized (todo: check for void) +\permanent\protected\def\flushlayer[#1]% quite core, so optimized (todo: check for void) {\begingroup \forgetall \edef\currentlayer{#1}% @@ -529,21 +527,7 @@ \fi \endgroup} -% \def\pack_layers_flush_single -% {\startoverlay -% {\ifcsname\??layerbox \currentlayer \endcsname\pack_layers_flush_indeed\plusone \currentlayer \fi}% -% {\ifcsname\??layerbox \currentlayer:\the\realpageno\endcsname\pack_layers_flush_indeed\zerocount{\currentlayer:\the\realpageno}\fi}% -% \stopoverlay} -% -% \def\pack_layers_flush_double#1% -% {\startoverlay -% {\ifcsname\??layerbox \currentlayer \endcsname\pack_layers_flush_indeed\plusone \currentlayer \fi}% -% {\ifcsname\??layerbox \currentlayer:\the\realpageno\endcsname\pack_layers_flush_indeed\zerocount {\currentlayer:\the\realpageno}\fi}% -% {\ifcsname\??layerbox#1\currentlayer \endcsname\pack_layers_flush_indeed\plusone {#1\currentlayer }\fi}% -% {\ifcsname\??layerbox#1\currentlayer:\the\realpageno\endcsname\pack_layers_flush_indeed\zerocount{#1\currentlayer:\the\realpageno}\fi}% -% \stopoverlay} - -% optimized: +% optimized \def\pack_layers_flush_single {\ifcsname\??layerbox\currentlayer\endcsname @@ -606,7 +590,6 @@ \let\pack_layers_top_fill \relax \let\pack_layers_bottom_fill\vss -%def\pack_layers_flush_indeed#1#2% \def\pack_layers_flush_indeed#1#2#3% {\begingroup % already grouped \offinterlineskip @@ -705,9 +688,9 @@ %D This is a handy shortcut, which saves a couple of braces when we use it as %D parameter. This name also suits better to other layering commands. -\unexpanded\def\composedlayer#1{\flushlayer[#1]} +\permanent\protected\def\composedlayer#1{\flushlayer[#1]} -\unexpanded\def\tightlayer[#1]% +\permanent\protected\def\tightlayer[#1]% {\hpack {\def\currentlayer{#1}% todo: left/right \setbox\nextbox\emptybox @@ -747,21 +730,15 @@ %D {\useMPgraphic{oeps}} %D \stoptyping -\unexpanded\def\setMPlayer - {\dotripleempty\pack_layers_set_MP} - \def\MPlayerwidth {\hsize} \def\MPlayerheight{\vsize} -\def\pack_layers_set_MP[#1][#2][#3]% +\permanent\tolerant\protected\def\setMPlayer[#1]#*[#2]#*[#3]% {\edef\MPlayerwidth {\MPw{#2}}% \edef\MPlayerheight{\MPh{#2}}% \setlayer[#1][\c!x=\MPx{#2},\c!y=\MPy{#2},\c!position=\v!no,#3]} -\unexpanded\def\getMPlayer - {\dodoubleempty\pack_layers_get_MP} - -\def\pack_layers_get_MP[#1][#2]% +\permanent\tolerant\protected\def\getMPlayer[#1]#*[#2]% {\framed[\c!background={\v!foreground,#1},\c!frame=\v!off,\c!offset=\v!overlay,#2]} % takes argument %D Watch out, a redefinition: @@ -778,9 +755,11 @@ [\c!width=\innermakeupwidth, \c!height=\textheight] -\let\normalsettextpagecontent\settextpagecontent % will be overloaded in page-spr +\aliased\let\normalsettextpagecontent\settextpagecontent % will be overloaded in page-spr + +\overloaded\aliased\let\normalsettextpagecontent\settextpagecontent % will be overloaded in page-spr -\unexpanded\def\settextpagecontent#1#2#3% #2 and #3 will disappear +\permanent\overloaded\protected\def\settextpagecontent#1#2#3% #2 and #3 will disappear {\doifelselayerdata{OTRTEXT} {\setbox#1\hpack to \makeupwidth {\startoverlay diff --git a/tex/context/base/mkiv/pack-mrl.mkxl b/tex/context/base/mkiv/pack-mrl.mkxl index 7b09b2406..fd4153a6b 100644 --- a/tex/context/base/mkiv/pack-mrl.mkxl +++ b/tex/context/base/mkiv/pack-mrl.mkxl @@ -38,7 +38,7 @@ \installsimplecommandhandler \??blackrules {blackrules} \??blackrules -\unexpanded\def\blackrule +\permanent\protected\def\blackrule {\hpack\bgroup \doifelsenextoptionalcs\pack_black_rule_pickup\pack_black_rule_indeed} @@ -98,16 +98,10 @@ %D We could of course have implemented this macro using \type {\leaders}, but this %D would probably have taken more tokens. -\unexpanded\def\blackrules % probably never used +\permanent\tolerant\protected\def\blackrules[#1]% probably never used {\hpack\bgroup - \doifelsenextoptionalcs\pack_black_rules_pickup\pack_black_rules_indeed} - -\def\pack_black_rules_pickup[#1]% - {\setupcurrentblackrules[#1]% - \pack_black_rules_indeed} - -\def\pack_black_rules_indeed % no max handling here - {\scratchwidth \directblackrulesparameter\c!width + \ifarguments\or\setupcurrentblackrules[#1]\fi + \scratchwidth \directblackrulesparameter\c!width \scratchheight \directblackrulesparameter\c!height \scratchdepth \directblackrulesparameter\c!depth \scratchdistance\directblackrulesparameter\c!distance @@ -171,7 +165,7 @@ %D \showsetup{vl} %D \showsetup{hl} -\unexpanded\def\pack_rule_vl_indeed#1#2#3% +\protected\def\pack_rule_vl_indeed#1#2#3% {\dontleavehmode \begingroup \setbox\scratchbox\hbox @@ -184,10 +178,10 @@ \box\scratchbox \endgroup} -\def\pack_rule_vl[#1]% +\permanent\tolerant\protected\def\vl[#1]% {\pack_rule_vl_indeed{#1}{#1}{#1}} -\def\pack_rule_hl[#1]% +\permanent\tolerant\protected\def\hl[#1]% {\dontleavehmode \hbox {\vrule @@ -195,9 +189,6 @@ \s!height\linewidth \s!depth \zeropoint}} -\unexpanded\def\vl{\dosingleempty\pack_rule_vl} -\unexpanded\def\hl{\dosingleempty\pack_rule_hl} - \let\dovlwdhtdp\pack_rule_vl_indeed % used elsewhere %D \macros @@ -273,7 +264,7 @@ \newconstant\c_pack_thinrules_type -\unexpanded\def\thinrule +\permanent\protected\def\thinrule {\strut \bgroup \edef\p_height {\directthinrulesparameter\c!height}% @@ -362,15 +353,12 @@ \strut \carryoverpar\egroup} -\unexpanded\def\hairline +\permanent\protected\def\hairline % can be overloaded {\endgraf \thinrule \endgraf} -\unexpanded\def\thinrules - {\dosingleempty\pack_thinrules} - -\def\pack_thinrules[#1]% +\permanent\tolerant\protected\def\thinrules[#1]% {\bgroup \setupcurrentthinrules[#1]% \scratchcounter\directthinrulesparameter\c!n\relax @@ -533,7 +521,9 @@ \c!rulethickness=\linewidth, \c!distance=.5\emwidth] -\unexpanded\def\textrule +% can be done nicer with futureexpandis + +\permanent\protected\def\textrule {\dosingleempty\pack_textrule} \def\pack_textrule @@ -679,14 +669,14 @@ %D The grouped commands also supports bodyfont switching: -\unexpanded\def\starttextrule#1% +\permanent\protected\def\starttextrule#1% {\bgroup \def\pack_textrule_nop_indeed{\csname\??textrulealternatives\v!middle\endcsname}% \csname\??textrulealternatives\v!top\endcsname{#1}% \bgroup \usebodyfontparameter\directtextrulesparameter} -\unexpanded\def\stoptextrule +\permanent\protected\def\stoptextrule {\par \egroup \csname\??textrulealternatives\v!bottom\endcsname\empty @@ -713,7 +703,6 @@ %D \showsetup{fillinrules} %D \showsetup{setupfillinrules} - \installcorenamespace{fillinrules} \installdirectcommandhandler \??fillinrules {fillinrules} @@ -729,28 +718,20 @@ \c!style=, \c!color=] -\unexpanded\def\fillinrules - {\dosingleempty\pack_fillinrules} - -\def\pack_fillinrules[#1]% +\permanent\tolerant\protected\def\fillinrules[#1]#:#=#*#=% {\endgraf \begingroup \setupcurrentfillinrules[#1]% \let\pack_fillinrules_rule\thinrules - \dodoublegroupempty\pack_fillinrules_indeed} - -\def\pack_fillinrules_indeed#1#2% - {\directfillinrulesparameter\c!before + \directfillinrulesparameter\c!before \setupcurrentthinrules [\c!n=\directfillinrulesparameter\c!n, \c!interlinespace=\directfillinrulesparameter\c!interlinespace, \c!before=, \c!after=]% \scratchdistance\directfillinrulesparameter\c!distance\relax - \edef\m_fillinrules_one{#1}% - \edef\m_fillinrules_two{#2}% \noindent - \ifx\m_fillinrules_one\empty \else + \iftok{#2}\emptytoks\else \edef\p_width{\directfillinrulesparameter\c!width}% \ifx\p_width\v!fit \scratchdistance\zeropoint @@ -763,7 +744,7 @@ \bgroup \usefillinrulesstyleandcolor\c!style\c!color \strut - \m_fillinrules_one + #2% \hfill\directfillinrulesparameter\c!separator \hskip\scratchdistance \egroup @@ -771,10 +752,10 @@ \setupwhitespace[\v!big]% \ignorespaces \pack_fillinrules_rule - \ifx\m_fillinrules_two\empty \else + \iftok{#3}\emptytoks\else \kern\scratchdistance \usefillinrulesstyleandcolor\c!style\c!color - \m_fillinrules_two + #3% \strut \fi \endgraf @@ -789,18 +770,12 @@ %D %D \showsetup{fillintext} -\unexpanded\def\fillintext - {\dosingleempty\pack_fillintext} - -\def\pack_fillintext[#1]% ugly +\permanent\tolerant\protected\def\fillintext[#1]#:#=#*#=% {\endgraf \begingroup \setupcurrentfillinrules[#1]% - \dodoublegroupempty\pack_fillintext_indeed} - -\def\pack_fillintext_indeed#1#2% - {\def\pack_fillinrules_rule{\unhbox\nextbox\unskip}% - \dowithnextbox{\pack_fillinrules_indeed{#1}{\hfill#2}}% + \def\pack_fillinrules_rule{\unhbox\nextbox\unskip}% + \dowithnextbox{\pack_fillinrules_indeed{#2}{\hfill#3}}% \hbox\bgroup\let\par\egroup\ignorespaces} %D \macros @@ -842,10 +817,10 @@ \c!before=\blank, \c!after=\blank] -\unexpanded\def\pack_fillinline_before#1% +\protected\def\pack_fillinline_before#1% {} -\unexpanded\def\pack_fillinline_after#1% +\protected\def\pack_fillinline_after#1% {\begingroup \setupcurrentfillinlines[#1]% \ifhmode\unskip\hfill\fi @@ -865,10 +840,7 @@ \frozen\parfillskip\zeropoint\relax \endgroup} -\unexpanded\def\fillinline - {\dosingleempty\pack_fillinline} - -\def\pack_fillinline[#1]% +\permanent\tolerant\protected\def\fillinline[#1]% {\registerparwrapper {fillinline}% {\pack_fillinline_before{#1}}% diff --git a/tex/context/base/mkiv/pack-ori.mkxl b/tex/context/base/mkiv/pack-ori.mkxl index 2091adea4..4365db3ac 100644 --- a/tex/context/base/mkiv/pack-ori.mkxl +++ b/tex/context/base/mkiv/pack-ori.mkxl @@ -54,7 +54,7 @@ %D There will be some more helpers here. -\def\theorientation#1% +\permanent\def\theorientation#1% {\numexpr \ifcsname\??orientations#1\endcsname \lastnamedcs @@ -63,7 +63,7 @@ \fi \relax} -\def\autoorientation#1% +\permanent\def\autoorientation#1% {\numexpr \ifcsname\??orientations#1\endcsname \lastnamedcs @@ -85,7 +85,7 @@ %{\localcontrolled{\global\expandafter\chardef\csname\??orientations#1\endcsname\stringtoorientation{#1}}% % a bit slower \csname\??orientations#1\endcsname} -\unexpanded\def\doifelseorientation#1% +\permanent\protected\def\doifelseorientation#1% {\ifcsname\??orientations#1\endcsname \expandafter\firstoftwoarguments \else diff --git a/tex/context/base/mkiv/pack-rul.mkiv b/tex/context/base/mkiv/pack-rul.mkiv index 393668c60..e06949ed8 100644 --- a/tex/context/base/mkiv/pack-rul.mkiv +++ b/tex/context/base/mkiv/pack-rul.mkiv @@ -2693,7 +2693,7 @@ % \edef\p_framed_text_strut{\letframedtextparameter\c!strut}% to be used \letframedtextparameter\c!strut\v!no \inheritedframedtextframed\bgroup - \let\\=\endgraf + \let\\\endgraf \edef\p_framed_text_depthcorrection{\framedtextparameter\c!depthcorrection}% \ifx\p_framed_text_depthcorrection\v!on \pack_framed_text_start_depth_correction @@ -2814,7 +2814,7 @@ \letframedtextparameter\c!strut\v!no \inheritedframedtextframed\bgroup \blank[\v!disable]% - \let\\=\endgraf + \let\\\endgraf \useframedtextstyleandcolor\c!style\c!color \vskip-\strutdp % brrr why is this needed ... needs to be sorted out, see testcase 1 \framedtextparameter\c!inner @@ -3007,8 +3007,6 @@ %D A Goodie: -\def\v!unframed{unframed} - \defineframed [\v!unframed] [\c!frame=\v!off, diff --git a/tex/context/base/mkiv/pack-rul.mkxl b/tex/context/base/mkiv/pack-rul.mkxl index 69050d1fa..07aae0c92 100644 --- a/tex/context/base/mkiv/pack-rul.mkxl +++ b/tex/context/base/mkiv/pack-rul.mkxl @@ -37,10 +37,7 @@ \newdimen\linewidth -\unexpanded\def\setuplinewidth - {\dosingleargument\pack_framed_setup_line_width} - -\def\pack_framed_setup_line_width[#1]% +\permanent\tolerant\protected\def\setuplinewidth[#1]% {\assigndimension{#1}\linewidth{.2\points}{.4\points}{.6\points}} %D The parameter handler: @@ -61,9 +58,9 @@ \let\pack_framed_setupcurrentframed \setupcurrentframed \def\pack_framed_initialize - {\let\framedparameter \pack_framed_framedparameter - \let\framedparameterhash\pack_framed_framedparameterhash - \let\setupcurrentframed \pack_framed_setupcurrentframed + {\enforced\let\framedparameter \pack_framed_framedparameter + \enforced\let\framedparameterhash\pack_framed_framedparameterhash + \enforced\let\setupcurrentframed \pack_framed_setupcurrentframed \inframedtrue} %D A helper: @@ -72,7 +69,7 @@ %D Inheritance: -\def\installinheritedframed#1% +\permanent\protected\def\installinheritedframed#1% {\normalexpanded{\doinstallinheritedframed \expandafter\noexpand\csname current#1\endcsname \expandafter\noexpand\csname #1parameter\endcsname @@ -84,37 +81,36 @@ \expandafter\noexpand\csname inherited#1framed\endcsname \expandafter\noexpand\csname inherited#1framedbox\endcsname}} % new -\unexpanded\def\doinstallinheritedframed#1#2#3#4#5#6#7#8#9% - {\def#5##1##2{\ifx##1\relax#6{##2}\else#4{##1}{##2}\fi}% - %\def#6##1{\ifcsname\??framed:##1\endcsname\??framed:##1\else\s!empty\fi}% root - \def#6##1{\ifcsname\??framed:##1\endcsname\??framed:##1\else\??empty\fi}% root - \unexpanded\def#8% +\protected\def\doinstallinheritedframed#1#2#3#4#5#6#7#8#9% + {\enforced\def#5##1##2{\ifx##1\relax#6{##2}\else#4{##1}{##2}\fi}% + \enforced\def#6##1{\ifcsname\??framed:##1\endcsname\??framed:##1\else\??empty\fi}% root + \protected\def#8% {\bgroup \bgroup \inframedtrue - \let\currentframed #1% - \let\framedparameter #2% - \let\framedparameterhash#3% - \let\setupcurrentframed #7% + \enforced\let\currentframed #1% + \enforced\let\framedparameter #2% + \enforced\let\framedparameterhash#3% + \enforced\let\setupcurrentframed #7% \pack_framed_process_indeed}% - \unexpanded\def#9% + \protected\def#9% {\bgroup \inframedtrue - \let\currentframed #1% - \let\framedparameter #2% - \let\framedparameterhash#3% - \let\setupcurrentframed #7% + \enforced\let\currentframed #1% + \enforced\let\framedparameter #2% + \enforced\let\framedparameterhash#3% + \enforced\let\setupcurrentframed #7% \pack_framed_process_box_indeed}} -\unexpanded\def\installframedcommandhandler#1#2#3% +\permanent\protected\def\installframedcommandhandler#1#2#3% {\installcommandhandler{#1}{#2}{#3}% \installinheritedframed{#2}} -\unexpanded\def\installframedautocommandhandler#1#2#3% +\permanent\protected\def\installframedautocommandhandler#1#2#3% {\installautocommandhandler{#1}{#2}{#3}% \installinheritedframed{#2}} -\unexpanded\def\installsimpleframedcommandhandler#1#2#3% +\permanent\protected\def\installsimpleframedcommandhandler#1#2#3% {\installsimplecommandhandler{#1}{#2}{#3}% \installinheritedframed{#2}} @@ -192,11 +188,11 @@ \c!toffset=\zeropoint, \c!boffset=\zeropoint] -\unexpanded\def\definesimplifiedframed[#1]% no settings +\permanent\protected\def\definesimplifiedframed[#1]% no settings {\defineframed[#1][\??simplifiedframed]% - \expandafter\let\csname#1\endcsname\undefined} + \letcsname#1\endcsname\undefined} -\expandafter\let\csname\??simplifiedframed\endcsname\undefined +\letcsname\??simplifiedframed\endcsname\undefined %D We will communicate through module specific variables, current framed %D parameters and some reserved dimension registers. @@ -416,7 +412,7 @@ \let\overlaycolor \empty \let\overlaylinecolor \empty -\def\overlayradius{\framedparameter\c!frameradius} +\permanent\def\overlayradius{\framedparameter\c!frameradius} \newdimen\d_overlay_width \newdimen\d_overlay_height @@ -428,20 +424,20 @@ % expandable ... in a future version the space will go (in mp one can use Overlay*) -\def\overlaywidth {\the\d_overlay_width \space} % We preset the variables -\def\overlayheight {\the\d_overlay_height \space} % to some reasonable default -\def\overlaydepth {\the\d_overlay_depth \space} % values. -\def\overlayoffset {\the\d_overlay_offset \space} % of the frame can be (are) -\def\overlaylinewidth {\the\d_overlay_linewidth\space} % set somewhere else. -\def\overlayregion {\m_overlay_region} +\permanent\def\overlaywidth {\the\d_overlay_width \space} % We preset the variables +\permanent\def\overlayheight {\the\d_overlay_height \space} % to some reasonable default +\permanent\def\overlaydepth {\the\d_overlay_depth \space} % values. +\permanent\def\overlayoffset {\the\d_overlay_offset \space} % of the frame can be (are) +\permanent\def\overlaylinewidth {\the\d_overlay_linewidth\space} % set somewhere else. +\permanent\def\overlayregion {\m_overlay_region} % public but kind of protected -\def\usedoverlaywidth {\dimexpr\d_overlay_width \relax} -\def\usedoverlayheight {\dimexpr\d_overlay_height \relax} -\def\usedoverlaydepth {\dimexpr\d_overlay_depth \relax} -\def\usedoverlayoffset {\dimexpr\d_overlay_offset \relax} -\def\usedoverlaylinewidth{\dimexpr\d_overlay_linewidth\relax} +\permanent\def\usedoverlaywidth {\dimexpr\d_overlay_width \relax} +\permanent\def\usedoverlayheight {\dimexpr\d_overlay_height \relax} +\permanent\def\usedoverlaydepth {\dimexpr\d_overlay_depth \relax} +\permanent\def\usedoverlayoffset {\dimexpr\d_overlay_offset \relax} +\permanent\def\usedoverlaylinewidth{\dimexpr\d_overlay_linewidth\relax} %D The next register is used to initialize overlays. @@ -462,14 +458,11 @@ \vsize\d_overlay_height \to \everyoverlay -\unexpanded\def\defineoverlay - {\dodoubleargument\pack_framed_define_overlay} - -\def\pack_framed_define_overlay[#1][#2]% +\permanent\tolerant\protected\def\defineoverlay[#1]#*[#2]% wil be overloaded {\def\pack_framed_define_overlay_indeed##1{\setvalue{\??overlay##1}{\executedefinedoverlay{##1}{#2}}}% \processcommalist[#1]\pack_framed_define_overlay_indeed} -\unexpanded\def\executedefinedoverlay#1#2% we can share the definitions +\permanent\protected\def\executedefinedoverlay#1#2% we can share the definitions {\bgroup % redundant grouping \setlayoutcomponentattribute{\v!overlay:#1}% \setbox\scratchbox\hbox \layoutcomponentboxattribute{\the\everyoverlay#2}% @@ -484,7 +477,7 @@ %D \macros %D {overlayfakebox} -\unexpanded\def\overlayfakebox +\permanent\protected\def\overlayfakebox {\hpack % redundant but needs testing {\novrule \s!width \d_overlay_width @@ -493,7 +486,7 @@ %D For testing we provide: -\def\doifelseoverlay#1% only tests external overlays +\permanent\def\doifelseoverlay#1% only tests external overlays {\ifcsname\??overlay#1\endcsname \expandafter\firstoftwoarguments \else @@ -776,62 +769,49 @@ \installcorenamespace{regularframedlevel} -\unexpanded\def\installregularframed#1% +\permanent\protected\def\installregularframed#1% {\defineframed[#1]} -\unexpanded\def\presetlocalframed[#1]% +\permanent\protected\def\presetlocalframed[#1]% {\defineframed[#1]} % \presetlocalframed[\??framed] \newcount\c_pack_framed_nesting -\unexpanded\def\pack_framed_process_framed[#1]% - {\bgroup - \iffirstargument % faster - \setupcurrentframed[#1]% here ! - \fi - \pack_framed_process_indeed} - -\unexpanded\def\framed +\permanent\tolerant\protected\def\framed[#1]% {\bgroup \advance\c_pack_framed_nesting\plusone - \expandafter\let\csname\??framed>\the\c_pack_framed_nesting:\s!parent\endcsname\??framed - \edef\currentframed{>\the\c_pack_framed_nesting}% - \pack_framed_initialize - \dosingleempty\pack_framed_process_framed} - -\unexpanded\def\startframed - {\dosingleempty\pack_framed_start_framed} - -\def\pack_framed_start_framed[#1]% - {\bgroup - \doifelseassignment{#1}\pack_framed_start_framed_yes\pack_framed_start_framed_nop{#1}} - -\def\pack_framed_start_framed_yes#1% - {\advance\c_pack_framed_nesting\plusone - \expandafter\let\csname\??framed>\the\c_pack_framed_nesting:\s!parent\endcsname\??framed - \iffirstargument\secondargumenttrue\fi % dirty trick + \letcsname\??framed>\the\c_pack_framed_nesting:\s!parent\endcsname\??framed \edef\currentframed{>\the\c_pack_framed_nesting}% \pack_framed_initialize \bgroup - \iffirstargument - \secondargumenttrue % dirty trick - \setupcurrentframed[#1]% here ! - \fi - \pack_framed_process_indeed - \bgroup - \ignorespaces} - -\def\pack_framed_start_framed_nop#1% - {\edef\currentframed{#1}% - \dosingleempty\pack_framed_start_framed_nop_indeed} + \setupcurrentframed[#1]% here !, seldom no argument so no need to optimize + \pack_framed_process_indeed} -\def\pack_framed_start_framed_nop_indeed[#1]% - {\pack_framed_initialize - \bgroup - \iffirstargument - \setupcurrentframed[#1]% here ! +\permanent\tolerant\protected\def\startframed[#1]#*[#2]% + {\bgroup + \ifarguments + \pack_framed_initialize + \bgroup + \or + \ifhastok={#1}% + \advance\c_pack_framed_nesting\plusone + \letcsname\??framed>\the\c_pack_framed_nesting:\s!parent\endcsname\??framed + \edef\currentframed{>\the\c_pack_framed_nesting}% + \pack_framed_initialize + \bgroup + \setupcurrentframed[#1]% here ! + \else + \edef\currentframed{#1}% + \pack_framed_initialize + \bgroup + \fi + \else + \edef\currentframed{#1}% + \pack_framed_initialize + \bgroup + \setupcurrentframed[#2]% here ! \fi \pack_framed_process_indeed \bgroup @@ -839,14 +819,14 @@ % till here -\unexpanded\def\stopframed +\permanent\protected\def\stopframed {\removeunwantedspaces \egroup} -\unexpanded\def\normalframedwithsettings[#1]% +\protected\def\normalframedwithsettings[#1]% {\bgroup \advance\c_pack_framed_nesting\plusone - \expandafter\let\csname\??framed>\the\c_pack_framed_nesting:\s!parent\endcsname\??framed + \letcsname\??framed>\the\c_pack_framed_nesting:\s!parent\endcsname\??framed \bgroup \edef\currentframed{>\the\c_pack_framed_nesting}% \pack_framed_initialize @@ -880,21 +860,23 @@ \newif\ifinframed -%D The next one is faster on multiple backgrounds per page. No -%D dimensions can be set, only frames and backgrounds. +%D The next one is faster on multiple backgrounds per page. No dimensions can be +%D set, only frames and backgrounds. -\unexpanded\def\fastlocalframed[#1]#2[#3]#4% 3-4 +%% \protected\def\fastlocalframed[#1]#2[#3]#4% 3-4 + +\permanent\protected\def\fastlocalframed[#1]#*[#2]#3% {\bgroup \edef\currentframed{#1}% \pack_framed_initialize - \setbox\b_framed_normal\hbox{#4}% + \setbox\b_framed_normal\hbox{#3}% \iftrialtypesetting \else \edef\m_overlay_region{\framedparameter\c!region}% \ifempty\m_overlay_region\else \pack_framed_set_region \fi \fi - \setupcurrentframed[#3]% + \setupcurrentframed[#2]% \edef\p_framed_rulethickness{\framedparameter\c!rulethickness}% also used in backgrounds \d_framed_frameoffset\framedparameter\c!frameoffset\relax % also used in backgrounds \edef\p_framed_frame{\framedparameter\c!frame}% @@ -928,7 +910,7 @@ %D The next macro uses a box and takes its natural width and height so these %D can better be correct. -\unexpanded\def\pack_framed_process_box_indeed#1#2% component box (assumes parameters set and grouped usage) +\protected\def\pack_framed_process_box_indeed#1#2% component box (assumes parameters set and grouped usage) {\setbox\b_framed_normal\box#2% could actually be \let\b_framed_normal#2 \edef\m_overlay_region{\framedparameter\c!region}% \ifempty\m_overlay_region\else @@ -961,7 +943,7 @@ \box\b_framed_normal \egroup} -\unexpanded\def\localbackgroundframed#1% namespace component box +\protected\def\localbackgroundframed#1% namespace component box {\bgroup \edef\currentframed{#1}% \pack_framed_initialize @@ -988,37 +970,26 @@ % todo: protect local \framednames -\unexpanded\def\localframed - {\bgroup - \dodoubleempty\pack_framed_local} - -\unexpanded\def\pack_framed_local[#1][#2]% - {\bgroup - \edef\currentframed{#1}% - \pack_framed_initialize - \ifsecondargument % faster - \setupcurrentframed[#2]% here ! - \fi - \pack_framed_process_indeed} - -\unexpanded\def\directlocalframed[#1]% no optional +\permanent\tolerant\protected\def\localframed[#1]#*[#2]% {\bgroup \bgroup \edef\currentframed{#1}% \pack_framed_initialize + \setupcurrentframed[#2]% here ! \pack_framed_process_indeed} -\unexpanded\def\localframedwithsettings[#1][#2]% no checking (so no spaces between) +\permanent\protected\def\directlocalframed[#1]% no optional {\bgroup \bgroup \edef\currentframed{#1}% \pack_framed_initialize - \setupcurrentframed[#2]% here ! \pack_framed_process_indeed} +\aliased\let\localframedwithsettings\localframed + % done -\def\c!fr!analyze{fr:analyze} % private option +\defineinterfaceconstant {fr!analyze} {fr:analyze} % private option \let\delayedbegstrut\relax \let\delayedendstrut\relax @@ -1030,7 +1001,7 @@ \let\localformat\empty \let\localstrut \empty -\unexpanded\def\pack_framed_process_indeed +\protected\def\pack_framed_process_indeed {\d_framed_frameoffset\framedparameter\c!frameoffset \edef\p_framed_backgroundoffset{\framedparameter\c!backgroundoffset}% \d_framed_backgroundoffset @@ -1052,7 +1023,8 @@ \edef\localwidth {\framedparameter\c!width}% \edef\localheight{\framedparameter\c!height}% \edef\localformat{\framedparameter\c!align}% - \edef\localstrut {\framedparameter\c!strut}% + % + \edef\p_strut {\framedparameter\c!strut}% % these are not \edef\p_framed_autostrut {\framedparameter\c!autostrut}% \edef\p_framed_frame {\framedparameter\c!frame}% @@ -1131,48 +1103,48 @@ % i.e. disable (colsetbackgroundproblemintechniek) \advance\d_framed_width -2\d_framed_local_offset \advance\d_framed_height -2\d_framed_local_offset - \ifcsname\??framedstrutalternative\localstrut\endcsname + \ifcsname\??framedstrutalternative\p_strut\endcsname \lastnamedcs \else \framed_offset_alternative_unknown \fi % the next check could move to strutalternative \ifcase\c_framed_has_strut % none (not even noindent) - \let\localbegstrut\relax - \let\localendstrut\relax - \let\localstrut \relax + \enforced\let\localbegstrut\relax + \enforced\let\localendstrut\relax + \enforced\let\localstrut \relax \or % no / overlay - \let\localbegstrut\pseudobegstrut - \let\localendstrut\pseudoendstrut - \let\localstrut \pseudostrut + \enforced\let\localbegstrut\pseudobegstrut + \enforced\let\localendstrut\pseudoendstrut + \enforced\let\localstrut \pseudostrut \else - \let\localbegstrut\begstrut - \let\localendstrut\endstrut - \let\localstrut \strut + \enforced\let\localbegstrut\begstrut + \enforced\let\localendstrut\endstrut + \enforced\let\localstrut \strut \fi \ifx\p_framed_autostrut\v!yes - \let\delayedbegstrut\relax - \let\delayedendstrut\relax - \let\delayedstrut \relax + \enforced\let\delayedbegstrut\relax + \enforced\let\delayedendstrut\relax + \enforced\let\delayedstrut \relax \else - \let\delayedbegstrut\localbegstrut - \let\delayedendstrut\localendstrut - \let\delayedstrut \localstrut - \let\localbegstrut \relax - \let\localendstrut \relax - \let\localstrut \relax + \enforced\let\delayedbegstrut\localbegstrut + \enforced\let\delayedendstrut\localendstrut + \enforced\let\delayedstrut \localstrut + \enforced\let\localbegstrut \relax + \enforced\let\localendstrut \relax + \enforced\let\localstrut \relax \fi \ifconditional\c_framed_has_height - \let\\\pack_framed_vboxed_newline + \enforced\let\\\pack_framed_vboxed_newline \ifconditional\c_framed_has_width - \let\hairline\pack_framed_vboxed_hairline + \enforced\let\hairline\pack_framed_vboxed_hairline \ifconditional\c_framed_has_format \let\next\pack_framed_format_format_yes \else \let\next\pack_framed_format_format_nop \fi \else - \let\hairline\pack_framed_hboxed_hairline + \enforced\let\hairline\pack_framed_hboxed_hairline \ifconditional\c_framed_has_format \let\next\pack_framed_format_format_height \else @@ -1181,17 +1153,17 @@ \fi \orelse\ifconditional\c_framed_has_width \ifconditional\c_framed_has_format - \let\hairline\pack_framed_vboxed_hairline - \let\\\pack_framed_vboxed_newline + \enforced\let\\\pack_framed_vboxed_newline + \enforced\let\hairline\pack_framed_vboxed_hairline \let\next\pack_framed_format_format_width \else - \let\hairline\pack_framed_hboxed_hairline - \let\\\pack_framed_hboxed_newline + \enforced\let\\\pack_framed_hboxed_newline + \enforced\let\hairline\pack_framed_hboxed_hairline \let\next\pack_framed_format_format_hsize \fi \else - \let\hairline\pack_framed_hboxed_hairline - \let\\\pack_framed_hboxed_newline + \enforced\let\\\pack_framed_hboxed_newline + \enforced\let\hairline\pack_framed_hboxed_hairline \let\next\pack_framed_format_format_no_size \fi \pack_framed_check_extra_offsets @@ -1466,7 +1438,7 @@ \fi \fi} -\unexpanded\def\pack_framed_finish +\protected\def\pack_framed_finish {%\pack_framed_stop_orientation % hm, wrong place ! should rotate the result (after reshape) .. moved down \pack_framed_locator_before\p_framed_location \ifconditional\c_framed_has_format @@ -1845,16 +1817,7 @@ %D [height=3cm] {framed} boxes. Such boxes have to be \inframed {aligned} with the %D running text. -\unexpanded\def\inframed - {\dosingleempty\pack_framed_inline} - -% \def\pack_framed_inline[#1]% -% {\framed[\c!location=\v!low,#1]} -% -% or: - -\def\pack_framed_inline[% - {\framed[\c!location=\v!low,} +\permanent\tolerant\protected\def\inframed[#1]{\framed[\c!location=\v!low,#1]} %D When we set \type{empty} to \type{yes}, we get ourselves a frame and/or background, %D but no content, so actually we have a sort of phantom framed box. @@ -1900,7 +1863,7 @@ \newcount\c_framed_mstyle -\unexpanded\def\pack_framed_math_strut +\protected\def\pack_framed_math_strut {\Ustartmath \triggermathstyle\c_framed_mstyle \vphantom{(}% @@ -1910,18 +1873,18 @@ \installframedcommandhandler \??mathframed {mathframed} \??mathframed +\newcount\c_pack_framed_mathframed +\newtoks \t_pack_framed_mathframed + \appendtoks \setuevalue{\currentmathframed}{\pack_framed_mathframed{\currentmathframed}}% \to \everydefinemathframed -\unexpanded\def\pack_framed_mathframed#1% +\protected\def\pack_framed_mathframed#1% {\begingroup \edef\currentmathframed{#1}% \dosingleempty\pack_framed_mathframed_indeed} -\newcount\c_pack_framed_mathframed -\newtoks \t_pack_framed_mathframed - \def\pack_framed_math_pos {\global\advance\c_pack_framed_mathframed\plusone \xdef\pack_framed_mc_one{mcf:1:\number\c_pack_framed_mathframed}% @@ -1935,9 +1898,9 @@ \c_framed_mstyle\normalmathstyle \edef\m_framed_location{\mathframedparameter\c!location}% \ifx\m_framed_location\v!mathematics - \let\normalstrut\pack_framed_math_pos + \enforced\let\normalstrut\pack_framed_math_pos \orelse\ifx\m_framed_location\v!low\else - \let\normalstrut\pack_framed_math_strut + \enforced\let\normalstrut\pack_framed_math_strut \fi \inheritedmathframedframed\bgroup \Ustartmath @@ -2112,29 +2075,29 @@ \ifdefined\raggedonelinerstate \else \newconditional\raggedonelinerstate \fi -\def\doformatonelinerbox % beware: assumes explicit preceding bgroup +\permanent\protected\def\doformatonelinerbox % beware: assumes explicit preceding bgroup {\ifconditional\raggedonelinerstate \expandafter\dodoformatonelinerbox \else \expandafter\nodoformatonelinerbox \fi} -\def\dodoformatonelinerbox +\permanent\protected\def\dodoformatonelinerbox {\afterassignment\redoformatonelinerbox \setbox\nextbox\hbox} % maybe \hpack -\def\redoformatonelinerbox +\permanent\protected\def\redoformatonelinerbox {\aftergroup\dododoformatonelinerbox \ignorespaces} -\def\dododoformatonelinerbox +\permanent\protected\def\dododoformatonelinerbox {\hpack to \hsize % was \hbox {\ifcase\raggedstatus\or\hss\or\hss \fi \unhbox\nextbox \removeunwantedspaces \ifcase\raggedstatus\or \or\hss\or\hss\fi}% \egroup} -\def\nodoformatonelinerbox % grabs { +\permanent\protected\def\nodoformatonelinerbox % grabs { {\let\next=} %D The handlers: @@ -2177,13 +2140,10 @@ \pack_framed_do_setups \raggedcommand \pack_framed_do_top - \bgroup \synchronizeinlinedirection \localbegstrut - %\aftergrouped{\localendstrut\pack_framed_do_bottom\egroup}% - \aftergroup\localendstrut - \aftergroup\pack_framed_do_bottom - \aftergroup\egroup + \atendofgroup\localendstrut + \atendofgroup\pack_framed_do_bottom \doformatonelinerbox} \def\pack_framed_format_format_nop @@ -2200,12 +2160,10 @@ \pack_framed_do_setups \raggedcenter \vss - \bgroup \synchronizeinlinedirection \localbegstrut - \aftergroup\localendstrut - \aftergroup\vss - \aftergroup\egroup + \atendofgroup\localendstrut + \atendofgroup\vss \doformatonelinerbox} \def\pack_framed_format_format_height @@ -2220,12 +2178,10 @@ \pack_framed_do_setups \raggedcommand \vss - \bgroup - \aftergroup\localendstrut - \aftergroup\vss - \aftergroup\egroup \synchronizeinlinedirection \localbegstrut + \atendofgroup\localendstrut + \atendofgroup\vss \doformatonelinerbox} \def\pack_framed_format_format_width @@ -2241,12 +2197,10 @@ \pack_framed_do_setups \raggedcommand \pack_framed_do_top - \bgroup \synchronizeinlinedirection \localbegstrut - \aftergroup\localendstrut - \aftergroup\pack_framed_do_bottom - \aftergroup\egroup + \atendofgroup\localendstrut + \atendofgroup\pack_framed_do_bottom \doformatonelinerbox} \def\pack_framed_format_format_vsize @@ -2260,9 +2214,7 @@ \vsize\d_framed_height \pack_framed_do_setups \vss - \bgroup - \aftergroup\vss - \aftergroup\egroup + \atendofgroup\vss \hbox \bgroup \aftergroup\egroup @@ -2282,9 +2234,7 @@ \hss \synchronizeinlinedirection \localstrut - \bgroup - \aftergroup\hss - \aftergroup\egroup + \atendofgroup\hss \doformatonelinerbox} \def\pack_framed_format_format_no_size @@ -2465,7 +2415,7 @@ %D These macros try to adapt their behaviour as good as possible to the circumstances %D and act as natural as possible. -\unexpanded\def\pack_framed_vboxed_hairline % nasty overlay mess .. needed for autowidth +\protected\def\pack_framed_vboxed_hairline % nasty overlay mess .. needed for autowidth {\begingroup \scratchoffset\ifconditional\c_framed_has_offset \localoffset \else \zeropoint \fi \scratchwidth \dimexpr\scratchoffset+\d_framed_linewidth\relax @@ -2489,7 +2439,7 @@ \localbegstrut \endgroup} -\unexpanded\def\pack_framed_hboxed_hairline % use framed dimen +\protected\def\pack_framed_hboxed_hairline % use framed dimen {\bgroup \scratchoffset\ifconditional\c_framed_has_offset \localoffset \else \zeropoint \fi \ifconditional\c_framed_has_height @@ -2513,10 +2463,10 @@ %D The argument of the frame command accepts \type{\\} as a sort of newline signal. In %D horizontal boxes it expands to a space. -\unexpanded\def\pack_framed_vboxed_newline +\protected\def\pack_framed_vboxed_newline {\endgraf\ignorespaces} -\unexpanded\def\pack_framed_hboxed_newline +\protected\def\pack_framed_hboxed_newline {\unskip\normalspace\ignorespaces} %D We can set each rule on or off. The default setting is inherited from @@ -2699,7 +2649,7 @@ \letframedtextparameter\c!right\relax \settrue\c_framed_text_location_none} -\unexpanded\def\pack_framed_text_start#1% +\protected\def\pack_framed_text_start#1% {\bgroup \edef\currentframedtext{#1}% \dodoubleempty\pack_framed_text_start_indeed} @@ -2726,7 +2676,7 @@ % \edef\p_framed_text_strut{\letframedtextparameter\c!strut}% to be used \letframedtextparameter\c!strut\v!no \inheritedframedtextframed\bgroup - \let\\=\endgraf + \enforced\let\\\endgraf \edef\p_framed_text_depthcorrection{\framedtextparameter\c!depthcorrection}% \ifx\p_framed_text_depthcorrection\v!on \pack_framed_text_start_depth_correction @@ -2753,7 +2703,7 @@ \defineplacement[\??framedtext][\s!parent=\??framedtext\currentframedtext] -\unexpanded\def\pack_framed_text_stop % no \baselinecorrection, see faq docs +\protected\def\pack_framed_text_stop % no \baselinecorrection, see faq docs {\endgraf \removelastskip \ifx\p_framed_text_depthcorrection\v!on @@ -2833,7 +2783,7 @@ %D The simple brace (or group) delimited case is typeset slightly different %D and is not aligned. -\unexpanded\def\pack_framed_text_direct#1% +\protected\def\pack_framed_text_direct#1% {\bgroup \edef\currentframedtext{#1}% \dosingleempty\pack_framed_text_start_direct} @@ -2847,7 +2797,7 @@ \letframedtextparameter\c!strut\v!no \inheritedframedtextframed\bgroup \blank[\v!disable]% - \let\\=\endgraf + \enforced\let\\\endgraf \useframedtextstyleandcolor\c!style\c!color \vskip-\strutdp % brrr why is this needed ... needs to be sorted out, see testcase 1 \framedtextparameter\c!inner @@ -2896,7 +2846,7 @@ \newcount\c_temp_framed_crap -\unexpanded\def\pack_framed_defined_process[#1]% official (not much checking, todo: parent) +\permanent\tolerant\protected\def\pack_framed_defined_process[#1]#*[#2]% official (not much checking, todo: parent) {\bgroup \ifcsname\??regularframedlevel#1\endcsname %\expandafter\let\expandafter\c_pack_framed_temp\csname\??regularframedlevel#1\endcsname @@ -2905,16 +2855,11 @@ \let\c_pack_framed_temp\c_temp_framed_crap \fi \advance\c_pack_framed_temp\plusone - \expandafter\def\csname\??framed#1>\the\c_pack_framed_temp:\s!parent\endcsname{\??framed#1}% \inheritlocalframed + \defcsname\??framed#1>\the\c_pack_framed_temp:\s!parent\endcsname{\??framed#1}% \inheritlocalframed \bgroup \edef\currentframed{#1>\the\c_pack_framed_temp}% \pack_framed_initialize - \dosingleempty\pack_framed_defined_process_indeed} - -\def\pack_framed_defined_process_indeed[#1]% - {\iffirstargument % faster - \setupcurrentframed[#1]% here ! - \fi + \setupcurrentframed[#2]% here ! \pack_framed_process_indeed} \let\placeframed\pack_framed_defined_process % new per 2012/04/23 @@ -2980,17 +2925,16 @@ %\c!width=\v!fit, \c!offset=\v!overlay] -\unexpanded\def\startframedcontent - {\dosingleempty\pack_framed_start_content} +\permanent\let\stopframedcontent\relax -\def\pack_framed_start_content[#1]% +\permanent\tolerant\protected\def\startframedcontent[#1]% {\bgroup \edef\currentframedcontent{#1}% \ifx\currentframedcontent\v!off - \let\stopframedcontent\egroup + \enforced\let\stopframedcontent\egroup \else \checkframedcontentparent - \let\stopframedcontent\pack_framed_stop_content_indeed + \enforced\let\stopframedcontent\pack_framed_stop_content_indeed \expandafter\pack_framed_start_content_indeed \fi} @@ -3011,7 +2955,7 @@ \forgetall \blank[\v!disable]} -\def\pack_framed_stop_content_indeed +\protected\def\pack_framed_stop_content_indeed {\removelastskip \egroup \vskip\scratchbottomoffset @@ -3040,8 +2984,6 @@ %D A Goodie: -\def\v!unframed{unframed} - \defineframed [\v!unframed] [\c!frame=\v!off, @@ -3058,9 +3000,9 @@ \let\themaxboxwidth\clf_themaxboxwidth -%D Fast enough for most cases: +%D Fast enough for most cases (we could do a massive \type {\ifhastok} instead): -\unexpanded\def\doifelseframed#1% +\protected\def\doifelseframed#1% {\iftok{#1\c!frame }{\v!on}\expandafter\firstoftwoarguments \orelse\iftok{#1\c!topframe }{\v!on}\expandafter\firstoftwoarguments \orelse\iftok{#1\c!bottomframe}{\v!on}\expandafter\firstoftwoarguments diff --git a/tex/context/base/mkiv/page-bck.mkxl b/tex/context/base/mkiv/page-bck.mkxl new file mode 100644 index 000000000..9f9c5ee03 --- /dev/null +++ b/tex/context/base/mkiv/page-bck.mkxl @@ -0,0 +1,715 @@ +%D \module +%D [ file=page-bck, % copied from main-001 +%D version=1997.03.31, +%D title=\CONTEXT\ Page Macros, +%D subtitle=Backgrounds, +%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. + +% Currently the text cells are fakes and no (foreground) frames which makes sense +% as order might matter e.g. is text sticks in other cells. The page, text etc +% areas do support foreground order change. + +\writestatus{loading}{ConTeXt Page Macros / Backgrounds} + +\unprotect + +% maybe use \currentframedhash here + +%D For special purposes, users can question the \type {*background} mode. This mode +%D is only available when typesetting the pagebody. +%D +%D \starttyping +%D \startmode[*background] ... +%D \stoptyping + +\newconditional\c_page_backgrounds_new +\newconditional\c_page_backgrounds_new_right +\newconditional\c_page_backgrounds_new_left +\newconditional\c_page_backgrounds_some + +\appendtoks + \ifconditional\c_page_backgrounds_some + \ifconditional\c_page_backgrounds_new + \setsystemmode\v!background + \fi + \fi +\to \everybeforepagebody + +\protected\def\initializepagebackgrounds + {\setfalse\c_page_backgrounds_new + \setfalse\c_page_backgrounds_new_right + \setfalse\c_page_backgrounds_new_left + \setfalse\c_page_backgrounds_some} + +%D We keep calculations and checks to a minimum and also try to minimize +%D the amount of tracing due to expansion. + +\let\currentotrbackground\empty + +%D This is the only spot where we have a low level dependency on the way +%D parent chains are defined but we want the speed. + +\protected\def\page_backgrounds_check_background + {\ifcsname\??framed\currentotrbackground:\c!background\endcsname + %\edef\page_background_temp{\csname\??framed\currentotrbackground:\c!background\endcsname}% + \edef\page_background_temp{\lastnamedcs}% + \ifx\page_background_temp\empty + \expandafter\expandafter\expandafter\page_backgrounds_check_frame + \else + \page_backgrounds_set_yes + \fi + \else + \expandafter\page_backgrounds_check_frame + \fi} + +\def\page_backgrounds_check_frame + {\ifcsname\??framed\currentotrbackground:\c!frame\endcsname + %\edef\page_background_temp{\csname\??framed\currentotrbackground:\c!frame\endcsname}% + \edef\page_background_temp{\lastnamedcs}% + \ifx\page_background_temp\v!on + \page_backgrounds_set_yes + \else + \expandafter\expandafter\expandafter\page_backgrounds_check_leftframe + \fi + \else + \expandafter\page_backgrounds_check_leftframe + \fi} + +\def\page_backgrounds_check_leftframe + {\ifcsname\??framed\currentotrbackground:\c!leftframe\endcsname + %\edef\page_background_temp{\csname\??framed\currentotrbackground:\c!leftframe\endcsname}% + \edef\page_background_temp{\lastnamedcs}% + \ifx\page_background_temp\v!on + \page_backgrounds_set_yes + \else + \expandafter\expandafter\expandafter\page_backgrounds_check_rightframe + \fi + \else + \expandafter\page_backgrounds_check_rightframe + \fi} + +\def\page_backgrounds_check_rightframe + {\ifcsname\??framed\currentotrbackground:\c!rightframe\endcsname + %\edef\page_background_temp{\csname\??framed\currentotrbackground:\c!rightframe\endcsname}% + \edef\page_background_temp{\lastnamedcs}% + \ifx\page_background_temp\v!on + \page_backgrounds_set_yes + \else + \expandafter\expandafter\expandafter\page_backgrounds_check_topframe + \fi + \else + \expandafter\page_backgrounds_check_topframe + \fi} + +\def\page_backgrounds_check_topframe + {\ifcsname\??framed\currentotrbackground:\c!topframe\endcsname + %\edef\page_background_temp{\csname\??framed\currentotrbackground:\c!topframe\endcsname}% + \edef\page_background_temp{\lastnamedcs}% + \ifx\page_background_temp\v!on + \page_backgrounds_set_yes + \else + \expandafter\expandafter\expandafter\page_backgrounds_check_bottomframe + \fi + \else + \expandafter\page_backgrounds_check_bottomframe + \fi} + +\def\page_backgrounds_check_bottomframe + {\ifcsname\??framed\currentotrbackground:\c!bottomframe\endcsname + %\edef\page_background_temp{\csname\??framed\currentotrbackground:\c!bottomframe\endcsname}% + \edef\page_background_temp{\lastnamedcs}% + \ifx\page_background_temp\v!on + \page_backgrounds_set_yes + \else + \page_backgrounds_set_nop + \fi + \else + \page_backgrounds_set_nop + \fi} + +%D We don't use the commandhandler code as we want these multitude of backgrounds to be +%D as fast as possible. + +\installcorenamespace{layoutbackgrounds} +\installcorenamespace{layoutbackgroundcheck} % we need another hash as \??layoutbackgrounds<...> gets defined + +\def\page_backgrounds_set_yes{\expandafter\let\csname\currentotrbackground\endcsname\relax } +\def\page_backgrounds_set_nop{\expandafter\let\csname\currentotrbackground\endcsname\undefined} + +\protected\def\page_backgrounds_check#1% + {\edef\currentotrbackground{\??layoutbackgrounds#1}% + \page_backgrounds_check_background} + +\permanent\def\doifelsesomebackground#1% + {\ifcsname\??layoutbackgrounds#1\endcsname + \expandafter\firstoftwoarguments + \else + \expandafter\secondoftwoarguments + \fi} + +\aliased\let\doifsomebackgroundelse\doifelsesomebackground + +\permanent\def\doifsomebackground#1% + {\ifcsname\??layoutbackgrounds#1\endcsname + \expandafter\firstofoneargument + \else + \expandafter\gobbleoneargument + \fi} + +%D The background mechanism falls back on the \type {\framed} macro. This means +%D that all normal frame and overlay features can be used. + +\def\page_backgrounds_add_to_box#1% area + {\ifcsname\??layoutbackgrounds#1\endcsname + \expandafter\page_backgrounds_add_to_box_indeed + \else + \expandafter\gobblefourarguments + \fi#1} + +%D We don't need the dimensions here as this is a real framed but the question is: +%D do we indeed need a real framed or can we use a fake (i.e. no foreground, only +%D for hidden). + +\def\page_backgrounds_add_to_box_indeed#1#2#3#4% area box width height / always non zero + {\edef\p_page_backgrounds_setups{\namedframedparameter{\??layoutbackgrounds#1}\c!setups}% + \ifx\p_page_backgrounds_setups\empty \else + \doprocesslocalsetups\p_page_backgrounds_setups % should not produce funny spaces ! + \fi + % #2 has the right dimensions already + \setbox#2\hpack{\localbackgroundframed{\??layoutbackgrounds#1}#1#2}}% a real framed (including foreground) + + +%D There are quite some backgrounds. At the bottom layer, there is the {\em paper} +%D background. This one is only used for special purposes, like annotations to +%D documents. + +\def\page_backgrounds_add_to_print#1% + {\page_backgrounds_add_to_box\v!paper#1\printpaperwidth\printpaperheight} + +%D The page backgrounds can be put behind the {\em left page}, the {\em right page} +%D or {\em each page}. As with the paper background, these are calculated on each +%D page. + +\def\page_backgrounds_add_to_paper#1% + {\doifbothsidesoverruled + {\page_backgrounds_add_to_box\v!rightpage#1\paperwidth\paperheight}% + {\page_backgrounds_add_to_box\v!rightpage#1\paperwidth\paperheight}% + {\page_backgrounds_add_to_box\v!leftpage #1\paperwidth\paperheight}% + \page_backgrounds_add_to_box\v!page#1\paperwidth\paperheight} + +%D Then there are the 25 areas that make up the layout: {\em top, header, text, +%D footer, bottom} times {\em left edge, left margin, text, right margin, right +%D edge}. These are only recalculated when they change or when the \type {status} +%D is set to \type {repeat}. + +\newbox\leftbackground % todo: rename +\newbox\rightbackground % todo: rename + +%D Finaly there is an aditional {\em text} background, again useful for special +%D purposes only. This one is calculated each time. The hidden backgrounds are not +%D meant for users! + +\newconditional\c_page_backgrounds_hidden_enabled + +\def\page_backgrounds_add_to_text#1% + {\ifconditional\c_page_backgrounds_hidden_enabled + \page_backgrounds_add_to_box\v!hidden#1\makeupwidth\textheight % mine ! + \fi + \page_backgrounds_add_to_box\v!text#1\makeupwidth\textheight} + +%D The next couple of macros implement the area backgrounds. As said, these are +%D cached in dedicated boxes. The offsets and depth of the page are used for +%D alignment purposes. + +%newdimen\pageoffset % bleed +%newdimen\pagedepth % built-in + +%D We need a bit more clever mechanism in order to handle layers well. This means +%D that we cannot calculate both background at the same time since something may +%D have changed halfway a page. + +%D Margin swapping has been simplified: see mkii code in case of regression. +%D Calculation is delayed till the page anyway so the state is known. + +\def\page_backgrounds_recalculate + {\global\settrue\c_page_backgrounds_new} + +\def\page_backgrounds_set_boxes + {\ifconditional\c_page_backgrounds_new + \page_backgrounds_set_boxes_r + \fi + \doifbothsides + \page_backgrounds_set_boxes_a + \page_backgrounds_set_boxes_b + \page_backgrounds_set_boxes_c + \ifx\p_page_backgrounds_state\v!repeat\else + \global\setfalse\c_page_backgrounds_new + \fi} + +\def\page_backgrounds_set_boxes_r + {\global\settrue\c_page_backgrounds_new_right + \global\settrue\c_page_backgrounds_new_left + \global\setbox\leftbackground\emptybox + \global\setbox\rightbackground\emptybox} + +\def\page_backgrounds_set_boxes_a + {\ifconditional\c_page_backgrounds_new_left + % \showmessage\m!layouts8\empty + \page_backgrounds_set_box\leftbackground % \conditionalfalse + \global\setfalse\c_page_backgrounds_new_left + \global\setfalse\c_page_backgrounds_new_right + \fi} + +\def\page_backgrounds_set_boxes_b + {\ifconditional\c_page_backgrounds_new_left + % \showmessage\m!layouts8\empty + \page_backgrounds_set_box\leftbackground + \global\setfalse\c_page_backgrounds_new_left + \fi} + +\def\page_backgrounds_set_boxes_c + {\ifconditional\c_page_backgrounds_new_right + % \showmessage\m!layouts8\empty + \page_backgrounds_set_box\rightbackground + \global\setfalse\c_page_backgrounds_new_right + \fi} + +\def\page_backgrounds_add_to_main#1% todo: dimension spec + {\ifconditional\c_page_backgrounds_some + \page_backgrounds_set_boxes + \setbox#1\vpack + {\offinterlineskip + \doifelsemarginswap{\copy\leftbackground}{\copy\rightbackground}% + \box#1}% + \fi} + +\newdimen\pagebackgroundhoffset % THESE WILL BECOME OBSOLETE +\newdimen\pagebackgroundvoffset +\newdimen\pagebackgroundoffset % used elsewhere +\newdimen\pagebackgrounddepth +\newdimen\pagebackgroundcompensation + +\def\page_backgrounds_set_offsets % used in menus (we can use ifcsname's here) + {\ifconditional\c_page_backgrounds_some \ifconditional\c_page_backgrounds_new + \page_backgrounds_set_offsets_indeed % indirect, less tracing + \fi \fi} + +\def\page_backgrounds_set_offsets_indeed + {\ifcsname\??layoutbackgrounds\v!text\v!text\endcsname + \page_backgrounds_set_offsets_yes + \orelse\ifcsname\??layoutbackgrounds\v!text\endcsname + \page_backgrounds_set_offsets_yes + \else + \page_backgrounds_set_offsets_nop + \fi} + +\def\page_backgrounds_set_offsets_nop + {\global\pagebackgroundhoffset \zeropoint + \global\pagebackgroundvoffset \zeropoint + \global\pagebackgrounddepth \zeropoint + \global\pagebackgroundcompensation\zeropoint} + +\def\page_backgrounds_set_offsets_yes + {\global\pagebackgroundoffset \d_page_backgrounds_depth + \global\pagebackgroundcompensation\d_page_backgrounds_offset\relax + \ifzeropt\pagebackgroundcompensation + \page_backgrounds_set_offsets_nop + \else + \ifcsname\??layoutbackgrounds\v!top\v!text\endcsname + \global\pagebackgroundhoffset\zeropoint + \orelse\ifcsname\??layoutbackgrounds\v!bottom\v!text\endcsname + \global\pagebackgroundhoffset\zeropoint + \else + \global\pagebackgroundhoffset\pagebackgroundcompensation + \fi + \ifcsname\??layoutbackgrounds\v!text\v!rightedge\endcsname + \global\pagebackgroundvoffset\zeropoint + \global\pagebackgrounddepth \zeropoint + \orelse\ifcsname\??layoutbackgrounds\v!text\v!leftedge\endcsname + \global\pagebackgroundvoffset\zeropoint + \global\pagebackgrounddepth \zeropoint + \else + \global\pagebackgroundvoffset\pagebackgroundcompensation + \global\pagebackgrounddepth \d_page_backgrounds_depth + \fi + \fi} + +\appendtoks + \page_backgrounds_set_offsets +\to \everybeforepagebody + +\newconditional\swapbackgroundmargins \settrue\swapbackgroundmargins + +%D The swapping here is pretty nasty! Maybe we should find another way some day but +%D for now we tweak. + +\def\page_backgrounds_set_box#1% #2% + {\global\setbox#1\vpack + {\dontcomplain + \swapmargins + \ifconditional\swapbackgroundmargins + \doifelsemarginswap \donothing + {\enforced\swapcsvalues\v!rightmargin\v!leftmargin + \enforced\swapcsvalues\v!rightedge \v!leftedge}% + \fi + \calculatereducedvsizes + \offinterlineskip + % \ifconditional#2\relax + % \doswapmargins % hm, this one gets nilled in \swapmargins anyway + % \fi + \ifdim\topheight>\zeropoint + \kern\dimexpr-\topheight-\topdistance\relax + \page_backgrounds_set_box_row\v!top\topheight + \kern\topdistance + \fi + \ifdim\headerheight>\zeropoint + \page_backgrounds_set_box_row\v!header\headerheight + \kern\headerdistance + \fi + \ifdim\textheight>\zeropoint + \page_backgrounds_set_box_row\v!text\textheight + \fi + \ifdim\footerheight>\zeropoint + \kern\footerdistance + \page_backgrounds_set_box_row\v!footer\footerheight + \fi + \ifdim\bottomheight>\zeropoint + \kern\bottomdistance + \page_backgrounds_set_box_row\v!bottom\bottomheight + \fi + \vfilll}% + \smashbox#1} + +\def\page_backgrounds_set_box_row#1#2% maybe helper + {\setbox\scratchbox\vpack to #2 + \bgroup\hpack\bgroup + \goleftonpage + \ifdim\leftedgewidth>\zeropoint + \ifcsname\??layoutbackgrounds#1\v!leftedge\endcsname + \page_backgrounds_set_box_cell#1\v!leftedge\leftedgewidth#2% + \else + \kern\leftedgewidth + \fi + \kern\leftedgedistance + \fi + \ifdim\leftmarginwidth>\zeropoint + \ifcsname\??layoutbackgrounds#1\v!leftmargin\endcsname + \page_backgrounds_set_box_cell#1\v!leftmargin\leftmarginwidth#2% + \else + \kern\leftmarginwidth + \fi + \kern\leftmargindistance + \fi + \ifcsname\??layoutbackgrounds#1\v!text\endcsname + \page_backgrounds_set_box_cell#1\v!text\makeupwidth#2% + \else + \kern\makeupwidth + \fi + \ifdim\rightmarginwidth>\zeropoint + \kern\rightmargindistance + \ifcsname\??layoutbackgrounds#1\v!rightmargin\endcsname + \page_backgrounds_set_box_cell#1\v!rightmargin\rightmarginwidth#2% + \else + \kern\rightmarginwidth + \fi + \fi + \ifdim\rightedgewidth>\zeropoint + \kern\rightedgedistance + \ifcsname\??layoutbackgrounds#1\v!rightedge\endcsname + \page_backgrounds_set_box_cell#1\v!rightedge\rightedgewidth#2% + \else + \kern\rightedgewidth + \fi + \fi + \egroup\egroup + \wd\scratchbox\zeropoint + \box\scratchbox\relax} + +% these are fake framed .. maybe it's nicer to honor foreground here as well +% but it's probably a slow downer + +\def\page_backgrounds_set_box_cell#1#2#3#4% pos pos width height + {\begingroup + \edef\p_page_backgrounds_setups{\namedframedparameter{\??layoutbackgrounds#1#2}\c!setups}% + \ifx\p_page_backgrounds_setups\empty \else + \doprocesslocalsetups\p_page_backgrounds_setups % should not produce funny spaces ! + \fi + \edef\p_page_backgrounds_command{\namedframedparameter{\??layoutbackgrounds#1#2}\c!command}% + \ifx\p_page_backgrounds_command\empty + \expandafter\page_backgrounds_set_box_cell_nop + \else + \expandafter\page_backgrounds_set_box_cell_yes + \fi#3#4% + \localbackgroundframed{\??layoutbackgrounds#1#2}{#1:#2}\scratchbox + \endgroup} + +\def\page_backgrounds_set_box_cell_nop#1#2% + {\setbox\scratchbox\emptyvbox + \wd\scratchbox#1% + \ht\scratchbox#2} + +\def\page_backgrounds_set_box_cell_yes#1#2% + {\setbox\scratchbox\vpack to #2{\vss\hpack to#1{\hss\p_page_backgrounds_command\hss}\vss}% + \dp\scratchbox\zeropoint} + +%D The background mechanism is quite demanding in terms or resources. We used to +%D delay these definitions till runtime usage, but since today's \TEX's are large, +%D we now do the work on forehand. +%D +%D \starttyping +%D \setupbackgrounds [settings] +%D \setupbackgrounds [paper,page,text,..] [settings] +%D \setupbackgrounds [top,...] [leftedge,...] [settings] +%D \stoptyping +%D +%D \showsetup{setupbackgrounds} +%D +%D Because the number of arguments runs from one to three, we need to check +%D for it. + +\newtoks\everybackgroundssetup + +% \permanent\protected\def\setupbackgrounds +% {\dotripleempty\page_backgrounds_setup} +% +% \def\page_backgrounds_setup +% {\ifthirdargument +% \expandafter\page_backgrounds_setup_double +% \orelse\ifsecondargument +% \expandafter\page_backgrounds_setup_single +% \orelse\iffirstargument +% \expandafter\page_backgrounds_setup_basics +% \fi} + +\permanent\tolerant\protected\def\setupbackgrounds[#1]#*[#2]#*[#3]% + {\ifarguments + \expandafter\gobblethreeoptionals + \or + \expandafter\page_backgrounds_setup_basics + \or + \expandafter\page_backgrounds_setup_single + \or + \expandafter\page_backgrounds_setup_double + \fi[#1][#2][#3]} + +\newdimen\d_page_backgrounds_offset +\newdimen\d_page_backgrounds_depth + +\appendtoks + \edef\p_page_backgrounds_offset{\namedframedparameter{\??layoutbackgrounds\v!page}\c!offset}% + \edef\p_page_backgrounds_depth {\namedframedparameter{\??layoutbackgrounds\v!page}\c!depth }% + \edef\p_page_backgrounds_state {\namedframedparameter{\??layoutbackgrounds }\c!state }% + \global\d_page_backgrounds_offset\ifx\p_offset\empty\zeropoint\else\p_page_backgrounds_offset\fi + \global\d_page_backgrounds_depth \ifx\p_depth \empty\zeropoint\else\p_page_backgrounds_depth \fi + \global\pagebackgroundoffset\d_page_backgrounds_offset\relax + \global\pagebackgrounddepth \d_page_backgrounds_depth \relax + \ifx\p_page_backgrounds_state\v!stop + \global\setfalse\c_page_backgrounds_new + \else + \global\settrue \c_page_backgrounds_new + \fi +\to \everybackgroundssetup + +\def\v_page_backgrounds_double_set{\v!paper,\v!page,\v!leftpage,\v!rightpage} +\def\v_page_backgrounds_single_set{\v!text,\v!hidden,\v!paper,\v!page,\v!leftpage,\v!rightpage} +\def\v_page_backgrounds_common_set{\v!leftedge,\v!leftmargin,\v!text,\v!rightmargin,\v!rightedge} + +\protected\def\page_backgrounds_setup_double[#1][#2][#3]% if needed we can speed this up + {\global\settrue\c_page_backgrounds_some + \def\page_backgrounds_setup_step##1% + {\doifelseinset{##1}\v_page_backgrounds_double_set + {\page_backgrounds_setup_and_check{##1}{#3}} + {\def\page_backgrounds_setup_step_nested####1{\page_backgrounds_setup_and_check{##1####1}{#3}}% + \processcommacommand[#2]\page_backgrounds_setup_step_nested}}% + \processcommacommand[#1]\page_backgrounds_setup_step + \the\everybackgroundssetup} + +\protected\def\page_backgrounds_setup_single[#1][#2][#3]% + {\global\settrue\c_page_backgrounds_some + \doifelsecommon{#1}\v_page_backgrounds_single_set + {\def\page_backgrounds_setup_step##1{\page_backgrounds_setup_and_check{##1}{#2}}% + \processcommacommand[#1]\page_backgrounds_setup_step + \the\everybackgroundssetup}% + {\page_backgrounds_setup_double[#1][\v_page_backgrounds_common_set][#2]}} + +\protected\def\page_backgrounds_setup_basics[#1][#2][#3]% + {\setupframed[\??layoutbackgrounds][#1]% + \the\everybackgroundssetup} + +\protected\def\page_backgrounds_setup_and_check#1#2% tag settings + {\edef\currentotrbackground{\??layoutbackgrounds#1}% + \setupframed[\currentotrbackground][#2]% + \page_backgrounds_check_background} + +%D Each areas (currently there are $1+3+25+1=30$ of them) has its own low level +%D framed object associated. + +\definesimplifiedframed[\??layoutbackgrounds\v!paper] +\definesimplifiedframed[\??layoutbackgrounds\v!page] +\definesimplifiedframed[\??layoutbackgrounds\v!leftpage] +\definesimplifiedframed[\??layoutbackgrounds\v!rightpage] + +\definesimplifiedframed[\??layoutbackgrounds\v!text] +\definesimplifiedframed[\??layoutbackgrounds\v!hidden] + +\definesimplifiedframed[\??layoutbackgrounds\v!top\v!leftedge] +\definesimplifiedframed[\??layoutbackgrounds\v!top\v!leftmargin] +\definesimplifiedframed[\??layoutbackgrounds\v!top\v!text] +\definesimplifiedframed[\??layoutbackgrounds\v!top\v!rightmargin] +\definesimplifiedframed[\??layoutbackgrounds\v!top\v!rightedge] + +\definesimplifiedframed[\??layoutbackgrounds\v!header\v!leftedge] +\definesimplifiedframed[\??layoutbackgrounds\v!header\v!leftmargin] +\definesimplifiedframed[\??layoutbackgrounds\v!header\v!text] +\definesimplifiedframed[\??layoutbackgrounds\v!header\v!rightmargin] +\definesimplifiedframed[\??layoutbackgrounds\v!header\v!rightedge] + +\definesimplifiedframed[\??layoutbackgrounds\v!text\v!leftedge] +\definesimplifiedframed[\??layoutbackgrounds\v!text\v!leftmargin] +\definesimplifiedframed[\??layoutbackgrounds\v!text\v!text] +\definesimplifiedframed[\??layoutbackgrounds\v!text\v!rightmargin] +\definesimplifiedframed[\??layoutbackgrounds\v!text\v!rightedge] + +\definesimplifiedframed[\??layoutbackgrounds\v!footer\v!leftedge] +\definesimplifiedframed[\??layoutbackgrounds\v!footer\v!leftmargin] +\definesimplifiedframed[\??layoutbackgrounds\v!footer\v!text] +\definesimplifiedframed[\??layoutbackgrounds\v!footer\v!rightmargin] +\definesimplifiedframed[\??layoutbackgrounds\v!footer\v!rightedge] + +\definesimplifiedframed[\??layoutbackgrounds\v!bottom\v!leftedge] +\definesimplifiedframed[\??layoutbackgrounds\v!bottom\v!leftmargin] +\definesimplifiedframed[\??layoutbackgrounds\v!bottom\v!text] +\definesimplifiedframed[\??layoutbackgrounds\v!bottom\v!rightmargin] +\definesimplifiedframed[\??layoutbackgrounds\v!bottom\v!rightedge] + +\setupbackgrounds + [\v!page] + [\c!offset=\zeropoint, % hm, so we need to force overlay elsewhere + \c!depth=\zeropoint] + +%D General setup: + +\setupbackgrounds + [\c!state=\c!start] + +%D The hidden layer can be populated by extending the following comma separated +%D list. This only happens in core modules. + +% todo page-2 .. page+2 achter pagina -> bleed +% spread-2 .. spread+2 achter spread -> spread (repeat 2 times) + +\permanent\protected\def\enablehiddenbackground + {\global\settrue\c_page_backgrounds_hidden_enabled + \global\settrue\c_page_backgrounds_some + \page_backgrounds_recalculate} + +\permanent\protected\def\disablehiddenbackground + {\global\setfalse\c_page_backgrounds_hidden_enabled} + +\def\hiddenbackgroundlist + {\v!text-2,\v!text-1,\v!foreground,\v!text+1,\v!text+2} + +\defineoverlay[\v!text-2][\positionregionoverlay\textanchor{\v!text-2}] % no new anchor, we share text +\defineoverlay[\v!text-1][\positionregionoverlay\textanchor{\v!text-1}] +\defineoverlay[\v!text+1][\positionregionoverlay\textanchor{\v!text+1}] +\defineoverlay[\v!text+2][\positionregionoverlay\textanchor{\v!text+2}] + +\setupbackgrounds + [\v!hidden] + [\c!background=\hiddenbackgroundlist] + +%D Because we haven't really set up backgrounds yet, we set the main efficiency +%D switch to false. + +\setfalse\c_page_backgrounds_some + +%D Sometimes you have a document wide (page) background but need to overload it +%D locally. In such case (at least in my experience) the only values that get set +%D are the background and backgroundcolor (if set at all). A full inheritance chain +%D would complicate things because then we need to use named backgrounds which in +%D turn will make this mechanism slower. I considered independent local backgrounds +%D but that also complicates the code (not that much) but isolation means that we +%D need to set more parameters each time. The following simple approach proabbly +%D suits most usage. +%D +%D \starttyping +%D \starttext +%D \setupbackgrounds[page][background=color,backgroundcolor=red] +%D \input tufte \page +%D \setupbackgrounds[page][background=,backgroundcolor=] +%D \input tufte \page +%D \setupbackgrounds[page][background=color,backgroundcolor=red] +%D \input tufte \page +%D \pushbackground[page] +%D \setupbackgrounds[page][background=color,backgroundcolor=green] +%D \input tufte \page +%D \popbackground +%D \input tufte \page +%D \stoptext +%D \stoptyping + +\permanent\protected\def\pushbackground[#1]% + {\pushmacro\popbackground + \edef\currentotrbackground{\??layoutbackgrounds#1}% + \overloaded\permanent\protected\edef\popbackground + {\setupframed + [\currentotrbackground] + [\c!background=\namedframedparameter{\currentotrbackground}\c!background, + \c!backgroundcolor=\namedframedparameter{\currentotrbackground}\c!backgroundcolor]% + \page_backgrounds_check_background + \popmacro\popbackground}% + \setupframed + [\currentotrbackground] + [\c!background=,\c!backgroundcolor=]% + \page_backgrounds_check_background} + +\permanent\let\popbackground\relax + +\protect \endinput + +% %D The next series is used in local (for instance floating) backgrounds. +% +% \installsimplifiedframed{\??layoutbackgrounds\v!local} +% +% \getparameters +% [\??layoutbackgrounds\v!local] +% [\c!component=local, +% \c!background=\localbackgroundlist] +% +% \def\localbackgroundlist +% {\v!local-2,\v!local-1,\v!foreground,\v!local+1,\v!local+2} +% +% \defineoverlay[\v!local-2][\positionoverlay{\v!local-2}] % todo share +% \defineoverlay[\v!local-1][\positionoverlay{\v!local-1}] +% \defineoverlay[\v!local+1][\positionoverlay{\v!local+1}] +% \defineoverlay[\v!local+2][\positionoverlay{\v!local+2}] +% +% \def\page_backgrounds_add_local_to_box +% {\ifconditional\c_page_backgrounds_hidden_enabled +% \expandafter\page_backgrounds_add_local_to_box_indeed +% \else +% \expandafter\gobbleoneargument +% \fi} +% +% \def\page_backgrounds_add_local_to_box_indeed#1% +% {\setbox#1\hbox{\localbackgroundframed{\??layoutbackgrounds\v!local}\v!local#1}% +% \global\advance\localpositionnumber\plusone} % afterwards ! +% +% \let\page_backgrounds_add_local_to_box\gobbleoneargument + +% Test how previous macro behaves with depth: +% +% \startcolumnset +% \input tufte +% \placefigure{none}{\framed[lines=5]{xxx}} +% \input tufte +% \placefigure{none}{\starttabulate\NC test\nc test\NC\NR\stoptabulate} +% \input tufte +% \stopcolumnset + diff --git a/tex/context/base/mkiv/page-ini.mkxl b/tex/context/base/mkiv/page-ini.mkxl new file mode 100644 index 000000000..6a9b75d22 --- /dev/null +++ b/tex/context/base/mkiv/page-ini.mkxl @@ -0,0 +1,376 @@ +%D \module +%D [ file=page-ini, +%D version=2000.10.20, +%D title=\CONTEXT\ Page Macros, +%D subtitle=Initializations, +%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 Page Macros / Initializations} + +\registerctxluafile{page-ini}{} + +%D The \type {\processpage} command has become obsolete. It's original +%D purpose was to flush only parts of a document but nowadays we have +%D project structure and modes. This is just one of those very early +%D features that no longer makes sense. + +%D The \type {\couplepage} command has become obsolete. It's original +%D purpose was to provide hooks for printer directives (like choosing +%D different paper trays). + +\unprotect + +%D Shipout control. + +\newcount\nofshipouts + +\appendtoks + \global\advance\nofshipouts\plusone +\to \everyaftershipout + +\newconditional\c_otr_shipout_enabled \settrue\c_otr_shipout_enabled + +\protected\def\page_otr_shipout % not used at all + {\ifconditional\c_otr_shipout_enabled + \expandafter\page_otr_shipout_yes + \else + \expandafter\page_otr_shipout_nop + \fi} + +\aliased\let\page_otr_shipout_yes\normalshipout + +\protected\def\page_otr_shipout_nop + {\writestatus\m!system{ignoring shipout of real page \the\realpageno}% + \global\advance\realpageno\minusone % else no flush of resources + \dowithnextbox{\deadcycles\zerocount}} + +% We don't support direct user \shipouts (weird: this does not work, bug?) +% +% \let\shipout\page_otr_shipout_nop + +%D Building pages. + +\newbox\pagebox + +% \ifdefined\page_postprocessors_column \else \let\page_postprocessors_column\gobbleoneargument \fi +% \ifdefined\page_postprocessors_page \else \let\page_postprocessors_page \gobbleoneargument \fi +% \ifdefined\page_postprocessors_box \else \let\page_postprocessors_box \gobbleoneargument \fi + +\newtoks\t_page_postprocessors_box +\newtoks\t_page_postprocessors_page +\newtoks\t_page_postprocessors_column + +\newconstant\b_page_postprocessor + +\def\page_apply_postprocessors_box#1% + {\b_page_postprocessor#1\relax + \the\t_page_postprocessors_box} + +\def\page_apply_postprocessors_page#1% + {\b_page_postprocessor#1\relax + \the\t_page_postprocessors_page} + +\def\page_apply_postprocessors_column#1% + {\b_page_postprocessor#1\relax + \the\t_page_postprocessors_column} + +%D Floats. + +\def\page_otr_flush_all_floats + {%\flushnotes already done + \ifconditional\c_page_floats_some_waiting + \page_otr_command_flush_all_floats + \fi} + +\def\page_otr_insert_dummy_page + {\par + \ifvmode + \page_otr_flush_all_floats + \fixedspace + \vfill + \page_otr_command_next_page + \fi} + +\def\page_otr_flush_pending_content + {\vkern\zeropoint\relax + \ifvoid\normalpagebox \else + \unvbox\normalpagebox + \penalty\outputpenalty + \fi} + +\newconstant\c_page_postponed_mode % \c_page_postponed_mode\plusone +\newbox \b_page_otr_saved + +\installoutputroutine\savepagecontent + {\global\setbox\b_page_otr_saved\box\normalpagebox} + +\permanent\protected\def\flushpagecontent + {\ifvoid\b_page_otr_saved\else\unvbox\b_page_otr_saved\fi} + +% Test case: assumes one group level for output routine, todo: +% a toks. +% +% \starttext +% +% \startbuffer[makeup] +% \startpagemakeup[pagestate=start,page=no] +% \color[red]{ +% \vfill +% \dorecurse{3}{ +% \samplefile{klein} +% \vfill +% } +% } +% \stoppagemakeup +% \stopbuffer +% +% \startcolor[green] +% \dorecurse{10}{ +% \dontleavehmode{\bf 1:#1:} \samplefile{sapolsky}\par +% } +% \stopcolor +% +% \startpostponing % [+3] +% \getbuffer[makeup] +% \stoppostponing +% +% \startcolor[blue] +% \dorecurse{25}{ +% \dontleavehmode{\bf 2:#1:} \samplefile{sapolsky}\par +% } +% \stopcolor +% +% \stoptext + +\def\page_otr_construct_and_shipout#1#2#3% + {\forgetall + \page_boxes_shipout{\page_boxes_constructed_page#1#2}% \hbox removed + \page_otr_flush_pending_content + % not really needed, replaced by \flushsavedfloats + \page_otr_check_for_pending_inserts + % but does not hurt either (we're still in the otr!) + \inpagebodytrue % needed for enabling \blank ! brrr + \pagebodymode\plusone % todo: \plustwo when spread + \page_otr_command_flush_saved_floats + \page_otr_command_set_vsize % this is needed for interacting components, like floats and multicolumns + \strc_pagenumbers_increment_counters % should hook into an every + \page_adapts_synchronize + \page_otr_check_for_pending_inserts + \page_otr_command_flush_facing_floats + \page_floats_flush_page_floats % before postponed blocks + \page_spread_flush % defined later + \ifnum#3=\plusone + % this is tricky! we need to make sure we are in the output group + \ifnum\c_page_postponed_mode=\plusone + \aftergroup\page_postponed_blocks_flush + \else + \page_postponed_blocks_flush + \fi + \else + \page_postponed_blocks_flush + \fi} + +% Can't we get rid of this hackery? It's used in some widgets +% stuff so probably not. + +\newbox\b_page_otr_special + +\def\page_otr_flush_special_content + {\ifvoid\b_page_otr_special \else + \box\b_page_otr_special + \fi} + +\def\page_otr_add_special_content + {\dowithnextboxcs\page_otr_add_special_content_indeed\hbox} + +\def\page_otr_add_special_content_indeed + {\wd\nextbox\zeropoint + \ht\nextbox\zeropoint + \dp\nextbox\zeropoint + \global\setbox\b_page_otr_special\hbox + {%\hskip-\maxdimen % not here, fails in acrobat (clips) + \box\b_page_otr_special\box\nextbox}}% was \unhbox, is now box again + +\let\flushatshipout\page_otr_add_special_content + +\maxdeadcycles=1000 + +\newtoks\afterpage \newtoks\aftereverypage +\newtoks\beforepage \newtoks\beforeeverypage + +\newif\ifarrangingpages \arrangingpagesfalse + +\newconstant\pageornamentstate % 0=on 1=one-off 2=always-off + +% \appendtoks +% \ifcase\pageornamentstate \or +% \pageornamentstate\zerocount +% \fi +% \to \everyaftershipout + +\appendtoks + \ifcase\pageornamentstate \or + \global\pageornamentstate\zerocount + \fi +\to \everyaftershipout + +% Mark synchronization + +\newconditional\c_page_marks_building_successive_pages \settrue\c_page_marks_building_successive_pages + +\def\page_marks_synchronize_page#1% box + {\strc_markings_synchronize[\v!page][#1][\ifconditional\c_page_marks_building_successive_pages\v!keep\fi]} + +\def\page_marks_synchronize_column#1#2#3#4% first last column box + {\ifnum#3=#1\relax + \strc_markings_synchronize[\number#3,\v!column:\number#3,\v!first,\v!column:\v!first][#4][]% + \orelse\ifnum#3=#2\relax + \strc_markings_synchronize[\number#3,\v!column:\number#3,\v!last, \v!column:\v!last ][#4][]% + \else + \strc_markings_synchronize[\number#3,\v!column:\number#3 ][#4][]% + \fi} + +% Page body building + +\newconditional\c_page_boxes_save_page_body +\newbox \b_page_boxes_saved_page_body + +\def\page_boxes_constructed_page_body#1#2% + {\ifconditional\c_page_boxes_save_page_body \global\setbox\b_page_boxes_saved_page_body \fi \vpack \bgroup + \boxmaxdepth\maxdimen % new + \dontcomplain + \page_marks_synchronize_page {#2}% we could consider doing this for \pagebox (needs testing) + \page_boxes_construct_content \pagebox{#1}{#2}% + \page_backgrounds_add_to_main \pagebox + \page_boxes_apply_offsets \pagebox + \page_info_add_to_box \pagebox + \ifcase\pageornamentstate + \page_backgrounds_add_to_paper \pagebox + \fi + \anch_positions_register_page \pagebox + \ifarrangingpages + \page_boxes_apply_shift_paper \pagebox % \v!paper + \else + \page_boxes_apply_clip_paper \pagebox + \page_marks_add_page \pagebox + \page_boxes_apply_replicate \pagebox + \page_boxes_apply_scale \pagebox + \page_boxes_apply_mirror_paper \pagebox + \page_boxes_apply_orientate_paper \pagebox + \page_marks_add_more \pagebox + \page_boxes_apply_center \pagebox + \page_backgrounds_add_to_print \pagebox + \page_boxes_apply_mirror_print \pagebox + \page_boxes_apply_orientate_print \pagebox + \page_boxes_apply_shift_print \pagebox % \v!page + \page_boxes_apply_offset \pagebox + \page_boxes_apply_negate_print \pagebox + \fi + \box\pagebox + \egroup \ifconditional\c_page_boxes_save_page_body \copy\b_page_boxes_saved_page_body \fi} + +\appendtoks + \restoreglobalbodyfont + \pickupattributes +\to \everybeforepagebody + +% if we really need this ... we need to bypass \permanent + +% \ifdefined\nestednewbox \else \newbox\nestednextbox \fi % hm, still needed? +% +% \prependtoks +% \let\nextbox\nestednextbox +% \to \everybeforepagebody + +\def\page_boxes_constructed_page#1#2% + {\vpack\bgroup % intercept spurious spaces + \the\everybeforepagebody + \starttextproperties + \checkmarginblocks + \the\beforeeverypage + \normalexpanded{\global\beforepage\emptytoks\the\beforepage}% + \inpagebodytrue + \pagebodymode\plusone % todo: \plustwo when spread + \page_boxes_constructed_page_body#1#2% + \normalexpanded{\global\afterpage \emptytoks\the\afterpage }% + \the\aftereverypage + \resetpagebreak + \resetlayouttextlines % will go to \aftereverypage + \stoptextproperties + \the\everyafterpagebody + \egroup} + +\permanent\def\doifelsetopofpage + {\ifdim\pagegoal=\maxdimen + \expandafter\firstoftwoarguments + \orelse\ifdim\pagegoal=\vsize + \expandafter\firstoftwoarguments + \else + \expandafter\secondoftwoarguments + \fi} + +\aliased\let\doiftopofpageelse\doifelsetopofpage + +% %D Idea: +% +% \newinsert\thispageinsert % <- installinsertion +% +% \def\flushatthispage +% {\bgroup +% \dowithnextbox{\insert\thispageinsert{\box\nextbox}\egroup}% +% \hbox} +% +% \appendtoks +% \ifvoid\thispageinsert\else\hbox{\smashedbox\thispageinsert}\fi +% \to \everyshipout + +% not yet in i-* file + +\installcorenamespace{markedpage} + +% todo: just define at the lua end ... less hassle + +\permanent\tolerant\protected\def\markpage [#1]#*[#2]{\clf_markpage {#1}{#2}} +\permanent \def\markedpages [#1]{\clf_markedpages {#1}} % expandable +\permanent\protected \def\doifelsemarkedpage#1{\clf_doifelsemarkedpage{#1}} +\permanent\protected \def\startmarkpages [#1]{\clf_startmarkpages {#1}} +\permanent\protected \def\stopmarkpages {\clf_stopmarkpages } + +%D Experimental: + +\newconstant\c_page_force_strut_depth_trace_mode + +\installtextracker + {otr.forcestrutdepth} + {\c_page_force_strut_depth_trace_mode\plusone} + {\c_page_force_strut_depth_trace_mode\zerocount} + +\installoutputroutine\forcestrutdepth + {\clf_forcestrutdepth\normalpagebox\strutdp\c_page_force_strut_depth_trace_mode + \unvbox\normalpagebox} + +\installoutputroutine\forcestrutdepthplus % experimental + {\clf_forcestrutdepthplus\normalpagebox\strutdp\c_page_force_strut_depth_trace_mode + \unvbox\normalpagebox} + +% maybe better: +% +% \installoutputroutine\doforcestrutdepth +% {\clf_forcestrutdepth\normalpagebox\strutdp\c_page_force_strut_depth_trace_mode +% \unvbox\normalpagebox} +% +% \protected\def\forcestrutdepth +% {\par\ifvmode\ifinner\else\doforcestrutdepth\fi\fi} + +% Also experimental: + +\permanent\protected\def\doifelsependingpagecontent{\clf_doifelsependingpagecontent} +% \permanent\protected\let\doifelsependingpagecontent\clf_doifelsependingpagecontent + +\protect \endinput diff --git a/tex/context/base/mkiv/page-inj.mkvi b/tex/context/base/mkiv/page-inj.mkvi index b1a2913cf..f1b520f5e 100644 --- a/tex/context/base/mkiv/page-inj.mkvi +++ b/tex/context/base/mkiv/page-inj.mkvi @@ -149,7 +149,7 @@ \stopsetups \startsetups[\??pageinjectionrenderings:\s!setup] - \setups[\dummyparameter\c!setup]% kind of redundant but fits in + \setups[\dummyparameter\c!setups]% kind of redundant but fits in \stopsetups \startsetups[\??pageinjectionrenderings:\v!buffer] diff --git a/tex/context/base/mkiv/page-lay.mkxl b/tex/context/base/mkiv/page-lay.mkxl new file mode 100644 index 000000000..d24621e60 --- /dev/null +++ b/tex/context/base/mkiv/page-lay.mkxl @@ -0,0 +1,1625 @@ +%D \module +%D [ file=page-lay, +%D version=2000.10.20, % copied from main-001 +%D title=\CONTEXT\ Page Macros, +%D subtitle=Layout Specification, +%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 Page Macros / Layout Specification} + +%D Before you start wondering why some of the page related modules skip upward or +%D left in order to place elements, you must realize that the reference point is the +%D top left corner of the main typesetting area. One reason for this choice is that +%D it suited some viewers that displayed page areas. Another reason is that margins, +%D edges and top and bottom areas are kind of virtual, while the header, text and +%D footer areas normally determine the text flow. + +\unprotect + +%D The dimensions related to layout areas are represented by real dimensions. + +\newdimen\paperheight \paperheight = 297mm +\newdimen\paperwidth \paperwidth = 210mm +\newdimen\paperoffset \paperoffset = \zeropoint +\newdimen\paperbleed \paperbleed = \zeropoint +\newdimen\spinewidth \spinewidth = \zeropoint + +\newdimen\printpaperheight \printpaperheight = \paperheight +\newdimen\printpaperwidth \printpaperwidth = \paperwidth + +\newdimen\makeupheight % calculated +\newdimen\makeupwidth % calculated + +\newdimen\textheight % calculated +\newdimen\textwidth % calculated + +\newdimen\topspace \topspace = 2cm +\newdimen\backspace \backspace = \topspace +\newdimen\cutspace \cutspace = \zeropoint +\newdimen\bottomspace \bottomspace = \zeropoint + +\newdimen\headerheight \headerheight = 2cm +\newdimen\footerheight \footerheight = \headerheight + +\newdimen\topoffset \topoffset = \zeropoint +\newdimen\backoffset \backoffset = \topoffset + +\newdimen\leftmarginwidth \leftmarginwidth = 3cm +\newdimen\rightmarginwidth \rightmarginwidth = \leftmarginwidth + +\newdimen\leftedgewidth \leftedgewidth = 3cm +\newdimen\rightedgewidth \rightedgewidth = \leftedgewidth + +\newdimen\topheight \topheight = \zeropoint +\newdimen\bottomheight \bottomheight = \topheight + +\newcount\layoutlines \layoutlines = \zerocount +\newcount\layoutcolumns \layoutcolumns = \zerocount +\newdimen\layoutcolumndistance \layoutcolumndistance = \zeropoint +\newdimen\layoutcolumnwidth \layoutcolumnwidth = \zeropoint + +\newdimen\totaltextwidth + +%D The next series of dimensions are complemented by left and rights ones. + +\newdimen\margindistance +\newdimen\edgedistance +\newdimen\marginwidth +\newdimen\edgewidth + +%D Because a distance does not really makes sense when there is no area, we use a +%D zero distance in case there is no area. + +%D The horizontal distances are: + +\newdimen\leftedgedistance +\newdimen\rightedgedistance +\newdimen\leftmargindistance +\newdimen\rightmargindistance + +%D The vertical distances are: + +\newdimen\topdistance +\newdimen\headerdistance +\newdimen\textdistance +\newdimen\footerdistance +\newdimen\bottomdistance + +\newdimen\textovershoot % available in pagebuilder + +%D We need to calculate the extra distances: + +\newdimen\naturalmarginwidth +\newdimen\naturaledgewidth +\newdimen\naturalmargindistance +\newdimen\naturaledgedistance +\newdimen\naturalleftedgedistance +\newdimen\naturalrightedgedistance +\newdimen\naturalleftmargindistance +\newdimen\naturalrightmargindistance +\newdimen\naturaltopdistance +\newdimen\naturalheaderdistance +\newdimen\naturaltextdistance +\newdimen\naturalfooterdistance +\newdimen\naturalbottomdistance + +%D Now we've come to the setup and definition commands. + +\installcorenamespace{layout} +\installcorenamespace{layoutlocation} +\installcorenamespace{layoutalternative} +\installcorenamespace{layoutcolumn} +\installcorenamespace{layoutmethod} + +\installswitchcommandhandler \??layout {layout} \??layout + +\appendtoks + \doifnothing{\directlayoutparameter\c!state}{\letlayoutparameter\c!state\v!start}% +\to \everydefinelayout + +\appendtoks + \ifcase\layoutsetupmode + % can't happen + \or % \setuplayout[name][key=value] + \ifx\previouslayout\currentlayout + \letlayoutparameter\c!state\v!normal % global ? still needed ? + \let\currentlayout\currentlayout + \page_layouts_synchronize + \page_layouts_check_next + \fi + \or % \setuplayout[key=value] + % we can inherit so we always synchronize + \letlayoutparameter\c!state\v!normal % global ? still needed ? + \let\currentlayout\previouslayout + \page_layouts_synchronize + \page_layouts_check_next + \or % \setuplayout[name] + \ifx\currentlayout\v!reset + \let\currentlayout\empty + \fi + \letlayoutparameter\c!state\v!normal % global ? still needed ? + \glet\currentlayout\currentlayout % global + \page_layouts_synchronize + \page_layouts_check_next + \or % \setuplayout (reverts to main layout) + \letlayoutparameter\c!state\v!normal % global ? still needed ? + \glet\currentlayout\empty % global + \page_layouts_synchronize + \page_layouts_check_next + \fi +\to \everysetuplayout + +\permanent\def\doifelselayoutdefined#1% + {\ifcsname\namedlayouthash{#1}\c!state\endcsname % maybe a helper + \expandafter\firstoftwoarguments + \else + \expandafter\secondoftwoarguments + \fi} + +\aliased\let\doiflayoutdefinedelse\doifelselayoutdefined + +\permanent\def\layoutdistance#1#2{\ifdim\zeropoint<#1#2\else\zeropoint\fi} + +% \newconditional\reverselayout + +\def\page_layouts_set_dimensions + {\global\naturalmarginwidth \layoutparameter\c!margin + \global\naturaledgewidth \layoutparameter\c!edge + \global\naturalmargindistance \layoutparameter\c!margindistance + \global\naturaledgedistance \layoutparameter\c!edgedistance + \global\naturalleftedgedistance \layoutparameter\c!leftedgedistance + \global\naturalrightedgedistance \layoutparameter\c!rightedgedistance + \global\naturalleftmargindistance \layoutparameter\c!leftmargindistance + \global\naturalrightmargindistance\layoutparameter\c!rightmargindistance + \global\naturaltopdistance \layoutparameter\c!topdistance + \global\naturalheaderdistance \layoutparameter\c!headerdistance + \global\naturaltextdistance \layoutparameter\c!textdistance + \global\naturalfooterdistance \layoutparameter\c!footerdistance + \global\naturalbottomdistance \layoutparameter\c!bottomdistance + % + \global\marginwidth \naturalmarginwidth + \global\edgewidth \naturaledgewidth + \global\margindistance \naturalmargindistance + \global\edgedistance \naturaledgedistance + % + \global\leftedgedistance \layoutdistance\leftedgewidth \naturalleftedgedistance + \global\rightedgedistance \layoutdistance\rightedgewidth \naturalrightedgedistance + \global\leftmargindistance \layoutdistance\leftmarginwidth \naturalleftmargindistance + \global\rightmargindistance \layoutdistance\rightmarginwidth\naturalrightmargindistance + \global\topdistance \layoutdistance\topheight \naturaltopdistance + \global\headerdistance \layoutdistance\headerheight \naturalheaderdistance + \global\textdistance \naturaltextdistance + \global\footerdistance \layoutdistance\footerheight \naturalfooterdistance + \global\bottomdistance \layoutdistance\bottomheight \naturalbottomdistance} + +\def\page_layouts_set_distances % local in \setreducedvsize + {\headerdistance\layoutdistance\headerheight\naturalheaderdistance + \footerdistance\layoutdistance\footerheight\naturalfooterdistance} + +% these are wrong in the running text, assumes some swapping, needs a cleanup + +\newtoks\extralayoutcalculations + +\def\page_layouts_calculate_extras + {\the\extralayoutcalculations} + +\newtoks\everyswapmargins % watch the order ! + +\appendtoks + \enforced\swapcsvalues\leftmargindistance\rightmargindistance + \enforced\swapcsvalues\leftedgedistance \rightedgedistance + \enforced\swapcsvalues\leftmarginwidth \rightmarginwidth + \enforced\swapcsvalues\leftedgewidth \rightedgewidth + % + \enforced\swapcsvalues\leftmargintotal \rightmargintotal + \enforced\swapcsvalues\leftedgetotal \rightedgetotal + \enforced\swapcsvalues\leftsidetotal \rightsidetotal + \enforced\swapcsvalues\leftcombitotal \rightcombitotal + \enforced\swapcsvalues\innermargintotal \outermargintotal + \enforced\swapcsvalues\inneredgetotal \outeredgetotal + \enforced\swapcsvalues\innercombitotal \outercombitotal + \enforced\swapcsvalues\innersidetotal \outersidetotal +\to \everyswapmargins + +%D The papersize macros have a long history and we don't want to change the commands +%D so they keep looking a bit complex. + +%D \macros +%D {definepapersize} +%D +%D Before we start calculating layout dimensions, we will first take care of paper +%D sizes. The first argument can be either an assignment (for defaults) or an +%D identifier, in which case the second argument is an assignment. +%D +%D \showsetup{definepapersize} +%D +%D Yet undocumented, let's see if it gets noticed. +%D +%D \starttyping +%D \definepapersize[main] [A4] [A4] +%D \definepapersize[extra][A4,landscape][A4,landscape] +%D +%D \starttext +%D \setuppapersize[main] +%D Page 1. \page +%D Page 2. \page +%D \setuppapersize[extra] +%D Page 2 \page +%D \setuppapersize[main] +%D Page 3. \page +%D Page 4. \page +%D \adaptpapersize[extra] +%D Page 5. \page +%D Page 6. \page +%D \stoptext +%D \stoptyping +%D +%D \macros +%D {setuppaper,setuppapersize} +%D +%D When setting up the papersize on which to typeset and print, we can also +%D determine some more characteristics. +%D +%D \showsetup{setuppapersize} +%D +%D We keep track of these features with the following +%D variables. + +\installcorenamespace{layouttarget} +\installcorenamespace{layoutpaper} +\installcorenamespace{layoutprint} +\installcorenamespace{layoutcurrent} + +\installcommandhandler \??layouttarget {layouttarget} \??layouttarget % so this is a sort of mix, not really a user command / maybe switch handler + +\newconditional\c_page_target_paper_mirror +\newconstant \c_page_target_paper_orientation +\newconstant \c_page_target_paper_reverse +\newconditional\c_page_target_paper_landscape +\newconditional\c_page_target_paper_negate + +\newconditional\c_page_target_print_mirror +\newconstant \c_page_target_print_orientation +\newconstant \c_page_target_print_reverse +\newconditional\c_page_target_print_landscape +\newconditional\c_page_target_print_negate +\newconditional\c_page_target_print_doublesided + +\let\v_page_target_left_fill \relax +\let\v_page_target_right_fill \relax +\let\v_page_target_top_fill \relax +\let\v_page_target_bottom_fill\relax + +\let\papersize \empty +\let\printpapersize\empty + +\def\v_page_target_top {\namedlayouttargetparameter\papersize\c!top } +\def\v_page_target_bottom {\namedlayouttargetparameter\papersize\c!bottom} +\def\v_page_target_left {\namedlayouttargetparameter\papersize\c!left } +\def\v_page_target_right {\namedlayouttargetparameter\papersize\c!right } +\def\v_page_target_method {\rootlayouttargetparameter \c!method} +\def\v_page_target_scale {\rootlayouttargetparameter \c!scale } +\def\v_page_target_nx {\numexpr\rootlayouttargetparameter \c!nx \relax} +\def\v_page_target_ny {\numexpr\rootlayouttargetparameter \c!ny \relax} +\def\v_page_target_dx {\dimexpr\rootlayouttargetparameter \c!dx \relax} +\def\v_page_target_dy {\dimexpr\rootlayouttargetparameter \c!dy \relax} +\def\v_page_target_width {\dimexpr\rootlayouttargetparameter \c!width \relax} +\def\v_page_target_height {\dimexpr\rootlayouttargetparameter \c!height \relax} +\def\v_page_target_topspace {\dimexpr\rootlayouttargetparameter \c!topspace \relax} +\def\v_page_target_backspace{\dimexpr\rootlayouttargetparameter \c!backspace\relax} +\def\v_page_target_offset {\dimexpr\rootlayouttargetparameter \c!offset \relax} + +\def\v_page_target_xy {\numexpr\v_page_target_nx*\v_page_target_ny\relax} + +%D Normally we will not use this command directly but for now it works out okay. In +%D the future we might use more of the related commands. + +\setuplayouttarget + [% these are rather special + \c!nx=1, + \c!ny=1, + \c!dx=\zeropoint, + \c!dy=\zeropoint, + \c!topspace=\zeropoint, + \c!backspace=\zeropoint, + \c!width=\zeropoint, + \c!height=\zeropoint, + % + \c!method=\v!normal, + \c!option=\v!max, + \c!alternative=\v!normal, + % + \c!scale=1, + \c!offset=\zeropoint, + % + \c!top=, + \c!bottom=, + \c!left=, + \c!right=, + % + \c!location=] + +% \definepapersize[name][A4][A3] +% \definepapersize[name][settings] + +\permanent\tolerant\protected\def\definepapersize[#1]#*[#2]#*[#3]% + {\edef\currentlayouttarget{#1}% + \ifx\currentlayouttarget\empty + % invalid target + \orelse\ifhastok={#2}% + \definelayouttarget[#1][#2]% + \else + \setevalue{\??layoutpaper#1}{#2}% + \ifparameter#3\or + \setevalue{\??layoutprint#1}{#3}% + \else + \setevalue{\??layoutprint#1}{#2}% + \fi + \fi} + +\appendtoks + \letvalue{\??layoutcurrent\currentlayouttarget}\relax +\to \everydefinelayouttarget + +%def\page_paper_the_paper_size#1{\ifcsname\??layoutpaper#1\endcsname\csname\??layoutpaper#1\endcsname\else#1\fi} +%def\page_paper_the_print_size#1{\ifcsname\??layoutprint#1\endcsname\csname\??layoutprint#1\endcsname\else#1\fi} + +\def\page_paper_the_paper_size#1{\ifcsname\??layoutpaper#1\endcsname\lastnamedcs\else#1\fi} +\def\page_paper_the_print_size#1{\ifcsname\??layoutprint#1\endcsname\lastnamedcs\else#1\fi} + +% \setuppaper [page=A4,paper=A3] % the k/v variant, changes the current page mapping +% \setuppapersize[A4][a=b,c=d] % the k/v variant, changes nothing, just settings +% \setuppapersize[A4][A3] % changes the current page mapping + +\let\page_paper_reinstate\relax +\let\page_paper_restore \relax + +\permanent\tolerant\protected\def\setuppapersize[#1]#*[#2]% + {\ifarguments + \page_paper_restore + \or + \ifhastok={#1}% + \page_paper_setup_size_settings[#1]% + \orelse\ifhastok={#2}% + \page_paper_setup_size_settings_by_name[#1][#2]% + \else + \page_paper_setup_size_change_size[#1][#2]% + \fi + \fi} + +\protected\def\page_paper_setup_size_settings[#1]% sometimes used to set paper/print size + {\let\currentlayouttarget\empty + \edef\m_layouttarget_paper_saved{\page_paper_the_paper_size{\layouttargetparameter\c!page }}% + \edef\m_layouttarget_print_saved{\page_paper_the_print_size{\layouttargetparameter\c!paper}}% + \setupcurrentlayouttarget[#1]% + \edef\m_layouttarget_paper{\page_paper_the_paper_size{\layouttargetparameter\c!page }}% + \edef\m_layouttarget_print{\page_paper_the_print_size{\layouttargetparameter\c!paper}}% + \ifx\m_layouttarget_paper_saved\m_layouttarget_paper + \ifx\m_layouttarget_print_saved\m_layouttarget_print + % we didn't change the size, maybe only sx or sy or so + \else + \page_paper_setup_size_settings_recalibrate + \fi + \else + \page_paper_setup_size_settings_recalibrate + \fi} + +\def\page_paper_setup_size_settings_recalibrate + {\ifx\m_layouttarget_paper\empty + % forget about it + \else + \ifx\m_layouttarget_print\empty + \let\m_layouttarget_print\m_layouttarget_paper + \fi + \page_paper_set_current[\m_layouttarget_paper][\m_layouttarget_print]% + \fi + \letlayouttargetparameter\c!page \papersize + \letlayouttargetparameter\c!paper\printpapersize} + +\protected\def\page_paper_setup_size_settings_by_name[#1][#2]% + {\def\currentlayouttarget{\page_paper_the_paper_size{#1}}% + \setuplayouttarget[#2]} + +\protected\def\page_paper_setup_size_change_size[#1][#2]% + {\doifelsenothing{#2} + {\page_paper_set_current[#1][#1]} + {\page_paper_set_current[#1][#2]}} + +\permanent\let\setuppaper\page_paper_setup_size_settings + +\permanent\protected\def\adaptpapersize + {\glet\page_paper_reinstate\page_paper_restore + \setuppapersize} + +\appendtoks + \page_paper_reinstate + \glet\page_paper_reinstate\relax +\to \everyaftershipout + +\protected\def\page_paper_set_restore#1#2% + {\xdef\page_paper_restore{\page_paper_set_current_indeed[#1][#2]}} + +\protected\def\page_paper_set_current[#1][#2]% + {\normalexpanded{\page_paper_set_current_indeed + [\page_paper_the_paper_size{#1}]% + [\page_paper_the_print_size{#2}]}} + +\protected\def\page_paper_reset_paper + {\global\setfalse\c_page_target_paper_landscape + \global\setfalse\c_page_target_paper_mirror + \global\setfalse\c_page_target_paper_negate + \global\c_page_target_paper_orientation\uprotationangle + \global\c_page_target_paper_reverse \uprotationangle} + +\protected\def\page_paper_reset_print + {\global\setfalse\c_page_target_print_landscape + \global\setfalse\c_page_target_print_mirror + \global\setfalse\c_page_target_print_negate + \global\c_page_target_print_orientation\uprotationangle + \global\c_page_target_print_reverse \uprotationangle} + +\letvalue{\??layoutpaper\v!reset}\page_paper_reset_paper +\letvalue{\??layoutprint\v!reset}\page_paper_reset_print + +\setvalue{\??layoutpaper\v!landscape }{\global\settrue\c_page_target_paper_landscape} +\setvalue{\??layoutpaper\v!mirrored }{\global\settrue\c_page_target_paper_mirror} +\setvalue{\??layoutpaper\v!negative }{\global\settrue\c_page_target_paper_negate} +\setvalue{\??layoutpaper\v!rotated }{\global\c_page_target_paper_orientation\rightrotationangle + \global\c_page_target_paper_reverse \leftrotationangle} +\setvalue{\??layoutpaper\number\rightrotationangle}{\global\c_page_target_paper_orientation\rightrotationangle + \global\c_page_target_paper_reverse \leftrotationangle} +\setvalue{\??layoutpaper\number\downrotationangle }{\global\c_page_target_paper_orientation\downrotationangle + \global\c_page_target_paper_reverse \zerocount} +\setvalue{\??layoutpaper\number\leftrotationangle }{\global\c_page_target_paper_orientation\leftrotationangle + \global\c_page_target_paper_reverse \rightrotationangle} + +\setvalue{\??layoutprint\v!landscape }{\global\settrue\c_page_target_print_landscape} +\setvalue{\??layoutprint\v!mirrored }{\global\settrue\c_page_target_print_mirror} +\setvalue{\??layoutprint\v!negative }{\global\settrue\c_page_target_print_negate} +\setvalue{\??layoutprint\v!rotated }{\global\c_page_target_print_orientation\rightrotationangle + \global\c_page_target_print_reverse \leftrotationangle} +\setvalue{\??layoutprint\number\rightrotationangle}{\global\c_page_target_print_orientation\rightrotationangle + \global\c_page_target_print_reverse \leftrotationangle} +\setvalue{\??layoutprint\number\downrotationangle }{\global\c_page_target_print_orientation\downrotationangle + \global\c_page_target_print_reverse \zerocount} +\setvalue{\??layoutprint\number\leftrotationangle }{\global\c_page_target_print_orientation\leftrotationangle + \global\c_page_target_print_reverse \rightrotationangle} + +%def\page_paper_handle_page_option #1{\ifcsname\??layoutpaper#1\endcsname\csname\??layoutpaper#1\endcsname\fi} +%def\page_paper_handle_print_option#1{\ifcsname\??layoutprint#1\endcsname\csname\??layoutprint#1\endcsname\fi} + +\def\page_paper_handle_page_option #1{\begincsname\??layoutpaper#1\endcsname} +\def\page_paper_handle_print_option#1{\begincsname\??layoutprint#1\endcsname} + +\protected\def\page_paper_identify_target#1% + {\ifcsname\??layoutcurrent#1\endcsname + \edef\currentlayouttarget{#1}% + \fi} + +\newdimen\d_page_minimum_paper_size \d_page_minimum_paper_size\luaexpr{math.pi}\onebasepoint + +\protected\def\page_paper_set_current_indeed[#1][#2]% + {\edef\m_page_asked_paper{#1}% can be the restores + \edef\m_page_asked_print{#2}% + % + \page_paper_set_restore\m_page_asked_paper\m_page_asked_print + % + % locate page target + \let\currentlayouttarget\empty + \page_paper_reset_paper + \processcommacommand[\m_page_asked_paper]\page_paper_identify_target + \ifx\currentlayouttarget\empty + \let\currentlayouttarget\currentpage + \fi + \glet\papersize\currentlayouttarget + \page_paper_reset_paper + \processcommacommand[\m_page_asked_paper]\page_paper_handle_page_option + \global\paperwidth \layouttargetparameter\c!width \relax + \global\paperheight\layouttargetparameter\c!height\relax + \ifdim\paperwidth<\d_page_minimum_paper_size + \global\paperwidth\d_page_minimum_paper_size + \fi + \ifdim\paperheight<\d_page_minimum_paper_size + \global\paperheight\d_page_minimum_paper_size + \fi + \ifconditional\c_page_target_paper_landscape + \enforced\global\swapcsvalues\paperwidth\paperheight + \fi + \ifinpagebody % local freeze + \normalexpanded{\setlayouttargetparemeter\c!height{\the\paperheight}}% + \normalexpanded{\setlayouttargetparemeter\c!width {\the\paperwidth }}% + \fi + % + \page_paper_set_offsets + % locate paper target + \page_paper_reset_print + \processcommacommand[\m_page_asked_print]\page_paper_identify_target + \glet\printpapersize\currentlayouttarget + \page_paper_reset_print + \processcommacommand[\m_page_asked_print]\page_paper_handle_print_option + \global\printpaperwidth \layouttargetparameter\c!width \relax + \global\printpaperheight\layouttargetparameter\c!height\relax + \ifdim\printpaperwidth<\onepoint + \global\printpaperwidth\paperwidth + \fi + \ifdim\printpaperheight<\onepoint + \global\printpaperheight\paperheight + \fi + \ifconditional\c_page_target_print_landscape + \enforced\global\swapcsvalues\printpaperwidth\printpaperheight + \fi + % this check can be confusing, so we've added the possibility + % to bypass this test: \setuppapersize[option=fit] + \edef\m_page_asked_option{\rootlayouttargetparameter\c!option}% + \ifx\m_page_asked_option\v!max % \v!fit is + \begingroup + % we need to pre-swap else we get the wrong paper size + \ifnum\c_page_target_paper_orientation=\rightrotationangle + \enforced\swapcsvalues\paperwidth\paperheight + \orelse\ifnum\c_page_target_paper_orientation=\leftrotationangle + \enforced\swapcsvalues\paperwidth\paperheight + \fi + \ifnum\c_page_target_print_orientation=\rightrotationangle + \enforced\swapcsvalues\printpaperwidth\printpaperheight + \orelse\ifnum\c_page_target_print_orientation=\leftrotationangle + \enforced\swapcsvalues\printpaperwidth\printpaperheight + \fi + \ifdim\paperheight>\printpaperheight + \global\printpaperheight\paperheight + \writestatus\m!system{print height forced to paper height}% + \fi + \ifdim\paperwidth>\printpaperwidth + \global\printpaperwidth\paperwidth + \writestatus\m!system{print width forced to paper width}% + \fi + \endgroup + \fi + %\writestatus{layout target}{(\the\paperwidth,\the\paperheight) -> (\the\printpaperwidth,\the\printpaperheight)}% + \page_layouts_synchronize + % new but we assume \setuplayout + \scrn_canvas_synchronize_only} + +\ifdefined\scrn_canvas_synchronize_only \else + \let\scrn_canvas_synchronize_only\relax +\fi + +\ifdefined\page_paper_set_offsets \else + + \def\page_paper_set_offsets % will move + {\global\paperoffset\v_page_target_offset + \global\advance\paperwidth -2\paperoffset + \global\advance\paperheight-2\paperoffset} + +\fi + +\ifdefined\synchronizegridsnapping \else + \let\synchronizegridsnapping\relax +\fi + +\let\p_page_layouts_width \empty +\let\p_page_layouts_height\empty + +\def\page_layouts_synchronize + {\setups[\layoutparameter\c!preset]\relax + \global\leftmarginwidth \layoutparameter\c!leftmargin + \global\rightmarginwidth\layoutparameter\c!rightmargin + \global\leftedgewidth \layoutparameter\c!leftedge + \global\rightedgewidth \layoutparameter\c!rightedge + \global\headerheight \layoutparameter\c!header + \global\footerheight \layoutparameter\c!footer + \global\bottomheight \layoutparameter\c!bottom + \global\topheight \layoutparameter\c!top + \global\backspace \layoutparameter\c!backspace + \global\topspace \layoutparameter\c!topspace + \page_layouts_set_dimensions + \synchronizegridsnapping + \usesetupsparameter\layoutparameter % depends on gridsnapping ! + \synchronizewhitespace + \synchronizeblank + \setupinterlinespace[\v!reset]% \synchronizegloballinespecs + \global\cutspace\layoutparameter\c!cutspace\relax + \edef\p_page_layouts_width{\layoutparameter\c!width}% + \ifx\p_page_layouts_width\v!middle + \ifzeropt\cutspace + \global\cutspace\backspace + \fi + \global\makeupwidth\dimexpr\paperwidth-\backspace-\cutspace\relax + \orelse\ifx\p_page_layouts_width\v!fit + \ifzeropt\cutspace + \global\cutspace\backspace + \fi + \global\makeupwidth\dimexpr\paperwidth-\cutspace\relax + \scratchdimen\dimexpr\backspace + -\leftedgewidth -\leftedgedistance + -\leftmarginwidth-\leftmargindistance\relax + \ifdim\scratchdimen<\zeropoint + \scratchdimen\zeropoint + \fi + \global\advance\makeupwidth\dimexpr + -\rightmargindistance-\rightmarginwidth + -\rightedgedistance -\rightedgewidth + -\scratchdimen\relax + \else + \global\makeupwidth\p_page_layouts_width\relax + \ifzeropt\cutspace + \global\cutspace\dimexpr\paperwidth-\makeupwidth-\backspace\relax + % \else + % A kind of inconsistent specification, but used + % in for instance s-pre-19.tex; the cutspace is + % used only for determining some kind of right + % margin; don't use this in doublesided mode + \fi + \fi + \scratchdimen\layoutparameter\c!bottomspace\relax + %\ifzeropt\scratchdimen + % \scratchdimen\topspace + %\fi + \global\bottomspace\layoutparameter\c!bottomspace\relax + \global\layoutlines0\number\layoutparameter\c!lines\relax % may be empty + \ifcase\layoutlines + \edef\p_page_layouts_height{\layoutparameter\c!height}% + \ifx\p_page_layouts_height\v!middle + \ifzeropt\bottomspace + \global\bottomspace\topspace + \fi + \global\makeupheight\dimexpr\paperheight-\topspace-\bottomspace\relax + \orelse\ifx\p_page_layouts_height\v!fit + \ifzeropt\bottomspace + \global\bottomspace\topspace + \fi + \global\makeupheight\dimexpr\paperheight-\bottomspace\relax + \scratchdimen\dimexpr\topspace-\topheight-\topdistance\relax + \ifdim\scratchdimen<\zeropoint + \scratchdimen\zeropoint + \fi + \global\advance\makeupheight\dimexpr-\bottomdistance-\bottomheight-\scratchdimen\relax + \else + \global\makeupheight\layoutparameter\c!height\relax + \ifzeropt\bottomspace + \global\bottomspace\dimexpr\paperheight-\makeupheight-\topspace\relax + % \else + % inconsistent specification + \fi + \fi + \else + % beware, when the bodyfont changes (switched) this will change as well; implementing + % a global lineheight is tricky: should we take the bodyfont interlinespace or the one set + % independent of the bodyfont (before or after a layout spec); way too fuzzy, so we + % stick to the current method (after a night of experimenting ...2003/10/13) + \global\makeupheight\dimexpr + \layoutparameter\c!lines\lineheight-\strutheight+\topskip+ + \headerdistance+\headerheight+\footerdistance+\footerheight\relax + \fi + \backoffset\layoutparameter\c!horoffset\relax + \topoffset \layoutparameter\c!veroffset\relax + \ifdim\makeupwidth<\onepoint + \global\makeupwidth\onepoint + \fi + \ifdim\makeupheight<\onepoint + \global\makeupheight\onepoint + \fi + % handy in page builder + \global\totaltextwidth\dimexpr + \leftedgetotal + +\leftmargintotal + +\makeupwidth + +\rightmargintotal + +\rightedgetotal + \relax + % \page_layouts_check_next % here ? + \page_layouts_check_direction + \page_layouts_calculate_extras + \page_target_check_centering + \calculatehsizes + \calculatevsizes + \page_layouts_check_pseudo_columns + \page_backgrounds_recalculate} + +\def\page_layouts_check_direction + {\edef\p_direction{\layoutparameter\c!direction}% + \ifx\p_direction\v!reverse + \enforced\global\swapcsvalues\naturalleftedgedistance \naturalrightedgedistance + \enforced\global\swapcsvalues\naturalleftmargindistance\naturalrightmargindistance + \enforced\global\swapcsvalues\leftedgedistance \rightedgedistance + \enforced\global\swapcsvalues\leftmargindistance \rightmargindistance + \enforced\global\swapcsvalues\leftmarginwidth \rightmarginwidth + \enforced\global\swapcsvalues\leftedgewidth \rightedgewidth + \enforced\global\swapcsvalues\backspace \cutspace + \expandafter\setsystemmode + \else + \expandafter\resetsystemmode + \fi{reverselayout}} + +\def\page_layouts_check_pseudo_columns + {\global\layoutcolumns\layoutparameter\c!columns + \global\layoutcolumndistance\layoutparameter\c!columndistance + \global\layoutcolumnwidth\dimexpr\makeupwidth-\layoutcolumns\layoutcolumndistance+\layoutcolumndistance\relax + \ifnum\layoutcolumns>\plusone + \global\divide\layoutcolumnwidth\layoutcolumns + \dorecurse\layoutcolumns\page_layouts_check_pseudo_column + \fi} + +\def\page_layouts_check_pseudo_column + {\setxvalue{\??layoutcolumn\recurselevel}% + {\the\numexpr\recurselevel-\plusone\relax\dimexpr\layoutcolumnwidth+\layoutcolumndistance\relax}} + +\letvalue{\??layoutcolumn0}\zeropoint + +\def\layoutcolumnoffset#1% can travel around so we can't use \lastnamedcs + {\csname\??layoutcolumn\ifcsname\??layoutcolumn#1\endcsname#1\else0\fi\endcsname} + +\def\page_layouts_synchronize_at_start + {\ifdim\makeupheight=\layoutlines\lineheight \else % weird check + \page_layouts_synchronize + \fi} + +\appendtoks + \page_layouts_synchronize_at_start % still needed? +\to \everystarttext + +% document: +% +% \setuplayout[odd][state=stop] \setuplayout[even][state=stop] \setuplayout[page] +% +% \startstandardmakeup[page=blank] ... \stopstandardmakeup + +\ifdefined\lastpage \else \let\lastpage\!!plusone \fi + +\def\page_layouts_change#1% + {%\writestatus\m!layouts{changing to layout #1}% + \xdef\currentlayout{#1}% + \page_layouts_synchronize} + +\let\changetolayout\page_layouts_change % also public + +\def\v_real_page_normal {\the\realpageno} +\def\v_real_page_reverse{-\the\numexpr\lastpage-\realpageno\relax} + +\def\v_real_page_odd_or_even + {\ifodd\pagenoshift + \ifodd\realpageno\v!even\else\v!odd \fi + \else + \ifodd\realpageno\v!odd \else\v!even\fi + \fi} + +\let\v_real_page_current\v!current + +\def\v_real_page_named + {\ifnum\lastpage=\realpageno + \v!last + \orelse\ifnum\plusone=\realpageno + \v!first + \else + \__unknown__ + \fi} + +\let\v_page_layouts_pre_check\relax + +\def\page_layouts_check_default_indeed#1% + {\edef\m_page_check{#1} + \edef\m_page_state{\namedlayoutparameter\m_page_check\c!state}% + \ifx\m_page_state\v!start + \glet\v_page_layouts_pre_check\currentlayout + \glet\currentlayout\m_page_check + \page_layouts_synchronize + \orelse\ifx\m_page_state\v!repeat + \glet\v_page_layouts_pre_check\relax + \glet\currentlayout\m_page_check + \page_layouts_synchronize + \fi} + +\def\page_layouts_check_revert + {\glet\currentlayout\v_page_layouts_pre_check + \glet\v_page_layouts_pre_check\relax + \page_layouts_synchronize} + +\def\page_layouts_check_default + {\ifcsname\namedlayouthash\v_real_page_normal\c!state\endcsname + \page_layouts_check_default_indeed\v_real_page_normal + \orelse\ifcsname\namedlayouthash\v_real_page_reverse\c!state\endcsname + \page_layouts_check_default_indeed\v_real_page_reverse + \orelse\ifcsname\namedlayouthash\v_real_page_named\c!state\endcsname + \page_layouts_check_default_indeed\v_real_page_named + \orelse\ifcsname\namedlayouthash\v_real_page_current\c!state\endcsname + \page_layouts_check_default_indeed\v_real_page_current + \orelse\ifcsname\namedlayouthash\v_real_page_odd_or_even\c!state\endcsname + \page_layouts_check_default_indeed\v_real_page_odd_or_even + \orelse\ifx\v_page_layouts_pre_check\relax + % okay + \else + \page_layouts_check_revert + \fi} + +\permanent\protected\def\installlayoutmethod#1#2% + {\setgvalue{\??layoutmethod#1}{#2}} + +\installlayoutmethod\v!default{\page_layouts_check_default} +\installlayoutmethod\v!normal {\page_layouts_check_default} + +% \def\page_layouts_check_next +% {\csname\??layoutmethod\ifcsname\??layoutmethod\layoutparameter\c!method\endcsname +% \layoutparameter\c!method +% \else +% \v!normal +% \fi\endcsname} + +\def\page_layouts_check_next + {\ifcsname\??layoutmethod\layoutparameter\c!method\endcsname + \lastnamedcs + \else + \page_layouts_check_default + \fi} + +\let\checkcurrentlayout\page_layouts_check_next % public and used in naw, so this synonym will stay + +% inheritance +% +% \definelayout +% [test] +% [width=12cm, +% height=10cm] +% +% \definelayout +% [more] +% [test] +% [height=12cm] +% +% testcase +% +% \setuppagenumbering[alternative=doublesided] +% +% \setuplayout [width=11cm] +% \definelayout [odd] [backspace=1cm] +% \definelayout [even] [backspace=4cm] +% \definelayout [5] [backspace=5cm] +% \definelayout [6] [backspace=5cm] +% \definelayout [-2] [backspace=0cm,cutspace=0cm] +% \definelayout [last] [backspace=0cm,cutspace=0cm] +% +% \checkcurrentlayout \showframe +% +% \starttext +% \dorecurse{20} {\input knuth \endgraf \input tufte \endgraf} +% \stoptext + +% Because we want to keep the set parameters as they are we use some +% helpers to communicate between the several page building related +% mechanism. + +\appendtoks \page_layouts_check_next \to \everystarttext +\appendtoks \page_layouts_check_next \to \everyaftershipout + +\newconditional\c_page_layouts_location_is_set +\newconditional\c_page_layouts_location_is_middle + +\def\page_layouts_location_reset % we start in the left top and mirror right pages + {\setfalse\c_page_layouts_location_is_set + \setfalse\c_page_layouts_location_is_middle + \let\v_page_target_left_fill \relax + \let\v_page_target_right_fill \hss % ? \relax + \let\v_page_target_top_fill \relax + \let\v_page_target_bottom_fill\vss} % \relax} + +\setvalue{\??layoutlocation\v!right }{\settrue\c_page_layouts_location_is_set + \setfalse\c_page_layouts_location_is_middle + \let\v_page_target_left_fill \hss + \let\v_page_target_right_fill \relax} +\setvalue{\??layoutlocation\v!left }{\settrue\c_page_layouts_location_is_set + \setfalse\c_page_layouts_location_is_middle + \let\v_page_target_left_fill \relax + \let\v_page_target_right_fill \hss} +\setvalue{\??layoutlocation\v!bottom }{\settrue\c_page_layouts_location_is_set + \setfalse\c_page_layouts_location_is_middle + \let\v_page_target_top_fill \vss + \let\v_page_target_bottom_fill\relax} +\setvalue{\??layoutlocation\v!top }{\settrue\c_page_layouts_location_is_set + \setfalse\c_page_layouts_location_is_middle + \let\v_page_target_top_fill \relax + \let\v_page_target_bottom_fill\vss} +\setvalue{\??layoutlocation\v!middle }{\settrue\c_page_layouts_location_is_set + \settrue\c_page_layouts_location_is_middle + \let\v_page_target_left_fill \hss + \let\v_page_target_right_fill \hss + \let\v_page_target_top_fill \vss + \let\v_page_target_bottom_fill\vss} +\setvalue{\??layoutlocation\empty }{\setfalse\c_page_layouts_location_is_set % default also signal to scrn_ + \setfalse\c_page_layouts_location_is_middle + \let\v_page_target_right_fill \hss + \let\v_page_target_bottom_fill\hss} +\setvalue{\??layoutlocation\v!doublesided}{\settrue \c_page_target_print_doublesided} +\setvalue{\??layoutlocation\v!singlesided}{\setfalse\c_page_target_print_doublesided} + +\def\page_target_check_centering_indeed#1% + % {\ifcsname\??layoutlocation#1\endcsname\csname\??layoutlocation#1\endcsname\fi} + {\begincsname\??layoutlocation#1\endcsname} + +\protected\def\page_target_check_centering + {\setfalse\c_page_target_print_doublesided + \page_layouts_location_reset + \processcommacommand[\layoutparameter\c!location]\page_target_check_centering_indeed} + +% installers + +\permanent\protected\def\installlayoutalternative#1#2% + {\setgvalue{\??layoutalternative#1}{#2}} + +\def\page_boxes_construct_content_default#1#2#3% targetbox flusher box + {\setbox#1\vpack % was \vbox + {\offinterlineskip + \begingroup % needed ? + \uselayoutstyleandcolor\c!style\c!color + \offinterlineskip + \page_layouts_insert_elements % zero size + \endgroup + \page_insert_body#2#3}}% including footnotes + +\installlayoutalternative\v!default{\page_boxes_construct_content_default} +\installlayoutalternative\v!normal {\page_boxes_construct_content_default} + +% \def\page_boxes_construct_content % targetbox flusher box +% {\csname\??layoutalternative\ifcsname\??layoutalternative\layoutparameter\c!alternative\endcsname +% \layoutparameter\c!alternative +% \else +% \v!normal +% \fi\endcsname} + +\def\page_boxes_construct_content % targetbox flusher box + {\ifcsname\??layoutalternative\layoutparameter\c!alternative\endcsname + \expandafter\lastnamedcs + \else + \expandafter\page_boxes_construct_content_default + \fi} + +%D \macros +%D {adaptlayout} + +\installcorenamespace{adaptlayout} +\installcorenamespace{pageadaptations} + +\installsetuponlycommandhandler \??adaptlayout {adaptlayout} + +\newdimen\d_page_adepts_pushed_text_height +\newdimen\d_page_adepts_pushed_footer_height +\newdimen\d_page_adepts_height +\newdimen\d_page_adapts_delta + +\permanent\protected\tolerant\def\adaptlayout[#1]#*[#2]% + {\ifparameter#2\or + \processcommalist[#1]{\page_adapts_layout_register{#2}}% + \page_adapts_check + \else + \page_adapts_layout_indeed{#1}% + \fi} + +\def\page_adapts_layout_register#1#2% + {\setgvalue{\??pageadaptations#2}{\page_adapts_layout_indeed{#1}}} + +\let\p_adapts_height\zeropoint +\let\p_adapts_lines \zerocount + +\def\page_adapts_layout_indeed#1% + {\setupcurrentadaptlayout[\c!height=\zeropoint,\c!lines=\zerocount,#1]% + \page_adepts_push + \edef\p_adapts_height{\adaptlayoutparameter\c!height}% + \edef\p_adapts_lines {\adaptlayoutparameter\c!lines}% + \ifx\p_adapts_height\v!max + \global\d_page_adepts_height\footerheight + \else + \global\d_page_adepts_height\dimexpr + \ifnum\p_adapts_lines=\zerocount + \p_adapts_height + \else + \p_adapts_lines\openlineheight + \fi + \relax + \ifdim\d_page_adepts_height>\footerheight + \global\d_page_adepts_height\footerheight + \fi + \fi + \global\advance\textheight \d_page_adepts_height + \global\advance\footerheight-\d_page_adepts_height + \showmessage\m!layouts1{\the\d_page_adepts_height,\the\realpageno}% + % this will become a better one (do we need insert correction?) + \page_otr_command_set_vsize + % + \page_backgrounds_recalculate + \glet\page_adepts_push\relax + \glet\page_adepts_pop\page_adepts_pop_indeed} + +% \def\page_adapts_check +% {\csname\??pageadaptations\the\ifcsname\??pageadaptations\the\realpageno\endcsname\realpageno\else\zerocount\fi\endcsname} +% +% \def\page_adapts_reset +% {\ifcsname\??pageadaptations\the\realpageno\endcsname +% \global\undefinevalue{\??pageadaptations\the\realpageno}% +% \fi} + +\def\page_adapts_check + {\begincsname\??pageadaptations\the\realpageno\endcsname} + +\def\page_adapts_reset + {\ifcsname\??pageadaptations\the\realpageno\endcsname + \expandafter\glet\csname\??pageadaptations\the\realpageno\endcsname\relax + \fi} + +\def\page_adepts_push_indeed + {\global\d_page_adepts_pushed_text_height \textheight + \global\d_page_adepts_pushed_footer_height\footerheight} + +\def\page_adepts_pop_indeed + {\global\textheight \d_page_adepts_pushed_text_height + \global\footerheight\d_page_adepts_pushed_footer_height + \page_layouts_synchronize + \glet\page_adepts_push\page_adepts_push_indeed + \glet\page_adepts_pop\relax} + +\appendtoks \page_adapts_check \to \everystarttext +\appendtoks \page_adapts_reset \to \everyshipout + +\let\page_adepts_pop \relax +\let\page_adepts_push\page_adepts_push_indeed + +\protected\def\page_adapts_synchronize % used elsewhere + {\page_adepts_pop + \page_adapts_check} + +\def\page_adapts_status_info % used elsewhere + {\ifx\page_adepts_pop\relax \else + \space(adept: \the\d_page_adepts_height)\space + \fi + \the\realpageno} + +%D \macros +%D {startlayout,stoplayout} + +\permanent\protected\def\startlayout[#1]% + {\page + \globalpushmacro\currentlayout + \doifelselayoutdefined{#1}{\setuplayout[#1]}\donothing} % {\setuplayout[\currentlayout]}} + +\permanent\protected\def\stoplayout + {\page + \globalpopmacro\currentlayout + \setuplayout[\currentlayout]} + +% NOG EENS NAGAAN WANNEER NU GLOBAL EN WANNEER NIET + +\ifx\doifelselayoutsomeline\undefined % eventually defined in page-txt + \let\doifelselayoutsomeline\secondofthreearguments +\fi + +\permanent\def\compensatevsizeheader {\advance\textheight-\dimexpr\headerheight+\headerdistance\relax} +\permanent\def\compensatevsizefooter {\advance\textheight-\dimexpr\footerheight+\footerdistance\relax} +\permanent\def\globalcompensatevsizeheader{\global\advance\textheight-\dimexpr\headerheight+\headerdistance\relax} +\permanent\def\globalcompensatevsizefooter{\global\advance\textheight-\dimexpr\footerheight+\footerdistance\relax} + +\permanent\def\compensatevsizeheaderzero{\headerheight\zeropoint\page_layouts_set_distances} +\permanent\def\compensatevsizefooterzero{\footerheight\zeropoint\page_layouts_set_distances} + +\def\page_layouts_set_modes + {\ifzeropt\headerheight + \resetsystemmode\v!header + \else + \setsystemmode\v!header + \fi + \ifzeropt\footerheight + \resetsystemmode\v!footer + \else + \setsystemmode\v!footer + \fi} + +\permanent\protected\def\calculatevsizes % name will change + {\textheight\makeupheight + \doifelselayoutsomeline\v!header\compensatevsizeheader\donothing + \doifelselayoutsomeline\v!footer\compensatevsizefooter\donothing + \page_layouts_set_modes + \resetglobal + \page_otr_command_set_vsize} + +\permanent\protected\def\calculateglobalvsizes % name will change + {\global\textheight\makeupheight + \doifelselayoutsomeline\v!header\globalcompensatevsizeheader\donothing + \doifelselayoutsomeline\v!footer\globalcompensatevsizefooter\donothing + \page_layouts_set_modes + \page_otr_command_set_vsize} + +\permanent\protected\def\calculatereducedvsizes % name will change + {\textheight\makeupheight + \doifelselayoutsomeline\v!header\compensatevsizeheader\compensatevsizeheaderzero + \doifelselayoutsomeline\v!footer\compensatevsizefooter\compensatevsizefooterzero} + +\newdimen\innermakeupwidth % special purpose +\newdimen\innermakeupmargin % special purpose + +\newconditional\innermakeupcompensation \settrue\innermakeupcompensation + +\permanent\def\compensatedinnermakeupmargin + {\dimexpr\ifconditional\innermakeupcompensation+\innermakeupmargin\else\zeropoint\fi\relax} + +\permanent\protected\def\freezetextwidth % name will change % \makeupwidth may be set to \textwidth + {\textwidth\makeupwidth % which is a tricky but valid value + \edef\m_currentlayout_text_width {\layoutparameter\c!textwidth }% + \edef\m_currentlayout_text_margin{\layoutparameter\c!textmargin}% + \ifx\m_currentlayout_text_width\empty \else + \textwidth\m_currentlayout_text_width % local + \fi + \global\innermakeupwidth\textwidth + \ifx\m_currentlayout_text_margin\empty + \global\innermakeupmargin\zeropoint + \else + \global\innermakeupmargin\m_currentlayout_text_margin\relax + \fi + \scratchdimen\dimexpr\innermakeupmargin+\innermakeupmargin\relax + \global\advance\innermakeupwidth-\scratchdimen + \advance\textwidth-\scratchdimen} % local + +\permanent\protected\def\calculatehsizes % name will change + {\freezetextwidth + \page_otr_command_set_hsize} + +%D When we start at an even page, we need to swap the layout differently. We cannot +%D adapt the real page number, since it is used in cross referencing. The next +%D switch is set when we start at an even page. + +% #single #left #right + +\permanent\def\doifelseoddpage + {\ifodd\pagenoshift + \expandafter\page_layouts_if_odd_else_yes + \else + \expandafter\page_layouts_if_odd_else_nop + \fi} + +\aliased\let\doifoddpageelse\doifelseoddpage + +\def\page_layouts_if_odd_else_yes + {\ifodd\realpageno + \expandafter\secondoftwoarguments + \else + \expandafter\firstoftwoarguments + \fi} + +\def\page_layouts_if_odd_else_nop + {\ifodd\realpageno + \expandafter\firstoftwoarguments + \else + \expandafter\secondoftwoarguments + \fi} + +\def\page_layouts_if_odd_else_again#1{\doifelseoddpage} + +\def\doifbothsidesoverruled + {\ifdoublesided + \expandafter\page_layouts_if_odd_else_again + \else + \expandafter\firstofthreearguments + \fi} + +\def\doifbothsides% #1 #2 #3 + {\ifdoublesided + \expandafter\page_layouts_if_both_sides + \else + \expandafter\firstofthreearguments + \fi} + +\def\page_layouts_if_both_sides + {\ifsinglesided + \expandafter\firstofthreearguments + \else + \expandafter\page_layouts_if_odd_else_again + \fi} + +\newdimen\texthoffset + +\permanent\protected\def\settexthoffset % name will change + {\texthoffset\doifbothsides\backspace\backspace{\dimexpr\paperwidth-\backspace-\makeupwidth\relax}} + +\permanent\protected\def\goleftonpage % name will change (we could cache) + {\hkern-\dimexpr\leftmargindistance+\leftmarginwidth+\leftedgedistance+\leftedgewidth\relax} + +\permanent\def\doifelsemarginswap#1#2% protected? + {\doifbothsides{#1}{#1}{#2}} + +\aliased\let\doifmarginswapelse\doifelsemarginswap + +\def\swapmargins % name will change, frozen? + {\doifelsemarginswap\relax\doswapmargins} + +\def\doswapmargins % name will change, frozen? + {\let\swapmargins \relax % to prevent local swapping + \let\doswapmargins\relax % to prevent local swapping + \the\everyswapmargins} + +\permanent\def\rightorleftpageaction + {\ifdoublesided + \expandafter\page_layouts_right_or_left_page_action + \else + \expandafter\firstoftwoarguments + \fi} + +\def\page_layouts_right_or_left_page_action + {\ifsinglesided + \expandafter\firstoftwoarguments + \else + \expandafter\doifelseoddpage + \fi} + +% swapping needs frozen + +\permanent\def\outermarginwidth {\rightorleftpageaction\rightmarginwidth \leftmarginwidth } +\permanent\def\innermarginwidth {\rightorleftpageaction\leftmarginwidth \rightmarginwidth} +\permanent\def\outermargindistance{\rightorleftpageaction\rightmargindistance\leftmargindistance } +\permanent\def\innermargindistance{\rightorleftpageaction\leftmargindistance \rightmargindistance} + +\permanent\def\outeredgewidth {\rightorleftpageaction\rightedgewidth \leftedgewidth } +\permanent\def\inneredgewidth {\rightorleftpageaction\leftedgewidth \rightedgewidth} +\permanent\def\outeredgedistance {\rightorleftpageaction\rightedgedistance\leftedgedistance } +\permanent\def\inneredgedistance {\rightorleftpageaction\leftedgedistance \rightedgedistance} + +\permanent\def\outerspacewidth {\rightorleftpageaction\cutspace \backspace} +\permanent\def\innerspacewidth {\rightorleftpageaction\backspace\cutspace } + +\permanent\def\leftmargintotal {\dimexpr\leftmarginwidth +\leftmargindistance \relax} +\permanent\def\rightmargintotal {\dimexpr\rightmarginwidth+\rightmargindistance\relax} +\permanent\def\leftedgetotal {\dimexpr\leftedgewidth +\leftedgedistance \relax} +\permanent\def\rightedgetotal {\dimexpr\rightedgewidth +\rightedgedistance \relax} + +\permanent\def\leftsidetotal {\dimexpr\leftmarginwidth +\leftedgetotal \relax} +\permanent\def\rightsidetotal {\dimexpr\rightmarginwidth+\rightedgetotal\relax} +\permanent\def\leftcombitotal {\dimexpr\leftmargintotal +\leftedgetotal \relax} +\permanent\def\rightcombitotal {\dimexpr\rightmargintotal+\rightedgetotal\relax} + +\permanent\def\innermargintotal {\dimexpr\innermarginwidth+\innermargindistance\relax} +\permanent\def\outermargintotal {\dimexpr\outermarginwidth+\outermargindistance\relax} +\permanent\def\inneredgetotal {\dimexpr\inneredgewidth +\inneredgedistance \relax} +\permanent\def\outeredgetotal {\dimexpr\outeredgewidth +\outeredgedistance \relax} + +\permanent\def\innercombitotal {\dimexpr\innermargintotal+\inneredgetotal\relax} +\permanent\def\outercombitotal {\dimexpr\outermargintotal+\outeredgetotal\relax} +\permanent\def\innersidetotal {\dimexpr\innermarginwidth+\inneredgetotal\relax} +\permanent\def\outersidetotal {\dimexpr\outermarginwidth+\outeredgetotal\relax} + +%D \macros +%D {startlocallayout} +%D +%D These macros should be used with care. They permit local layouts (as used in +%D fitting pages, see \type {page-app.tex}). This is kind of obsolete now that we +%D have \type {\definelayout}, so this hack will disappear in future versions. + +\permanent\protected\def\startlocallayout + {\globalpushmacro\page_paper_restore + \globalpushmacro\currentlayout} + +\permanent\protected\def\stoplocallayout + {\globalpopmacro\currentlayout + \globalpopmacro\page_paper_restore + \page_paper_restore + \setuplayout[\currentlayout]\relax} % explicit ! + +%D \macros +%D {showprint, showframe, showlayout, showsetups} +%D +%D We predefine a couple of tracing macros. +%D +%D \showsetup{showprint} +%D \showsetup{showframe} +%D \showsetup{showlayout} +%D \showsetup{showsetups} +%D %showsetup{showmargins} +%D %showsetup{showgrid} +%D %showsetup{showusage} + +\fetchruntimecommand \showprint \f!page_run +\fetchruntimecommand \showframe \f!page_run +\fetchruntimecommand \showlayout \f!page_run +\fetchruntimecommand \showsetups \f!page_run +\fetchruntimecommand \showmargins \f!page_run +\fetchruntimecommand \showgrid \f!page_run + +\glet\page_grids_add_to_box\gobbleoneargument +\glet\page_grids_add_to_one\gobbleoneargument +\glet\page_grids_add_to_mix\gobbleoneargument + +%D The default dimensions are quite old and will not change. The funny fractions +%D were introduced when we went from fixed dimensions to relative ones. Since +%D \CONTEXT\ is a dutch package, the dimensions are based on the metric system. The +%D asymmetrical layout is kind of handy for short quick||and||dirty stapled +%D documents. +%D +%D Although valid, it is not a real good idea to use dimensions based on the \type +%D {em} unit. First of all, since there are no fonts loaded yet, this dimension +%D makes no sense, and second, you would loose track of values, since they could +%D change while going to a new page, depending on the current font setting. + +\setuplayout + [ \c!topspace=.08417508418\paperheight, % 2.5cm + \c!top=\zeropoint, + \c!topdistance=\zeropoint, + \c!header=.06734006734\paperheight, % 2.0cm + \c!headerdistance=\zeropoint, + \c!height=.84175084175\paperheight, % 25.0cm + \c!footerdistance=\layoutparameter\c!headerdistance, + \c!footer=.06734006734\paperheight, % 2.0cm + \c!bottomdistance=\layoutparameter\c!topdistance, + \c!bottom=\zeropoint, + \c!backspace=.11904761905\paperwidth, % 2.5cm + \c!edge=\zeropoint, + \c!edgedistance=\layoutparameter\c!margindistance, + \c!margin=.12649983170\paperwidth, % snijwit-2*afstand + \c!margindistance=.02008341748\paperwidth, % 12.0pt + \c!leftedge=\layoutparameter\c!edge, + \c!leftedgedistance=\layoutparameter\c!edgedistance, + \c!leftmargin=\layoutparameter\c!margin, + \c!leftmargindistance=\layoutparameter\c!margindistance, + \c!width=.71428571429\paperwidth, % 15.0cm \dimexpr\ + \c!rightmargindistance=\layoutparameter\c!margindistance, + \c!rightmargin=\layoutparameter\c!margin, + \c!rightedgedistance=\layoutparameter\c!edgedistance, + \c!rightedge=\layoutparameter\c!edge, + \c!veroffset=\zeropoint, + \c!bottomspace=\zeropoint, + \c!horoffset=\zeropoint, + \c!cutspace=\zeropoint, + \c!textwidth=, % dangerous option -> centered / local + \c!textmargin=, % dangerous option -> both sides + \c!textdistance=\zeropoint, % shift down on grid + \c!style=, + \c!color=, + \c!marking=\v!off, + \c!location=,% \v!singlesided, but unset is signal (no other default, spoils arrange) + \c!state=\v!start, + \c!scale=1, + \c!sx=1, + \c!sy=1, + \c!nx=1, + \c!ny=1, + \c!dx=\zeropoint, + \c!dy=\zeropoint, + \c!grid=\v!no, + \c!direction=\v!normal, + \c!preset=, + \c!setups=\systemsetupsprefix\s!default, + \c!clipoffset=\zeropoint, + \c!lines=0, + \c!paper=, % for foxet + \c!page=, % for foxet + \c!columns=\plusone, + \c!columndistance=\zeropoint] + +%D First we define a whole range of (DIN) papersizes, of which the A-series makes +%D most sense. We enable checking. + +\definepapersize [A0] [\c!width=841mm,\c!height=1189mm] +\definepapersize [A1] [\c!width=594mm,\c!height=841mm] +\definepapersize [A2] [\c!width=420mm,\c!height=594mm] +\definepapersize [A3] [\c!width=297mm,\c!height=420mm] +\definepapersize [A4] [\c!width=210mm,\c!height=297mm] +\definepapersize [A5] [\c!width=148mm,\c!height=210mm] +\definepapersize [A6] [\c!width=105mm,\c!height=148mm] +\definepapersize [A7] [\c!width=74mm,\c!height=105mm] +\definepapersize [A8] [\c!width=52mm,\c!height=74mm] +\definepapersize [A9] [\c!width=37mm,\c!height=52mm] +\definepapersize [A10] [\c!width=26mm,\c!height=37mm] + +\definepapersize [A4/2][\c!width=\dimexpr297mm/2\relax,\c!height=210mm] % 148.5mm +%definepapersize [2A5] [\c!width=296mm,\c!height=210mm] % doublewide + +\definepapersize [B0] [\c!width=1000mm,\c!height=1414mm] +\definepapersize [B1] [\c!width=707mm,\c!height=1000mm] +\definepapersize [B2] [\c!width=500mm,\c!height=707mm] +\definepapersize [B3] [\c!width=353mm,\c!height=500mm] % [\c!width=354mm,\c!height=500mm] +\definepapersize [B4] [\c!width=250mm,\c!height=353mm] % [\c!width=250mm,\c!height=354mm] +\definepapersize [B5] [\c!width=176mm,\c!height=250mm] % [\c!width=177mm,\c!height=250mm] +\definepapersize [B6] [\c!width=125mm,\c!height=176mm] % [\c!width=125mm,\c!height=177mm] +\definepapersize [B7] [\c!width=88mm,\c!height=125mm] +\definepapersize [B8] [\c!width=62mm,\c!height=88mm] % [\c!width=63mm,\c!height=88mm] +\definepapersize [B9] [\c!width=44mm,\c!height=62mm] % [\c!width=44mm,\c!height=63mm] +\definepapersize [B10] [\c!width=31mm,\c!height=44mm] + +\definepapersize [C0] [\c!width=917mm,\c!height=1297mm] +\definepapersize [C1] [\c!width=648mm,\c!height=917mm] % [\c!width=649mm,\c!height=917mm] +\definepapersize [C2] [\c!width=458mm,\c!height=648mm] % [\c!width=459mm,\c!height=649mm] +\definepapersize [C3] [\c!width=324mm,\c!height=458mm] % [\c!width=324mm,\c!height=459mm] +\definepapersize [C4] [\c!width=229mm,\c!height=324mm] +\definepapersize [C5] [\c!width=162mm,\c!height=229mm] +\definepapersize [C6] [\c!width=114mm,\c!height=162mm] % [\c!width=115mm,\c!height=162mm] +\definepapersize [C7] [\c!width=81mm,\c!height=114mm] % [\c!width=81mm,\c!height=115mm] +\definepapersize [C8] [\c!width=57mm,\c!height=81mm] +\definepapersize [C9] [\c!width=40mm,\c!height=57mm] +\definepapersize [C10] [\c!width=28mm,\c!height=40mm] + +%D Per August 2004 the rounding of some (seldom used) sizes were corrected top the +%D latest DIN specifications. Peter Rolf came up with these and a few more missing +%D sizes. Watch out: spaces and slashes! + +\definepapersize [4 A0] [\c!width=1682mm,\c!height=2378mm] +\definepapersize [2 A0] [\c!width=1189mm,\c!height=1682mm] +\definepapersize [C6/C5] [\c!width=114mm,\c!height=229mm] + +%D Because there are no standardized screen sizes, we define a bunch of sizes with +%D $4:3$ ratios. The \type {S6} size is nearly as wide as a sheet of \type {A4} +%D paper. + +\definepapersize [S3] [\c!width=300pt,\c!height=225pt] +\definepapersize [S4] [\c!width=400pt,\c!height=300pt] +\definepapersize [S5] [\c!width=500pt,\c!height=375pt] +\definepapersize [S6] [\c!width=600pt,\c!height=450pt] +\definepapersize [S8] [\c!width=800pt,\c!height=600pt] +\definepapersize [SL] [\c!width=640pt,\c!height=400pt] % low +\definepapersize [SM] [\c!width=720pt,\c!height=450pt] % medium +\definepapersize [SW] [\c!width=800pt,\c!height=450pt] % wide +\definepapersize [HD] [\c!width=1920pt,\c!height=1080pt] +\definepapersize [HD+] [\c!width=1920pt,\c!height=1200pt] +\definepapersize [HD-] [\c!width=960pt,\c!height=540pt] + +%D These are handy too: + +\definepapersize [S33] [\c!width=300pt,\c!height=300pt] +\definepapersize [S44] [\c!width=400pt,\c!height=400pt] +\definepapersize [S55] [\c!width=500pt,\c!height=500pt] +\definepapersize [S66] [\c!width=600pt,\c!height=600pt] + +%D One may wonder if \TEX\ should be used for typesetting \CDROM\ covers, but it +%D does not hurt to have the paper size ready. + +\definepapersize [CD] [\c!width=120mm,\c!height=120mm] + +%D The next series is for our English speaking friends who decided to stick to non +%D metric values. Thanks to Nelson Beebe for completing the inch based list. + +\definepapersize [letter] [\c!width=8.5in,\c!height=11in] +\definepapersize [ledger] [\c!width=11in,\c!height=17in] +\definepapersize [tabloid] [\c!width=17in,\c!height=11in] + +\definepapersize [legal] [\c!width=8.5in,\c!height=14in] +\definepapersize [folio] [\c!width=8.5in,\c!height=13in] +\definepapersize [executive] [\c!width=7.25in,\c!height=10.5in] + +\definepapersize [A] [\c!width=8.5in,\c!height=11in] % 1 sheet +\definepapersize [B] [\c!width=11in,\c!height=17in] % 2 sheets +\definepapersize [C] [\c!width=17in,\c!height=22in] % 4 sheets + +%D The next set is for Tobias Burnus, who gave me the sizes. + +\definepapersize [envelope 9] [\c!width=8.88in,\c!height=3.88in] +\definepapersize [envelope 10] [\c!width=9.5in,\c!height=4.13in] +\definepapersize [envelope 11] [\c!width=10.38in,\c!height=4.5in] +\definepapersize [envelope 12] [\c!width=11.0in,\c!height=4.75in] +\definepapersize [envelope 14] [\c!width=11.5in,\c!height=5.0in] +\definepapersize [monarch] [\c!width=7.5in,\c!height=3.88in] +\definepapersize [check] [\c!width=8.58in,\c!height=3.88in] +\definepapersize [DL] [\c!width=110mm,\c!height=220mm] % [\c!width=220mm,\c!height=110mm] +\definepapersize [E4] [\c!width=280mm,\c!height=400mm] + +%D The next three sets are supplied by Taco: + +\definepapersize [RA0] [\c!width=860mm,\c!height=1220mm] +\definepapersize [RA1] [\c!width=610mm,\c!height=860mm] +\definepapersize [RA2] [\c!width=430mm,\c!height=610mm] +\definepapersize [RA3] [\c!width=305mm,\c!height=430mm] +\definepapersize [RA4] [\c!width=215mm,\c!height=305mm] + +%D ISO SRA (supplementary raw A) sizes: + +\definepapersize [SRA0] [\c!width=900mm,\c!height=1280mm] +\definepapersize [SRA1] [\c!width=640mm,\c!height=900mm] +\definepapersize [SRA2] [\c!width=450mm,\c!height=640mm] +\definepapersize [SRA3] [\c!width=320mm,\c!height=450mm] +\definepapersize [SRA4] [\c!width=225mm,\c!height=320mm] + +%D Swedish thesis formats: + +\definepapersize [G5] [\c!width=169mm,\c!height=239mm] +\definepapersize [E5] [\c!width=155mm,\c!height=220mm] + +%D Industry invention: + +\definepapersize [A3plus] [\c!width=329mm,\c!height=483mm] + +%D For Alan: + +\definepapersize [business] [\c!width=85mm,\c!height=55mm] +\definepapersize [businessUS] [\c!width=3.5in,\c!height=2in] + +%D We can now default to a reasonable size. We match the print paper size with the +%D typeset paper size. This setting should come after the first layout specification +%D (already done). + +% \definepapersize +% [\v!default] +% [ \c!width=\paperwidth, +% \c!height=\paperheight] + +% \definepapersize +% [samesized] +% [ \c!width=\paperwidth, +% \c!height=\paperheight] + +\setuppapersize + [\c!distance=1.5cm] % offset is already taken + +\definepapersize + [oversized] + [ \c!width=\dimexpr\paperwidth +\layouttargetparameter\c!distance\relax, + \c!height=\dimexpr\paperheight+\layouttargetparameter\c!distance\relax] + +\definepapersize + [undersized] + [ \c!width=\dimexpr\paperwidth -\layouttargetparameter\c!distance\relax, + \c!height=\dimexpr\paperheight-\layouttargetparameter\c!distance\relax] + +\definepapersize + [doublesized] + [ \c!width=\dimexpr \paperwidth \relax, + \c!height=\dimexpr2\paperheight\relax] + +\definepapersize + [doubleoversized] + [ \c!width=\dimexpr \paperwidth +\layouttargetparameter\c!distance\relax, + \c!height=\dimexpr2\paperheight+\layouttargetparameter\c!distance\relax] + +\definepapersize + [doublewide] + [ \c!width=\dimexpr2\paperwidth \relax, + \c!height=\dimexpr \paperheight\relax] + +% \setuppapersize +% [A4][A4] + +\setuppapersize + [A4] % [samesized] + +%D A few goodies, first a full page layout: + +\definelayout + [\v!page] + +\setuplayout + [\v!page] + [\c!backspace=\zeropoint, + \c!cutspace=\zeropoint, + \c!topspace=\zeropoint, + \c!bottomspace=\zeropoint, + \c!margin=\zeropoint, + \c!edge=\zeropoint, + \c!header=\zeropoint, + \c!footer=\zeropoint, + \c!top=\zeropoint, + \c!bottom=\zeropoint, + \c!leftmargin=\zeropoint, + \c!rightmargin=\zeropoint, + \c!leftedge=\zeropoint, + \c!rightedge=\zeropoint, + \c!textdistance=\zeropoint, + \c!width=\v!middle, + \c!height=\v!middle, + \c!lines=0, + \c!grid=\v!no] + +%D A quick and dirty one: + +\definelayout + [\v!middle] + [\c!width=\v!middle, + \c!height=\v!middle] + +%D One for testing examples (5mm is often the non printable area): + +\definelayout + [\v!tight] + +\definelayout + [\v!tight] + [\v!page] + [\c!backspace=5mm, + \c!cutspace=5mm, + \c!topspace=5mm, + \c!bottomspace=5mm] + +\protect \endinput diff --git a/tex/context/base/mkiv/page-lin.mkvi b/tex/context/base/mkiv/page-lin.mkvi index ba3acef78..e355e3e60 100644 --- a/tex/context/base/mkiv/page-lin.mkvi +++ b/tex/context/base/mkiv/page-lin.mkvi @@ -53,7 +53,8 @@ \c_attr_linenumber\attributeunsetvalue \to \everyinsidefloat -\newcount \linenumber % not used +\mutable\let\linenumber\!!zerocount + \newbox \b_page_lines_scratch \newcount \c_page_lines_reference \newconstant\c_page_lines_nesting diff --git a/tex/context/base/mkiv/page-mcl.mkxl b/tex/context/base/mkiv/page-mcl.mkxl index f90576cf6..6874e4fb2 100644 --- a/tex/context/base/mkiv/page-mcl.mkxl +++ b/tex/context/base/mkiv/page-mcl.mkxl @@ -98,7 +98,7 @@ \fi -\unexpanded\def\page_mcl_command_set_hsize +\protected\def\page_mcl_command_set_hsize {\d_page_mcl_available_width\dimexpr \makeupwidth -\d_page_mcl_leftskip @@ -112,7 +112,7 @@ \textwidth\d_page_mcl_used_width \hsize\d_page_mcl_used_width} -\unexpanded\def\page_mcl_set_n_of_lines#1% +\protected\def\page_mcl_set_n_of_lines#1% {\d_page_mcl_temp\dimexpr +\textheight \ifdim\d_page_mcl_preceding_height>\zeropoint -\d_page_mcl_preceding_height \fi @@ -125,7 +125,7 @@ \fi \fi \c_page_mcl_n_of_lines\noflines} -\unexpanded\def\page_mcl_command_set_vsize +\protected\def\page_mcl_command_set_vsize {%%\page_one_command_set_vsize % indeed? \page_mcl_set_n_of_lines\zeropoint \d_page_mcl_temp\nofcolumns\dimexpr @@ -135,7 +135,7 @@ \global\vsize \d_page_mcl_temp \global\pagegoal\d_page_mcl_temp} % let's do it only here, reports maxdimen anyway -\unexpanded\def\page_mcl_command_routine +\protected\def\page_mcl_command_routine {\ifcase\c_page_mcl_routine \page_one_command_routine \or @@ -159,7 +159,7 @@ {\showmessage\m!columns3\empty \page_otr_construct_and_shipout\unvbox\normalpagebox\zerocount} % three arguments -\unexpanded\def\page_mcl_initialize_variables +\protected\def\page_mcl_initialize_variables {\reseteverypar % maybe still freeze .... \dontcomplain \settopskip @@ -370,17 +370,12 @@ {%\global\setbox\currentcolumnbox\box\currentcolumnbox \ht\currentcolumnbox\ht\firstcolumnbox} -\unexpanded\def\startmulticolumns - {\dosingleempty\page_mcl_start} - -\def\page_mcl_start[#1]% +\tolerant\protected\def\startmulticolumns[#1]% {\bgroup \ifinsidecolumns \page_mcl_start_nop \else - \iffirstargument - \setupmulticolumns[#1]% - \fi + \setupmulticolumns[#1]% \nofcolumns\multicolumnsparameter\c!n\relax \ifnum\nofcolumns>\plusone \page_mcl_start_yes @@ -390,16 +385,16 @@ \fi \fi} -\unexpanded\def\page_mcl_start_nop - {\let\stopmulticolumns\page_mcl_stop_nop} +\def\page_mcl_start_nop + {\enforced\let\stopmulticolumns\page_mcl_stop_nop} -\unexpanded\def\page_mcl_stop_nop +\permanent\protected\def\page_mcl_stop_nop {\egroup} -\unexpanded\def\page_mcl_start_yes +\protected\def\page_mcl_start_yes {\whitespace \begingroup - \let\stopmulticolumns\page_mcl_stop_indeed + \enforced\let\stopmulticolumns\page_mcl_stop_indeed \global\insidecolumnstrue \global\insidemulticolumnstrue % @@ -471,7 +466,7 @@ \page_otr_command_set_hsize \page_otr_command_set_vsize} -\unexpanded\def\page_mcl_stop_indeed +\permanent\protected\def\page_mcl_stop_indeed {\relax \synchronizeoutput \par diff --git a/tex/context/base/mkiv/page-one.mkiv b/tex/context/base/mkiv/page-one.mkiv index ada90eccf..f362a2fab 100644 --- a/tex/context/base/mkiv/page-one.mkiv +++ b/tex/context/base/mkiv/page-one.mkiv @@ -82,7 +82,12 @@ % 1 = partial page, 2 = whole page, 3 = partial page -\setnewconstant\kindofpagetextareas\plustwo % \plusone can become default some day +% We really need a setting! Todo, what key to use? + +\pushoverloadmode + \setnewconstant\kindofpagetextareas\plustwo % \plusone can become default some day + \overloaded\let\kindofpagetextareas\kindofpagetextareas +\popoverloadmode \def\page_one_registered_text_area_a % two arguments: (un)vbox n {\ifconditional\c_page_areas_enabled diff --git a/tex/context/base/mkiv/page-spr.mkxl b/tex/context/base/mkiv/page-spr.mkxl new file mode 100644 index 000000000..877509e41 --- /dev/null +++ b/tex/context/base/mkiv/page-spr.mkxl @@ -0,0 +1,131 @@ +%D \module +%D [ file=page-spr, +%D version=2002.11.11, +%D title=\CONTEXT\ Page Macros, +%D subtitle=Spreading, +%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 Page Macros / Spreading} + +% This module is experimental and not yet official! + +\unprotect + +\newbox \b_page_spread_content +\newconditional\c_page_spread_busy +\newconditional\c_page_spread_once % when true only one flush (writes etc) + +\permanent\overloaded\protected\def\normalsettextpagecontent#1#2#3% #2 and #3 will disappear + {\setbox#1\hpack + {\setlayoutcomponentattribute{\v!page:\v!text}% + \vpack \layoutcomponentboxattribute to \textheight + {\offinterlineskip + \freezetextwidth + \hsize\textwidth % local variant of \sethsize + \boxmaxdepth\maxdepth + \noindent % content can be < \hsize + \page_otr_command_package_contents#2#3}}% + \dp#1\zeropoint + \ifconditional\c_page_spread_busy + \normalsettextpagecontent_spread{#1}% + \else + \normalsettextpagecontent_normal{#1}% + \fi} + +\def\normalsettextpagecontent_normal#1% + {\ifdim\wd#1=\makeupwidth\else + \setbox#1\hpack to \makeupwidth + {\hss\box#1\hss}% never change the \hss's + \fi} + +\def\normalsettextpagecontent_spread#1% + {\setbox#1\hpack to \makeupwidth + {\ifvoid\b_page_spread_content + \ifconditional\c_page_spread_once + \box#1% + \else + \global\setbox\b_page_spread_content\box#1% + \copy\b_page_spread_content + \fi + \hss % left page + \else + \hss % right page + \ifarrangingpages + % writes don't matter anyway + \else\ifconditional\c_page_spread_once + \global\setbox\b_page_spread_content\emptyhbox + \wd\b_page_spread_content\makeupwidth + \ht\b_page_spread_content\textheight + \else + % writes can interfere (todo: write stripper, but how about hyperlinks) + \fi \fi + \box\b_page_spread_content + \fi}} + +\protected\def\page_spread_flush + {\ifconditional\c_page_spread_busy \ifvoid\b_page_spread_content\else + % this page will be discarded later + \emptyhbox \page + \fi \fi } + +\permanent\protected\def\startspread + {\ifdoublesided + \ifconditional\c_page_spread_busy + \doubleexpandafter\page_spread_start_nop + \else + \doubleexpandafter\page_spread_start_yes + \fi + \else + \expandafter\page_spread_start_nop + \fi} + +\let\stopspread\relax + +\protected\def\page_spread_start_yes + {\bgroup + \page[\v!left]% + %\setsystemmode{spread}% + \settrue\c_page_spread_busy + \expanded{\setuplayout[\c!textwidth=\the\dimexpr2\textwidth+2\backspace\relax]}% + \let\stopspread\page_spread_stop_yes} + +\protected\def\page_spread_stop_yes + {\kern\zeropoint + \page + \setuplayout[\c!textwidth=\textwidth]% + \page[\v!left]% + \egroup} + +\protected\def\page_spread_start_nop + {\bgroup + \let\stopspread\page_spread_stop_nop} + +\protected\def\page_spread_stop_nop + {\egroup} + +\protect \endinput + +% texexec --arr --pdf test +% +% \setuplayout[width=middle] +% \setuppapersize[A4][A3,landscape] +% \setuppagenumbering[alternative=doublesided] +% \setuparranging[2UP] +% +% \starttext +% +% \dorecurse{3}{\input tufte } +% +% \startspread +% \dorecurse{10}{\input tufte } +% \stopspread +% +% \dorecurse{3}{\input tufte } +% +% \stoptext diff --git a/tex/context/base/mkiv/page-txt.mklx b/tex/context/base/mkiv/page-txt.mklx index ff582e561..6d9af76b0 100644 --- a/tex/context/base/mkiv/page-txt.mklx +++ b/tex/context/base/mkiv/page-txt.mklx @@ -77,11 +77,8 @@ \definelayoutelement[\v!footer:\v!edge] [\v!footer][\c!lefttext=,\c!middletext=,\c!righttext=] \definelayoutelement[\v!bottom:\v!edge] [\v!bottom][\c!lefttext=,\c!middletext=,\c!righttext=] -\unexpanded\def\setuplayouttext - {\dotripleempty\page_layouts_setup_text} - -\def\page_layouts_setup_text[#vertical][#horizontal][#settings]% - {\ifthirdargument +\permanent\tolerant\protected\def\setuplayouttext[#vertical]#spacer[#horizontal]#spacer[#settings]% + {\ifnum\lastarguments>\plustwo \setuplayoutelement[#vertical:#horizontal][#settings]% \else \setuplayoutelement[#vertical][#horizontal]% @@ -116,11 +113,11 @@ \ifx\previoustextstate\v!none \calculatevsizes\page_backgrounds_recalculate \fi \letgvalue{\??layouttextssynchronize#vertical}\currenttextstate} -\unexpanded\def\setuptop {\dotripleempty\page_layouts_setup_text[\v!top ]} -\unexpanded\def\setupheader{\dotripleempty\page_layouts_setup_text[\v!header]} -\unexpanded\def\setuptext {\dotripleempty\page_layouts_setup_text[\v!text ]} -\unexpanded\def\setupfooter{\dotripleempty\page_layouts_setup_text[\v!footer]} -\unexpanded\def\setupbottom{\dotripleempty\page_layouts_setup_text[\v!bottom]} +\permanent\protected\def\setuptop {\setuplayouttext[\v!top ]} +\permanent\protected\def\setupheader{\setuplayouttext[\v!header]} +\permanent\protected\def\setuptext {\setuplayouttext[\v!text ]} +\permanent\protected\def\setupfooter{\setuplayouttext[\v!footer]} +\permanent\protected\def\setupbottom{\setuplayouttext[\v!bottom]} %D We inherit some settings: @@ -143,11 +140,11 @@ %D \showsetup{noheaderandfooterlines} %D \showsetup{notopandbottomlines} -\unexpanded\def\noheaderandfooterlines +\permanent\protected\def\noheaderandfooterlines {\setuplayoutelement[\v!header][\c!state=\v!empty]% \setuplayoutelement[\v!footer][\c!state=\v!empty]} -\unexpanded\def\notopandbottomlines +\permanent\protected\def\notopandbottomlines {\setuplayoutelement[\v!top ][\c!state=\v!empty]% \setuplayoutelement[\v!bottom][\c!state=\v!empty]} @@ -169,59 +166,50 @@ %D someone uses the key|/|value interface these things have to be set explicitly as %D part of the text. -\unexpanded\def\setuptoptexts {\dosixtupleempty\page_layouts_setup_texts[\v!top ]} -\unexpanded\def\setupheadertexts{\dosixtupleempty\page_layouts_setup_texts[\v!header]} -\unexpanded\def\setuptexttexts {\dosixtupleempty\page_layouts_setup_texts[\v!text ]} -\unexpanded\def\setupfootertexts{\dosixtupleempty\page_layouts_setup_texts[\v!footer]} -\unexpanded\def\setupbottomtexts{\dosixtupleempty\page_layouts_setup_texts[\v!bottom]} - -\unexpanded\def\page_layouts_setup_text_six[#vertical][#horizontal][#a][#b][#c][#d]% - {\edef\currentlayoutelement{#vertical:#horizontal}% - \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_double{#a}{#d}}% - \setlayoutelementparameter\c!righttext{\page_layouts_process_element_double{#b}{#c}}} - -\unexpanded\def\page_layouts_setup_text_five[#vertical][#horizontal][#a][#b][#c][#d]% - {\edef\currentlayoutelement{#vertical:\v!text}% - \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_double{#horizontal}{#c}}% - \setlayoutelementparameter\c!righttext{\page_layouts_process_element_double{#a}{#b}}} - -\unexpanded\def\page_layouts_setup_text_four[#vertical][#horizontal][#a][#b][#c][#d]% - {\edef\currentlayoutelement{#vertical:#horizontal}% - \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_single{#a}}% - \setlayoutelementparameter\c!righttext{\page_layouts_process_element_single{#b}}} - -\unexpanded\def\page_layouts_setup_text_three[#vertical][#horizontal][#a][#b][#c][#d]% - {\edef\currentlayoutelement{#vertical:\v!text}% - \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_single{#horizontal}}% - \setlayoutelementparameter\c!righttext{\page_layouts_process_element_single{#a}}} - -\unexpanded\def\page_layouts_setup_text_two[#vertical][#horizontal][#a][#b][#c][#d]% - {\edef\currentlayoutelement{#vertical:\v!text}% - \resetlayoutelementparameter\c!lefttext - \resetlayoutelementparameter\c!righttext - \setlayoutelementparameter \c!middletext{\page_layouts_process_element_single{#horizontal}}} - -\unexpanded\def\page_layouts_setup_text_one[#vertical][#horizontal][#a][#b][#c][#d]% - {\edef\currentlayoutelement{#vertical:\v!text}% - \resetlayoutelementparameter\c!lefttext - \resetlayoutelementparameter\c!righttext - \resetlayoutelementparameter\c!middletext - \edef\currentlayoutelement{#vertical:\v!margin}% - \resetlayoutelementparameter\c!lefttext - \resetlayoutelementparameter\c!righttext - \resetlayoutelementparameter\c!middletext - \edef\currentlayoutelement{#vertical:\v!edge}% - \resetlayoutelementparameter\c!lefttext - \resetlayoutelementparameter\c!righttext - \resetlayoutelementparameter\c!middletext} - -\unexpanded\def\page_layouts_setup_texts - {\ifsixthargument \expandafter\page_layouts_setup_text_six \orelse - \iffifthargument \expandafter\page_layouts_setup_text_five \orelse - \iffourthargument\expandafter\page_layouts_setup_text_four \orelse - \ifthirdargument \expandafter\page_layouts_setup_text_three\orelse - \ifsecondargument\expandafter\page_layouts_setup_text_two \else - \expandafter\page_layouts_setup_text_one \fi} +\permanent\protected\def\setuptoptexts {\setuptexts[\v!top ]} +\permanent\protected\def\setupheadertexts{\setuptexts[\v!header]} +\permanent\protected\def\setuptexttexts {\setuptexts[\v!text ]} +\permanent\protected\def\setupfootertexts{\setuptexts[\v!footer]} +\permanent\protected\def\setupbottomtexts{\setuptexts[\v!bottom]} + +\permanent\tolerant\protected\def\setuptexts[#vertical]#spacer[#horizontal]#spacer[#a]#spacer[#b]#spacer[#c]#spacer[#d]% + {\ifarguments + % there is always one + \or + \edef\currentlayoutelement{#vertical:\v!text}% + \resetlayoutelementparameter\c!lefttext + \resetlayoutelementparameter\c!righttext + \resetlayoutelementparameter\c!middletext + \edef\currentlayoutelement{#vertical:\v!margin}% + \resetlayoutelementparameter\c!lefttext + \resetlayoutelementparameter\c!righttext + \resetlayoutelementparameter\c!middletext + \edef\currentlayoutelement{#vertical:\v!edge}% + \resetlayoutelementparameter\c!lefttext + \resetlayoutelementparameter\c!righttext + \resetlayoutelementparameter\c!middletext + \or + \edef\currentlayoutelement{#vertical:\v!text}% + \resetlayoutelementparameter\c!lefttext + \resetlayoutelementparameter\c!righttext + \setlayoutelementparameter \c!middletext{\page_layouts_process_element_single{#horizontal}}% + \or + \edef\currentlayoutelement{#vertical:\v!text}% + \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_single{#horizontal}}% + \setlayoutelementparameter\c!righttext{\page_layouts_process_element_single{#a}}% + \or + \edef\currentlayoutelement{#vertical:#horizontal}% + \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_single{#a}}% + \setlayoutelementparameter\c!righttext{\page_layouts_process_element_single{#b}}% + \or + \edef\currentlayoutelement{#vertical:\v!text}% + \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_double{#horizontal}{#c}}% + \setlayoutelementparameter\c!righttext{\page_layouts_process_element_double{#a}{#b}}% + \or + \edef\currentlayoutelement{#vertical:#horizontal}% + \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_double{#a}{#d}}% + \setlayoutelementparameter\c!righttext{\page_layouts_process_element_double{#b}{#c}}% + \fi} %D Left and right texts are swapped on odd and even pages, but only when double %D sided typesetting is enabled. @@ -230,7 +218,7 @@ \let\m_page_layouts_element_content\empty -\unexpanded\def\page_layouts_process_element_single#content% +\protected\def\page_layouts_process_element_single#content% {\edef\m_page_layouts_element_content{\detokenize{#content}}% so no \v!xxx \ifcsname\??layouttextspecial\m_page_layouts_element_content\endcsname \lastnamedcs @@ -240,12 +228,12 @@ {#content}% \fi} -\unexpanded\def\page_layouts_process_element_double#first#second% +\protected\def\page_layouts_process_element_double#first#second% {\doifelseoddpage {\page_layouts_process_element_single{#first}} {\page_layouts_process_element_single{#second}}} -\unexpanded\def\page_layouts_process_element_indeed#style#color#width% +\protected\def\page_layouts_process_element_indeed#style#color#width% {\begingroup \uselayoutelementstyleandcolor#style#color% \begincsname\??layouttextstrut\layoutelementparameter\c!strut\endcsname @@ -257,7 +245,6 @@ \endgroup} \def\page_layouts_process_element_limited#content% are the {}{}{} still needed? -% {\limitatetext{#content{}{}{}}\currentlayoutelementwidth\unknown} {\limitated left \currentlayoutelementwidth text {#content} @@ -294,7 +281,7 @@ \doifinset\v!footer\floatspecification{\setxvalue{\namedlayoutelementhash\v!footer\c!n}{1}}% \to \everybeforeflushedpagefloat -\unexpanded\def\page_layouts_place_text_line#vertical% +\protected\def\page_layouts_place_text_line#vertical% {\page_layouts_set_element_status#vertical\relax \ifcsname\??layouttextsline\textlinestatus\endcsname \expandafter\lastnamedcs @@ -302,7 +289,7 @@ \expandafter\page_layouts_place_text_line_unknown \fi#vertical} -\unexpanded\def\doifelselayouttextline#vertical% shown or not +\permanent\protected\def\doifelselayouttextline#vertical% shown or not {\edef\currentlayoutelementstate{\namedlayoutelementparameter{#vertical}\c!state}% \ifx\currentlayoutelementstate\v!normal \expandafter\firstoftwoarguments @@ -312,7 +299,7 @@ \expandafter\secondoftwoarguments \fi} -\unexpanded\def\doifelselayoutsomeline#vertical% present or not +\permanent\protected\def\doifelselayoutsomeline#vertical% present or not {\edef\currentlayoutelementstate{\namedlayoutelementparameter{#vertical}\c!state}% \ifx\currentlayoutelementstate\v!none \expandafter\secondoftwoarguments @@ -377,7 +364,7 @@ %D The following macro has to be called after a page is flushed. -\unexpanded\def\resetlayouttextlines % public +\permanent\protected\def\resetlayouttextlines % public {\begincsname\??layouttextsreset\v!top \endcsname \begincsname\??layouttextsreset\v!header\endcsname \begincsname\??layouttextsreset\v!text \endcsname @@ -389,39 +376,36 @@ \global\setfalse\resyncaftertextline \fi} -\def\getspecificlayouttext#vertical#horizontal#what% +\permanent\def\getspecificlayouttext#vertical#horizontal#what% {\begincsname\namedlayoutelementhash{#vertical:#horizontal}#what\endcsname} % \settext[header][text][middle][xxx][yyy] -\unexpanded\def\settextcontent - {\doquintupleempty\page_layouts_set_text_content} - -\def\page_layouts_set_text_content[#vertical][#horizontal][#one][#two][#three]% header text middle text/text - {\iffifthargument - \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\begincsname\??layouttextcontent\v!text:#one\endcsname\c!middletext}% - {\page_layouts_process_element_double{#two}{#three}}% - \orelse\iffourthargument - \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\begincsname\??layouttextcontent\v!text:#one\endcsname\c!middletext}% - {\page_layouts_process_element_double{#two}{#two}}% - \orelse\ifthirdargument +\permanent\tolerant\protected\def\settextcontent[#vertical]#spacer[#horizontal]#spacer[#one]#spacer[#two]#spacer[#three]% header text middle text/text + {\ifarguments\or\or\or % 3 \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\c!middletext}% {\page_layouts_process_element_double{#one}{#one}}% + \or % 4 + \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\begincsname\??layouttextcontent\v!text:#one\endcsname\c!middletext}% + {\page_layouts_process_element_double{#two}{#two}}% + \or % 5 + \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\begincsname\??layouttextcontent\v!text:#one\endcsname\c!middletext}% + {\page_layouts_process_element_double{#two}{#three}}% \fi} \let\currentlayoutelement\relax -\unexpanded\def\resettextcontent - {\dotripleempty\page_layouts_reset_text_content} +%D This will be redefined, so no \type {\frozen} here! -\def\page_layouts_reset_text_content[#vertical][#horizontal][#tag]% header text middle - {\edef\currentlayoutelement{#vertical:#horizontal}% - \ifthirdargument - \letvalueempty{\layoutelementhash\begincsname\??layouttextcontent\v!text:#tag\endcsname\c!middletext}% - \orelse\ifsecondargument +\permanent\tolerant\protected\def\resettextcontent[#vertical]#spacer[#horizontal]#spacer[#tag]% header text middle + {\ifarguments\or\or % 2 + \edef\currentlayoutelement{#vertical:#horizontal}% \resetlayoutelementparameter\c!lefttext \resetlayoutelementparameter\c!middletext \resetlayoutelementparameter\c!righttext + \or % 3 + \edef\currentlayoutelement{#vertical:#horizontal}% + \letvalueempty{\layoutelementhash\begincsname\??layouttextcontent\v!text:#tag\endcsname\c!middletext}% \fi} \letvalue{\??layouttextcontent\v!text:\c!middle}\c!middletext @@ -718,20 +702,17 @@ %D \chapter{tweede} \dorecurse{20}{\input tufte \relax} %D \stoptyping -\unexpanded\def\definetext - {\doseventupleempty\page_layouts_define_text} - -\def\page_layouts_define_text[#tag][#vertical][#horizontal][#a][#b][#c][#d]% - {\ifseventhargument - \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}{\page_layouts_setup_text_six [#vertical][#horizontal][#a][#b][#c][#d]}% - \orelse\ifsixthargument - \setvalue{\namedlayoutelementhash {#vertical}#tag}{\page_layouts_setup_text_five [#vertical][#horizontal][#a][#b][#c][]}% - \orelse\iffifthargument - \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}{\page_layouts_setup_text_four [#vertical][#horizontal][#a][#b][][]}% - \orelse\iffourthargument - \setvalue{\namedlayoutelementhash {#vertical}#tag}{\page_layouts_setup_text_three[#vertical][#horizontal][#a][][][]}% - \else - \setvalue{\namedlayoutelementhash {#vertical}#tag}{\page_layouts_setup_text_two [#vertical][#horizontal][][][][]}% +\permanent\tolerant\protected\def\definetext[#tag]#spacer[#vertical]#spacer[#horizontal]#spacer[#a]#spacer[#b]#spacer[#c]#spacer[#d]% + {\ifnum\lastarguments<\plusfour + \setvalue{\namedlayoutelementhash {#vertical}#tag}{\setuptexts[#vertical][#horizontal]\relax}% 1, 2, 3 + \orelse\ifarguments\or\or\or\or + \setvalue{\namedlayoutelementhash {#vertical}#tag}{\setuptexts[#vertical][#horizontal][#a]\relax}% 4 + \or + \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}{\setuptexts[#vertical][#horizontal][#a][#b]\relax}% 5 + \or + \setvalue{\namedlayoutelementhash {#vertical}#tag}{\setuptexts[#vertical][#horizontal][#a][#b][#c]\relax}% 6 + \or + \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}{\setuptexts[#vertical][#horizontal][#a][#b][#c][#d]\relax}% 7 \fi} %D A few more page breakers: @@ -769,7 +750,7 @@ \let\m_page_layouts_page_number_location_h\relax \let\m_page_layouts_page_number_location_x\relax -\def\page_layouts_place_page_number % also elsewhere .. beware, not \unexpanded else +\def\page_layouts_place_page_number % also elsewhere .. beware, not \protected else {\strc_pagenumbers_place_location} % test below fails \def\page_layouts_reset_page_number_location @@ -817,7 +798,7 @@ \v!marginedge=>\let\m_page_layouts_page_number_location_h\v!text \let\m_page_layouts_page_number_location_x\c!marginedgetext]} -\unexpanded\def\strc_pagenumbers_set_location +\protected\def\strc_pagenumbers_set_location {\edef\p_strc_pagenumbers_location{\directpagenumberingparameter\c!location}% \ifx\p_strc_pagenumbers_location\m_page_layouts_page_number_location % unchanged @@ -949,10 +930,10 @@ %D The main text area has to be combined with some additional (tracing) information. %D %D This will be stored as normal and overloaded in page-lyr and later in page-spr we -%D overload the the stored version .. evenatually i will clear up the experimental +%D overload the the stored version .. eventually i will clear up the experimental %D mess. -\def\settextpagecontent#1#2#3% #2 and #3 will disappear / is overloaded +\protected\def\settextpagecontent#1#2#3% #2 and #3 will disappear / is overloaded {\setbox#1\hpack to \makeupwidth {\hss % so don't change this \setlayoutcomponentattribute{\v!page:\v!text}% diff --git a/tex/context/base/mkiv/phys-dim.mkiv b/tex/context/base/mkiv/phys-dim.mkiv index f17861405..decc19bd3 100644 --- a/tex/context/base/mkiv/phys-dim.mkiv +++ b/tex/context/base/mkiv/phys-dim.mkiv @@ -175,8 +175,6 @@ %def\digitstimessymbol{\ifmmode\cdot\else\digitstextbinop\cdot\fi} \def\digitstimessymbol{\digitstextbinop\times} -\unexpanded\def\mathplusminus{±} % will be in math-ini - \unexpanded\def\digitszeropadding {\hphantom{0}} \unexpanded\def\digitsnegative {\phys_digits_normalized{0}{\phys_digits_raised{\textminus}}} \unexpanded\def\digitspositive {\phys_digits_normalized{0}{\phys_digits_raised{\textplus}}} diff --git a/tex/context/base/mkiv/publ-ini.lua b/tex/context/base/mkiv/publ-ini.lua index da6c74b2e..ec36be89a 100644 --- a/tex/context/base/mkiv/publ-ini.lua +++ b/tex/context/base/mkiv/publ-ini.lua @@ -3500,7 +3500,7 @@ do function publications.prerollcmdstring(str) btxstring = str or "" - tex.runtoks("t_btx_cmd") + tex.runlocal("t_btx_cmd") return nodes.toutf(tex.getbox("b_btx_cmd").list) or str end diff --git a/tex/context/base/mkiv/publ-ini.mkiv b/tex/context/base/mkiv/publ-ini.mkiv index 996b6d3ca..12864aa6c 100644 --- a/tex/context/base/mkiv/publ-ini.mkiv +++ b/tex/context/base/mkiv/publ-ini.mkiv @@ -59,22 +59,24 @@ \startcontextdefinitioncode -\def\s!btx {btx} - -\def\v!btxcite {btxcite} -\def\v!btxlist {btxlist} -\def\v!btxrendering {btxrendering} - -\def\s!btxset {btxset} -\def\s!btxref {btxref} -\def\s!btxint {btxint} -\def\s!btxltx {btxltx} -\def\s!btxrtx {btxrtx} -\def\s!btxatx {btxatx} -\def\s!btxbtx {btxbtx} -\def\s!btxspc {btxspc} -\def\s!btxlst {btxlst} -\def\s!btxcom {btxcom} +%D These are currently not interfaced. + +\definesystemconstant {btx} + +\definesystemconstant {btxset} +\definesystemconstant {btxref} +\definesystemconstant {btxint} +\definesystemconstant {btxltx} +\definesystemconstant {btxrtx} +\definesystemconstant {btxatx} +\definesystemconstant {btxbtx} +\definesystemconstant {btxspc} +\definesystemconstant {btxlst} +\definesystemconstant {btxcom} + +\defineinterfacevariable {btxcite} {btxcite} +\defineinterfacevariable {btxlist} {btxlist} +\defineinterfacevariable {btxrendering} {btxrendering} \definelabelclass[btxlabel][2] diff --git a/tex/context/base/mkiv/scrn-but.mkvi b/tex/context/base/mkiv/scrn-but.mkvi index 977b02acd..6c279dfc4 100644 --- a/tex/context/base/mkiv/scrn-but.mkvi +++ b/tex/context/base/mkiv/scrn-but.mkvi @@ -337,7 +337,7 @@ \let\scrn_menu_define_original\defineinteractionmenu -\unexpanded\def\defineinteractionmenu +\unexpanded\overloaded\def\defineinteractionmenu {\dotripleempty\scrn_menu_define} \def\scrn_menu_define[#tag][#category][#settings]% category reflects location, settings can be parent diff --git a/tex/context/base/mkiv/scrn-wid.mkvi b/tex/context/base/mkiv/scrn-wid.mkvi index ea77a7da3..d0b0fb006 100644 --- a/tex/context/base/mkiv/scrn-wid.mkvi +++ b/tex/context/base/mkiv/scrn-wid.mkvi @@ -605,7 +605,7 @@ {\iflocation \clf_insertsoundclip tag {#tag}% - repeat {\directexternalsoundtrackparameter\c!option}% + repeat {\directexternalsoundtracksparameter\c!option}% \relax \fi} diff --git a/tex/context/base/mkiv/spac-ali.mkiv b/tex/context/base/mkiv/spac-ali.mkiv index ad1b118f8..7ed3416cc 100644 --- a/tex/context/base/mkiv/spac-ali.mkiv +++ b/tex/context/base/mkiv/spac-ali.mkiv @@ -797,7 +797,7 @@ \unexpanded\def\ibox {\vbox\bgroup \forgetall - \let\\=\endgraf + \let\\\endgraf \ifdoublesided\signalinnerrealign\fi \doifelserightpage\spac_align_set_horizontal_right\spac_align_set_horizontal_left \let\next} @@ -805,7 +805,7 @@ \unexpanded\def\obox {\vbox\bgroup \forgetall - \let\\=\endgraf + \let\\\endgraf \ifdoublesided\signalouterrealign\fi \doifelserightpage\c_spac_align_state_horizontal_left\spac_align_set_horizontal_right \let\next} @@ -956,7 +956,7 @@ \dontleavehmode % added in marrakesch at TUG 2006\begingroup \begingroup \setlocalhsize % new - \def\\{\egroup\par\doalignline{#1}{#2}\bgroup}% + \protected\def\\{\egroup\par\doalignline{#1}{#2}\bgroup}% \dowithnextbox {\hbox to \localhsize {\ifcase\alignstrutmode\or\strut\fi @@ -1036,7 +1036,7 @@ \dontleavehmode % added in marrakesch at TUG 2006\begingroup \begingroup \setlocalhsize - \def\\{\egroup\par\doxalignline#1#2#3#4#5#6\bgroup}% inefficient + \protected\def\\{\egroup\par\doxalignline#1#2#3#4#5#6\bgroup}% inefficient \dowithnextbox {\hbox to \localhsize {#1\hskip\ifdone#2\else#3\fi#4% diff --git a/tex/context/base/mkiv/spac-ali.mkxl b/tex/context/base/mkiv/spac-ali.mkxl index f4310dfc0..a41c99410 100644 --- a/tex/context/base/mkiv/spac-ali.mkxl +++ b/tex/context/base/mkiv/spac-ali.mkxl @@ -21,11 +21,11 @@ \registerctxluafile{spac-ali}{optimize} -\chardef\normalizelinemodecode = "01 -\chardef\indentskipmodecode = "02 -\chardef\swaphangindentmodecode = "04 -\chardef\swapparskipmodecode = "08 -\chardef\breakafterdirmodecode = "10 +\immutable\chardef\normalizelinemodecode = "01 +\immutable\chardef\indentskipmodecode = "02 +\immutable\chardef\swaphangindentmodecode = "04 +\immutable\chardef\swapparskipmodecode = "08 +\immutable\chardef\breakafterdirmodecode = "10 \definesystemattribute[realign] [public] % might be combined with the next one \definesystemattribute[alignstate][public] % will make a single attributes for several states @@ -35,16 +35,16 @@ \c_attr_alignstate\attributeunsetvalue \to \everyforgetall -\unexpanded\def\resetrealignsignal{\c_attr_realign\attributeunsetvalue} -\unexpanded\def\signalinnerrealign{\clf_setrealign\plustwo} -\unexpanded\def\signalouterrealign{\clf_setrealign\plusone} +\permanent\protected\def\resetrealignsignal{\c_attr_realign\attributeunsetvalue} +\permanent\protected\def\signalinnerrealign{\clf_setrealign\plustwo} +\permanent\protected\def\signalouterrealign{\clf_setrealign\plusone} \installcorenamespace{aligncommand} \installcorenamespace{alignhorizontal} \installcorenamespace{alignvertical} -\installcorenamespace{alignmentnormalcache} -\installcorenamespace{alignmentraggedcache} +% \installcorenamespace{alignmentnormalcache} +% \installcorenamespace{alignmentraggedcache} % nasty hack: @@ -54,8 +54,8 @@ \installcorenamespace{alignmentraggedcacheodd} \installcorenamespace{alignmentraggedcacheeven} -\def\??alignmentnormalcache{\ifodd\realpageno\??alignmentnormalcacheodd\else\??alignmentnormalcacheeven\fi} -\def\??alignmentraggedcache{\ifodd\realpageno\??alignmentraggedcacheodd\else\??alignmentraggedcacheeven\fi} +\immutable\def\??alignmentnormalcache{\ifodd\realpageno\??alignmentnormalcacheodd\else\??alignmentnormalcacheeven\fi} +\immutable\def\??alignmentraggedcache{\ifodd\realpageno\??alignmentraggedcacheodd\else\??alignmentraggedcacheeven\fi} \newtoks\everyresetalign % todo @@ -65,48 +65,48 @@ \newconditional\displaylefttoright \settrue\displaylefttoright \newconditional\inlinelefttoright \settrue\inlinelefttoright -\unexpanded\def\lefttoright +\permanent\protected\def\lefttoright {\ifvmode \spac_directions_lefttoright_vmode \else \spac_directions_lefttoright_hmode \fi} -\unexpanded\def\righttoleft +\permanent\protected\def\righttoleft {\ifvmode \spac_directions_righttoleft_vmode \else \spac_directions_righttoleft_hmode \fi} -\unexpanded\def\spac_directions_lefttoright_vmode +\protected\def\spac_directions_lefttoright_vmode {\settrue\displaylefttoright \settrue\inlinelefttoright \textdirection\directionlefttoright \pardirection \directionlefttoright} -\unexpanded\def\spac_directions_righttoleft_vmode +\protected\def\spac_directions_righttoleft_vmode {\setfalse\displaylefttoright \setfalse\inlinelefttoright \textdirection\directionrighttoleft \pardirection \directionrighttoleft} -\unexpanded\def\spac_directions_lefttoright_hmode +\protected\def\spac_directions_lefttoright_hmode {\linedirection\directionlefttoright % linedir keeps subtype of skip \settrue\inlinelefttoright} -\unexpanded\def\spac_directions_righttoleft_hmode +\protected\def\spac_directions_righttoleft_hmode {\linedirection\directionrighttoleft % linedir keeps subtype of skip \setfalse\inlinelefttoright} -\unexpanded\def\synchronizelayoutdirection +\permanent\protected\def\synchronizelayoutdirection {\ifconditional\layoutlefttoright \spac_directions_synchronize_lr \else \spac_directions_synchronize_rl \fi} -\unexpanded\def\synchronizedisplaydirection +\permanent\protected\def\synchronizedisplaydirection {\ifconditional\displaylefttoright \spac_directions_synchronize_lr \else @@ -123,30 +123,30 @@ \textdirection\directionrighttoleft \pardirection \directionrighttoleft} -\unexpanded\def\synchronizeinlinedirection +\permanent\protected\def\synchronizeinlinedirection {% why not \linedirection here \textdirection\ifconditional\inlinelefttoright\directionlefttoright\else\directionrighttoleft\fi} -\unexpanded\def\checkedlefttoright +\permanent\protected\def\checkedlefttoright {\ifvmode \spac_directions_lefttoright_vmode \else \spac_directions_lefttoright_hmode_checked \fi} -\unexpanded\def\checkedrighttoleft +\permanent\protected\def\checkedrighttoleft {\ifvmode \spac_directions_righttoleft_vmode \else \spac_directions_righttoleft_hmode_checked \fi} -\unexpanded\def\spac_directions_lefttoright_hmode_checked +\protected\def\spac_directions_lefttoright_hmode_checked {\ifconditional\inlinelefttoright\else \lefttoright \fi} -\unexpanded\def\spac_directions_righttoleft_hmode_checked +\protected\def\spac_directions_righttoleft_hmode_checked {\ifconditional\inlinelefttoright \righttoleft \fi} @@ -156,10 +156,10 @@ \letvalue{\??bidi\v!left }\checkedlefttoright \letvalue{\??bidi l2r}\checkedlefttoright \letvalue{\??bidi\v!right}\checkedrighttoleft \letvalue{\??bidi r2l}\checkedrighttoleft -\unexpanded\def\usebidiparameter#1% +\permanent\protected\def\usebidiparameter#1% {\begincsname\??bidi#1\c!bidi\endcsname} -\unexpanded\def\showdirections +\permanent\protected\def\showdirections {\dontleavehmode \begingroup\infofont\textdirection\directionlefttoright[\space layout: \ifconditional\layoutlefttoright l2r\else r2l\fi\space @@ -167,20 +167,20 @@ inline: \ifconditional\inlinelefttoright l2r\else r2l\fi\space ]\endgroup} -\unexpanded\def\righttolefthbox#1#{\reversehbox#1\bgroup\righttoleft\let\next} \let\rtlhbox\righttolefthbox -\unexpanded\def\lefttorighthbox#1#{\naturalhbox#1\bgroup\lefttoright\let\next} \let\ltrhbox\lefttorighthbox -\unexpanded\def\righttoleftvbox#1#{\reversevbox#1\bgroup\righttoleft\let\next} \let\rtlvbox\righttoleftvbox -\unexpanded\def\lefttorightvbox#1#{\naturalvbox#1\bgroup\lefttoright\let\next} \let\ltrvbox\lefttorightvbox -\unexpanded\def\righttoleftvtop#1#{\reversevtop#1\bgroup\righttoleft\let\next} \let\rtlvtop\righttoleftvtop -\unexpanded\def\lefttorightvtop#1#{\naturalvtop#1\bgroup\lefttoright\let\next} \let\ltrvtop\lefttorightvtop +\permanent\protected\def\righttolefthbox#1#{\reversehbox#1\bgroup\righttoleft\let\next} \let\rtlhbox\righttolefthbox +\permanent\protected\def\lefttorighthbox#1#{\naturalhbox#1\bgroup\lefttoright\let\next} \let\ltrhbox\lefttorighthbox +\permanent\protected\def\righttoleftvbox#1#{\reversevbox#1\bgroup\righttoleft\let\next} \let\rtlvbox\righttoleftvbox +\permanent\protected\def\lefttorightvbox#1#{\naturalvbox#1\bgroup\lefttoright\let\next} \let\ltrvbox\lefttorightvbox +\permanent\protected\def\righttoleftvtop#1#{\reversevtop#1\bgroup\righttoleft\let\next} \let\rtlvtop\righttoleftvtop +\permanent\protected\def\lefttorightvtop#1#{\naturalvtop#1\bgroup\lefttoright\let\next} \let\ltrvtop\lefttorightvtop -\unexpanded\def\autodirhbox#1#{\hbox#1\bgroup\synchronizeinlinedirection\let\next} -\unexpanded\def\autodirvbox#1#{\vbox#1\bgroup\synchronizeinlinedirection\let\next} % maybe also pardir or maybe just a \vbox -\unexpanded\def\autodirvtop#1#{\vtop#1\bgroup\synchronizeinlinedirection\let\next} % maybe also pardir or maybe just a \vtop +\permanent\protected\def\autodirhbox#1#{\hbox#1\bgroup\synchronizeinlinedirection\let\next} +\permanent\protected\def\autodirvbox#1#{\vbox#1\bgroup\synchronizeinlinedirection\let\next} % maybe also pardir or maybe just a \vbox +\permanent\protected\def\autodirvtop#1#{\vtop#1\bgroup\synchronizeinlinedirection\let\next} % maybe also pardir or maybe just a \vtop -\unexpanded\def\leftorrighthbox{\ifconditional\displaylefttoright\expandafter\lefttorighthbox\else\expandafter\righttolefthbox\fi} -\unexpanded\def\leftorrightvbox{\ifconditional\displaylefttoright\expandafter\lefttorightvbox\else\expandafter\righttoleftvbox\fi} -\unexpanded\def\leftorrightvtop{\ifconditional\displaylefttoright\expandafter\lefttorightvtop\else\expandafter\righttoleftvtop\fi} +\permanent\protected\def\leftorrighthbox{\ifconditional\displaylefttoright\expandafter\lefttorighthbox\else\expandafter\righttolefthbox\fi} +\permanent\protected\def\leftorrightvbox{\ifconditional\displaylefttoright\expandafter\lefttorightvbox\else\expandafter\righttoleftvbox\fi} +\permanent\protected\def\leftorrightvtop{\ifconditional\displaylefttoright\expandafter\lefttorightvtop\else\expandafter\righttoleftvtop\fi} % Tolerance and hyphenation @@ -203,7 +203,7 @@ \def\spac_align_set_raggedness_middle{\ifzeropt\hsize\plussix\bodyfontsize\else.5\hsize\fi} -\unexpanded\def\setraggedness#1% tricky .. we keep the global tolerance otherwise ... to be reconsidered +\protected\def\setraggedness#1% tricky .. we keep the global tolerance otherwise ... to be reconsidered {\ifnum\tolerance<\c_spac_tolerance_minimum \tolerance\c_spac_tolerance_minimum % small values have unwanted side effects \else @@ -215,37 +215,37 @@ % no need to do something as we're in \nohyphens \fi} -\unexpanded\def\spac_align_set_tolerant +\protected\def\spac_align_set_tolerant {\tolerance\c_spac_tolerance_normal} -\unexpanded\def\spac_align_set_very_tolerant +\protected\def\spac_align_set_very_tolerant {\tolerance\c_spac_tolerance_extreme} -\unexpanded\def\spac_align_set_stretch +\protected\def\spac_align_set_stretch {\emergencystretch\bodyfontsize} -\unexpanded\def\spac_align_set_extreme_stretch +\protected\def\spac_align_set_extreme_stretch {\emergencystretch10\bodyfontsize} % Vertical \newconstant\c_spac_align_state_vertical -\unexpanded\def\spac_align_set_vertical_none - {\let\raggedtopcommand \relax - \let\raggedbottomcommand\relax} +\protected\def\spac_align_set_vertical_none + {\enforced\let\raggedtopcommand \relax + \enforced\let\raggedbottomcommand\relax} -\unexpanded\def\spac_align_set_vertical_lohi - {\let\raggedtopcommand \vfilll - \let\raggedbottomcommand\vfilll} +\protected\def\spac_align_set_vertical_lohi + {\enforced\let\raggedtopcommand \vfilll + \enforced\let\raggedbottomcommand\vfilll} -\unexpanded\def\spac_align_set_vertical_low - {\let\raggedtopcommand \vfilll - \let\raggedbottomcommand\relax} +\protected\def\spac_align_set_vertical_low + {\enforced\let\raggedtopcommand \vfilll + \enforced\let\raggedbottomcommand\relax} -\unexpanded\def\spac_align_set_vertical_high - {\let\raggedtopcommand \relax - \let\raggedbottomcommand\vfilll} +\protected\def\spac_align_set_vertical_high + {\enforced\let\raggedtopcommand \relax + \enforced\let\raggedbottomcommand\vfilll} \def\spac_align_flush_vertical {\ifcase\c_spac_align_state_vertical @@ -289,7 +289,7 @@ % \s!plus ... slower than inline -\unexpanded\def\spac_align_set_horizontal_none % should also relax \updateraggedskips +\permanent\protected\def\spac_align_set_horizontal_none % should also relax \updateraggedskips {\raggedstatus \zerocount \c_attr_alignstate\attributeunsetvalue \leftskip \plusone\leftskip @@ -301,7 +301,7 @@ \setfalse \raggedonelinerstate % now here \let\updateraggedskips\relax} % no need for adaption -\unexpanded\def\spac_align_set_horizontal_left +\permanent\protected\def\spac_align_set_horizontal_left {\setraggedness \spac_align_set_raggedness_left \raggedstatus \plusone \c_attr_alignstate\plusone @@ -314,7 +314,7 @@ \parindent \zeropoint \relax} -\unexpanded\def\spac_align_set_horizontal_center +\permanent\protected\def\spac_align_set_horizontal_center {\setraggedness \spac_align_set_raggedness_middle \raggedstatus \plustwo \c_attr_alignstate\plustwo @@ -327,7 +327,7 @@ \parindent \zeropoint \relax} -\unexpanded\def\spac_align_set_horizontal_right +\permanent\protected\def\spac_align_set_horizontal_right {\setraggedness \spac_align_set_raggedness_right \raggedstatus \plusthree \c_attr_alignstate\plusthree @@ -340,7 +340,7 @@ %\parindent \parindent \relax} -\unexpanded\def\spac_align_set_horizontal_very_left +\permanent\protected\def\spac_align_set_horizontal_very_left {\raggedstatus \plusone \c_attr_alignstate\plusone \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount @@ -352,7 +352,7 @@ \parindent \zeropoint \relax} -\unexpanded\def\spac_align_set_horizontal_very_center +\permanent\protected\def\spac_align_set_horizontal_very_center {\raggedstatus \plustwo \c_attr_alignstate\plustwo \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount @@ -364,7 +364,7 @@ \parindent \zeropoint \relax} -\unexpanded\def\spac_align_set_horizontal_very_right +\permanent\protected\def\spac_align_set_horizontal_very_right {\raggedstatus \plusthree \c_attr_alignstate\plusthree \leftskip \plusone\leftskip \s!plus\zeropoint @@ -376,7 +376,7 @@ %\parindent \parindent \relax} -\unexpanded\def\spac_align_set_horizontal_wide_center +\permanent\protected\def\spac_align_set_horizontal_wide_center {\setraggedness \spac_align_set_raggedness_middle \raggedstatus \plustwo \c_attr_alignstate\plustwo @@ -389,7 +389,7 @@ \parindent \zeropoint \relax} -\unexpanded\def\spac_align_set_horizontal_centered_last_line +\permanent\protected\def\spac_align_set_horizontal_centered_last_line {\raggedstatus \zerocount \c_attr_alignstate\attributeunsetvalue \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount\relax @@ -401,7 +401,7 @@ \parindent \zeropoint \relax} -\unexpanded\def\spac_align_set_horizontal_flushedright_last_line +\permanent\protected\def\spac_align_set_horizontal_flushedright_last_line {\raggedstatus \zerocount \c_attr_alignstate\attributeunsetvalue \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount\relax @@ -413,7 +413,7 @@ \parindent \zeropoint \relax} -\unexpanded\def\spac_align_set_horizontal_right_tt % a plain command +\permanent\protected\def\spac_align_set_horizontal_right_tt % a plain command {\tttf % brrr \raggedstatus \plusthree \c_attr_alignstate\plusthree @@ -426,7 +426,7 @@ %\parindent \parindent \relax} -\unexpanded\def\spac_align_set_horizontal_extra +\permanent\protected\def\spac_align_set_horizontal_extra {\xspaceskip\zeropoint\s!plus\v_spac_align_fill_amount_space\relax} \def\spac_align_flush_horizontal @@ -496,21 +496,21 @@ \newconstant\bottomraggednessmode % 0=ragged 1=normal/align 2=baseline -\unexpanded\def\raggedbottom +\permanent\protected\def\raggedbottom {\bottomraggednessmode\zerocount \settopskip} -\unexpanded\def\alignbottom +\permanent\protected\def\alignbottom {\bottomraggednessmode\plusone \settopskip} -\unexpanded\def\baselinebottom +\permanent\protected\def\baselinebottom {\bottomraggednessmode\plustwo \settopskip} \let\normalbottom\alignbottom % downward compatible -\unexpanded\def\setbottomalignmode#1% +\permanent\protected\def\setbottomalignmode#1% {\bottomraggednessmode#1% \settopskip} @@ -548,7 +548,7 @@ \let\updateraggedskips\relax \def\spac_align_add_to_cache - {\let\raggedbox\relax % why + {\enforced\let\raggedbox\relax % why % we inherit hyphenation and tolerance \t_spac_align_collected \emptytoks \c_spac_align_state_broad \zerocount @@ -582,7 +582,7 @@ % The local (key driven) setter: -\unexpanded\def\spac_align_prepare#1% deferred +\permanent\protected\def\spac_align_prepare#1% deferred {\edef\m_spac_align_asked{#1}% \expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname \ifx\raggedcommand\relax @@ -595,10 +595,7 @@ % The regular align setter: -\unexpanded\def\setupalign - {\dosingleempty\spac_align_setup} - -\def\spac_align_setup[#1]% immediate +\permanent\tolerant\protected\def\setupalign[#1]% immediate {\edef\m_spac_align_asked{#1}% \expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname \ifx\raggedcommand\relax @@ -608,13 +605,13 @@ \fi \raggedcommand} -\unexpanded\def\usealignparameter#1% faster local variant +\permanent\protected\def\usealignparameter#1% faster local variant {\edef\m_spac_align_asked{#1\c!align}% \ifx\m_spac_align_asked\empty\else \spac_align_use_indeed \fi} -\unexpanded\def\dousealignparameter#1% faster local variant +\permanent\protected\def\dousealignparameter#1% faster local variant {\edef\m_spac_align_asked{#1}% \ifx\m_spac_align_asked\empty\else \spac_align_use_indeed @@ -631,7 +628,7 @@ % experiment -\unexpanded\def\spac_align_use_later#1% +\protected\def\spac_align_use_later#1% {\begingroup \edef\m_spac_align_asked{#1}% \expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname @@ -640,12 +637,12 @@ \fi \endgroup} -\unexpanded\def\spac_align_use_now#1% +\protected\def\spac_align_use_now#1% {\csname\??alignmentnormalcache#1\endcsname} % Maybe we need something different in columns. -\unexpanded\def\installalign#1#2% beware: commands must be unexpandable! +\protected\def\installalign#1#2% beware: commands must be unexpandable! {\ifcsname\??aligncommand#1\endcsname \else \setvalue{\??aligncommand#1}{\toksapp\t_spac_align_collected{#2}}% \fi} @@ -659,7 +656,7 @@ % % this one could deal with both % -% \unexpanded\def\installalignoption#1#2% +% \protected\def\installalignoption#1#2% % {\ifcsname\??aligncommand#1\endcsname \else % \setvalue{\??aligncommand#1}% % {\spac_align_set_horizontal_none @@ -759,7 +756,7 @@ \spac_align_flush_parfill_indeed{\number\c_spac_align_state_par_fill}% \fi} -\unexpanded\def\spac_align_flush_parfill_indeed#1% +\protected\def\spac_align_flush_parfill_indeed#1% {\parfillskip #1\directhspaceamount\v!final % plus \dimexpr\availablehsize-#1\directhspaceamount\v!final\relax @@ -775,7 +772,7 @@ \setvalue{\??aligncommand\v!left }{\c_spac_align_state_horizontal\plustwo }% \to \t_spac_every_swap_align -\unexpanded\def\enablereversealignment +\permanent\protected\def\enablereversealignment {\the\t_spac_every_swap_align \t_spac_every_swap_align\emptytoks} @@ -792,8 +789,7 @@ \let\centeredlastline \spac_align_set_horizontal_centered_last_line \let\flushedrightlastline\spac_align_set_horizontal_flushedright_last_line \let\ttraggedright \spac_align_set_horizontal_right_tt % a plain command - -\let\forgetragged \spac_align_set_horizontal_none +\let\forgetragged \spac_align_set_horizontal_none \appendtoks \spac_align_set_horizontal_none @@ -801,18 +797,18 @@ % Box commands. -\unexpanded\def\ibox +\permanent\protected\def\ibox {\vbox\bgroup \forgetall - \let\\=\endgraf + \enforced\let\\\endgraf \ifdoublesided\signalinnerrealign\fi \doifelserightpage\spac_align_set_horizontal_right\spac_align_set_horizontal_left \let\next} -\unexpanded\def\obox +\permanent\protected\def\obox {\vbox\bgroup \forgetall - \let\\=\endgraf + \enforced\let\\\endgraf \ifdoublesided\signalouterrealign\fi \doifelserightpage\c_spac_align_state_horizontal_left\spac_align_set_horizontal_right \let\next} @@ -820,11 +816,11 @@ \let\raggedbox\relax \def\dosetraggedvbox#1% can be more keys .. how about caching here (but seldom used) - {\let\raggedbox\vbox + {\enforced\let\raggedbox\vbox \processcommacommand[#1]\spac_align_set_ragged_vbox} \def\dosetraggedhbox#1% can be more keys .. how about caching here (but seldom used) - {\let\raggedbox\hbox + {\enforced\let\raggedbox\hbox \processcommacommand[#1]\spac_align_set_ragged_hbox} \def\spac_align_set_ragged_vbox#1% @@ -839,35 +835,52 @@ \quitcommalist \fi} -\setvalue{\??alignvertical \v!left }{\let\raggedbox\lbox} -\setvalue{\??alignvertical \v!right }{\let\raggedbox\rbox} -\setvalue{\??alignvertical \v!middle }{\let\raggedbox\cbox} -\setvalue{\??alignvertical \v!inner }{\let\raggedbox\ibox} -\setvalue{\??alignvertical \v!outer }{\let\raggedbox\obox} -\setvalue{\??alignvertical \v!flushleft }{\let\raggedbox\rbox} -\setvalue{\??alignvertical \v!flushright}{\let\raggedbox\lbox} -\setvalue{\??alignvertical \v!center }{\let\raggedbox\cbox} -\setvalue{\??alignvertical \v!no }{\def\raggedbox{\vbox\bgroup\spac_align_set_horizontal_right\let\next=}]} - -% maybe \let's - -\setvalue{\??alignhorizontal\v!left }{\def\raggedbox{\doalignedline\v!left }} -\setvalue{\??alignhorizontal\v!right }{\def\raggedbox{\doalignedline\v!right }} -\setvalue{\??alignhorizontal\v!middle }{\def\raggedbox{\doalignedline\v!middle}} -\setvalue{\??alignhorizontal\v!inner }{\def\raggedbox{\doalignedline\v!inner }} -\setvalue{\??alignhorizontal\v!outer }{\def\raggedbox{\doalignedline\v!outer }} -\setvalue{\??alignhorizontal\v!flushleft }{\def\raggedbox{\doalignedline\v!right }} -\setvalue{\??alignhorizontal\v!flushright}{\def\raggedbox{\doalignedline\v!left }} -\setvalue{\??alignhorizontal\v!center }{\def\raggedbox{\doalignedline\v!middle}} +\permanent\protected\def\spac_align_vertical_left {\lbox} +\permanent\protected\def\spac_align_vertical_right {\rbox} +\permanent\protected\def\spac_align_vertical_middle {\cbox} +\permanent\protected\def\spac_align_vertical_inner {\ibox} +\permanent\protected\def\spac_align_vertical_outer {\obox} +\permanent\protected\def\spac_align_vertical_flushleft {\rbox} +\permanent\protected\def\spac_align_vertical_flushright{\lbox} +\permanent\protected\def\spac_align_vertical_center {\cbox} +\permanent\protected\def\spac_align_vertical_no {\vbox\bgroup\spac_align_set_horizontal_right\let\next=} + +\permanent\protected\def\spac_align_horizontal_left {\doalignedline\v!left} +\permanent\protected\def\spac_align_horizontal_right {\doalignedline\v!right} +\permanent\protected\def\spac_align_horizontal_middle {\doalignedline\v!middle} +\permanent\protected\def\spac_align_horizontal_inner {\doalignedline\v!inner} +\permanent\protected\def\spac_align_horizontal_outer {\doalignedline\v!outer} +\permanent\protected\def\spac_align_horizontal_flushleft {\doalignedline\v!right} +\permanent\protected\def\spac_align_horizontal_flushright{\doalignedline\v!left} +\permanent\protected\def\spac_align_horizontal_center {\doalignedline\v!middle} + +\setvalue{\??alignvertical \v!left }{\enforced\let\raggedbox\spac_align_vertical_left} +\setvalue{\??alignvertical \v!right }{\enforced\let\raggedbox\spac_align_vertical_right} +\setvalue{\??alignvertical \v!middle }{\enforced\let\raggedbox\spac_align_vertical_middle} +\setvalue{\??alignvertical \v!inner }{\enforced\let\raggedbox\spac_align_vertical_inner} +\setvalue{\??alignvertical \v!outer }{\enforced\let\raggedbox\spac_align_vertical_outer} +\setvalue{\??alignvertical \v!flushleft }{\enforced\let\raggedbox\spac_align_vertical_flushleft } +\setvalue{\??alignvertical \v!flushright}{\enforced\let\raggedbox\spac_align_vertical_flushright} +\setvalue{\??alignvertical \v!center }{\enforced\let\raggedbox\spac_align_vertical_center} +\setvalue{\??alignvertical \v!no }{\enforced\let\raggedbox\spac_align_vertical_no} + +\setvalue{\??alignhorizontal\v!left }{\enforced\let\raggedbox\spac_align_horizontal_left} +\setvalue{\??alignhorizontal\v!right }{\enforced\let\raggedbox\spac_align_horizontal_right} +\setvalue{\??alignhorizontal\v!middle }{\enforced\let\raggedbox\spac_align_horizontal_middle} +\setvalue{\??alignhorizontal\v!inner }{\enforced\let\raggedbox\spac_align_horizontal_inner} +\setvalue{\??alignhorizontal\v!outer }{\enforced\let\raggedbox\spac_align_horizontal_outer} +\setvalue{\??alignhorizontal\v!flushleft }{\enforced\let\raggedbox\spac_align_horizontal_flushleft} +\setvalue{\??alignhorizontal\v!flushright}{\enforced\let\raggedbox\spac_align_horizontal_flushright} +\setvalue{\??alignhorizontal\v!center }{\enforced\let\raggedbox\spac_align_horizontal_center} % The next one can be in use so we keep it around but oen should % be aware of possible interference. -\unexpanded\def\setraggedskips#1#2#3#4#5#6#7% never change this name (todo: inline this one .. less tracingall) - {\unexpanded\def\updateraggedskips{\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}% +\permanent\protected\def\setraggedskips#1#2#3#4#5#6#7% never change this name (todo: inline this one .. less tracingall) + {\protected\def\updateraggedskips{\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}% \updateraggedskips} -\def\dosetraggedskips#1#2#3#4#5#6#7% +\permanent\def\dosetraggedskips#1#2#3#4#5#6#7% {\raggedstatus #1\relax \leftskip 1\leftskip \s!plus#2\relax \rightskip 1\rightskip\s!plus#3\relax @@ -890,7 +903,7 @@ \expandafter\spac_show_par_data \fi} -\unexpanded\def\showpardata +\permanent\protected\def\showpardata {\edef\thepardata {\hbox{font: \fontname\font}\endgraf \spac_show_par_data @@ -909,24 +922,24 @@ \endgroup \let\showpardata\relax} -\unexpanded\def\startshowpardata +\permanent\protected\def\startshowpardata {\begingroup \showstruts \tracingparagraphs\maxdimen \appendtoksonce\showpardata\to\everypar} -\unexpanded\def\stopshowpardata +\permanent\protected\def\stopshowpardata {\endgraf \endgroup} % Structure: -\unexpanded\def\startalignment +\protected\def\startalignment {\par \begingroup \setupalign} -\unexpanded\def\stopalignment +\protected\def\stopalignment {\par \endgroup} @@ -937,19 +950,19 @@ \newtoks \everyleftofalignedline \newtoks \everyrightofalignedline -\unexpanded\def\shiftalignedline#1#2#3#4% left, right, inner, outer +\permanent\protected\def\shiftalignedline#1#2#3#4% left, right, inner, outer {\rightorleftpageaction {\everyleftofalignedline {\hskip\dimexpr#1+#3\relax}% \everyrightofalignedline{\hskip\dimexpr#2+#4\relax}} {\everyleftofalignedline {\hskip\dimexpr#1+#4\relax}% \everyrightofalignedline{\hskip\dimexpr#2+#3\relax}}} -\def\doalignline#1#2% \\ == newline +\permanent\def\doalignline#1#2% \\ == newline {\noindentation % was \noindent \dontleavehmode % added in marrakesch at TUG 2006\begingroup \begingroup \setlocalhsize % new - \def\\{\egroup\par\doalignline{#1}{#2}\bgroup}% + \enforced\permanent\protected\def\\{\egroup\par\doalignline{#1}{#2}\bgroup}% \dowithnextbox {\hbox to \localhsize {\ifcase\alignstrutmode\or\strut\fi @@ -961,10 +974,10 @@ % plain commands -\ifdefined\line \else \def\line {\hbox to\hsize} \fi -\ifdefined\leftline \else \def\leftline #1{\line{#1\hss}} \fi -\ifdefined\rightline \else \def\rightline #1{\line{\hss#1}} \fi -\ifdefined\centerline \else \def\centerline#1{\line{\hss#1\hss}} \fi +\ifdefined\line \else \permanent\def\line {\hbox to\hsize} \fi +\ifdefined\leftline \else \permanent\def\leftline #1{\line{#1\hss}} \fi +\ifdefined\rightline \else \permanent\def\rightline #1{\line{\hss#1}} \fi +\ifdefined\centerline \else \permanent\def\centerline#1{\line{\hss#1\hss}} \fi % direct commands @@ -978,36 +991,32 @@ \def\spac_align_wrapper_middle {\doalignline\hss \hss} \def\spac_align_wrapper_handle#1% - %{\csname\??alignwrapper\ifcsname\??alignwrapper#1\endcsname#1\else\v!middle\fi\endcsname} {\ifcsname\??alignwrapper#1\endcsname\expandafter\lastnamedcs\else\expandafter\spac_align_wrapper_middle\fi} -\unexpanded\def\spac_align_wrapper_start[#1]% +\permanent\tolerant\protected\def\startlinealignment[#1]% {\spac_align_wrapper_handle{#1}% \bgroup\ignorespaces} -\unexpanded\def\spac_align_wrapper_stop +\protected\def\spac_align_wrapper_stop {\removeunwantedspaces\egroup} -\unexpanded\def\startlinealignment - {\dosingleempty\spac_align_wrapper_start} - -\let\stoplinealignment\spac_align_wrapper_stop +\permanent\let\stoplinealignment\spac_align_wrapper_stop -\unexpanded\def\startleftaligned {\spac_align_wrapper_start[\v!left ]} \let\stopleftaligned \spac_align_wrapper_stop -\unexpanded\def\startmiddlealigned{\spac_align_wrapper_start[\v!middle]} \let\stopmiddlealigned\spac_align_wrapper_stop -\unexpanded\def\startrightaligned {\spac_align_wrapper_start[\v!right ]} \let\stoprightaligned \spac_align_wrapper_stop -\unexpanded\def\startmaxaligned {\spac_align_wrapper_start[\v!max ]} \let\stopmaxaligned \spac_align_wrapper_stop +\permanent\protected\def\startleftaligned {\startlinealignment[\v!left ]} \permanent\let\stopleftaligned \spac_align_wrapper_stop +\permanent\protected\def\startmiddlealigned{\startlinealignment[\v!middle]} \permanent\let\stopmiddlealigned\spac_align_wrapper_stop +\permanent\protected\def\startrightaligned {\startlinealignment[\v!right ]} \permanent\let\stoprightaligned \spac_align_wrapper_stop +\permanent\protected\def\startmaxaligned {\startlinealignment[\v!max ]} \permanent\let\stopmaxaligned \spac_align_wrapper_stop -\let\startmidaligned \startmiddlealigned \let\stopmidaligned \stopmiddlealigned -\let\startcenteraligned\startmiddlealigned \let\stopcenteraligned\stopmiddlealigned +\aliased\let\startmidaligned \startmiddlealigned \aliased\let\stopmidaligned \stopmiddlealigned +\aliased\let\startcenteraligned\startmiddlealigned \aliased\let\stopcenteraligned\stopmiddlealigned -\unexpanded\def\leftaligned {\spac_align_wrapper_handle\v!left } -\unexpanded\def\middlealigned{\spac_align_wrapper_handle\v!middle} -\unexpanded\def\rightaligned {\spac_align_wrapper_handle\v!right } -\unexpanded\def\maxaligned {\spac_align_wrapper_handle\v!max } +\permanent\protected\def\leftaligned {\spac_align_wrapper_handle\v!left } +\permanent\protected\def\middlealigned{\spac_align_wrapper_handle\v!middle} +\permanent\protected\def\rightaligned {\spac_align_wrapper_handle\v!right } +\permanent\protected\def\maxaligned {\spac_align_wrapper_handle\v!max } -\let\midaligned \middlealigned -\let\centeraligned\middlealigned +\aliased\let\midaligned \middlealigned +\aliased\let\centeraligned\middlealigned \installcorenamespace{alignline} @@ -1019,17 +1028,17 @@ \letvalue{\??alignline\v!center }\midaligned \letvalue{\??alignline\v!max }\maxaligned -\def\doalignedline#1{\resetrealignsignal\csname\??alignline#1\endcsname} +% \permanent\protected\def\doalignedline#1{\resetrealignsignal\csname\??alignline#1\endcsname} %D Experimental (will be redone when floats are redone as it's real messy %D now). It can also be made faster (if needed). -\def\doxalignline#1#2#3#4#5#6% +\permanent\protected\def\doxalignline#1#2#3#4#5#6% {\noindentation % was \noindent \dontleavehmode % added in marrakesch at TUG 2006\begingroup \begingroup \setlocalhsize - \def\\{\egroup\par\doxalignline#1#2#3#4#5#6\bgroup}% inefficient + \enforced\permanent\protected\def\\{\egroup\par\doxalignline#1#2#3#4#5#6\bgroup}% inefficient \dowithnextbox {\hbox to \localhsize {#1\hskip\ifdone#2\else#3\fi#4% @@ -1042,7 +1051,7 @@ \endgroup} \hbox} -\def\doxcheckline % used for floats so multipass anyway +\permanent\protected\def\doxcheckline % used for floats so multipass anyway {\signalrightpage\doifelserightpage\donetrue\donefalse} \setvalue{\??alignline\v!inner }{\doxalignline\doxcheckline++\zeropoint \relax\hss } @@ -1059,11 +1068,9 @@ \setvalue{\??alignline\v!leftedge }{\doxalignline\donefalse --\leftedgetotal \hss \relax} \setvalue{\??alignline\v!rightedge }{\doxalignline\donefalse ++\rightedgetotal \relax\hss } -\def\doalignedline#1% unchecked - {\csname\??alignline#1\endcsname} % no \resetrealignsignal here ? +\permanent\protected\def\doalignedline#1{\csname\??alignline#1\endcsname} % no \resetrealignsignal here ? -\def\alignedline#1#2% setting default - % {\csname\??alignline\ifcsname\??alignline#1\endcsname#1\else#2\fi\endcsname} +\permanent\protected\def\alignedline#1#2% setting default {\ifcsname\??alignline#1\endcsname \expandafter\lastnamedcs \else @@ -1076,15 +1083,12 @@ %D We need to pick up a box (downward compatible in case \type {\bgroup} %D is used (test suite index example). -\unexpanded\def\wordright - {\dosingleempty\spac_word_right} - -\def\spac_word_right[#1]% +\permanent\tolerant\protected\def\wordright[#1]% {\dowithnextbox {\normalexpanded{\spac_word_right_indeed{#1}{\hpack{\thebox\nextbox}}}} \hbox} -\unexpanded\def\spac_word_right_indeed#1#2% +\protected\def\spac_word_right_indeed#1#2% {\registerparwrapper {\v!word:\v!right} {\begingroup @@ -1119,13 +1123,13 @@ % Trick posted by WS on mailing list, generalized a bit. The bottom text only shows % op when there is one line space available. We could add some extra space if needed. -% \unexpanded\def\bottomword +% v\protected\def\bottomword % {\par % \dowithnextbox % {\leaders\box\nextbox\vfil\page} % \vbox to \lineheight} % -% \unexpanded\def\bottomword +% \permanent\protected\def\bottomword % {\par % \groupedcommand % {\leaders @@ -1141,9 +1145,9 @@ % todo: also handle \bgroup ... \egroup -\unexpanded\def\spac_align_simple_left #1{{#1\hss}} -\unexpanded\def\spac_align_simple_right #1{{\hss#1}} -\unexpanded\def\spac_align_simple_middle#1{{\hss#1\hss}} +\protected\def\spac_align_simple_left #1{{#1\hss}} +\protected\def\spac_align_simple_right #1{{\hss#1}} +\protected\def\spac_align_simple_middle#1{{\hss#1\hss}} \letvalue{\??alignsimple \v!right }\spac_align_simple_left \letvalue{\??alignsimple \v!outer }\spac_align_simple_left % not managed! see linenumbers @@ -1161,7 +1165,7 @@ \letvalue{\??alignsimplereverse\v!flushright}\spac_align_simple_left \letvalue{\??alignsimplereverse\v!middle }\spac_align_simple_middle -\unexpanded\def\simplealignedbox#1#2% +\permanent\protected\def\simplealignedbox#1#2% {\hbox \ifdim#1>\zeropoint to #1 \ifcsname\??alignsimple#2\endcsname \doubleexpandafter\lastnamedcs @@ -1170,7 +1174,7 @@ \fi \fi} -\unexpanded\def\simplealignedspreadbox#1#2% +\permanent\protected\def\simplealignedspreadbox#1#2% {\hbox \ifdim#1>\zeropoint spread #1 \ifcsname\??alignsimple#2\endcsname \doubleexpandafter\lastnamedcs @@ -1179,7 +1183,7 @@ \fi \fi} -\unexpanded\def\simplealignedboxplus#1#2#3% +\permanent\protected\def\simplealignedboxplus#1#2#3% {\hbox #3 \ifdim#1>\zeropoint to #1 \ifcsname\??alignsimple#2\endcsname \doubleexpandafter\lastnamedcs @@ -1190,7 +1194,7 @@ \newconditional\alignsimplelefttoright \settrue\alignsimplelefttoright -\unexpanded\def\simplereversealignedbox#1#2% +\permanent\protected\def\simplereversealignedbox#1#2% {\hbox \ifdim#1>\zeropoint to #1 \ifcsname\??alignsimplereverse#2\endcsname \doubleexpandafter\lastnamedcs @@ -1199,7 +1203,7 @@ \fi \fi} -\unexpanded\def\simplereversealignedboxplus#1#2#3% +\permanent\protected\def\simplereversealignedboxplus#1#2#3% {\hbox #3 \ifdim#1>\zeropoint to #1 \ifcsname\??alignsimplereverse#2\endcsname \doubleexpandafter\lastnamedcs @@ -1220,16 +1224,13 @@ % \setvalue{\??alignsets\v!lohi }#1#2{\let#1\vss \let#2\vss } % \setvalue{\??alignsets\s!unknown }#1#2{\let#1\relax\let#2\relax} % -% \unexpanded\def\spac_align_set_ss#1% +% \protected\def\spac_align_set_ss#1% % {\csname\??alignsetss\ifcsname\??alignsetss#1\endcsname#1\else\s!unknown\fi\endcsname} % Some obsolete (old) helpers: -\unexpanded\def\definehbox - {\dodoubleargument\spac_align_definehbox} - -\def\spac_align_definehbox[#1][#2]% - {\setvalue{hbox#1}##1{\hbox to #2{\begstrut##1\endstrut\hss}}} +\permanent\tolerant\protected\def\definehbox[#1][#2]% + {\ifarguments\else\setvalue{hbox#1}##1{\hbox to #2{\begstrut##1\endstrut\hss}}\fi} %D Some direction related helpers: @@ -1238,6 +1239,6 @@ \setvalue{\??reverse\v!normal }{\ifconditional\inlinelefttoright\else\s!reverse\fi} \setvalue{\??reverse\v!reverse}{\ifconditional\inlinelefttoright \s!reverse\fi} -\def\usedirectionparameterreverse#1{\begincsname\??reverse#1\c!direction\endcsname} +\permanent\def\usedirectionparameterreverse#1{\begincsname\??reverse#1\c!direction\endcsname} \protect \endinput diff --git a/tex/context/base/mkiv/spac-chr.lua b/tex/context/base/mkiv/spac-chr.lua index ac04a4c8e..899d274b4 100644 --- a/tex/context/base/mkiv/spac-chr.lua +++ b/tex/context/base/mkiv/spac-chr.lua @@ -33,7 +33,7 @@ local getnext = nuts.getnext local getprev = nuts.getprev local getattr = nuts.getattr local setattr = nuts.setattr -local getlang = nuts.getlang +local getlanguage = nuts.getlanguage local setchar = nuts.setchar local setattrlist = nuts.setattrlist local getfont = nuts.getfont diff --git a/tex/context/base/mkiv/spac-chr.mkiv b/tex/context/base/mkiv/spac-chr.mkiv index 43a725ae6..9113dc6a1 100644 --- a/tex/context/base/mkiv/spac-chr.mkiv +++ b/tex/context/base/mkiv/spac-chr.mkiv @@ -54,6 +54,8 @@ % Making them active is also not an option unless we do that in every % catcode vector. +\pushoverloadmode + % \nobreakspace {\begingroup\setalignstateattribute\normalUchar"00A0\endgroup} % 1 = left \edef\nobreakspace {\normalUchar"00A0} % space \edef\softhyphen {\normalUchar"00AD} % softhyohen @@ -63,6 +65,9 @@ \let\ideographicspace \enquad \let\ideographichalffillspace \emquad +\unletfrozen\hairspace +\unletfrozen\sixperemspace + \edef\twoperemspace {\normalUchar"2002} % quad/2 % % "2003 % quad == \quad == \hskip\emwidth \edef\threeperemspace {\normalUchar"2004} % quad/3 @@ -88,6 +93,8 @@ \let\zwj \zerowidthjoiner \let\nbsp \nobreakspace +\popoverloadmode + \chardef\optionalspace"1F % will be space unless before punctuation % Shortcuts: diff --git a/tex/context/base/mkiv/spac-grd.mkxl b/tex/context/base/mkiv/spac-grd.mkxl index 3e5030043..fbb02f50c 100644 --- a/tex/context/base/mkiv/spac-grd.mkxl +++ b/tex/context/base/mkiv/spac-grd.mkxl @@ -22,9 +22,9 @@ \installcorenamespace{lastnodepusher} -\let\poplastnode\relax +\permanent\let\poplastnode\relax -\unexpanded\def\pushlastnode +\permanent\protected\def\pushlastnode {\csname\??lastnodepusher \ifcsname\??lastnodepusher\the\lastnodetype\endcsname \the\lastnodetype @@ -34,19 +34,19 @@ \endcsname} \setvalue{\??lastnodepusher\number\kernnodecode}% - {\unexpanded\edef\poplastnode{\kern\the\lastkern\relax}% + {\enforced\permanent\protected\edef\poplastnode{\kern\the\lastkern\relax}% \kern-\lastkern} \setvalue{\??lastnodepusher\number\gluenodecode}% - {\unexpanded\edef\poplastnode{\vskip\the\lastskip\relax}% + {\enforced\permanent\protected\edef\poplastnode{\vskip\the\lastskip\relax}% \vskip-\lastskip} \setvalue{\??lastnodepusher\number\penaltynodecode}% - {\unexpanded\edef\poplastnode{\penalty\the\lastpenalty\relax}% + {\enforced\permanent\protected\edef\poplastnode{\penalty\the\lastpenalty\relax}% \nobreak} \setvalue{\??lastnodepusher\s!unknown}% - {\let\poplastnode\relax} + {\enforced\permanent\let\poplastnode\relax} %D Moved from supp-box: @@ -115,9 +115,6 @@ \ifdim\d_spac_lines_correction_before<\zeropoint\d_spac_lines_correction_before\zeropoint\fi \ifdim\d_spac_lines_correction_after <\zeropoint\d_spac_lines_correction_after \zeropoint\fi} -%unexpanded\def\dotopbaselinecorrection{\kern\d_spac_lines_correction_before} -%unexpanded\def\dobotbaselinecorrection{\kern\d_spac_lines_correction_after } - % experiment, todo: proper mkiv mechanism % % \input ward \par @@ -136,11 +133,11 @@ % to be redone: -\unexpanded\def\dotopbaselinecorrection{\expandafter\blank\expandafter[\the\d_spac_lines_correction_before]} -\unexpanded\def\dobotbaselinecorrection{\expandafter\blank\expandafter[\the\d_spac_lines_correction_after ]} +\permanent\protected\def\dotopbaselinecorrection{\expandafter\blank\expandafter[\the\d_spac_lines_correction_before]} +\permanent\protected\def\dobotbaselinecorrection{\expandafter\blank\expandafter[\the\d_spac_lines_correction_after ]} -\def\showbaselinecorrection - {\def\dobaselinecorrection % visualization is not watertight! +\permanent\def\showbaselinecorrection + {\enforced\permanent\protected\def\dobaselinecorrection % visualization is not watertight! {\bgroup \ifdim\prevdepth>\zeropoint \kern-\prevdepth @@ -153,17 +150,15 @@ \ruledvpack{\box\scratchbox}% \egroup \prevdepth\strutdp}% - \def\dotopbaselinecorrection - {\hrule\s!height\d_spac_lines_correction_before}% - \def\dobotbaselinecorrection - {\hrule\s!height\d_spac_lines_correction_after}} + \enforced\permanent\protected\def\dotopbaselinecorrection{\hrule\s!height\d_spac_lines_correction_before}% + \enforced\permanent\protected\def\dobotbaselinecorrection{\hrule\s!height\d_spac_lines_correction_after }} % \def\dobaselinecorrection % beware, this one is redefined below % {\ifdim\prevdepth>\zeropoint\kern-\prevdepth\fi % \kern\strutdp % \prevdepth\strutdp} -\def\baselinecorrection +\permanent\protected\def\baselinecorrection {\endgraf \ifvmode \ifdim\prevdepth<\maxdimen @@ -177,7 +172,7 @@ \fi \fi} -\def\pagebaselinecorrection +\permanent\protected\def\pagebaselinecorrection {\ifdim\pagegoal<\maxdimen \ifdim\pagetotal>\lineheight % or \topskip \scratchdimen\pagetotal @@ -188,35 +183,35 @@ \fi \fi} -\unexpanded\def\startbaselinecorrection +\permanent\protected\def\startbaselinecorrection {\bgroup - \let\stopbaselinecorrection\egroup + \enforced\let\stopbaselinecorrection\egroup \ifcase\baselinecorrectionmode \or % normal \baselinecorrection \ifvmode \setbox\scratchbox\vbox\bgroup\ignorespaces - \let\stopbaselinecorrection\donormalstopbaselinecorrection + \enforced\let\stopbaselinecorrection\donormalstopbaselinecorrection \fi \or % off \or % force \baselinecorrection \ifvmode \setbox\scratchbox\vbox\bgroup\ignorespaces - \let\stopbaselinecorrection\doforcedstopbaselinecorrection + \enforced\let\stopbaselinecorrection\doforcedstopbaselinecorrection \fi \fi} -\let\stopbaselinecorrection\relax +\permanent\let\stopbaselinecorrection\relax -\def\donormalstopbaselinecorrection % I have to check columns yet. +\permanent\protected\def\donormalstopbaselinecorrection % I have to check columns yet. {\egroup \topbaselinecorrection \box\scratchbox \botbaselinecorrection \egroup} -\def\doforcedstopbaselinecorrection % I have to check columns yet. +\permanent\protected\def\doforcedstopbaselinecorrection % I have to check columns yet. {\egroup \forcedtopbaselinecorrection \box\scratchbox @@ -229,31 +224,31 @@ \setnewconstant\baselinecorrectionmode\plusone -\def\onbaselinecorrection {\baselinecorrectionmode\plusone } -\def\offbaselinecorrection {\baselinecorrectionmode\plustwo } -\def\forcebaselinecorrection{\baselinecorrectionmode\plusthree} +\permanent\protected\def\onbaselinecorrection {\baselinecorrectionmode\plusone } +\permanent\protected\def\offbaselinecorrection {\baselinecorrectionmode\plustwo } +\permanent\protected\def\forcebaselinecorrection{\baselinecorrectionmode\plusthree} %D \macros %D {topbaselinecorrection,botbaselinecorrection} %D %D The actual top and bottom corrections are implemented as: -\def\topbaselinecorrection +\permanent\protected\def\topbaselinecorrection {\ifvmode \ifdim\pagegoal<\maxdimen \forcedtopbaselinecorrection \fi \fi} -\def\forcedtopbaselinecorrection - {\ifvmode - \bgroup - \spac_lines_initialize_corrections - \whitespace % no longer ok - \nointerlineskip - \dotopbaselinecorrection - \egroup - \fi} +% \permanent\protected\def\forcedtopbaselinecorrection +% {\ifvmode +% \bgroup +% \spac_lines_initialize_corrections +% \whitespace % no longer ok +% \nointerlineskip +% \dotopbaselinecorrection +% \egroup +% \fi} -\def\botbaselinecorrection +\permanent\protected\def\botbaselinecorrection {\ifvmode \bgroup \spac_lines_initialize_corrections @@ -263,8 +258,6 @@ \egroup \fi} -\let\forcedbotbaselinecorrection\botbaselinecorrection - % nointerlineskip % % startpacked @@ -272,17 +265,17 @@ % \startlinecorrection \framed{test} \stoplinecorrection % \stoppacked -\def\forcedtopbaselinecorrection +\permanent\protected\def\forcedtopbaselinecorrection {\ifvmode \bgroup \spac_lines_initialize_corrections \vspacing[\v!white] -% \nointerlineskip % + %\nointerlineskip % \dotopbaselinecorrection \egroup -\fi} + \fi} -\def\dobaselinecorrection +\permanent\protected\def\dobaselinecorrection {\ifdim\prevdepth>\zeropoint \vspacing[\the\dimexpr-\prevdepth+\strutdp\relax]% \else @@ -290,17 +283,17 @@ \fi \prevdepth\strutdp} -% \def\dobaselinecorrection +% \permanent\protected\def\dobaselinecorrection % {\scratchdimen\dimexpr\ifdim\prevdepth>\zeropoint-\prevdepth+\fi\strutdp\relax % \vspacing[\the\scratchdimen]% % \prevdepth\strutdp} % % some day: % -% \def\dobaselinecorrection +% \permanent\protected\def\dobaselinecorrection % {\clf_checkstrutdepth\strutdp} % -% \def\baselinecorrection +% \permanent\protected\def\baselinecorrection % {\endgraf % \ifvmode % \ifdim\prevdepth<\maxdimen @@ -321,7 +314,7 @@ %D For the moment only with placefloats (should work in mvl and boxes): -\unexpanded\def\checkprevdepth +\permanent\protected\def\checkprevdepth {\endgraf \ifvmode \ifdim\prevdepth<\maxdimen @@ -335,18 +328,22 @@ \let\normalstartbaselinecorrection\startbaselinecorrection -\unexpanded\def\startbaselinecorrection +\pushoverloadmode + +\permanent\protected\def\startbaselinecorrection {\ifgridsnapping \snaptogrid[\v!normal]\vbox\bgroup - \let\stopbaselinecorrection\egroup + \enforced\let\stopbaselinecorrection\egroup \else \normalstartbaselinecorrection \fi} +\popoverloadmode + % This is new (and experimental) and might replace some of the above. beware it doesn't always work % out well, e.g. when used grouped and such (e.g. before display math doesn't work out well). -% \unexpanded\def\fakenextstrutline +% \permanent\protected\def\fakenextstrutline % {\par % \begingroup % \reseteverypar @@ -355,7 +352,7 @@ % \vskip-\struttotal % \endgroup} -% \unexpanded\def\fakenextstrutline +% \permanent\protected\def\fakenextstrutline % {\par % \begingroup % \reseteverypar @@ -366,7 +363,7 @@ % \fi % \endgroup} -% \unexpanded\def\fakenextstrutline +% \permanent\protected\def\fakenextstrutline % {\par % \begingroup % \reseteverypar diff --git a/tex/context/base/mkiv/spac-hor.mkxl b/tex/context/base/mkiv/spac-hor.mkxl index e0fb9e407..c394308f3 100644 --- a/tex/context/base/mkiv/spac-hor.mkxl +++ b/tex/context/base/mkiv/spac-hor.mkxl @@ -30,16 +30,13 @@ %D After a blank or comparable situation (left side floats) we %D need to check if the next paragraph has to be indented. -\unexpanded\def\presetindentation +\permanent\protected\def\presetindentation {\doifoutervmode{\ifconditional\c_spac_indentation_indent_first\else\spac_indentation_variant_no\fi}} -\unexpanded\def\setupindenting +\permanent\protected\def\setupindenting {\doifelsenextoptionalcs\spac_indentation_setup_options\spac_indentation_setup_size} -% \unexpanded\def\spac_indentation_setup_size -% {\assigndimension\v_spac_indentation_current\d_spac_indentation_par{1\emwidth}{1.5\emwidth}{2\emwidth}} - -\unexpanded\def\spac_indentation_setup_size +\protected\def\spac_indentation_setup_size {\assigndimension\v_spac_indentation_current\d_spac_indentation_par{1\emwidth}{1.5\emwidth}{2\emwidth}% \ifzeropt\parindent\else \parindent\d_spac_indentation_par\relax % new per 2019-04-12 : just in case it has been set beforehand @@ -74,7 +71,7 @@ \def\spac_indentation_set_everypar {\everypar{\checkindentation}} -\unexpanded\def\useindentingparameter#1% faster local variant +\permanent\protected\def\useindentingparameter#1% faster local variant {\edef\m_spac_indentation_options{#1\c!indenting}% \ifx\m_spac_indentation_options\empty \else \spac_indentation_setup_indeed @@ -105,37 +102,8 @@ \installcorenamespace {indentingpreset} -\unexpanded\def\defineindenting - {\dodoubleargument\spac_indenting_define} - -\def\spac_indenting_define[#1][#2]% todo: mixes - {\setevalue{\??indentingpreset#1}{#2}} - -% \def\spac_indentation_apply_step_one_nested#1% -% {\expandafter\processcommacommand\expandafter[\csname\??indentingpreset#1\endcsname]\spac_indentation_apply_step_one} -% -% \def\spac_indentation_apply_step_two_nested#1% -% {\expandafter\processcommacommand\expandafter[\csname\??indentingpreset#1\endcsname]\spac_indentation_apply_step_two} -% -% \def\spac_indentation_apply_step_one#1% -% {\ifcsname\??indentingpreset#1\endcsname -% \spac_indentation_apply_step_one_nested{#1}% -% \orelse\ifcsname\??indentingmethod#1\endcsname -% % case two -% \else -% \edef\v_spac_indentation_current{#1}% single entry in list -% \let\normalindentation\v_spac_indentation_current -% \spac_indentation_setup_size -% \fi} -% -% \def\spac_indentation_apply_step_two#1% -% {\ifcsname\??indentingpreset#1\endcsname -% \spac_indentation_apply_step_two_nested{#1}% -% \orelse\ifcsname\??indentingmethod#1\endcsname -% \lastnamedcs -% \else -% % case one -% \fi} +\permanent\tolerant\protected\def\defineindenting[#1]#*[#2]% todo: mixes + {\ifarguments\else\setevalue{\??indentingpreset#1}{#2}\fi} \def\spac_indentation_apply_step_one_nested {\expandafter\processcommacommand\expandafter[\lastnamedcs]\spac_indentation_apply_step_one} @@ -163,14 +131,14 @@ % case one \fi} -\unexpanded\def\indenting % kind of obsolete +\permanent\protected\def\indenting % kind of obsolete {\doifelsenextoptionalcs\spac_indentation_setup_options\relax} % use \noindentation to suppress next indentation \installcorenamespace{indentingmethod} -\unexpanded\def\installindentingmethod#1#2% +\permanent\protected\def\installindentingmethod#1#2% {\setvalue{\??indentingmethod#1}{#2}} \installindentingmethod \v!no {\parindent\zeropoint} @@ -203,8 +171,8 @@ \zeropoint \fi\relax} -\unexpanded\def\noindenting{\indenting[\v!no, \v!next ]} -\unexpanded\def\doindenting{\indenting[\v!yes,\v!first]} +\permanent\protected\def\noindenting{\indenting[\v!no, \v!next ]} +\permanent\protected\def\doindenting{\indenting[\v!yes,\v!first]} %D Here come the handlers (still rather messy ... we need states). @@ -260,19 +228,19 @@ {\spac_indentation_remove \glet\checkindentation\spac_indentation_do_indeed} -\def\spac_indentation_variant_no % made global +\permanent\protected\def\spac_indentation_variant_no % made global {\ifinpagebody \else %\global\indentationfalse \glet\checkindentation\spac_indentation_no_next_check \fi} -\def\nonoindentation % bv bij floats +\permanent\protected\def\nonoindentation % bv bij floats {\ifinpagebody \else %\global\indentationtrue \glet\checkindentation\spac_indentation_do_indeed \fi} -\def\spac_indentation_variant_force +\permanent\protected\def\spac_indentation_variant_force {\ifvmode \ifzeropt\parindent \else % was : \hskip\parindent % can be: \indent @@ -296,27 +264,27 @@ \let\noindentation\spac_indentation_variant_no % public \let\doindentation\spac_indentation_variant_yes % public -\def\dontrechecknextindentation % public (in macros) - {\glet\dorechecknextindentation\relax} +\permanent\protected\def\dontrechecknextindentation % public (in macros) + {\global\enforced\let\dorechecknextindentation\relax} -\let\dorechecknextindentation\relax % public (in macros) +\let\dorechecknextindentation\relax % public (in macros) -\unexpanded\def\spac_indentation_check_next_indentation - {\glet\dorechecknextindentation\relax +\permanent\protected\protected\def\spac_indentation_check_next_indentation + {\global\enforced\let\dorechecknextindentation\relax \doifelsenextchar\par\donothing\spac_indentation_variant_no} % messy check as next is seldom \par \def\spac_indentation_variant_auto - {\glet\dorechecknextindentation\spac_indentation_check_next_indentation} + {\global\enforced\let\dorechecknextindentation\spac_indentation_check_next_indentation} %D This one sets up the local indentation behaviour (i.e. either or not %D a next paragraph will be indented). \installcorenamespace{indentnext} -\unexpanded\def\checknextindentation[#1]% +\permanent\protected\def\checknextindentation[#1]% {\begincsname\??indentnext#1\endcsname} -\unexpanded\def\useindentnextparameter#1% new, the more efficient variant +\permanent\protected\def\useindentnextparameter#1% new, the more efficient variant {\edef\p_indentnext{#1\c!indentnext}% \ifx\p_indentnext\empty\else \begincsname\??indentnext\p_indentnext\endcsname @@ -366,7 +334,7 @@ % maybe an everyforgetparindent -\unexpanded\def\forgetparindent +\permanent\protected\def\forgetparindent {\settrue\c_spac_indentation_indent_first % recently added \d_spac_indentation_par\zeropoint \parindent\zeropoint @@ -376,7 +344,7 @@ \forgetparindent \to \everyforgetall -\unexpanded\def\forgethorizontalstretch +\permanent\protected\def\forgethorizontalstretch {\emergencystretch\zeropoint} \appendtoks @@ -385,7 +353,7 @@ %D Helper: -\unexpanded\def\softbreak +\permanent\protected\def\softbreak {\relax\ifhmode\hskip\parfillskip\break\fi} %D \macros @@ -413,27 +381,33 @@ \sfcode`\?3000 \sfcode`\!3000 \sfcode`\:2000 \sfcode`\;1500 } -\unexpanded\def\frenchspacing {\spac_spacecodes_set_fixed\plusthousand} -\unexpanded\def\newfrenchspacing{\spac_spacecodes_set_fixed{1050}} -\unexpanded\def\nonfrenchspacing{\spac_spacecodes_set_stretch} +\permanent\protected\def\frenchspacing {\spac_spacecodes_set_fixed\plusthousand} +\permanent\protected\def\newfrenchspacing{\spac_spacecodes_set_fixed{1050}} +\permanent\protected\def\nonfrenchspacing{\spac_spacecodes_set_stretch} -\unexpanded\def\installspacingmethod#1#2{\setvalue{\??spacecodemethod#1}{#2}} +\permanent\protected\def\installspacingmethod#1#2{\setvalue{\??spacecodemethod#1}{#2}} \installspacingmethod \empty {} % keep values \installspacingmethod \v!fixed {\frenchspacing } % equal spaces everywhere \installspacingmethod \v!packed {\newfrenchspacing} % slighly more after punctuation \installspacingmethod \v!broad {\nonfrenchspacing} % more depending on what punctuation -\unexpanded\def\setupspacing - {\doifelsenextoptionalcs\spac_spacecodes_setup_yes\spac_spacecodes_setup_nop} - -\def\spac_spacecodes_setup_yes[#1]% - {\begincsname\??spacecodemethod#1\endcsname +%% \permanent\protected\def\setupspacing +%% {\doifelsenextoptionalcs\spac_spacecodes_setup_yes\spac_spacecodes_setup_nop} +%% +%% \def\spac_spacecodes_setup_yes[#1]% +%% {\begincsname\??spacecodemethod#1\endcsname +%% \updateraggedskips} +%% +%% \def\spac_spacecodes_setup_nop +%% {\updateraggedskips} + +\permanent\tolerant\protected\def\setupspacing[#1]% + {\ifarguments\or + \begincsname\??spacecodemethod#1\endcsname + \fi \updateraggedskips} -\def\spac_spacecodes_setup_nop - {\updateraggedskips} - %D Here's a tweak .. if needed one can configure it in the configuration %D so that initialization happens more efficient. %D @@ -453,7 +427,7 @@ % This is not needed, as \updateraggedskips is taking care of it: -\let\synchronizespacecodes\spac_spacecodes_setup_nop % \relax +\permanent\protected\def\synchronizespacecodes{\updateraggedskips} % \dorecurse{100}{\recurselevel\spacefactor 800 \space} \par % \dorecurse{100}{\recurselevel\spacefactor1200 \space} \par @@ -476,16 +450,20 @@ %D from now on we treat it as a normal space and not as a space with \type %D {sfcode} 1000. -\unexpanded\def\specialspaceprimitive +\permanent\protected\def\specialspaceprimitive {\begingroup % so, no fancy extra spacing after: foo i.e.\ bar \nonfrenchspacing\normalspaceprimitive \endgroup} -\unexpanded\def\normalnotobeyedspace +\permanent\protected\def\normalnotobeyedspace {\mathortext\normalspaceprimitive\specialspaceprimitive} % no \dontleavehmode\space (else no frenchspacing) -\let\ =\normalnotobeyedspace +\pushoverloadmode + +\overloaded\let\ =\normalnotobeyedspace % so we redefine the primitive! + +\popoverloadmode % Because I strip spaces at the end of lines (in the editor) we need a bit of % a trick to define slash+newline, so \space and \ are the same @@ -508,27 +486,27 @@ % \ruledhbox spread 10pt {\frenchspacing xx dr.~X} % \ruledhbox spread 10pt {\nonfrenchspacing xx dr.~X} -\unexpanded\def\nonbreakablespace{\penalty\plustenthousand\normalspaceprimitive} % no space in math +\permanent\protected\def\nonbreakablespace{\penalty\plustenthousand\normalspaceprimitive} % no space in math \letcatcodecommand \ctxcatcodes \tildeasciicode \nonbreakablespace % overloaded later - \def\space { } -\unexpanded\def\removelastspace{\ifhmode\unskip\fi} -\unexpanded\def\nospace {\removelastspace\ignorespaces} +% \def\space { } +\permanent\protected\def\removelastspace{\ifhmode\unskip\fi} +\permanent\protected\def\nospace {\removelastspace\ignorespaces} \ifdefined\nospaces - \unexpanded\def\nospacing{\normalnospaces\plusone} - \unexpanded\def\dospacing{\normalnospaces\zerocount} + \permanent\protected\def\nospacing{\normalnospaces\plusone} + \permanent\protected\def\dospacing{\normalnospaces\zerocount} \else - \unexpanded\def\nospacing{\spaceskip\scaledpoint \xspaceskip\zeropoint} - \unexpanded\def\dospacing{\spaceskip\currentspaceskip\xspaceskip\zeropoint} % what + \permanent\protected\def\nospacing{\spaceskip\scaledpoint \xspaceskip\zeropoint} + \permanent\protected\def\dospacing{\spaceskip\currentspaceskip\xspaceskip\zeropoint} % what \fi \ifdefined\softhyphen \else \let\softhyphen\explicitdiscretionary \fi -\cldcontext{"\string\\unexpanded\string\\def\string\\\string\n{\string\\space}"} +\cldcontext{"\string\\protected\string\\def\string\\\string\n{\string\\space}"} %cldcontext{"\string\\let\string\\\string\n=\string\\space"} % in tables we need: @@ -537,31 +515,31 @@ % % but, since not all fonts have .5em digits: -\unexpanded\def\fixedspace +\permanent\protected\def\fixedspace {\setbox\scratchbox\hpack{\mathortext{0}{0}}% was \hbox \hskip\wd\scratchbox\relax} -\unexpanded\def\fixedspaces +\permanent\protected\def\fixedspaces {\letcatcodecommand \ctxcatcodes \tildeasciicode\fixedspace - \let~\fixedspace} % we need to renew it + \enforced\let~\fixedspace} % we need to renew it \appendtoks - \let~\space - \let\ \space + \enforced\let~\space + \enforced\let\ \space \to \everysimplifycommands \newsignal\s_spac_keep_unwanted_space % \parindentmode\plusone -\unexpanded\def\keepunwantedspaces +\permanent\protected\def\keepunwantedspaces {\ifhmode \ifdim\lastskip=\s_spac_keep_unwanted_space\else \hskip\s_spac_keep_unwanted_space\relax \fi \fi} -\unexpanded\def\removeunwantedspaces +\permanent\protected\def\removeunwantedspaces {\ifhmode \expandafter \spac_helpers_remove_unwantedspace \fi} @@ -578,7 +556,7 @@ \fi \fi} -\unexpanded\def\onlynonbreakablespace +\permanent\protected\def\onlynonbreakablespace {\ifdim\lastskip=\interwordspace \unskip \nonbreakablespace @@ -609,34 +587,25 @@ %D A couple of plain macros: -\ifdefined\thinspace \else +\ifdefined\enspace \else \permanent\protected\def\enspace{\kern .5\emwidth} \fi +\ifdefined\quad \else \permanent\protected\def\quad {\hskip \emwidth\relax} \fi +\ifdefined\enskip \else \permanent\protected\def\enskip {\hskip.5\emwidth\relax} \fi +\ifdefined\qquad \else \permanent\protected\def\qquad {\hskip 2\emwidth\relax} \fi - \unexpanded\def\thinspace {\kern .16667\emwidth} - \unexpanded\def\negthinspace{\kern-.16667\emwidth} - \unexpanded\def\enspace {\kern .5\emwidth} - -\fi - -\ifdefined\quad \else - - \unexpanded\def\enskip{\hskip.5\emwidth\relax} - \unexpanded\def\quad {\hskip \emwidth\relax} - \unexpanded\def\qquad {\hskip 2\emwidth\relax} - -\fi - -\unexpanded\def\negenspace{\kern-.5\emwidth} -\unexpanded\def\negemspace{\kern- \emwidth} +\permanent\protected\def\negenspace{\kern-.5\emwidth} +\permanent\protected\def\negemspace{\kern- \emwidth} \let\emspace\quad -\unexpanded\def\charspace{ } % the unexpandable \space (as space can also be delimiter for numbers) - -\unexpanded\def\quads - {\dosingleempty\spac_quads} +\permanent\protected\def\charspace{ } % the unexpandable \space (as space can also be delimiter for numbers) -\def\spac_quads[#1]% - {\zwj\dorecurse{\iffirstargument#1\else\plusthree\fi}{\hskip\emwidth\zwj}} +\permanent\tolerant\protected\def\quads[#1]% we do robust checking + {\dontleavehmode + \begingroup + %\scratchcounter\ifparameter#1\or#1\else\plusthree\fi + \scratchcounter\ifchknum#1\or#1\else\plusthree\fi + \zwj\dorecurse\scratchcounter{\hskip\emwidth\zwj}% + \endgroup} % Suggested by GB (not the name -): @@ -652,16 +621,16 @@ \newskip\s_spac_neg_fill \s_spac_neg_fill = \zeropoint \s!plus-1\s!fill \relax \newskip\s_spac_neg_filll \s_spac_neg_filll = \zeropoint \s!plus-1\s!filll\relax -\unexpanded\def\hfilll {\hskip\s_spac_filll\relax} -\unexpanded\def\vfilll {\vskip\s_spac_filll\relax} +\permanent\protected\def\hfilll {\hskip\s_spac_filll\relax} +\permanent\protected\def\vfilll {\vskip\s_spac_filll\relax} -\unexpanded\def\hfillneg {\hskip\s_spac_neg_fill \relax} -\unexpanded\def\hfilllneg{\hskip\s_spac_neg_filll\relax} -\unexpanded\def\vfillneg {\vskip\s_spac_neg_fill \relax} -\unexpanded\def\vfilllneg{\vskip\s_spac_neg_filll\relax} +\permanent\protected\def\hfillneg {\hskip\s_spac_neg_fill \relax} +\permanent\protected\def\hfilllneg{\hskip\s_spac_neg_filll\relax} +\permanent\protected\def\vfillneg {\vskip\s_spac_neg_fill \relax} +\permanent\protected\def\vfilllneg{\vskip\s_spac_neg_filll\relax} -\unexpanded\def\tfskip {\begingroup\tf\hskip\emwidth\endgroup} -\unexpanded\def\dotfskip#1{\begingroup\tf\hskip #1\endgroup} % used elsewhere +\permanent\protected\def\tfskip {\begingroup\tf\hskip\emwidth\endgroup} +\permanent\protected\def\dotfskip#1{\begingroup\tf\hskip #1\endgroup} % used elsewhere % maybe we should hash the analysis @@ -683,14 +652,14 @@ \c!default=\v!middle] \appendtoks - \setuevalue{\e!start\currentnarrower}{\spac_narrower_start{\currentnarrower}}% + \setuevalue{\e!start\currentnarrower}{\spac_narrower_start[\currentnarrower]}% \setuevalue{\e!stop \currentnarrower}{\spac_narrower_stop}% \to \everydefinenarrower -\unexpanded\def\installnarrowermethod#1#2% +\permanent\protected\def\installnarrowermethod#1#2% {\setvalue{\??narrowermethod#1}{#2}} -\unexpanded\def\spac_narrower_method_analyze#1% +\protected\def\spac_narrower_method_analyze#1% {\ifcsname\??narrowermethod#1\endcsname \lastnamedcs \else @@ -712,20 +681,17 @@ \installnarrowermethod \v!none {} \installnarrowermethod \v!reverse {} % never seen -\unexpanded\def\spac_narrower_start#1% +\permanent\overloaded\tolerant\protected\def\spac_narrower_start[#1]#*[#2]% {\begingroup \edef\currentnarrower{#1}% - \dosingleempty\spac_narrower_start_indeed} - -\unexpanded\def\spac_narrower_start_indeed[#1]% - {\iffirstargument - \spac_narrower_start_apply{#1}% + \ifparameter#2\or + \spac_narrower_start_apply{#2}% \else \spac_narrower_start_apply{\narrowerparameter\v!default}% \fi} -\newskip\s_spac_narrower_left_last -\newskip\s_spac_narrower_right_last +\newskip \s_spac_narrower_left_last +\newskip \s_spac_narrower_right_last \newconditional\s_spac_narrower_last_swap \def\spac_narrower_start_apply#1% @@ -736,22 +702,22 @@ \edef\askednarrower{#1}% \ifx\askednarrower\v!reverse \ifconditional\s_spac_narrower_last_swap - \frozen\leftskip \s_spac_narrower_right_last - \frozen\rightskip\s_spac_narrower_left_last + \permanent\leftskip \s_spac_narrower_right_last + \permanent\rightskip\s_spac_narrower_left_last \setfalse\s_spac_narrower_last_swap \else - \frozen\leftskip \s_spac_narrower_left_last - \frozen\rightskip\s_spac_narrower_right_last + \permanent\leftskip \s_spac_narrower_left_last + \permanent\rightskip\s_spac_narrower_right_last \settrue\s_spac_narrower_last_swap \fi \else \normalexpanded{\processcommalistwithparameters[\askednarrower]}\spac_narrower_initialize - \frozen\advance\leftskip \dimexpr\s_spac_narrower_left +\s_spac_narrower_middle\relax - \frozen\advance\rightskip\dimexpr\s_spac_narrower_right+\s_spac_narrower_middle\relax + \permanent\advance\leftskip \dimexpr\s_spac_narrower_left +\s_spac_narrower_middle\relax + \permanent\advance\rightskip\dimexpr\s_spac_narrower_right+\s_spac_narrower_middle\relax \fi \seteffectivehsize} -\unexpanded\def\spac_narrower_stop +\permanent\protected\def\spac_narrower_stop {\narrowerparameter\c!after \normalexpanded{% \endgroup @@ -764,13 +730,15 @@ \fi }} -\unexpanded\def\startnarrower - {\dosingleempty\spac_narrower_start_basic} +%% \permanent\protected\def\startnarrower +%% {\dosingleempty\spac_narrower_start_basic} +%% +%% \protected\def\spac_narrower_start_basic[#1]% -\unexpanded\def\spac_narrower_start_basic[#1]% +\permanent\tolerant\protected\def\startnarrower[#1]% {\begingroup \let\currentnarrower\empty - \iffirstargument + \ifparameter#1\or \spac_narrower_start_apply{#1}% \else \spac_narrower_start_apply{\narrowerparameter\v!default}% @@ -778,24 +746,26 @@ \let\stopnarrower\spac_narrower_stop -\unexpanded\def\startnarrow % current how - {\begingroup - \dodoubleempty\spac_narrower_start_named} +%% \protected\def\startnarrow % current how +%% {\begingroup +%% \dodoubleempty\spac_narrower_start_named} +%% +%% \def\spac_narrower_start_named +%% {\ifsecondargument +%% \expandafter\spac_narrower_start_named_two +%% \else +%% \expandafter\spac_narrower_start_named_one +%% \fi} -% \def\spac_narrower_start_named[#1][#2]% -% {\edef\currentnarrower{#1}% -% \ifsecondargument -% \spac_narrower_start_apply{#2}% -% \else -% \spac_narrower_start_apply{\narrowerparameter\v!default}% -% \fi} +% can be cleaned up more ... todo -\def\spac_narrower_start_named - {\ifsecondargument +\permanent\tolerant\protected\def\startnarrow[#1]#*[#2]% current how + {\begingroup + \ifnum\lastarguments=\plustwo \expandafter\spac_narrower_start_named_two \else \expandafter\spac_narrower_start_named_one - \fi} + \fi[#1][#2]} \def\spac_narrower_start_named_one[#1]% {\doifelseassignment{#1}\spac_narrower_start_named_one_yes\spac_narrower_start_named_one_nop[#1]} @@ -833,7 +803,7 @@ \newdimen\d_spac_effective_leftskip \def\effectiveleftskip {\dimexpr\leftskip \relax} \newdimen\d_spac_effective_rightskip \def\effectiverightskip{\dimexpr\rightskip\relax} -\unexpanded\def\seteffectivehsize +\permanent\protected\def\seteffectivehsize {\setlocalhsize \d_spac_effective_hsize \localhsize \d_spac_effective_leftskip 1\leftskip @@ -861,16 +831,16 @@ \letcsnamecsname\csname\??skipadaptionleft \v!standard\endcsname\csname\??skipadaptionleft \v!yes\endcsname \letcsnamecsname\csname\??skipadaptionright\v!standard\endcsname\csname\??skipadaptionright\v!yes\endcsname -% \unexpanded\def\dosetleftskipadaption #1{\leftskipadaption \ifcsname\??skipadaptionleft #1\endcsname\csname\??skipadaptionleft #1\endcsname\else#1\fi\relax} -% \unexpanded\def\dosetrightskipadaption#1{\rightskipadaption\ifcsname\??skipadaptionright#1\endcsname\csname\??skipadaptionright#1\endcsname\else#1\fi\relax} +% \protected\def\dosetleftskipadaption #1{\leftskipadaption \ifcsname\??skipadaptionleft #1\endcsname\csname\??skipadaptionleft #1\endcsname\else#1\fi\relax} +% \protected\def\dosetrightskipadaption#1{\rightskipadaption\ifcsname\??skipadaptionright#1\endcsname\csname\??skipadaptionright#1\endcsname\else#1\fi\relax} -\unexpanded\def\dosetleftskipadaption #1{\leftskipadaption \ifcsname\??skipadaptionleft #1\endcsname\lastnamedcs\else#1\fi\relax} -\unexpanded\def\dosetrightskipadaption#1{\rightskipadaption\ifcsname\??skipadaptionright#1\endcsname\lastnamedcs\else#1\fi\relax} +\permanent\protected\def\dosetleftskipadaption #1{\leftskipadaption \ifcsname\??skipadaptionleft #1\endcsname\lastnamedcs\else#1\fi\relax} +\permanent\protected\def\dosetrightskipadaption#1{\rightskipadaption\ifcsname\??skipadaptionright#1\endcsname\lastnamedcs\else#1\fi\relax} -\unexpanded\def\doadaptleftskip #1{\normalexpanded{\dosetleftskipadaption {#1}}\frozen\advance\leftskip \leftskipadaption } -\unexpanded\def\doadaptrightskip#1{\normalexpanded{\dosetrightskipadaption{#1}}\frozen\advance\rightskip\rightskipadaption} +\permanent\protected\def\doadaptleftskip #1{\normalexpanded{\dosetleftskipadaption {#1}}\permanent\advance\leftskip \leftskipadaption } +\permanent\protected\def\doadaptrightskip#1{\normalexpanded{\dosetrightskipadaption{#1}}\permanent\advance\rightskip\rightskipadaption} -\unexpanded\def\forgetbothskips +\permanent\protected\def\forgetbothskips {\leftskip\zeropoint \rightskip\zeropoint \relax} @@ -881,7 +851,7 @@ % in spac-ver.mkiv % -% \unexpanded\def\forgetparskip +% \protected\def\forgetparskip % {\s_spac_whitespace_parskip\zeropoint % \parskip\zeropoint % \let\v_spac_whitespace_current\v!none} @@ -894,7 +864,7 @@ \installcorenamespace{tolerancemethods} -\unexpanded\def\installtolerancemethod#1#2#3% +\permanent\protected\def\installtolerancemethod#1#2#3% {\setvalue{\??tolerancemethods#1:#2}{#3}} \installtolerancemethod \v!vertical \v!verystrict {\let\bottomtolerance\empty} @@ -917,13 +887,20 @@ \def\spac_tolerances_step_vertical #1{\csname\??tolerancemethods\v!vertical :#1\endcsname} \def\spac_tolerances_step_horizontal#1{\csname\??tolerancemethods\v!horizontal:#1\endcsname} -\unexpanded\def\setuptolerance - {\dosingleargument\spac_tolerances_setup} - -\def\spac_tolerances_setup[#1]% - {\doifelseinset\v!vertical{#1}% - {\processcommacommand[#1]\spac_tolerances_step_vertical } - {\processcommacommand[#1]\spac_tolerances_step_horizontal}} +%% \protected\def\setuptolerance +%% {\dosingleargument\spac_tolerances_setup} +%% +%% \def\spac_tolerances_setup[#1]% +%% {\doifelseinset\v!vertical{#1}% +%% {\processcommacommand[#1]\spac_tolerances_step_vertical } +%% {\processcommacommand[#1]\spac_tolerances_step_horizontal}} + +\permanent\tolerant\protected\def\setuptolerance[#1]% + {\ifarguments\or + \doifelseinset\v!vertical{#1}% + {\processcommacommand[#1]\spac_tolerances_step_vertical } + {\processcommacommand[#1]\spac_tolerances_step_horizontal}% + \fi} %D \macros %D {pushindentation,popindentation} @@ -933,7 +910,7 @@ \newbox\b_spac_indentations_a \newbox\b_spac_indentations_b -\unexpanded\def\pushindentation +\permanent\protected\def\pushindentation {\begingroup \ifhmode \unskip @@ -948,7 +925,7 @@ \setbox\b_spac_indentations_b\emptybox \fi} -\unexpanded\def\popindentation +\permanent\protected\def\popindentation {\box\b_spac_indentations_b \box\b_spac_indentations_a \endgroup} @@ -1017,16 +994,16 @@ %D \ruledvtop{\typebuffer}} %D \stoptyping -\unexpanded\def\justonespace{\removeunwantedspaces\space} -%unexpanded\def\justaperiod {\removeunwantedspaces.} -%unexpanded\def\justacomma {\removeunwantedspaces,} +\permanent\protected\def\justonespace{\removeunwantedspaces\space} +%frozen\protected\def\justaperiod {\removeunwantedspaces.} +%frozen\protected\def\justacomma {\removeunwantedspaces,} \installcorenamespace{hspace} -\unexpanded\def\ignorecrlf +\permanent\protected\def\ignorecrlf {\let\crlf\justonespace\let\\\crlf} -\unexpanded\def\definehspace +\permanent\protected\def\definehspace {\dotripleempty\spac_hspaces_define} \def\spac_hspaces_define[#1][#2][#3]% #1 = optional namespace @@ -1036,28 +1013,23 @@ \setvalue{\??hspace:#1}{#2}% \fi} -\unexpanded\def\hspace - {\dodoubleempty\spac_hspaces_insert} - -\def\spac_hspaces_insert[#1][#2]% +\permanent\tolerant\protected\def\hspace[#1]#*[#2]% {\ifhmode \removeunwantedspaces \hskip % always a skip even when 0pt - \ifsecondargument + \ifparameter#2\or \hspaceamount{#1}{#2}% - \orelse\iffirstargument + \orelse\ifparameter#1\or \hspaceamount\empty{#1}% \else \hspaceamount\empty\s!default \fi + \relax \expandafter\ignorespaces \fi} -\def\hspaceamount#1#2% - {\dimexpr\ifcsname\??hspace#1:#2\endcsname\lastnamedcs\else\zeropoint\fi\relax} - -\def\directhspaceamount#1% - {\dimexpr\ifcsname\??hspace :#1\endcsname\lastnamedcs\else\zeropoint\fi\relax} +\permanent\overloaded\def\hspaceamount #1#2{\dimexpr\ifcsname\??hspace#1:#2\endcsname\lastnamedcs\else\zeropoint\fi\relax} +\permanent\overloaded\def\directhspaceamount #1{\dimexpr\ifcsname\??hspace :#1\endcsname\lastnamedcs\else\zeropoint\fi\relax} % no installhspace here (this is already an old command) @@ -1071,56 +1043,55 @@ %D Taken from Taco's math module (cq. \AMS\ macros), but %D adapted to \type {\hspace}: -\unexpanded\def\textormathspace #1#2#3{\ifmmode\mskip#1#2\else\kern #1\hspaceamount\empty{#3}\fi\relax} -\unexpanded\def\textormathspacecommand #1#2#3{\ifmmode\mskip#1#2\else#3\fi\relax} -\unexpanded\def\breakabletextormathspace#1#2#3{\ifmmode\mskip#1#2\else\hskip#1\hspaceamount\empty{#3}\fi\relax} +\permanent\protected\def\textormathspace #1#2#3{\ifmmode\mskip#1#2\else\kern #1\hspaceamount\empty{#3}\fi\relax} +\permanent\protected\def\textormathspacecommand #1#2#3{\ifmmode\mskip#1#2\else#3\fi\relax} +\permanent\protected\def\breakabletextormathspace#1#2#3{\ifmmode\mskip#1#2\else\hskip#1\hspaceamount\empty{#3}\fi\relax} \newmuskip\hairmuskip \hairmuskip=.15mu -\unexpanded\def\hairspace {\textormathspace+\hairmuskip{.5}} -\unexpanded\def\thinspace {\textormathspace+\thinmuskip 1} -%unexpanded\def\medspace {\textormathspace+\medmuskip 2} % 4/18 em -\unexpanded\def\thickspace {\textormathspace+\thickmuskip3} -\unexpanded\def\neghairspace {\textormathspace-\thinmuskip{.5}} -\unexpanded\def\negthinspace {\textormathspace-\thinmuskip 1} -\unexpanded\def\negmedspace {\textormathspace-\medmuskip 2} -\unexpanded\def\negthickspace{\textormathspace-\thickmuskip3} - -\unexpanded\edef\medspace {\textormathspacecommand+\medmuskip{\Uchar"205F}} +\overloaded\permanent\protected \def\hairspace {\textormathspace+\hairmuskip{.5}} +\overloaded\permanent\protected \def\thinspace {\textormathspace+\thinmuskip 1} +%overloaded\permanent\protected \def\medspace {\textormathspace+\medmuskip 2} % 4/18 em +\overloaded\permanent\protected \def\thickspace {\textormathspace+\thickmuskip3} +\overloaded\permanent\protected \def\neghairspace {\textormathspace-\thinmuskip{.5}} +\overloaded\permanent\protected \def\negthinspace {\textormathspace-\thinmuskip 1} +\overloaded\permanent\protected \def\negmedspace {\textormathspace-\medmuskip 2} +\overloaded\permanent\protected \def\negthickspace{\textormathspace-\thickmuskip3} +\overloaded\permanent\protected\edef\medspace {\textormathspacecommand+\medmuskip{\Uchar"205F}} % needed for unicode: -%unexpanded\def\breakablethinspace {\breakabletextormathspace+\thinmuskip1} -%unexpanded\def\twoperemspace {\hskip\dimexpr\emwidth/2\relax} % == \enspace -%unexpanded\def\threeperemspace {\hskip\dimexpr\emwidth/3\relax} -%unexpanded\def\fourperemspace {\hskip\dimexpr\emwidth/4\relax} -%unexpanded\def\fiveperemspace {\hskip\dimexpr\emwidth/5\relax} % goodie -%unexpanded\def\sixperemspace {\hskip\dimexpr\emwidth/6\relax} -%unexpanded\def\figurespace {\begingroup\setbox\scratchbox\hbox{0}\hskip\wd\scratchbox\endgroup} % there is a command for this -%unexpanded\def\punctuationspace {\begingroup\setbox\scratchbox\hbox{.}\hskip\wd\scratchbox\endgroup} -%unexpanded\def\ideographicspace {\hskip\dimexpr\emwidth/1\relax} -%unexpanded\def\ideographichalffillspace{\hskip\dimexpr\emwidth/2\relax} -%unexpanded\def\nobreakspace {\penalty\plustenthousand\kern\interwordspace} -%unexpanded\def\narrownobreakspace {\penalty\plustenthousand\thinspace} -%unexpanded\def\zerowidthnobreakspace {\penalty\plustenthousand\kern\zeropoint} -%unexpanded\def\zerowidthspace {\hskip\zeropoint} +%protected\def\breakablethinspace {\breakabletextormathspace+\thinmuskip1} +%protected\def\twoperemspace {\hskip\dimexpr\emwidth/2\relax} % == \enspace +%protected\def\threeperemspace {\hskip\dimexpr\emwidth/3\relax} +%protected\def\fourperemspace {\hskip\dimexpr\emwidth/4\relax} +%protected\def\fiveperemspace {\hskip\dimexpr\emwidth/5\relax} % goodie +%protected\def\sixperemspace {\hskip\dimexpr\emwidth/6\relax} +%protected\def\figurespace {\begingroup\setbox\scratchbox\hbox{0}\hskip\wd\scratchbox\endgroup} % there is a command for this +%protected\def\punctuationspace {\begingroup\setbox\scratchbox\hbox{.}\hskip\wd\scratchbox\endgroup} +%protected\def\ideographicspace {\hskip\dimexpr\emwidth/1\relax} +%protected\def\ideographichalffillspace{\hskip\dimexpr\emwidth/2\relax} +%protected\def\nobreakspace {\penalty\plustenthousand\kern\interwordspace} +%protected\def\narrownobreakspace {\penalty\plustenthousand\thinspace} +%protected\def\zerowidthnobreakspace {\penalty\plustenthousand\kern\zeropoint} +%protected\def\zerowidthspace {\hskip\zeropoint} \definehspace[.5][.1250\emwidth] % hair \definehspace[1] [.1667\emwidth] % thin \definehspace[2] [.2222\emwidth] % med \definehspace[3] [.2777\emwidth] % thick -\let \, \thinspace -\let \: \medspace -\let \; \thickspace -\let \! \negthinspace +\aliased\let \, \thinspace +\aliased\let \: \medspace +\aliased\let \; \thickspace +\aliased\let \! \negthinspace % plain ... % -% \ifdefined\> \else \unexpanded\def\>{\mskip \medmuskip } \fi -% \ifdefined\* \else \unexpanded\def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}} \fi +% \ifdefined\> \else \protected\def\>{\mskip \medmuskip } \fi +% \ifdefined\* \else \protected\def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}} \fi -\def\flexiblespaceamount#1#2#3% +\permanent\def\flexiblespaceamount#1#2#3% {#1\interwordspace \s!plus#2\interwordstretch \s!minus#3\interwordshrink} @@ -1136,37 +1107,37 @@ \installcorenamespace{spacemethods} -\unexpanded\def\installspacemethod#1#2% needs to set \obeyedspace +\permanent\protected\def\installspacemethod#1#2% needs to set \obeyedspace {\setvalue{\??spacemethods#1}{#2}} -\def\activatespacehandler#1% +\permanent\def\activatespacehandler#1% {\csname\??spacemethods\ifcsname\??spacemethods#1\endcsname#1\else\v!off\fi\endcsname} -\unexpanded\def\spac_spaces_checked_control{\mathortext\normalspace{\dontleavehmode{\tt\controlspace}}}% -\unexpanded\def\spac_spaces_checked_normal {\mathortext\normalspace{\dontleavehmode\normalspace}}% -\unexpanded\def\spac_spaces_checked_fixed {\mathortext\normalspace{\dontleavehmode\fixedspace}}% +\permanent\protected\def\spac_spaces_checked_control{\mathortext\normalspace{\dontleavehmode{\tt\controlspace}}}% +\permanent\protected\def\spac_spaces_checked_normal {\mathortext\normalspace{\dontleavehmode\normalspace}}% +\permanent\protected\def\spac_spaces_checked_fixed {\mathortext\normalspace{\dontleavehmode\fixedspace}}% % hm, order matters when we \let in \obeyspaces \installspacemethod \v!on {\obeyspaces - \let\obeyedspace\spac_spaces_checked_control - \let\ =\obeyedspace} + \enforced\let\obeyedspace\spac_spaces_checked_control + \enforced\let\ =\obeyedspace} \installspacemethod \v!yes {\obeyspaces - \let\obeyedspace\spac_spaces_checked_normal - \let\ =\obeyedspace} + \enforced\let\obeyedspace\spac_spaces_checked_normal + \enforced\let\ =\obeyedspace} \installspacemethod \v!off % == default {\normalspaces - \let\obeyedspace\normalspace - \let\ =\normalspaceprimitive} % was \normalspace + \enforced\let\obeyedspace\normalspace + \enforced\let\ =\normalspaceprimitive} % was \normalspace \installspacemethod \v!fixed {\obeyspaces - \let\obeyedspace\spac_spaces_checked_fixed - \let\ =\obeyedspace} + \enforced\let\obeyedspace\spac_spaces_checked_fixed + \enforced\let\ =\obeyedspace} \appendtoks \normalspaces % to be sure @@ -1183,15 +1154,15 @@ %D %D \typebuffer \getbuffer -\unexpanded\def\autoinsertnextspace +\permanent\protected\def\autoinsertnextspace {\futurelet\nexttoken\spac_spaces_auto_insert_next} -\def\spac_spaces_auto_insert_next +\permanent\def\spac_spaces_auto_insert_next {\clf_autonextspace{\normalmeaning\nexttoken}} % todo, just consult nexttoken at the lua end %D Moved from bib module: -\unexpanded\def\outdented#1% +\permanent\protected\def\outdented#1% {\hskip-\hangindent#1\relax} %D Beware: due to char-def this becomes an active character but that @@ -1204,7 +1175,7 @@ % TODO (but used in languages): -\unexpanded\def\spac_glues_text_or_math#1#2% +\def\spac_glues_text_or_math#1#2% {\begingroup \ifmmode \mskip#1% @@ -1215,23 +1186,21 @@ \fi \endgroup} -\unexpanded\def\thinglue {\spac_glues_text_or_math\thinmuskip \v!small} -\unexpanded\def\medglue {\spac_glues_text_or_math\medmuskip \v!medium} -\unexpanded\def\thickglue{\spac_glues_text_or_math\thickmuskip\v!big} +\permanent\protected\def\thinglue {\spac_glues_text_or_math\thinmuskip \v!small} +\permanent\protected\def\medglue {\spac_glues_text_or_math\medmuskip \v!medium} +\permanent\protected\def\thickglue{\spac_glues_text_or_math\thickmuskip\v!big} %D A rather unknown one: -\unexpanded\def\widened % moved from cont-new +\permanent\protected\def\widened % moved from cont-new {\doifelsenextoptionalcs\spac_widened_yes\spac_widened_nop} \def\spac_widened_yes[#1]#2{\hbox \s!spread #1{\hss#2\hss}} \def\spac_widened_nop #1{\hbox \s!spread \emwidth{\hss#1\hss}} -\definecomplexorsimple\widened - %D For the moment here (used in page-txt): -\unexpanded\def\ignoredlinebreak{\unskip\space\ignorespaces} +\protected\def\ignoredlinebreak{\unskip\space\ignorespaces} %D \macros %D {startignorespaces} @@ -1253,14 +1222,14 @@ \newsignal\s_spac_ignore_spaces \newcount \c_spac_ignore_spaces -\unexpanded\def\startignorespaces +\protected\def\startignorespaces {\advance\c_spac_ignore_spaces\plusone \ifcase\c_spac_ignore_spaces\or \ifhmode \hskip\s_spac_ignore_spaces \fi \fi \ignorespaces} -\unexpanded\def\stopignorespaces +\protected\def\stopignorespaces {\ifcase\c_spac_ignore_spaces \or \ifhmode \doloop\spac_ignore_spaces_body @@ -1285,11 +1254,11 @@ %D Something new: -\unexpanded\def\interwordspacebefore{\wordboundary\zwnj\hskip\interwordspace\relax} -\unexpanded\def\interwordspaceafter {\hskip\interwordspace\relax\zwnj\wordboundary} +\protected\def\interwordspacebefore{\wordboundary\zwnj\hskip\interwordspace\relax} +\protected\def\interwordspaceafter {\hskip\interwordspace\relax\zwnj\wordboundary} -\unexpanded\def\interwordspacesbefore#1{\dofastloopcs{#1}\interwordspacebefore} -\unexpanded\def\interwordspacesafter #1{\dofastloopcs{#1}\interwordspaceafter} -\unexpanded\def\interwordspaces #1{\wordboundary\zwnj\dofastloopcs{\numexpr#1+\minusone}\interwordspaceafter} +\protected\def\interwordspacesbefore#1{\dofastloopcs{#1}\interwordspacebefore} +\protected\def\interwordspacesafter #1{\dofastloopcs{#1}\interwordspaceafter} +\protected\def\interwordspaces #1{\wordboundary\zwnj\dofastloopcs{\numexpr#1+\minusone}\interwordspaceafter} \protect \endinput diff --git a/tex/context/base/mkiv/spac-lin.mkiv b/tex/context/base/mkiv/spac-lin.mkiv index 640bcdaae..3d54b630a 100644 --- a/tex/context/base/mkiv/spac-lin.mkiv +++ b/tex/context/base/mkiv/spac-lin.mkiv @@ -171,7 +171,7 @@ \dostoptagged % can be a dummy one as we don't look ahead \par \dostarttagged\t!line\empty - \futurelet\next\spac_lines_between} + \futurelet\nexttoken\spac_lines_between} \unexpanded\def\spac_lines_stop {\dostoptagged @@ -182,10 +182,10 @@ \egroup} \def\spac_lines_between - {\ifx\next\spac_lines_stop + {\ifx\nexttoken\spac_lines_stop \donefalse \else - \doifelsemeaning\next\obeyedline % brrr + \doifelsemeaning\nexttoken\obeyedline % brrr {\donefalse\linesparameter\c!inbetween} {\donetrue\spac_after_first_obeyed_line}% \fi} diff --git a/tex/context/base/mkiv/spac-par.mkiv b/tex/context/base/mkiv/spac-par.mkiv index ee2d9c9cd..752d5c059 100644 --- a/tex/context/base/mkiv/spac-par.mkiv +++ b/tex/context/base/mkiv/spac-par.mkiv @@ -36,7 +36,8 @@ \hangafter \the\hangafter \parskip \the\parskip \leftskip \the\leftskip - \rightskip \the\rightskip}} + \rightskip \the\rightskip + \relax}} \unexpanded\def\pushparagraphproperties {\edef\currentparagraphproperties{\carryoverpar\relax}% diff --git a/tex/context/base/mkiv/spac-par.mkxl b/tex/context/base/mkiv/spac-par.mkxl index e0eef0c67..524e31bc5 100644 --- a/tex/context/base/mkiv/spac-par.mkxl +++ b/tex/context/base/mkiv/spac-par.mkxl @@ -23,93 +23,75 @@ % this might move to syst-ini.mkxl -\setnewconstant\frozenhsizecode "00000001 -\setnewconstant\frozenleftskipcode "00000002 -\setnewconstant\frozenrightskipcode "00000004 -\setnewconstant\frozenhangindentcode "00000008 -\setnewconstant\frozenhangaftercode "00000010 -\setnewconstant\frozenparindentcode "00000020 -\setnewconstant\frozenparfillskipcode "00000040 -\setnewconstant\frozenparfillleftskipcode "00000080 -\setnewconstant\frozenadjustspacingcode "00000100 -\setnewconstant\frozenprotrudecharscode "00000200 -\setnewconstant\frozenpretolerancecode "00000400 -\setnewconstant\frozentolerancecode "00000800 -\setnewconstant\frozenemergencystretchcode "00001000 -\setnewconstant\frozenloosenesscode "00002000 -\setnewconstant\frozenlastlinefitcode "00004000 -\setnewconstant\frozenlinepenaltycode "00008000 -\setnewconstant\frozeninterlinepenaltycode "00010000 -\setnewconstant\frozenclubpenaltycode "00020000 -\setnewconstant\frozenwidowpenaltycode "00040000 -\setnewconstant\frozendisplaywidowpenaltycode "00080000 -\setnewconstant\frozenbrokenpenaltycode "00100000 -\setnewconstant\frozenadjdemeritscode "00200000 -\setnewconstant\frozendoublehyphendemeritscode "00400000 -\setnewconstant\frozenfinalhyphendemeritscode "00800000 -\setnewconstant\frozenparshapecode "01000000 -\setnewconstant\frozeninterlinepenaltiescode "02000000 -\setnewconstant\frozenclubpenaltiescode "04000000 -\setnewconstant\frozenwidowpenaltiescode "08000000 -\setnewconstant\frozendisplaywidowpenaltiescode "10000000 - \setnewconstant\paragraphupdatecodes\numexpr \frozentolerancecode + \frozenloosenesscode + \frozenlinepenaltycode - + \frozeninterlinepenaltycode + \frozenwidowpenaltycode + \frozenclubpenaltycode + \frozenbrokenpenaltycode - + \frozenadjdemeritscode - + \frozendoublehyphendemeritscode - + \frozenfinalhyphendemeritscode - + \frozeninterlinepenaltiescode - + \frozenwidowpenaltiescode - + \frozenclubpenaltiescode + + \frozendemeritscode \relax \setnewconstant\paragraphpenaltycodes\numexpr - \frozeninterlinepenaltycode + \frozenlinepenaltycode + \frozenwidowpenaltycode + \frozenclubpenaltycode + \frozenbrokenpenaltycode - + \frozeninterlinepenaltiescode - + \frozenwidowpenaltiescode - + \frozenclubpenaltiescode \relax \setnewconstant\paragraphdemeritcodes\numexpr - \frozenadjdemeritscode - + \frozendoublehyphendemeritscode - + \frozenfinalhyphendemeritscode + \frozendemeritscode \relax -% + \frozenparskipcode - \setnewconstant\paragraphshapecodes\numexpr - \frozenhangindentcode - + \frozenhangaftercode - + \frozenleftskipcode - + \frozenrightskipcode - + \frozenparfillskipcode - + \frozenparshapecode + \frozenhangcode + + \frozenskipcode + + \frozenparfillcode + + \frozenshapecode \relax -\protected\def\freezeparagraphproperties {\snapshotpar\maxcount} -\protected\def\defrostparagraphproperties{\snapshotpar\zerocount} +\setnewconstant\frozenparagraphdefault\numexpr + \frozenhsizecode % \hsize + + \frozenskipcode % \leftskip \rightskip + + \frozenhangcode % \hangindent \hangafter + + \frozenindentcode % \parindent + + \frozenparfillcode % \parfillskip \parfillleftskip + + \frozenadjustcode % \adjustspacing + + \frozenprotrudecode % \protrudechars + + \frozentolerancecode % \tolerance \pretolerance + + \frozenstretchcode % \emergcystretch + + \frozenloosenesscode % \looseness + + \frozenlastlinecode % \lastlinefit + + \frozenlinepenaltycode % \linepenalty \interlinepenalty \interlinepenalties + + \frozenclubpenaltycode % \clubpenalty \clubpenalties + + \frozenwidowpenaltycode % \widowpenalty \widowpenalties + + \frozendisplaypenaltycode % \displaypenalty \displaypenalties + + \frozenbrokenpenaltycode % \brokenpenalty + + \frozendemeritscode % \doublehyphendemerits \finalhyphendemerits \adjdemerits + + \frozenshapecode % \parshape + % \frozenlinecode % \baselineskip \lineskip \lineskiplimit +\relax + +\setnewconstant\paragraphlinecodes\numexpr + \frozenlinecode +\relax -\protected\def\updateparagraphproperties {\ifhmode\snapshotpar\paragraphupdatecodes \fi} -\protected\def\updateparagraphpenalties {\ifhmode\snapshotpar\paragraphpenaltycodes\fi} -\protected\def\updateparagraphdemerits {\ifhmode\snapshotpar\paragraphdemeritcodes\fi} -\protected\def\updateparagraphshapes {\ifhmode\snapshotpar\paragraphshapecodes \fi} +\permanent\protected\def\freezeparagraphproperties {\snapshotpar\frozenparagraphdefault} +\permanent\protected\def\defrostparagraphproperties{\snapshotpar\zerocount} + +\permanent\protected\def\updateparagraphproperties{\ifhmode\snapshotpar\paragraphupdatecodes \fi} +\permanent\protected\def\updateparagraphpenalties {\ifhmode\snapshotpar\paragraphpenaltycodes\fi} +\permanent\protected\def\updateparagraphdemerits {\ifhmode\snapshotpar\paragraphdemeritcodes\fi} +\permanent\protected\def\updateparagraphshapes {\ifhmode\snapshotpar\paragraphshapecodes \fi} +\permanent\protected\def\updateparagraphlines {\ifhmode\snapshotpar\paragraphlinecodes \fi} % so far \let\spac_paragraph_freeze\relax -\protected\def\setparagraphfreezing {\let\spac_paragraph_freeze\freezeparagraphproperties} -\protected\def\forgetparagraphfreezing {\let\spac_paragraph_freeze\relax} +\permanent\protected\def\setparagraphfreezing {\enforced\let\spac_paragraph_freeze\freezeparagraphproperties} +\permanent\protected\def\forgetparagraphfreezing{\enforced\let\spac_paragraph_freeze\relax} \installcorenamespace {bparwrap} \installcorenamespace {eparwrap} @@ -130,8 +112,8 @@ \wrapuppar{\the\csname\??eparwrap\the\c_spac_paragraph_group_level\endcsname\relax}% \fi} -\protected\def\registerparwrapper {\spac_register_par_wrapper\toksapp\tokspre} -\protected\def\registerparwrapperreverse{\spac_register_par_wrapper\tokspre\toksapp} +\permanent\protected\def\registerparwrapper {\spac_register_par_wrapper\toksapp\tokspre} +\permanent\protected\def\registerparwrapperreverse{\spac_register_par_wrapper\tokspre\toksapp} \protected\def\spac_paragraph_install {\expandafter\newtoks\csname\??bparwrap\the\currentgrouplevel\endcsname @@ -143,10 +125,8 @@ \def\spac_paragraph_install_pair#1#2#3% {\expandafter\newtoks\csname\??parwrapbefore#3\endcsname \expandafter\newtoks\csname\??parwrapafter #3\endcsname - #1\csname\??bparwrap\the\currentgrouplevel\endcsname - {\the\csname\??parwrapbefore#3\endcsname}% - #2\csname\??eparwrap\the\currentgrouplevel\endcsname - {\the\csname\??parwrapafter #3\endcsname}} + #1\csname\??bparwrap\the\currentgrouplevel\endcsname{\the\csname\??parwrapbefore#3\endcsname}% + #2\csname\??eparwrap\the\currentgrouplevel\endcsname{\the\csname\??parwrapafter #3\endcsname}} \def\spac_register_par_wrapper_yes#1#2#3#4#5% {\ifcsname\??bparwrap\the\currentgrouplevel\endcsname \else @@ -162,7 +142,7 @@ \clf_setparwrapper{#3}#4}% #2\csname\??parwrapafter #3\endcsname{#5}% \clf_newparwrapper{#3}% - \let\spac_paragraph_wrap\spac_paragraph_update} + \enforced\let\spac_paragraph_wrap\spac_paragraph_update} \def\spac_register_par_wrapper_nop#1#2#3#4#5% {\ifcsname\??parwrapcount#3\endcsname \else @@ -178,34 +158,21 @@ \expandafter\spac_register_par_wrapper_yes \fi} -\protected\def\forgetparwrapper +\permanent\protected\def\forgetparwrapper {\csname\??bparwrap\the\currentgrouplevel\endcsname\emptytoks \csname\??eparwrap\the\currentgrouplevel\endcsname\emptytoks} -\protected\def\unregisterparwrapper#1% +\permanent\protected\def\unregisterparwrapper#1% {\csname\??parwrapcount#1\endcsname\zerocount \ifcsname\??parwrapbefore#1\endcsname \lastnamedcs\emptytoks \csname\??parwrapafter#1\endcsname\emptytoks \fi} -\def\directparwrapper#1#2% +\permanent\def\directparwrapper#1#2% {#1\wrapuppar{#2}} -% \protected\def\doifelseparwrapper#1% -% {\ifcsname\??parwrapbefore#1\endcsname -% \unless\iftok\lastnamedcs\emptytoks -% \doubleexpandafter\firstoftwoarguments -% \orelse\iftok\csname\??parwrapafter#1\endcsname\emptytoks -% \doubleexpandafter\secondoftwoarguments -% \else -% \doubleexpandafter\firstoftwoarguments -% \fi -% \else -% \expandafter\secondoftwoarguments -% \fi} - -\protected\def\doifelseparwrapper#1% +\permanent\protected\def\doifelseparwrapper#1% {\unless\ifcsname\??parwrapcount#1\endcsname \expandafter\secondoftwoarguments \orelse\ifcase\lastnamedcs @@ -217,7 +184,7 @@ % \getparwrapper % defined in lua % \lastparwrapper % defined in lua -\protected\def\showparwrapperstate#1% +\permanent\protected\def\showparwrapperstate#1% {\begingroup \infofont ¶#1\hilo {\smallinfofont\getparwrapper {#1}}% @@ -230,7 +197,7 @@ \setparagraphfreezing -\appendtoks\let\spac_paragraph_wrap\relax\to\everyforgetall +\appendtoks\enforced\let\spac_paragraph_wrap\relax\to\everyforgetall %D In due time, the code below will be upgraded using the above mechanisms. @@ -240,24 +207,25 @@ %D indentation as set (by the output routine) inside the group are forgotten %D afterwards. (I must not forget its existence). -\def\carryoverpar#1% #1 can be \endgroup or \egroup or ... expandable ! +\permanent\def\carryoverpar#1% #1 can be \endgroup or \egroup or ... expandable ! {\normalexpanded {\noexpand#1% \hangindent\the\hangindent \hangafter \the\hangafter \parskip \the\parskip \leftskip \the\leftskip - \rightskip \the\rightskip}} + \rightskip \the\rightskip + \relax}} -\unexpanded\def\pushparagraphproperties +\permanent\protected\def\pushparagraphproperties {\edef\currentparagraphproperties{\carryoverpar\relax}% \pushmacro\currentparagraphproperties} -\unexpanded\def\popparagraphproperties +\permanent\protected\def\popparagraphproperties {\popmacro\currentparagraphproperties \currentparagraphproperties} -\unexpanded\def\flushparagraphproperties +\permanent\protected\def\flushparagraphproperties {\popmacro\currentparagraphproperties} %D Beware, changing this will break some code (like pos/backgrounds) but it has been @@ -275,10 +243,7 @@ \newconditional\c_spac_paragraphs_intro_next \newconditional\c_spac_paragraphs_intro_each -\unexpanded\def\setupparagraphintro - {\dodoubleempty\spac_paragraphs_intro} - -\unexpanded\def\spac_paragraphs_intro[#1][#2]% +\permanent\protected\tolerant\def\setupparagraphintro[#1]#*[#2]% {\def\spac_paragraphs_intro_step##1% {\csname\??paragraphintro\ifcsname\??paragraphintro##1\endcsname##1\fi\endcsname{#2}}% \processcommacommand[#1]\spac_paragraphs_intro_step} @@ -345,7 +310,7 @@ %D some paragraph \par %D \stoptyping -\unexpanded\def\flushatparagraph#1% +\permanent\protected\def\flushatparagraph#1% {\global\c_spac_paragraphs_intro_first\plusone \gtoksapp\t_spac_paragraphs_intro_first{#1}% \glet\insertparagraphintro\spac_paragraphs_flush_intro} @@ -353,7 +318,7 @@ %D Here comes the flusher (we misuse the one level expansion of token registers to %D feed a nice stream into the paragraph.) -\unexpanded\def\spac_paragraphs_flush_intro % we make sure that the token lists expand directly +\protected\def\spac_paragraphs_flush_intro % we make sure that the token lists expand directly {\normalexpanded{% % after another so the first code is there twice \ifconditional\c_spac_paragraphs_intro_each \ifconditional\c_spac_paragraphs_intro_next @@ -378,7 +343,7 @@ \fi \fi}} -\unexpanded\def\spac_paragraphs_flush_intro_next +\protected\def\spac_paragraphs_flush_intro_next {\normalexpanded{% \global\setfalse\c_spac_paragraphs_intro_next \global\t_spac_paragraphs_intro_next\emptytoks @@ -391,7 +356,7 @@ \the\t_spac_paragraphs_intro_next \fi}} -\unexpanded\def\spac_paragraphs_flush_intro_each +\protected\def\spac_paragraphs_flush_intro_each {\the\t_spac_paragraphs_intro_each} %D \macros @@ -409,11 +374,11 @@ % % \initializeboxstack\??postponednodesstack % -% \unexpanded\def\pushpostponednodedata +% \protected\def\pushpostponednodedata % {\global\advance\c_spac_postponed_data\plusone % \savebox\??postponednodesstack{\the\c_spac_postponed_data}{\box\b_spac_postponed_data}} % -% \unexpanded\def\poppostponednodedata +% \protected\def\poppostponednodedata % {\global\setbox\b_spac_postponed_data\hbox{\foundbox\??postponednodesstack{\the\c_spac_postponed_data}}% % \global\advance\c_spac_postponed_data\minusone % \ifvoid\b_spac_postponed_data\else @@ -422,16 +387,16 @@ \newtoks\everyflushatnextpar -\unexpanded\def\pushpostponednodedata +\permanent\protected\def\pushpostponednodedata {\globalpushbox\b_spac_postponed_data} -\unexpanded\def\poppostponednodedata +\permanent\protected\def\poppostponednodedata {\globalpopbox\b_spac_postponed_data \ifvoid\b_spac_postponed_data\else \glet\flushpostponednodedata\spac_postponed_data_flush \fi} -\unexpanded\def\flushatnextpar +\permanent\protected\def\flushatnextpar {\begingroup \the\everyflushatnextpar \glet\flushpostponednodedata\spac_postponed_data_flush @@ -471,7 +436,7 @@ \glet\flushpostponednodedata\relax }%\fi} -\unexpanded\def\doflushatpar % might be renamed +\permanent\protected\def\doflushatpar % might be renamed {\ifvmode \expandafter\flushatnextpar \else diff --git a/tex/context/base/mkiv/spac-prf.lua b/tex/context/base/mkiv/spac-prf.lua index 7731b21f7..2223c7730 100644 --- a/tex/context/base/mkiv/spac-prf.lua +++ b/tex/context/base/mkiv/spac-prf.lua @@ -17,7 +17,6 @@ local formatters = string.formatters local nodecodes = nodes.nodecodes local gluecodes = nodes.gluecodes local listcodes = nodes.listcodes -local leadercodes = nodes.leadercodes local glyph_code = nodecodes.glyph local disc_code = nodecodes.disc @@ -31,8 +30,7 @@ local math_code = nodecodes.math local rule_code = nodecodes.rule local marginkern_code = nodecodes.marginkern -local leaders_code = leadercodes.leaders - +local leaders_code = gluecodes.leaders local lineskip_code = gluecodes.lineskip local baselineskip_code = gluecodes.baselineskip diff --git a/tex/context/base/mkiv/spac-ver.lmt b/tex/context/base/mkiv/spac-ver.lmt new file mode 100644 index 000000000..bfbcdf772 --- /dev/null +++ b/tex/context/base/mkiv/spac-ver.lmt @@ -0,0 +1,2623 @@ +if not modules then modules = { } end modules ['spac-ver'] = { + version = 1.001, + optimize = true, + comment = "companion to spac-ver.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- we also need to call the spacer for inserts! + +-- somehow lists still don't always have proper prev nodes so i need to +-- check all of the luatex code some day .. maybe i should replece the +-- whole mvl handler by lua code .. why not + +-- todo: use lua nodes with lua data (>0.79) +-- see ** can go when 0.79 + +-- needs to be redone, too many calls and tests now ... still within some +-- luatex limitations + +-- this code dates from the beginning and is kind of experimental; it +-- will be optimized and improved soon .. it's way too complex now but +-- dates from less possibilities +-- +-- the collapser will be redone with user nodes; also, we might get make +-- parskip into an attribute and appy it explicitly thereby getting rid +-- of automated injections; eventually i want to get rid of the currently +-- still needed tex -> lua -> tex > lua chain (needed because we can have +-- expandable settings at the tex end + +-- todo: strip baselineskip around display math + +local next, type, tonumber = next, type, tonumber +local gmatch, concat = string.gmatch, table.concat +local ceil, floor = math.ceil, math.floor +local lpegmatch = lpeg.match +local unpack = unpack or table.unpack +local allocate = utilities.storage.allocate +local todimen = string.todimen +local formatters = string.formatters +local abs = math.abs + +local nodes = nodes +local trackers = trackers +local attributes = attributes +local context = context +local tex = tex + +local texlists = tex.lists +local texget = tex.get +local texgetcount = tex.getcount +local texgetdimen = tex.getdimen +local texset = tex.set +local texsetdimen = tex.setdimen +local texsetcount = tex.setcount +local texnest = tex.nest +local texgetbox = tex.getbox + +local buildpage = tex.triggerbuildpage + +local variables = interfaces.variables +local implement = interfaces.implement + +local v_local = variables["local"] +local v_global = variables["global"] +local v_box = variables.box +----- v_page = variables.page -- reserved for future use +local v_split = variables.split +local v_min = variables.min +local v_max = variables.max +local v_none = variables.none +local v_line = variables.line +local v_noheight = variables.noheight +local v_nodepth = variables.nodepth +local v_line = variables.line +local v_halfline = variables.halfline +local v_line_m = "-" .. v_line +local v_halfline_m = "-" .. v_halfline +local v_first = variables.first +local v_last = variables.last +local v_top = variables.top +local v_bottom = variables.bottom +local v_minheight = variables.minheight +local v_maxheight = variables.maxheight +local v_mindepth = variables.mindepth +local v_maxdepth = variables.maxdepth +local v_offset = variables.offset +local v_strut = variables.strut + +local v_hfraction = variables.hfraction +local v_dfraction = variables.dfraction +local v_bfraction = variables.bfraction +local v_tlines = variables.tlines +local v_blines = variables.blines + +-- vertical space handler + +local trace_vbox_vspacing = false trackers.register("vspacing.vbox", function(v) trace_vbox_vspacing = v end) +local trace_page_vspacing = false trackers.register("vspacing.page", function(v) trace_page_vspacing = v end) +local trace_page_builder = false trackers.register("builders.page", function(v) trace_page_builder = v end) +local trace_collect_vspacing = false trackers.register("vspacing.collect", function(v) trace_collect_vspacing = v end) +local trace_vspacing = false trackers.register("vspacing.spacing", function(v) trace_vspacing = v end) +local trace_vsnapping = false trackers.register("vspacing.snapping", function(v) trace_vsnapping = v end) +local trace_specials = false trackers.register("vspacing.specials", function(v) trace_specials = v end) + +local remove_math_skips = true directives.register("vspacing.removemathskips", function(v) remnove_math_skips = v end) + +local report_vspacing = logs.reporter("vspacing","spacing") +local report_collapser = logs.reporter("vspacing","collapsing") +local report_snapper = logs.reporter("vspacing","snapping") +local report_specials = logs.reporter("vspacing","specials") + +local a_skipcategory = attributes.private('skipcategory') +local a_skippenalty = attributes.private('skippenalty') +local a_skiporder = attributes.private('skiporder') +local a_snapmethod = attributes.private('snapmethod') +local a_snapvbox = attributes.private('snapvbox') + +local nuts = nodes.nuts +local tonut = nuts.tonut +local tonode = nuts.tonode + +local getnext = nuts.getnext +local setlink = nuts.setlink +local getprev = nuts.getprev +local getid = nuts.getid +local getlist = nuts.getlist +local setlist = nuts.setlist +local getattr = nuts.getattr +local getattrs = nuts.getattrs +local setattr = nuts.setattr +local getsubtype = nuts.getsubtype +local getbox = nuts.getbox +local getwhd = nuts.getwhd +local setwhd = nuts.setwhd +local getprop = nuts.getprop +local setprop = nuts.setprop +local getglue = nuts.getglue +local setglue = nuts.setglue +local getkern = nuts.getkern +local getpenalty = nuts.getpenalty +local setshift = nuts.setshift +local setwidth = nuts.setwidth +local getwidth = nuts.getwidth +local setheight = nuts.setheight +local getheight = nuts.getheight +local setdepth = nuts.setdepth +local getdepth = nuts.getdepth +local setnext = nuts.setnext + +local find_node_tail = nuts.tail +local flush_node = nuts.flush_node +local remove_node = nuts.remove +local count_nodes = nuts.countall +local hpack_node = nuts.hpack +local vpack_node = nuts.vpack +local start_of_par = nuts.start_of_par + +local write_node = nuts.write + +local nextnode = nuts.traversers.node +local nexthlist = nuts.traversers.hlist + +local nodereference = nuts.reference + +local theprop = nuts.theprop + +local listtoutf = nodes.listtoutf +local nodeidstostring = nodes.idstostring + +local nodepool = nuts.pool + +local new_penalty = nodepool.penalty +local new_kern = nodepool.kern +local new_glue = nodepool.glue +local new_rule = nodepool.rule + +local nodecodes = nodes.nodecodes +local gluecodes = nodes.gluecodes +----- penaltycodes = nodes.penaltycodes +----- listcodes = nodes.listcodes + +local penalty_code = nodecodes.penalty +local kern_code = nodecodes.kern +local glue_code = nodecodes.glue +local hlist_code = nodecodes.hlist +local vlist_code = nodecodes.vlist +local rule_code = nodecodes.rule +local par_code = nodecodes.par + +local userskip_code = gluecodes.userskip +local lineskip_code = gluecodes.lineskip +local baselineskip_code = gluecodes.baselineskip +local parskip_code = gluecodes.parskip +local topskip_code = gluecodes.topskip +local splittopskip_code = gluecodes.splittopskip + +local linelist_code = nodes.listcodes.line + +local properties = nodes.properties.data + +local vspacing = builders.vspacing or { } +builders.vspacing = vspacing + +local vspacingdata = vspacing.data or { } +vspacing.data = vspacingdata + +local snapmethods = vspacingdata.snapmethods or { } +vspacingdata.snapmethods = snapmethods + +storage.register("builders/vspacing/data/snapmethods", snapmethods, "builders.vspacing.data.snapmethods") + +do + + local default = { + [v_maxheight] = true, + [v_maxdepth] = true, + [v_strut] = true, + [v_hfraction] = 1, + [v_dfraction] = 1, + [v_bfraction] = 0.25, + } + + local fractions = { + [v_minheight] = v_hfraction, [v_maxheight] = v_hfraction, + [v_mindepth] = v_dfraction, [v_maxdepth] = v_dfraction, + [v_box] = v_bfraction, + [v_top] = v_tlines, [v_bottom] = v_blines, + } + + local values = { + offset = "offset" + } + + local colonsplitter = lpeg.splitat(":") + + local function listtohash(str) + local t = { } + for s in gmatch(str,"[^, ]+") do + local key, detail = lpegmatch(colonsplitter,s) + local v = variables[key] + if v then + t[v] = true + if detail then + local k = fractions[key] + if k then + detail = tonumber("0" .. detail) + if detail then + t[k] = detail + end + else + k = values[key] + if k then + detail = todimen(detail) + if detail then + t[k] = detail + end + end + end + end + else + detail = tonumber("0" .. key) + if detail then + t[v_hfraction] = detail + t[v_dfraction] = detail + end + end + end + if next(t) then + t[v_hfraction] = t[v_hfraction] or 1 + t[v_dfraction] = t[v_dfraction] or 1 + return t + else + return default + end + end + + function vspacing.definesnapmethod(name,method) + local n = #snapmethods + 1 + local t = listtohash(method) + snapmethods[n] = t + t.name = name -- not interfaced + t.specification = method -- not interfaced + context(n) + end + +end + +local function validvbox(parentid,list) + if parentid == hlist_code then + local id = getid(list) + if id == par_code and start_of_par(list) then + list = getnext(list) + if not next then + return nil + end + end + local done = nil + for n, id in nextnode, list do + if id == vlist_code or id == hlist_code then + if done then + return nil + else + done = n + end + elseif id == glue_code or id == penalty_code then + -- go on + else + return nil -- whatever + end + end + if done then + local id = getid(done) + if id == hlist_code then + return validvbox(id,getlist(done)) + end + end + return done -- only one vbox + end +end + +local function already_done(parentid,list,a_snapmethod) -- todo: done when only boxes and all snapped + -- problem: any snapped vbox ends up in a line + if list and parentid == hlist_code then + local id = getid(list) + if id == par_code and start_of_par(list) then + list = getnext(list) + if not list then + return false + end + end + for n, id in nextnode, list do + if id == hlist_code or id == vlist_code then + -- local a = getattr(n,a_snapmethod) + -- if not a then + -- -- return true -- not snapped at all + -- elseif a == 0 then + -- return true -- already snapped + -- end + local p = getprop(n,"snapper") + if p then + return p + end + elseif id == glue_code or id == penalty_code then -- or id == kern_code then + -- go on + else + return false -- whatever + end + end + end + return false +end + +-- quite tricky: ceil(-something) => -0 + +local function ceiled(n) + if n < 0 or n < 0.01 then + return 0 + else + return ceil(n) + end +end + +local function floored(n) + if n < 0 or n < 0.01 then + return 0 + else + return floor(n) + end +end + +-- check variables.none etc + +local function fixedprofile(current) + local profiling = builders.profiling + return profiling and profiling.fixedprofile(current) +end + +local function snap_hlist(where,current,method,height,depth) -- method[v_strut] is default + if fixedprofile(current) then + return + end + local list = getlist(current) + local t = trace_vsnapping and { } + if t then + t[#t+1] = formatters["list content: %s"](listtoutf(list)) + t[#t+1] = formatters["snap method: %s"](method.name) -- not interfaced + t[#t+1] = formatters["specification: %s"](method.specification) -- not interfaced + end + local snapht, snapdp + if method[v_local] then + -- snapping is done immediately here + snapht = texgetdimen("bodyfontstrutheight") + snapdp = texgetdimen("bodyfontstrutdepth") + if t then + t[#t+1] = formatters["local: snapht %p snapdp %p"](snapht,snapdp) + end + elseif method[v_global] then + snapht = texgetdimen("globalbodyfontstrutheight") + snapdp = texgetdimen("globalbodyfontstrutdepth") + if t then + t[#t+1] = formatters["global: snapht %p snapdp %p"](snapht,snapdp) + end + else + -- maybe autolocal + -- snapping might happen later in the otr + snapht = texgetdimen("globalbodyfontstrutheight") + snapdp = texgetdimen("globalbodyfontstrutdepth") + local lsnapht = texgetdimen("bodyfontstrutheight") + local lsnapdp = texgetdimen("bodyfontstrutdepth") + if snapht ~= lsnapht and snapdp ~= lsnapdp then + snapht, snapdp = lsnapht, lsnapdp + end + if t then + t[#t+1] = formatters["auto: snapht %p snapdp %p"](snapht,snapdp) + end + end + + local wd, ht, dp = getwhd(current) + + local h = (method[v_noheight] and 0) or height or ht + local d = (method[v_nodepth] and 0) or depth or dp + local hr = method[v_hfraction] or 1 + local dr = method[v_dfraction] or 1 + local br = method[v_bfraction] or 0 + local ch = h + local cd = d + local tlines = method[v_tlines] or 1 + local blines = method[v_blines] or 1 + local done = false + local plusht = snapht + local plusdp = snapdp + local snaphtdp = snapht + snapdp + local extra = 0 + + if t then + t[#t+1] = formatters["hlist: wd %p ht %p (used %p) dp %p (used %p)"](wd,ht,h,dp,d) + t[#t+1] = formatters["fractions: hfraction %s dfraction %s bfraction %s tlines %s blines %s"](hr,dr,br,tlines,blines) + end + + if method[v_box] then + local br = 1 - br + if br < 0 then + br = 0 + elseif br > 1 then + br = 1 + end + local n = ceiled((h+d-br*snapht-br*snapdp)/snaphtdp) + local x = n * snaphtdp - h - d + plusht = h + x / 2 + plusdp = d + x / 2 + if t then + t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_box,plusht,plusdp) + end + elseif method[v_max] then + local n = ceiled((h+d)/snaphtdp) + local x = n * snaphtdp - h - d + plusht = h + x / 2 + plusdp = d + x / 2 + if t then + t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_max,plusht,plusdp) + end + elseif method[v_min] then + -- we catch a lone min + if method.specification ~= v_min then + local n = floored((h+d)/snaphtdp) + local x = n * snaphtdp - h - d + plusht = h + x / 2 + plusdp = d + x / 2 + if plusht < 0 then + plusht = 0 + end + if plusdp < 0 then + plusdp = 0 + end + end + if t then + t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_min,plusht,plusdp) + end + elseif method[v_none] then + plusht, plusdp = 0, 0 + if t then + t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_none,0,0) + end + end + -- for now, we actually need to tag a box and then check at several points if something ended up + -- at the top of a page + if method[v_halfline] then -- extra halfline + extra = snaphtdp/2 + plusht = plusht + extra + plusdp = plusdp + extra + if t then + t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_halfline,plusht,plusdp) + end + end + if method[v_line] then -- extra line + extra = snaphtdp + plusht = plusht + extra + plusdp = plusdp + extra + if t then + t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_line,plusht,plusdp) + end + end + if method[v_halfline_m] then -- extra halfline + extra = - snaphtdp/2 + plusht = plusht + extra + plusdp = plusdp + extra + if t then + t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_halfline_m,plusht,plusdp) + end + end + if method[v_line_m] then -- extra line + extra = - snaphtdp + plusht = plusht + extra + plusdp = plusdp + extra + if t then + t[#t+1] = formatters["%s: plusht %p plusdp %p"](v_line_m,plusht,plusdp) + end + end + if method[v_first] then + local thebox = current + local id = getid(thebox) + if id == hlist_code then + thebox = validvbox(id,getlist(thebox)) + id = thebox and getid(thebox) + end + if thebox and id == vlist_code then + local list = getlist(thebox) + local lw, lh, ld + for n in nexthlist, list do + lw, lh, ld = getwhd(n) + break + end + if lh then + local wd, ht, dp = getwhd(thebox) + if t then + t[#t+1] = formatters["first line: height %p depth %p"](lh,ld) + t[#t+1] = formatters["dimensions: height %p depth %p"](ht,dp) + end + local delta = h - lh + ch, cd = lh, delta + d + h, d = ch, cd + local shifted = hpack_node(getlist(current)) + setshift(shifted,delta) + setlist(current,shifted) + done = true + if t then + t[#t+1] = formatters["first: height %p depth %p shift %p"](ch,cd,delta) + end + elseif t then + t[#t+1] = "first: not done, no content" + end + elseif t then + t[#t+1] = "first: not done, no vbox" + end + elseif method[v_last] then + local thebox = current + local id = getid(thebox) + if id == hlist_code then + thebox = validvbox(id,getlist(thebox)) + id = thebox and getid(thebox) + end + if thebox and id == vlist_code then + local list = getlist(thebox) + local lw, lh, ld + for n in nexthlist, list do + lw, lh, ld = getwhd(n) + end + if lh then + local wd, ht, dp = getwhd(thebox) + if t then + t[#t+1] = formatters["last line: height %p depth %p" ](lh,ld) + t[#t+1] = formatters["dimensions: height %p depth %p"](ht,dp) + end + local delta = d - ld + cd, ch = ld, delta + h + h, d = ch, cd + local shifted = hpack_node(getlist(current)) + setshift(shifted,delta) + setlist(current,shifted) + done = true + if t then + t[#t+1] = formatters["last: height %p depth %p shift %p"](ch,cd,delta) + end + elseif t then + t[#t+1] = "last: not done, no content" + end + elseif t then + t[#t+1] = "last: not done, no vbox" + end + end + if method[v_minheight] then + ch = floored((h-hr*snapht)/snaphtdp)*snaphtdp + plusht + if t then + t[#t+1] = formatters["minheight: %p"](ch) + end + elseif method[v_maxheight] then + ch = ceiled((h-hr*snapht)/snaphtdp)*snaphtdp + plusht + if t then + t[#t+1] = formatters["maxheight: %p"](ch) + end + else + ch = plusht + if t then + t[#t+1] = formatters["set height: %p"](ch) + end + end + if method[v_mindepth] then + cd = floored((d-dr*snapdp)/snaphtdp)*snaphtdp + plusdp + if t then + t[#t+1] = formatters["mindepth: %p"](cd) + end + elseif method[v_maxdepth] then + cd = ceiled((d-dr*snapdp)/snaphtdp)*snaphtdp + plusdp + if t then + t[#t+1] = formatters["maxdepth: %p"](cd) + end + else + cd = plusdp + if t then + t[#t+1] = formatters["set depth: %p"](cd) + end + end + if method[v_top] then + ch = ch + tlines * snaphtdp + if t then + t[#t+1] = formatters["top height: %p"](ch) + end + end + if method[v_bottom] then + cd = cd + blines * snaphtdp + if t then + t[#t+1] = formatters["bottom depth: %p"](cd) + end + end + local offset = method[v_offset] + if offset then + -- we need to set the attr + if t then + local wd, ht, dp = getwhd(current) + t[#t+1] = formatters["before offset: %p (width %p height %p depth %p)"](offset,wd,ht,dp) + end + local shifted = hpack_node(getlist(current)) + setshift(shifted,offset) + setlist(current,shifted) + if t then + local wd, ht, dp = getwhd(current) + t[#t+1] = formatters["after offset: %p (width %p height %p depth %p)"](offset,wd,ht,dp) + end + setattr(shifted,a_snapmethod,0) + setattr(current,a_snapmethod,0) + end + if not height then + setheight(current,ch) + if t then + t[#t+1] = formatters["forced height: %p"](ch) + end + end + if not depth then + setdepth(current,cd) + if t then + t[#t+1] = formatters["forced depth: %p"](cd) + end + end + local lines = (ch+cd)/snaphtdp + if t then + local original = (h+d)/snaphtdp + local whatever = (ch+cd)/(texgetdimen("globalbodyfontstrutheight") + texgetdimen("globalbodyfontstrutdepth")) + t[#t+1] = formatters["final lines : %p -> %p (%p)"](original,lines,whatever) + t[#t+1] = formatters["final height: %p -> %p"](h,ch) + t[#t+1] = formatters["final depth : %p -> %p"](d,cd) + end +-- todo: +-- +-- if h < 0 or d < 0 then +-- h = 0 +-- d = 0 +-- end + if t then + report_snapper("trace: %s type %s\n\t%\n\tt",where,nodecodes[getid(current)],t) + end + if not method[v_split] then + -- so extra will not be compensated at the top of a page + extra = 0 + end + return h, d, ch, cd, lines, extra +end + +local categories = { + [0] = "discard", + [1] = "largest", + [2] = "force", + [3] = "penalty", + [4] = "add", + [5] = "disable", + [6] = "nowhite", + [7] = "goback", + [8] = "packed", + [9] = "overlay", + [10] = "enable", + [11] = "notopskip", +} + +categories = allocate(table.swapped(categories,categories)) +vspacing.categories = categories + +function vspacing.tocategories(str) + local t = { } + for s in gmatch(str,"[^, ]") do -- use lpeg instead + local n = tonumber(s) + if n then + t[categories[n]] = true + else + t[b] = true + end + end + return t +end + +function vspacing.tocategory(str) -- can be optimized + if type(str) == "string" then + return set.tonumber(vspacing.tocategories(str)) + else + return set.tonumber({ [categories[str]] = true }) + end +end + +vspacingdata.map = vspacingdata.map or { } -- allocate ? +vspacingdata.skip = vspacingdata.skip or { } -- allocate ? + +storage.register("builders/vspacing/data/map", vspacingdata.map, "builders.vspacing.data.map") +storage.register("builders/vspacing/data/skip", vspacingdata.skip, "builders.vspacing.data.skip") + +do + + local P, C, R, S, Cc, Cs = lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.Cc, lpeg.Cs + + vspacing.fixed = false + + local map = vspacingdata.map + local skip = vspacingdata.skip + + local sign = S("+-")^0 + local multiplier = C(sign * R("09")^1) * P("*") + local singlefier = Cs(sign * Cc(1)) + local separator = S(", ") + local category = P(":") * C((1-separator)^1) + local keyword = C((1-category-separator)^1) + local splitter = (multiplier + Cc(1)) * keyword * (category + Cc(false)) + + local k_fixed = variables.fixed + local k_flexible = variables.flexible + local k_category = "category" + local k_penalty = "penalty" + local k_order = "order" + + function vspacing.setmap(from,to) + map[from] = to + end + + function vspacing.setskip(key,value,grid) + if value ~= "" then + if grid == "" then grid = value end + skip[key] = { value, grid } + end + end + + do -- old variant + + local ctx_fixedblankskip = context.fixedblankskip + local ctx_flexibleblankskip = context.flexibleblankskip + local ctx_setblankcategory = context.setblankcategory + local ctx_setblankorder = context.setblankorder + local ctx_setblankpenalty = context.setblankpenalty + ----- ctx_setblankhandling = context.setblankhandling + local ctx_flushblankhandling = context.flushblankhandling + local ctx_addpredefinedblankskip = context.addpredefinedblankskip + local ctx_addaskedblankskip = context.addaskedblankskip + local ctx_setblankpacked = context.setblankpacked + + local ctx_pushlogger = context.pushlogger + local ctx_startblankhandling = context.startblankhandling + local ctx_stopblankhandling = context.stopblankhandling + local ctx_poplogger = context.poplogger + + local pattern = nil + + local packed = categories.packed + + local function handler(amount, keyword, detail) + if not keyword then + report_vspacing("unknown directive %a",s) + else + local mk = map[keyword] + if mk then + lpegmatch(pattern,mk) + elseif keyword == k_fixed then + ctx_fixedblankskip() + elseif keyword == k_flexible then + ctx_flexibleblankskip() + elseif keyword == k_category then + local category = tonumber(detail) + if category == packed then + ctx_setblankpacked() + elseif category then + ctx_setblankcategory(category) + ctx_flushblankhandling() + end + elseif keyword == k_order and detail then + local order = tonumber(detail) + if order then + ctx_setblankorder(order) + end + elseif keyword == k_penalty and detail then + local penalty = tonumber(detail) + if penalty then + ctx_setblankpenalty(penalty) + end + else + amount = tonumber(amount) or 1 + local sk = skip[keyword] + if sk then + ctx_addpredefinedblankskip(amount,keyword) + else -- no check + ctx_addaskedblankskip(amount,keyword) + end + end + end + end + + local splitter = ((multiplier + singlefier) * keyword * (category + Cc(false))) / handler + pattern = (splitter + separator^1)^0 + + function vspacing.analyze(str) + if trace_vspacing then + ctx_pushlogger(report_vspacing) + ctx_startblankhandling() + lpegmatch(pattern,str) + ctx_stopblankhandling() + ctx_poplogger() + else + ctx_startblankhandling() + lpegmatch(pattern,str) + ctx_stopblankhandling() + end + end + + end + + do -- new variant + + local expandmacro = token.expand_macro + -- local runlocal = tex.runlocal + -- local setmacro = tokens.setters.macro + -- local settoks = tex.settoks + local toscaled = tex.toscaled + + local setattrs = nuts.setattrs + + local b_done = false + local b_packed = false + + local b_amount = 0 + local b_stretch = 0 + local b_shrink = 0 + local b_category = false + local b_penalty = false + local b_order = false + local b_fixed = false + local b_grid = false + + local pattern = nil + + local packed = categories.packed + + local gluefactor = .25 + + local ctx_ignoreparskip = context.core.ignoreparskip + + -- local ctx_vspacingfromtempstring = context.core.vspacingfromtempstring + -- local ctx_vspacingfromscratchtoks = context.core.vspacingfromscratchtoks + + -- local ctx_vspacingpredefinedvalue = context.core.vspacingpredefinedvalue + -- + -- local cache = table.setmetatableindex(function(t,k) + -- local v = function() ctx_vspacingpredefinedvalue(k) end + -- t[k] = v + -- return v + -- end) + + local function before() + b_amount = 0 + b_stretch = 0 + b_shrink = 0 + b_category = 1 + b_penalty = false + b_order = false + b_fixed = b_grid + end + + local function after() + if fixed then + b_stretch = 0 + b_shrink = 0 + else + b_stretch = gluefactor * b_amount + b_shrink = gluefactor * b_amount + end + end + + -- use a cache for predefined ones + + -- local function inject() + -- local n = new_glue(b_amount,b_stretch,b_shrink) + -- if b_category then + -- setattr(n,a_skipcategory,b_category) + -- end + -- if b_penalty then + -- setattr(n,a_skippenalty,b_penalty) + -- end + -- if b_order then + -- setattr(n,a_skiporder,b_order or 1) + -- end + -- write_node(n) + -- end + + local function inject() + local n = new_glue(b_amount,b_stretch,b_shrink) + setattrs(n,false,a_skipcategory,b_category,a_skippenalty,b_penalty,a_skiporder,b_order or 1) + write_node(n) + end + + local function flush() + after() + if b_done then + inject() + b_done = false + end + before() + end + + -- local cmd = token.create("vspacingfromtempstring") + local cmd = token.create("vspacingpredefinedvalue") + + local function handler(amount, keyword, detail) + if not keyword then + report_vspacing("unknown directive %a",s) + else + local mk = map[keyword] + if mk then + lpegmatch(pattern,mk) + elseif keyword == k_fixed then + b_fixed = true + elseif keyword == k_flexible then + b_flexible = false + elseif keyword == k_category then + local category = tonumber(detail) + if category == packed then + b_packed = true + elseif category then + b_category = category + b_done = true + flush() + end + elseif keyword == k_order and detail then + local order = tonumber(detail) + if order then + b_order = order + end + elseif keyword == k_penalty and detail then + local penalty = tonumber(detail) + if penalty then + flush() + b_done = true + b_category = 3 + b_penalty = penalty + flush() + end + else + amount = tonumber(amount) or 1 + local sk = skip[keyword] + if sk then + -- amount, keyword + b_done = true + -- best, for now, todo: runlocal with arguments + -- expandmacro("vspacingpredefinedvalue",true,keyword) + expandmacro(cmd,true,keyword) + -- setmacro("tempstring",keyword) + -- runlocal(cmd) + -- nicest + -- runlocal(cache[keyword]) + -- fast + -- settoks("scratchtoks",keyword) + -- runlocal("vspacingfromscratchtoks") + -- middleground + -- setmacro("tempstring",keyword) + -- runlocal(ctx_vspacingfromtempstring) + -- + b_amount = b_amount + amount * texgetdimen("scratchdimen") + else -- no check + b_done = true + b_amount = b_amount + amount * toscaled(keyword) + end + end + end + end + + -- alternatively we can make a table and have a keyword -> split cache but this is probably + -- not really a bottleneck + + local splitter = ((multiplier + singlefier) * keyword * (category + Cc(false))) / handler + pattern = (splitter + separator^1)^0 + + function vspacing.inject(grid,str) + if trace_vspacing then + -- ctx_pushlogger(report_vspacing) + end + b_done = false + b_packed = false + b_grid = gridsnapping + before() + lpegmatch(pattern,str) + after() + if b_done then + inject() + end + if b_packed then + ctx_ignoreparskip() + end + if trace_vspacing then + -- ctx_poplogger() + end + end + + function vspacing.injectpenalty(penalty) + local n = new_glue() + setattrs(n,false,a_skipcategory,categories.penalty,a_skippenalty,penalty,a_skiporder,1) + write_node(n) + end + + function vspacing.injectskip(amount) + local n = new_glue(amount) + setattrs(n,false,a_skipcategory,categories.largest,a_skippenalty,false,a_skiporder,1) + write_node(n) + end + + function vspacing.injectdisable(amount) + local n = new_glue() + setattrs(n,false,a_skipcategory,categories.disable,a_skippenalty,false,a_skiporder,1) + write_node(n) + end + + end + +end + +-- implementation + +-- alignment box begin_of_par vmode_par hmode_par insert penalty before_display after_display + +function vspacing.snapbox(n,how) + local sv = snapmethods[how] + if sv then + local box = getbox(n) + local list = getlist(box) + if list then + local s = getattr(list,a_snapmethod) + if s == 0 then + if trace_vsnapping then + -- report_snapper("box list not snapped, already done") + end + else + local wd, ht, dp = getwhd(box) + if false then -- todo: already_done + -- assume that the box is already snapped + if trace_vsnapping then + report_snapper("box list already snapped at (%p,%p): %s", + ht,dp,listtoutf(list)) + end + else + local h, d, ch, cd, lines, extra = snap_hlist("box",box,sv,ht,dp) + setprop(box,"snapper",{ + ht = h, + dp = d, + ch = ch, + cd = cd, + extra = extra, + current = current, + }) + setwhd(box,wd,ch,cd) + if trace_vsnapping then + report_snapper("box list snapped from (%p,%p) to (%p,%p) using method %a (%s) for %a (%s lines): %s", + h,d,ch,cd,sv.name,sv.specification,"direct",lines,listtoutf(list)) + end + setattr(box,a_snapmethod,0) -- + setattr(list,a_snapmethod,0) -- yes or no + end + end + end + end +end + +-- I need to figure out how to deal with the prevdepth that crosses pages. In fact, +-- prevdepth is often quite interfering (even over a next paragraph) so I need to +-- figure out a trick. Maybe use something other than a rule. If we visualize we'll +-- see the baselineskip in action: +-- +-- \blank[force,5*big] { \baselineskip1cm xxxxxxxxx \par } \page +-- \blank[force,5*big] { \baselineskip1cm xxxxxxxxx \par } \page +-- \blank[force,5*big] { \baselineskip5cm xxxxxxxxx \par } \page + +-- We can register and copy the rule instead. + +do + + local insert_node_after = nuts.insert_after + local insert_node_before = nuts.insert_before + + local abovedisplayskip_code = gluecodes.abovedisplayskip + local belowdisplayskip_code = gluecodes.belowdisplayskip + local abovedisplayshortskip_code = gluecodes.abovedisplayshortskip + local belowdisplayshortskip_code = gluecodes.belowdisplayshortskip + + local w, h, d = 0, 0, 0 + ----- w, h, d = 100*65536, 65536, 65536 + + local trace_list = { } + local tracing_info = { } + local before = "" + local after = "" + + local function nodes_to_string(head) + local current = head + local t = { } + while current do + local id = getid(current) + local ty = nodecodes[id] + if id == penalty_code then + t[#t+1] = formatters["%s:%s"](ty,getpenalty(current)) + elseif id == glue_code then + t[#t+1] = formatters["%s:%s:%p"](ty,gluecodes[getsubtype(current)],getwidth(current)) + elseif id == kern_code then + t[#t+1] = formatters["%s:%p"](ty,getkern(current)) + else + t[#t+1] = ty + end + current = getnext(current) + end + return concat(t," + ") + end + + local function reset_tracing(head) + trace_list, tracing_info, before, after = { }, false, nodes_to_string(head), "" + end + + local function trace_skip(str,sc,so,sp,data) + trace_list[#trace_list+1] = { "skip", formatters["%s | %p | category %s | order %s | penalty %s"](str, getwidth(data), sc or "-", so or "-", sp or "-") } + tracing_info = true + end + + local function trace_natural(str,data) + trace_list[#trace_list+1] = { "skip", formatters["%s | %p"](str, getwidth(data)) } + tracing_info = true + end + + local function trace_info(message, where, what) + trace_list[#trace_list+1] = { "info", formatters["%s: %s/%s"](message,where,what) } + end + + local function trace_node(what) + local nt = nodecodes[getid(what)] + local tl = trace_list[#trace_list] + if tl and tl[1] == "node" then + trace_list[#trace_list] = { "node", formatters["%s + %s"](tl[2],nt) } + else + trace_list[#trace_list+1] = { "node", nt } + end + end + + local function show_tracing(head) + if tracing_info then + after = nodes_to_string(head) + for i=1,#trace_list do + local tag, text = unpack(trace_list[i]) + if tag == "info" then + report_collapser(text) + else + report_collapser(" %s: %s",tag,text) + end + end + report_collapser("before: %s",before) + report_collapser("after : %s",after) + end + end + + local function trace_done(str,data) + if getid(data) == penalty_code then + trace_list[#trace_list+1] = { "penalty", formatters["%s | %s"](str,getpenalty(data)) } + else + trace_list[#trace_list+1] = { "glue", formatters["%s | %p"](str,getwidth(data)) } + end + tracing_info = true + end + + local function forced_skip(head,current,width,where,trace) -- looks old ... we have other tricks now + if head == current then + if getsubtype(head) == baselineskip_code then + width = width - getwidth(head) + end + end + if width == 0 then + -- do nothing + elseif where == "after" then + head, current = insert_node_after(head,current,new_rule(w,h,d)) + head, current = insert_node_after(head,current,new_kern(width)) + head, current = insert_node_after(head,current,new_rule(w,h,d)) + else + local c = current + head, current = insert_node_before(head,current,new_rule(w,h,d)) + head, current = insert_node_before(head,current,new_kern(width)) + head, current = insert_node_before(head,current,new_rule(w,h,d)) + current = c + end + if trace then + report_vspacing("inserting forced skip of %p",width) + end + return head, current + end + + -- penalty only works well when before skip + + local discard = categories.discard + local largest = categories.largest + local force = categories.force + local penalty = categories.penalty + local add = categories.add + local disable = categories.disable + local nowhite = categories.nowhite + local goback = categories.goback + local packed = categories.packed + local overlay = categories.overlay + local enable = categories.enable + local notopskip = categories.notopskip + + -- [whatsits][hlist][glue][glue][penalty] + + local special_penalty_min = 32250 + local special_penalty_max = 35000 + local special_penalty_xxx = 0 + + -- this is rather messy and complex: we want to make sure that successive + -- header don't break but also make sure that we have at least a decent + -- break when we have succesive ones (often when testing) + + -- todo: mark headers as such so that we can recognize them + + local specialmethods = { } + local specialmethod = 1 + + specialmethods[1] = function(pagehead,pagetail,start,penalty) + -- + if not pagehead or penalty < special_penalty_min or penalty > special_penalty_max then + return + end + local current = pagetail + -- + -- nodes.showsimplelist(pagehead,0) + -- + if trace_specials then + report_specials("checking penalty %a",penalty) + end + while current do + local id = getid(current) + if id == penalty_code then + local p = properties[current] + if p then + local p = p.special_penalty + if not p then + if trace_specials then + report_specials(" regular penalty, continue") + end + elseif p == penalty then + if trace_specials then + report_specials(" context penalty %a, same level, overloading",p) + end + return special_penalty_xxx + elseif p > special_penalty_min and p < special_penalty_max then + if penalty < p then + if trace_specials then + report_specials(" context penalty %a, lower level, overloading",p) + end + return special_penalty_xxx + else + if trace_specials then + report_specials(" context penalty %a, higher level, quitting",p) + end + return + end + elseif trace_specials then + report_specials(" context penalty %a, higher level, continue",p) + end + else + local p = getpenalty(current) + if p < 10000 then + -- assume some other mechanism kicks in so we seem to have content + if trace_specials then + report_specials(" regular penalty %a, quitting",p) + end + break + else + if trace_specials then + report_specials(" regular penalty %a, continue",p) + end + end + end + end + current = getprev(current) + end + -- none found, so no reson to be special + if trace_specials then + if pagetail then + report_specials(" context penalty, discarding, nothing special") + else + report_specials(" context penalty, discarding, nothing preceding") + end + end + return special_penalty_xxx + end + + -- This will be replaced after 0.80+ when we have a more robust look-back and + -- can look at the bigger picture. + + -- todo: look back and when a special is there before a list is seen penalty keep ut + + -- we now look back a lot, way too often + + -- userskip + -- lineskip + -- baselineskip + -- parskip + -- abovedisplayskip + -- belowdisplayskip + -- abovedisplayshortskip + -- belowdisplayshortskip + -- topskip + -- splittopskip + + -- we could inject a vadjust to force a recalculation .. a mess + -- + -- So, the next is far from robust and okay but for the moment this overlaying + -- has to do. Always test this with the examples in spac-ver.mkvi! + + local function snap_topskip(current,method) + local w = getwidth(current) + setwidth(current,0) + return w, 0 + end + + local function check_experimental_overlay(head,current) + local p = nil + local c = current + local n = nil + local function overlay(p,n,mvl) + local p_wd, p_ht, p_dp = getwhd(p) + local n_wd, n_ht, n_dp = getwhd(n) + local skips = 0 + -- + -- We deal with this at the tex end .. we don't see spacing .. enabling this code + -- is probably harmless but then we need to test it. + -- + -- we could calculate this before we call + -- + -- problem: prev list and next list can be unconnected + -- + local c = getnext(p) + local l = c + while c and c ~= n do + local id = getid(c) + if id == glue_code then + skips = skips + getwidth(c) + elseif id == kern_code then + skips = skips + getkern(c) + end + l = c + c = getnext(c) + end + local c = getprev(n) + while c and c ~= n and c ~= l do + local id = getid(c) + if id == glue_code then + skips = skips + getwidth(c) + elseif id == kern_code then + skips = skips + getkern(c) + end + c = getprev(c) + end + -- + local delta = n_ht + skips + p_dp + texsetdimen("global","d_spac_overlay",-delta) -- for tracing + -- we should adapt pagetotal ! (need a hook for that) .. now we have the wrong pagebreak + local k = new_kern(-delta) + head = insert_node_before(head,n,k) + if n_ht > p_ht then + local k = new_kern(n_ht-p_ht) + head = insert_node_before(head,p,k) + end + if trace_vspacing then + report_vspacing("overlaying, prev height: %p, prev depth: %p, next height: %p, skips: %p, move up: %p",p_ht,p_dp,n_ht,skips,delta) + end + return remove_node(head,current,true) + end + + -- goto next line + while c do + local id = getid(c) + if id == glue_code or id == penalty_code or id == kern_code then + -- skip (actually, remove) + c = getnext(c) + elseif id == hlist_code then + n = c + break + else + break + end + end + if n then + -- we have a next line, goto prev line + c = current + while c do + local id = getid(c) + if id == glue_code or id == penalty_code then -- kern ? + c = getprev(c) + elseif id == hlist_code then + p = c + break + else + break + end + end + if not p then + if a_snapmethod == a_snapvbox then + -- quit, we're not on the mvl + else + -- inefficient when we're at the end of a page + local c = tonut(texlists.page_head) + while c and c ~= n do + local id = getid(c) + if id == hlist_code then + p = c + end + c = getnext(c) + end + if p and p ~= n then + return overlay(p,n,true) + end + end + elseif p ~= n then + return overlay(p,n,false) + end + end + -- in fact, we could try again later ... so then no remove (a few tries) + return remove_node(head,current,true) + end + + local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also pass tail + if trace then + reset_tracing(head) + end + local current = head + local oldhead = head + local glue_order = 0 + local glue_data + local force_glue = false + local penalty_order = 0 + local penalty_data + local natural_penalty + local special_penalty + local parskip + local ignore_parskip = false + local ignore_following = false + local ignore_whitespace = false + local keep_together = false + local lastsnap + local pagehead + local pagetail + -- + -- todo: keep_together: between headers + -- + local function getpagelist() + if not pagehead then + pagehead = texlists.page_head + if pagehead then + pagehead = tonut(pagehead) + pagetail = find_node_tail(pagehead) -- no texlists.page_tail yet-- no texlists.page_tail yet + end + end + end + -- + local function compensate(n) + local g = 0 + while n and getid(n) == glue_code do + g = g + getwidth(n) + n = getnext(n) + end + if n then + local p = getprop(n,"snapper") + if p then + local extra = p.extra + if extra and extra < 0 then -- hm, extra can be unset ... needs checking + local h = p.ch -- getheight(n) + -- maybe an extra check + -- if h - extra < g then + setheight(n,h-2*extra) + p.extra = 0 + if trace_vsnapping then + report_snapper("removed extra space at top: %p",extra) + end + -- end + end + end + return n + end + end + -- + local function removetopsnap() + getpagelist() + if pagehead then + local n = pagehead and compensate(pagehead) + if n and n ~= pagetail then + local p = getprop(pagetail,"snapper") + if p then + local e = p.extra + if e and e < 0 then + local t = texget("pagetotal") + if t > 0 then + local g = texget("pagegoal") -- 1073741823 is signal + local d = g - t + if d < -e then + local penalty = new_penalty(1000000) + setlink(penalty,head) + head = penalty + report_snapper("force pagebreak due to extra space at bottom: %p",e) + end + end + end + end + end + elseif head then + compensate(head) + end + end + -- + local function getavailable() + getpagelist() + if pagehead then + local t = texget("pagetotal") + if t > 0 then + local g = texget("pagegoal") + return g - t + end + end + return false + end + -- + local function flush(why) + if penalty_data then + local p = new_penalty(penalty_data) + if trace then + trace_done("flushed due to " .. why,p) + end + if penalty_data >= 10000 then -- or whatever threshold? + local prev = getprev(current) + if getid(prev) == glue_code then -- maybe go back more, or maybe even push back before any glue + -- tricky case: spacing/grid-007.tex: glue penalty glue + head = insert_node_before(head,prev,p) + else + head = insert_node_before(head,current,p) + end + else + head = insert_node_before(head,current,p) + end + -- if penalty_data > special_penalty_min and penalty_data < special_penalty_max then + local props = properties[p] + if props then + props.special_penalty = special_penalty or penalty_data + else + properties[p] = { + special_penalty = special_penalty or penalty_data + } + end + -- end + end + if glue_data then + if force_glue then + if trace then + trace_done("flushed due to forced " .. why,glue_data) + end + head = forced_skip(head,current,getwidth(glue_data,width),"before",trace) + flush_node(glue_data) + else + local width, stretch, shrink = getglue(glue_data) + if width ~= 0 then + if trace then + trace_done("flushed due to non zero " .. why,glue_data) + end + head = insert_node_before(head,current,glue_data) + elseif stretch ~= 0 or shrink ~= 0 then + if trace then + trace_done("flushed due to stretch/shrink in" .. why,glue_data) + end + head = insert_node_before(head,current,glue_data) + else + -- report_vspacing("needs checking (%s): %p",gluecodes[getsubtype(glue_data)],w) + flush_node(glue_data) + end + end + end + + if trace then + trace_node(current) + end + glue_order, glue_data, force_glue = 0, nil, false + penalty_order, penalty_data, natural_penalty = 0, nil, nil + parskip, ignore_parskip, ignore_following, ignore_whitespace = nil, false, false, false + end + -- + if trace_vsnapping then + report_snapper("global ht/dp = %p/%p, local ht/dp = %p/%p", + texgetdimen("globalbodyfontstrutheight"), + texgetdimen("globalbodyfontstrutdepth"), + texgetdimen("bodyfontstrutheight"), + texgetdimen("bodyfontstrutdepth") + ) + end + if trace then + trace_info("start analyzing",where,what) + end + if snap and where == "page" then + removetopsnap() + end + while current do + local id = getid(current) + if id == hlist_code or id == vlist_code then + -- needs checking, why so many calls + if snap then + lastsnap = nil + local list = getlist(current) + local s = getattr(current,a_snapmethod) + if not s then + -- if trace_vsnapping then + -- report_snapper("mvl list not snapped") + -- end + elseif s == 0 then + if trace_vsnapping then + report_snapper("mvl %a not snapped, already done: %s",nodecodes[id],listtoutf(list)) + end + else + local sv = snapmethods[s] + if sv then + -- check if already snapped + local done = list and already_done(id,list,a_snapmethod) + if done then + -- assume that the box is already snapped + if trace_vsnapping then + local w, h, d = getwhd(current) + report_snapper("mvl list already snapped at (%p,%p): %s",h,d,listtoutf(list)) + end + else + local h, d, ch, cd, lines, extra = snap_hlist("mvl",current,sv,false,false) + lastsnap = { + ht = h, + dp = d, + ch = ch, + cd = cd, + extra = extra, + current = current, + } + setprop(current,"snapper",lastsnap) + if trace_vsnapping then + report_snapper("mvl %a snapped from (%p,%p) to (%p,%p) using method %a (%s) for %a (%s lines): %s", + nodecodes[id],h,d,ch,cd,sv.name,sv.specification,where,lines,listtoutf(list)) + end + end + elseif trace_vsnapping then + report_snapper("mvl %a not snapped due to unknown snap specification: %s",nodecodes[id],listtoutf(list)) + end + setattr(current,a_snapmethod,0) + end + else + -- + end + -- tex.prevdepth = 0 + flush("list") + current = getnext(current) + elseif id == penalty_code then + -- natural_penalty = getpenalty(current) + -- if trace then + -- trace_done("removed penalty",current) + -- end + -- head, current = remove_node(head,current,true) + current = getnext(current) + elseif id == kern_code then + if snap and trace_vsnapping and getkern(current) ~= 0 then + report_snapper("kern of %p kept",getkern(current)) + end + flush("kern") + current = getnext(current) + elseif id == glue_code then + local subtype = getsubtype(current) + if subtype == userskip_code then + local sc, so, sp = getattrs(current,a_skipcategory,a_skiporder,a_skippenalty) + if not so then + so = 1 -- the others have no default value + end + if sp and sc == penalty then + if where == "page" then + getpagelist() + local p = specialmethods[specialmethod](pagehead,pagetail,current,sp) + if p then + -- todo: other tracer + -- + -- if trace then + -- trace_skip("previous special penalty %a is changed to %a using method %a",sp,p,specialmethod) + -- end + special_penalty = sp + sp = p + end + end + if not penalty_data then + penalty_data = sp + elseif penalty_order < so then + penalty_order, penalty_data = so, sp + elseif penalty_order == so and sp > penalty_data then + penalty_data = sp + end + if trace then + trace_skip("penalty in skip",sc,so,sp,current) + end + head, current = remove_node(head,current,true) + elseif not sc then -- if not sc then + if glue_data then + if trace then + trace_done("flush",glue_data) + end + head = insert_node_before(head,current,glue_data) + if trace then + trace_natural("natural",current) + end + current = getnext(current) + glue_data = nil + else + -- not look back across head + -- todo: prev can be whatsit (latelua) + local previous = getprev(current) + if previous and getid(previous) == glue_code and getsubtype(previous) == userskip_code then + local pwidth, pstretch, pshrink, pstretch_order, pshrink_order = getglue(previous) + local cwidth, cstretch, cshrink, cstretch_order, cshrink_order = getglue(current) + if pstretch_order == 0 and pshrink_order == 0 and cstretch_order == 0 and cshrink_order == 0 then + setglue(previous,pwidth + cwidth, pstretch + cstretch, pshrink + cshrink) + if trace then + trace_natural("removed",current) + end + head, current = remove_node(head,current,true) + if trace then + trace_natural("collapsed",previous) + end + else + if trace then + trace_natural("filler",current) + end + current = getnext(current) + end + else + if trace then + trace_natural("natural (no prev)",current) + end + current = getnext(current) + end + end + glue_order = 0 + elseif sc == disable or sc == enable then + local next = getnext(current) + if next then + ignore_following = sc == disable + if trace then + trace_skip(sc == disable and "disable" or "enable",sc,so,sp,current) + end + head, current = remove_node(head,current,true) + else + current = next + end + elseif sc == packed then + if trace then + trace_skip("packed",sc,so,sp,current) + end + -- can't happen ! + head, current = remove_node(head,current,true) + elseif sc == nowhite then + local next = getnext(current) + if next then + ignore_whitespace = true + head, current = remove_node(head,current,true) + else + current = next + end + elseif sc == discard then + if trace then + trace_skip("discard",sc,so,sp,current) + end + head, current = remove_node(head,current,true) + elseif sc == overlay then + -- todo (overlay following line over previous + if trace then + trace_skip("overlay",sc,so,sp,current) + end + -- beware: head can actually be after the affected nodes as + -- we look back ... some day head will the real head + head, current = check_experimental_overlay(head,current,a_snapmethod) + elseif ignore_following then + if trace then + trace_skip("disabled",sc,so,sp,current) + end + head, current = remove_node(head,current,true) + elseif not glue_data then + if trace then + trace_skip("assign",sc,so,sp,current) + end + glue_order = so + head, current, glue_data = remove_node(head,current) + elseif glue_order < so then + if trace then + trace_skip("force",sc,so,sp,current) + end + glue_order = so + flush_node(glue_data) + head, current, glue_data = remove_node(head,current) + elseif glue_order == so then + -- is now exclusive, maybe support goback as combi, else why a set + if sc == largest then + local cw = getwidth(current) + local gw = getwidth(glue_data) + if cw > gw then + if trace then + trace_skip("largest",sc,so,sp,current) + end + flush_node(glue_data) + head, current, glue_data = remove_node(head,current) + else + if trace then + trace_skip("remove smallest",sc,so,sp,current) + end + head, current = remove_node(head,current,true) + end + elseif sc == goback then + if trace then + trace_skip("goback",sc,so,sp,current) + end + flush_node(glue_data) + head, current, glue_data = remove_node(head,current) + elseif sc == force then + -- last one counts, some day we can provide an accumulator and largest etc + -- but not now + if trace then + trace_skip("force",sc,so,sp,current) + end + flush_node(glue_data) + head, current, glue_data = remove_node(head,current) + elseif sc == penalty then + if trace then + trace_skip("penalty",sc,so,sp,current) + end + flush_node(glue_data) + glue_data = nil + head, current = remove_node(head,current,true) + elseif sc == add then + if trace then + trace_skip("add",sc,so,sp,current) + end + local cwidth, cstretch, cshrink = getglue(current) + local gwidth, gstretch, gshrink = getglue(glue_data) + setglue(glue_data,gwidth + cwidth, gstretch + cstretch,gshrink + cshrink) + -- toto: order + head, current = remove_node(head,current,true) + else + if trace then + trace_skip("unknown",sc,so,sp,current) + end + head, current = remove_node(head,current,true) + end + else + if trace then + trace_skip("unknown",sc,so,sp,current) + end + head, current = remove_node(head,current,true) + end + if sc == force then + force_glue = true + end + elseif subtype == lineskip_code then + if snap then + local s = getattr(current,a_snapmethod) + if s and s ~= 0 then + setattr(current,a_snapmethod,0) + setwidth(current,0) + if trace_vsnapping then + report_snapper("lineskip set to zero") + end + else + if trace then + trace_skip("lineskip",sc,so,sp,current) + end + flush("lineskip") + end + else + if trace then + trace_skip("lineskip",sc,so,sp,current) + end + flush("lineskip") + end + current = getnext(current) + elseif subtype == baselineskip_code then + if snap then + local s = getattr(current,a_snapmethod) + if s and s ~= 0 then + setattr(current,a_snapmethod,0) + setwidth(current,0) + if trace_vsnapping then + report_snapper("baselineskip set to zero") + end + else + if trace then + trace_skip("baselineskip",sc,so,sp,current) + end + flush("baselineskip") + end + else + if trace then + trace_skip("baselineskip",sc,so,sp,current) + end + flush("baselineskip") + end + current = getnext(current) + elseif subtype == parskip_code then + -- parskip always comes later + if ignore_whitespace then + if trace then + trace_natural("ignored parskip",current) + end + head, current = remove_node(head,current,true) + elseif glue_data then + local w = getwidth(current) + if w ~= 0 and w > getwidth(glue_data) then +flush_node(glue_data) + glue_data = current + if trace then + trace_natural("taking parskip",current) + end + head, current = remove_node(head,current) + else + if trace then + trace_natural("removed parskip",current) + end + head, current = remove_node(head,current,true) + end + else + if trace then + trace_natural("honored parskip",current) + end + head, current, glue_data = remove_node(head,current) + end + elseif subtype == topskip_code or subtype == splittopskip_code then + local next = getnext(current) + if next and getattr(next,a_skipcategory) == notopskip then + nuts.setglue(current) -- zero + end + if snap then + local s = getattr(current,a_snapmethod) + if s and s ~= 0 then + setattr(current,a_snapmethod,0) + local sv = snapmethods[s] + local w, cw = snap_topskip(current,sv) + if trace_vsnapping then + report_snapper("topskip snapped from %p to %p for %a",w,cw,where) + end + else + if trace then + trace_skip("topskip",sc,so,sp,current) + end + flush("topskip") + end + else + if trace then + trace_skip("topskip",sc,so,sp,current) + end + flush("topskip") + end + current = getnext(current) + elseif subtype == abovedisplayskip_code and remove_math_skips then + -- + if trace then + trace_skip("above display skip (normal)",sc,so,sp,current) + end + flush("above display skip (normal)") + current = getnext(current) + -- + elseif subtype == belowdisplayskip_code and remove_math_skips then + -- + if trace then + trace_skip("below display skip (normal)",sc,so,sp,current) + end + flush("below display skip (normal)") + current = getnext(current) + -- + elseif subtype == abovedisplayshortskip_code and remove_math_skips then + -- + if trace then + trace_skip("above display skip (short)",sc,so,sp,current) + end + flush("above display skip (short)") + current = getnext(current) + -- + elseif subtype == belowdisplayshortskip_code and remove_math_skips then + -- + if trace then + trace_skip("below display skip (short)",sc,so,sp,current) + end + flush("below display skip (short)") + current = getnext(current) + -- + else -- other glue + if snap and trace_vsnapping then + local w = getwidth(current) + if w ~= 0 then + report_snapper("glue %p of type %a kept",w,gluecodes[subtype]) + end + end + if trace then + trace_skip(formatters["glue of type %a"](subtype),sc,so,sp,current) + end + flush("some glue") + current = getnext(current) + end + else + flush(trace and formatters["node with id %a"](id) or "other node") + current = getnext(current) + end + end + if trace then + trace_info("stop analyzing",where,what) + end + -- if natural_penalty and (not penalty_data or natural_penalty > penalty_data) then + -- penalty_data = natural_penalty + -- end + if trace and (glue_data or penalty_data) then + trace_info("start flushing",where,what) + end + local tail + if penalty_data then + tail = find_node_tail(head) + local p = new_penalty(penalty_data) + if trace then + trace_done("result",p) + end + setlink(tail,p) + -- if penalty_data > special_penalty_min and penalty_data < special_penalty_max then + local props = properties[p] + if props then + props.special_penalty = special_penalty or penalty_data + else + properties[p] = { + special_penalty = special_penalty or penalty_data + } + end + -- end + end + if glue_data then + if not tail then tail = find_node_tail(head) end + if trace then + trace_done("result",glue_data) + end + if force_glue then + head, tail = forced_skip(head,tail,getwidth(glue_data),"after",trace) + flush_node(glue_data) + glue_data = nil + elseif tail then + setlink(tail,glue_data) +setnext(glue_data) + else + head = glue_data + end + texnest[texnest.ptr].prevdepth = 0 -- appending to the list bypasses tex's prevdepth handler + end + if trace then + if glue_data or penalty_data then + trace_info("stop flushing",where,what) + end + show_tracing(head) + if oldhead ~= head then + trace_info("head has been changed from %a to %a",nodecodes[getid(oldhead)],nodecodes[getid(head)]) + end + end + return head + end + + local stackhead, stacktail, stackhack = nil, nil, false + + local function report(message,where,lst) + if lst and where then + report_vspacing(message,where,count_nodes(lst,true),nodeidstostring(lst)) + else + report_vspacing(message,count_nodes(lst,true),nodeidstostring(lst)) + end + end + + -- ugly code: we get partial lists (check if this stack is still okay) ... and we run + -- into temp nodes (sigh) + + local forceflush = false + + function vspacing.pagehandler(newhead,where) + if newhead then + local newtail = find_node_tail(newhead) -- best pass that tail, known anyway + local flush = false + stackhack = true -- todo: only when grid snapping once enabled + -- todo: fast check if head = tail + for n, id, subtype in nextnode, newhead do -- we could just look for glue nodes + if id ~= glue_code then + flush = true + elseif subtype == userskip_code then + if getattr(n,a_skipcategory) then + stackhack = true + else + flush = true + end + elseif subtype == parskip_code then + -- if where == new_graf then ... end + if texgetcount("c_spac_vspacing_ignore_parskip") > 0 then + -- texsetcount("c_spac_vspacing_ignore_parskip",0) + setglue(n) + -- maybe removenode + end + end + end + texsetcount("c_spac_vspacing_ignore_parskip",0) + + if forceflush then + forceflush = false + flush = true + end + + if flush then + if stackhead then + if trace_collect_vspacing then report("%s > appending %s nodes to stack (final): %s",where,newhead) end + setlink(stacktail,newhead) + newhead = stackhead + stackhead = nil + stacktail = nil + end + if stackhack then + stackhack = false + if trace_collect_vspacing then report("%s > processing %s nodes: %s",where,newhead) end + newhead = collapser(newhead,"page",where,trace_page_vspacing,true,a_snapmethod) + else + if trace_collect_vspacing then report("%s > flushing %s nodes: %s",where,newhead) end + end + return newhead + else + if stackhead then + if trace_collect_vspacing then report("%s > appending %s nodes to stack (intermediate): %s",where,newhead) end + setlink(stacktail,newhead) + else + if trace_collect_vspacing then report("%s > storing %s nodes in stack (initial): %s",where,newhead) end + stackhead = newhead + end + stacktail = newtail + end + end + return nil + end + + function vspacing.pageoverflow() + local h = 0 + if stackhead then + for n, id in nextnode, stackhead do + if id == glue_code then + h = h + getwidth(n) + elseif id == kern_code then + h = h + getkern(n) + end + end + end + return h + end + + function vspacing.forcepageflush() + forceflush = true + end + + local ignore = table.tohash { + "split_keep", + "split_off", + -- "vbox", + } + + function vspacing.vboxhandler(head,where) + if head and not ignore[where] and getnext(head) then + if getnext(head) then -- what if a one liner and snapping? + head = collapser(head,"vbox",where,trace_vbox_vspacing,true,a_snapvbox) -- todo: local snapper + return head + end + end + return head + end + + function vspacing.collapsevbox(n,aslist) -- for boxes but using global a_snapmethod + local box = getbox(n) + if box then + local list = getlist(box) + if list then + list = collapser(list,"snapper","vbox",trace_vbox_vspacing,true,a_snapmethod) + if aslist then + setlist(box,list) -- beware, dimensions of box are wrong now + else + setlist(box,vpack_node(list)) + end + end + end + end + +end + +-- This one is needed to prevent bleeding of prevdepth to the next page +-- which doesn't work well with forced skips. I'm not that sure if the +-- following is a good way out. + +do + + local outer = texnest[0] + + local enabled = true + local trace = false + local report = logs.reporter("vspacing") + + trackers.register("vspacing.synchronizepage",function(v) + trace = v + end) + + directives.register("vspacing.synchronizepage",function(v) + enabled = v + end) + + local ignoredepth = -65536000 + + -- A previous version analyzed the number of lines moved to the next page in + -- synchronizepage because prevgraf is unreliable in that case. However, we cannot + -- tweak that parameter because it is also used in postlinebreak and hangafter, so + -- there is a danger for interference. Therefore we now do it dynamically. + + -- We can also support other lists but there prevgraf probably is ok. + + function vspacing.getnofpreviouslines(head) + if enabled then + if not thead then + head = texlists.page_head + end + local noflines = 0 + if head then + local tail = find_node_tail(tonut(head)) + while tail do + local id = getid(tail) + if id == hlist_code then + if getsubtype(tail) == linelist_code then + noflines = noflines + 1 + else + break + end + elseif id == vlist_code then + break + elseif id == glue_code then + local subtype = getsubtype(tail) + if subtype == baselineskip_code or subtype == lineskip_code then + -- we're ok + elseif subtype == parskip_code then + if getwidth(tail) > 0 then + break + else + -- we assume we're ok + end + end + elseif id == penalty_code then + -- we're probably ok + elseif id == rule_code or id == kern_code then + break + else + -- ins, mark, boundary, whatsit + end + tail = getprev(tail) + end + end + return noflines + end + end + + interfaces.implement { + name = "getnofpreviouslines", + public = true, + actions = vspacing.getnofpreviouslines, + } + + function vspacing.synchronizepage() + if enabled then + if trace then + local newdepth = outer.prevdepth + local olddepth = newdepth + if not texlists.page_head then + newdepth = ignoredepth + texset("prevdepth",ignoredepth) + outer.prevdepth = ignoredepth + end + report("page %i, prevdepth %p => %p",texgetcount("realpageno"),olddepth,newdepth) + -- report("list %s",nodes.idsandsubtypes(head)) + else + if not texlists.page_head then + texset("prevdepth",ignoredepth) + outer.prevdepth = ignoredepth + end + end + end + end + + local trace = false + local last = nil + local vmode_code = tex.modelevels.vertical + local temp_code = nodecodes.temp + local getnest = tex.getnest + local getlist = tex.getlist + + trackers.register("vspacing.forcestrutdepth",function(v) trace = v end) + + -- abs : negative is inner + + function vspacing.checkstrutdepth(depth) + local nest = getnest() + if abs(nest.mode) == vmode_code and nest.head then + local tail = nest.tail + local id = tail.id + if id == hlist_code then + if tail.depth < depth then + tail.depth = depth + end + nest.prevdepth = depth + elseif id == temp_code and getnest("ptr") == 0 then + local head = getlist("page_head") + if head then + tail = nodes.tail(head) + if tail and tail.id == hlist_code then + if tail.depth < depth then + tail.depth = depth + end + nest.prevdepth = depth + -- only works in lmtx + texset("pagedepth",depth) + end + end + end + end + end + + interfaces.implement { + name = "checkstrutdepth", + arguments = "dimension", + actions = vspacing.checkstrutdepth, + } + + function vspacing.forcestrutdepth(n,depth,trace_mode,plus) + local box = texgetbox(n) + if box then + box = tonut(box) + local head = getlist(box) + if head then + local tail = find_node_tail(head) + if tail then + if getid(tail) == hlist_code then + local dp = getdepth(tail) + if dp < depth then + setdepth(tail,depth) + outer.prevdepth = depth + if trace or trace_mode > 0 then + nuts.setvisual(tail,"depth") + end + end + end + last = nil + if plus then + -- penalty / skip ... + local height = 0 + local sofar = 0 + local same = false + local seen = false + local list = { } + last = nil + while tail do + local id = getid(tail) + if id == hlist_code or id == vlist_code then + local w, h, d = getwhd(tail) + height = height + h + d + sofar + sofar = 0 + last = tail + elseif id == kern_code then + sofar = sofar + getkern(tail) + elseif id == glue_code then + if seen then + sofar = sofar + getwidth(tail) + seen = false + else + break + end + elseif id == penalty_code then + local p = getpenalty(tail) + if p >= 10000 then + same = true + seen = true + else + break + end + else + break + end + tail = getprev(tail) + end + texsetdimen("global","d_spac_prevcontent",same and height or 0) + end + end + end + end + end + + function vspacing.pushatsame() + -- needs better checking ! + if last then -- setsplit + nuts.setnext(getprev(last)) + nuts.setprev(last) + end + end + + function vspacing.popatsame() + -- needs better checking ! + nuts.write(last) + end + +end + +-- interface + +do + + -- old variant + + implement { + name = "vspacing", + actions = vspacing.analyze, + scope = "private", + arguments = "string" + } + + -- new variant + + interfaces.implement { + name = "injectvspacing", + actions = vspacing.inject, + arguments = { "integer", "string" }, + } + + interfaces.implement { + name = "injectvpenalty", + actions = vspacing.injectpenalty, + arguments = "integer", + } + + interfaces.implement { + name = "injectvskip", + actions = vspacing.injectskip, + arguments = "dimension", + } + + interfaces.implement { + name = "injectdisable", + actions = vspacing.injectdisable, + } + + -- + + implement { + name = "synchronizepage", + actions = vspacing.synchronizepage, + scope = "private" + } + + implement { + name = "forcestrutdepth", + arguments = { "integer", "dimension", "integer" }, + actions = vspacing.forcestrutdepth, + scope = "private" + } + + implement { + name = "forcestrutdepthplus", + arguments = { "integer", "dimension", "integer", true }, + actions = vspacing.forcestrutdepth, + scope = "private" + } + + implement { + name = "pushatsame", + actions = vspacing.pushatsame, + scope = "private" + } + + implement { + name = "popatsame", + actions = vspacing.popatsame, + scope = "private" + } + + implement { + name = "vspacingsetamount", + actions = vspacing.setskip, + scope = "private", + arguments = "string", + } + + implement { + name = "vspacingdefine", + actions = vspacing.setmap, + scope = "private", + arguments = "2 strings", + } + + implement { + name = "vspacingcollapse", + actions = vspacing.collapsevbox, + scope = "private", + arguments = "integer" + } + + implement { + name = "vspacingcollapseonly", + actions = vspacing.collapsevbox, + scope = "private", + arguments = { "integer", true } + } + + implement { + name = "vspacingsnap", + actions = vspacing.snapbox, + scope = "private", + arguments = { "integer", "integer" } + } + + implement { + name = "definesnapmethod", + actions = vspacing.definesnapmethod, + scope = "private", + arguments = "2 strings", + } + + -- local remove_node = nodes.remove + -- local find_node_tail = nodes.tail + -- + -- interfaces.implement { + -- name = "fakenextstrutline", + -- actions = function() + -- local head = texlists.page_head + -- if head then + -- local head = remove_node(head,find_node_tail(head),true) + -- texlists.page_head = head + -- buildpage() + -- end + -- end + -- } + + implement { + name = "removelastline", + actions = function() + local head = texlists.page_head + if head then + local tail = find_node_tail(head) + if tail then + -- maybe check for hlist subtype 1 + local head = remove_node(head,tail,true) + texlists.page_head = head + buildpage() + end + end + end + } + + implement { + name = "showpagelist", -- will improve + actions = function() + local head = texlists.page_head + if head then + print("start") + while head do + print(" " .. tostring(head)) + head = head.next + end + end + end + } + + implement { + name = "pageoverflow", + actions = { vspacing.pageoverflow, context } + } + + implement { + name = "forcepageflush", + actions = vspacing.forcepageflush + } + +end diff --git a/tex/context/base/mkiv/spac-ver.lua b/tex/context/base/mkiv/spac-ver.lua index 2f0d54227..2fc926321 100644 --- a/tex/context/base/mkiv/spac-ver.lua +++ b/tex/context/base/mkiv/spac-ver.lua @@ -185,7 +185,7 @@ local glue_code = nodecodes.glue local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local rule_code = nodecodes.rule -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local userskip_code = gluecodes.userskip local lineskip_code = gluecodes.lineskip @@ -293,7 +293,7 @@ end local function validvbox(parentid,list) if parentid == hlist_code then local id = getid(list) - if id == localpar_code and start_of_par(list) then + if id == par_code and start_of_par(list) then list = getnext(list) if not next then return nil @@ -329,7 +329,7 @@ local function already_done(parentid,list,a_snapmethod) -- todo: done when only -- problem: any snapped vbox ends up in a line if list and parentid == hlist_code then local id = getid(list) - if id == localpar_code and start_of_par(list) then + if id == par_code and start_of_par(list) then list = getnext(list) if not list then return false @@ -1263,7 +1263,7 @@ do end end -- in fact, we could try again later ... so then no remove (a few tries) - return remove_node(head, current, true) + return remove_node(head,current,true) end local function collapser(head,where,what,trace,snap,a_snapmethod) -- maybe also pass tail @@ -1501,7 +1501,7 @@ do -- if trace then -- trace_done("removed penalty",current) -- end - -- head, current = remove_node(head, current, true) + -- head, current = remove_node(head,current,true) current = getnext(current) elseif id == kern_code then if snap and trace_vsnapping and getkern(current) ~= 0 then @@ -1539,7 +1539,7 @@ do if trace then trace_skip("penalty in skip",sc,so,sp,current) end - head, current = remove_node(head, current, true) + head, current = remove_node(head,current,true) elseif not sc then -- if not sc then if glue_data then if trace then @@ -1562,7 +1562,7 @@ do if trace then trace_natural("removed",current) end - head, current = remove_node(head, current, true) + head, current = remove_node(head,current,true) if trace then trace_natural("collapsed",previous) end @@ -1587,7 +1587,7 @@ do if trace then trace_skip(sc == disable and "disable" or "enable",sc,so,sp,current) end - head, current = remove_node(head, current, true) + head, current = remove_node(head,current,true) else current = next end @@ -1596,12 +1596,12 @@ do trace_skip("packed",sc,so,sp,current) end -- can't happen ! - head, current = remove_node(head, current, true) + head, current = remove_node(head,current,true) elseif sc == nowhite then local next = getnext(current) if next then ignore_whitespace = true - head, current = remove_node(head, current, true) + head, current = remove_node(head,current,true) else current = next end @@ -1609,7 +1609,7 @@ do if trace then trace_skip("discard",sc,so,sp,current) end - head, current = remove_node(head, current, true) + head, current = remove_node(head,current,true) elseif sc == overlay then -- todo (overlay following line over previous if trace then @@ -1622,20 +1622,20 @@ do if trace then trace_skip("disabled",sc,so,sp,current) end - head, current = remove_node(head, current, true) + head, current = remove_node(head,current,true) elseif not glue_data then if trace then trace_skip("assign",sc,so,sp,current) end glue_order = so - head, current, glue_data = remove_node(head, current) + head, current, glue_data = remove_node(head,current) elseif glue_order < so then if trace then trace_skip("force",sc,so,sp,current) end glue_order = so flush_node(glue_data) - head, current, glue_data = remove_node(head, current) + head, current, glue_data = remove_node(head,current) elseif glue_order == so then -- is now exclusive, maybe support goback as combi, else why a set if sc == largest then @@ -1651,7 +1651,7 @@ do if trace then trace_skip("remove smallest",sc,so,sp,current) end - head, current = remove_node(head, current, true) + head, current = remove_node(head,current,true) end elseif sc == goback then if trace then @@ -1666,34 +1666,34 @@ do trace_skip("force",sc,so,sp,current) end flush_node(glue_data) - head, current, glue_data = remove_node(head, current) + head, current, glue_data = remove_node(head,current) elseif sc == penalty then if trace then trace_skip("penalty",sc,so,sp,current) end flush_node(glue_data) glue_data = nil - head, current = remove_node(head, current, true) + head, current = remove_node(head,current,true) elseif sc == add then if trace then trace_skip("add",sc,so,sp,current) end local cwidth, cstretch, cshrink = getglue(current) local gwidth, gstretch, gshrink = getglue(glue_data) - setglue(old,gwidth + cwidth, gstretch + cstretch, gshrink + cshrink) + setglue(glue_data,gwidth + cwidth, gstretch + cstretch,gshrink + cshrink) -- toto: order - head, current = remove_node(head, current, true) + head, current = remove_node(head,current,true) else if trace then trace_skip("unknown",sc,so,sp,current) end - head, current = remove_node(head, current, true) + head, current = remove_node(head,current,true) end else if trace then trace_skip("unknown",sc,so,sp,current) end - head, current = remove_node(head, current, true) + head, current = remove_node(head,current,true) end if sc == force then force_glue = true @@ -1748,7 +1748,7 @@ do if trace then trace_natural("ignored parskip",current) end - head, current = remove_node(head, current, true) + head, current = remove_node(head,current,true) elseif glue_data then local w = getwidth(current) if (w ~= 0) and (w > getwidth(glue_data)) then @@ -1756,18 +1756,18 @@ do if trace then trace_natural("taking parskip",current) end - head, current = remove_node(head, current) + head, current = remove_node(head,current) else if trace then trace_natural("removed parskip",current) end - head, current = remove_node(head, current, true) + head, current = remove_node(head,current,true) end else if trace then trace_natural("honored parskip",current) end - head, current, glue_data = remove_node(head, current) + head, current, glue_data = remove_node(head,current) end elseif subtype == topskip_code or subtype == splittopskip_code then local next = getnext(current) @@ -1902,18 +1902,6 @@ do return head end - -- alignment after_output end box new_graf vmode_par hmode_par insert penalty before_display after_display - -- \par -> vmode_par - -- - -- status.best_page_break - -- tex.lists.best_page_break - -- tex.lists.best_size (natural size to best_page_break) - -- tex.lists.least_page_cost (badness of best_page_break) - -- tex.lists.page_head - -- tex.lists.contrib_head - - -- do - local stackhead, stacktail, stackhack = nil, nil, false local function report(message,where,lst) @@ -1930,7 +1918,6 @@ do local forceflush = false function vspacing.pagehandler(newhead,where) - -- local newhead = texlists.contrib_head if newhead then local newtail = find_node_tail(newhead) -- best pass that tail, known anyway local flush = false @@ -1972,11 +1959,9 @@ do if stackhack then stackhack = false if trace_collect_vspacing then report("%s > processing %s nodes: %s",where,newhead) end - -- texlists.contrib_head = collapser(newhead,"page",where,trace_page_vspacing,true,a_snapmethod) newhead = collapser(newhead,"page",where,trace_page_vspacing,true,a_snapmethod) else if trace_collect_vspacing then report("%s > flushing %s nodes: %s",where,newhead) end - -- texlists.contrib_head = newhead end return newhead else @@ -1993,20 +1978,6 @@ do return nil end - -- function vspacing.flushpagestack() - -- if stackhead then - -- local head = texlists.contrib_head - -- if head then - -- local tail = find_node_tail(head) - -- setlink(tail,stackhead) - -- else - -- texlists.contrib_head = tonode(stackhead) - -- end - -- stackhead, stacktail = nil, nil - -- end - -- - -- end - function vspacing.pageoverflow() local h = 0 if stackhead then @@ -2187,6 +2158,8 @@ do tail.depth = depth end nest.prevdepth = depth + -- only works in lmtx + texset("pagedepth",depth) end end end diff --git a/tex/context/base/mkiv/spac-ver.mkiv b/tex/context/base/mkiv/spac-ver.mkiv index 2c8c30bec..680ba7a99 100644 --- a/tex/context/base/mkiv/spac-ver.mkiv +++ b/tex/context/base/mkiv/spac-ver.mkiv @@ -1940,7 +1940,7 @@ \clf_vspacingsetamount{#1}} \def\spac_vspacing_no_topskip % use grouped - {\c_attr_skipcategory\plusten} + {\c_attr_skipcategory\pluseleven} % \installcorenamespace{vspacingamountnormal} % \installcorenamespace{vspacingamountgrid} diff --git a/tex/context/base/mkiv/spac-ver.mkxl b/tex/context/base/mkiv/spac-ver.mkxl index c76c011e1..7a4688791 100644 --- a/tex/context/base/mkiv/spac-ver.mkxl +++ b/tex/context/base/mkiv/spac-ver.mkxl @@ -15,7 +15,7 @@ \unprotect -\registerctxluafile{spac-ver}{optimize} +\registerctxluafile{spac-ver}{autosuffix,optimize} % todo: use usernodes ? @@ -64,7 +64,7 @@ \def\skipfactor {.75} \def\skipgluefactor{.25} -\def\normalskipamount +\permanent\def\normalskipamount {\openlineheight \ifgridsnapping \orelse \ifconditional\c_spac_whitespace_flexible \s!plus \skipgluefactor\openlineheight @@ -76,7 +76,7 @@ \let\bodyfontinterlinespace\empty \fi -\unexpanded\def\presetnormallineheight % each bodyfont +\permanent\protected\def\presetnormallineheight % each bodyfont {\edef\normallineheight{\interlinespaceparameter\c!line}% \iflocalinterlinespace \else \edef\m_spac_normallineheight{\bodyfontinterlinespace}% @@ -85,7 +85,7 @@ \fi \fi} -\unexpanded\def\setupspecifiedinterlinespace[#1]% +\permanent\protected\def\setupspecifiedinterlinespace[#1]% {\setupcurrentinterlinespace[#1]% \spac_linespacing_setup_specified_interline_space} @@ -125,7 +125,7 @@ {\assignvalue{#1}\currentrelativeinterlinespace{1.00}{1.25}{1.50}% \spacing\currentrelativeinterlinespace}} -\unexpanded\def\setuprelativeinterlinespace[#1]% +\permanent\protected\def\setuprelativeinterlinespace[#1]% {\processcommalist[#1]\spac_linespacing_setup_relative_interlinespace} \def\spac_linespacing_setup_relative_interlinespace#1% @@ -140,7 +140,7 @@ \spacing\currentrelativeinterlinespace \fi} -\unexpanded\def\spac_linespacing_setup_use +\protected\def\spac_linespacing_setup_use {\ifcsname\namedinterlinespacehash\m_spac_interlinespace\s!parent\endcsname \let\currentinterlinespace\m_spac_interlinespace \spac_linespacing_setup_specified_interline_space @@ -148,7 +148,7 @@ % we only support named interlinespaces \fi} -\unexpanded\def\useinterlinespaceparameter#1% see footnotes +\permanent\protected\def\useinterlinespaceparameter#1% see footnotes {\edef\m_spac_interlinespace{#1\c!interlinespace}% \ifempty\m_spac_interlinespace \else \spac_linespacing_setup_use @@ -165,18 +165,12 @@ \installmacrostack\currentinterlinespace -\unexpanded\def\setupinterlinespace - {\dodoubleempty\spac_linespacing_setup} - -\ifdefined\setupinterlinespace_double \else - \let\setupinterlinespace_double\setup_interlinespace % for a while -\fi - -\def\spac_linespacing_setup[#1][#2]% - {\settrue\interlinespaceisset % reset has to be done when needed - \ifsecondargument - \setupinterlinespace_double[#1][#2]% - \orelse\iffirstargument +\permanent\overloaded\tolerant\protected\def\setupinterlinespace[#1]#*[#2]% + {\ifarguments + \settrue\interlinespaceisset + \spac_linespacing_synchronize_local + \or + \settrue\interlinespaceisset \ifcsname\namedinterlinespacehash{#1}\s!parent\endcsname \edef\currentinterlinespace{#1}% \spac_linespacing_setup_specified_interline_space @@ -184,9 +178,9 @@ \else \spac_linespacing_setup_specified_or_relative[#1]% \fi - \else - \let\currentinterlinespace\empty - \spac_linespacing_synchronize_local + \or + \settrue\interlinespaceisset + \setup_interlinespace[#1][#2]% \fi} \def\spac_linespacing_setup_specified_or_relative[#1]% @@ -200,7 +194,7 @@ \the\everysetuplocalinterlinespace \localinterlinespacefalse} -\unexpanded\def\dosetupcheckedinterlinespace#1% often a chain +\permanent\protected\def\dosetupcheckedinterlinespace#1% often a chain {\edef\p_spac_checked_interlinespace{#1}% \ifempty\p_spac_checked_interlinespace \spac_linespacing_synchronize_local @@ -228,7 +222,7 @@ \fi \fi} -\unexpanded\def\setuplocalinterlinespace[#1]% +\permanent\protected\def\setuplocalinterlinespace[#1]% {\localinterlinespacetrue \push_macro_currentinterlinespace \setupinterlinespace[#1]% @@ -244,8 +238,8 @@ \newcount\c_spac_spacefactor \newdimen\d_spac_prevcontent % set by lua -\unexpanded\def\removelastskip - {\ifvmode\ifzeropt\lastskip\else\vskip-\lastskip\fi\fi} +% \permanent\overloaded\protected\def\removelastskip +% {\ifvmode\ifzeropt\lastskip\else\vskip-\lastskip\fi\fi} \def\doifoutervmode {\ifvmode @@ -258,7 +252,7 @@ \expandafter\gobbleoneargument \fi} -\unexpanded\def\dosomebreak#1% +\protected\def\dosomebreak#1% {\doifoutervmode {\s_spac_lastskip\lastskip \removelastskip @@ -269,19 +263,19 @@ \vskip\s_spac_lastskip \fi}} -\unexpanded\def\packed +\permanent\protected\def\packed {\nointerlineskip} -\unexpanded\def\godown[#1]% +\permanent\protected\def\godown[#1]% {\relax \ifhmode\endgraf\fi \ifvmode\nointerlineskip\vskip#1\relax\fi} -\unexpanded\def\smallskip{\vskip\smallskipamount} -\unexpanded\def\medskip {\vskip\medskipamount} -\unexpanded\def\bigskip {\vskip\bigskipamount} +\permanent\protected\def\smallskip{\vskip\smallskipamount} +\permanent\protected\def\medskip {\vskip\medskipamount} +\permanent\protected\def\bigskip {\vskip\bigskipamount} -\unexpanded\def\smallbreak +\permanent\protected\def\smallbreak {\par \ifvmode\ifdim\lastskip<\smallskipamount \removelastskip @@ -289,7 +283,7 @@ \smallskip \fi\fi} -\unexpanded\def\medbreak +\permanent\protected\def\medbreak {\par \ifvmode\ifdim\lastskip<\medskipamount \removelastskip @@ -297,7 +291,7 @@ \medskip \fi\fi} -\unexpanded\def\bigbreak +\permanent\protected\def\bigbreak {\par \ifvmode\ifdim\lastskip<\bigskipamount \removelastskip @@ -305,18 +299,18 @@ \bigskip \fi\fi} -\unexpanded\def\break {\penalty-\plustenthousand} % can be hmode or vmode -\unexpanded\def\nobreak {\penalty \plustenthousand} % can be hmode or vmode -\unexpanded\def\allowbreak{\penalty \zerocount} % can be hmode or vmode +\permanent\protected\def\break {\penalty-\plustenthousand} % can be hmode or vmode +\permanent\protected\def\nobreak {\penalty \plustenthousand} % can be hmode or vmode +\permanent\protected\def\allowbreak{\penalty \zerocount} % can be hmode or vmode -\unexpanded\def\goodbreak {\par\ifvmode\penalty-\plusfivehundred\relax\fi} % forces vmode -\unexpanded\def\filbreak {\par\ifvmode\vfil\penalty-\plustwohundred\vfilneg\fi} % forces vmode +\permanent\protected\def\goodbreak {\par\ifvmode\penalty-\plusfivehundred\relax\fi} % forces vmode +\permanent\protected\def\filbreak {\par\ifvmode\vfil\penalty-\plustwohundred\vfilneg\fi} % forces vmode %D Made slightly more readable: -\unexpanded\def\vglue {\afterassignment\spac_helpers_vglue_indeed\s_spac_lastskip=} -\unexpanded\def\hglue {\afterassignment\spac_helpers_hglue_indeed\s_spac_lastskip=} -\unexpanded\def\topglue{\par\ifvmode\nointerlineskip\vglue-\topskip\vglue\fi} +\permanent\protected\def\vglue {\afterassignment\spac_helpers_vglue_indeed\s_spac_lastskip=} +\permanent\protected\def\hglue {\afterassignment\spac_helpers_hglue_indeed\s_spac_lastskip=} +\permanent\protected\def\topglue{\par\ifvmode\nointerlineskip\vglue-\topskip\vglue\fi} \def\spac_helpers_vglue_indeed {\par @@ -338,9 +332,13 @@ %D We adapt plain's \type {\removelastskip} a bit: -\unexpanded\def\removelastskip % also in supp-box +\pushoverloadmode + +\permanent\overloaded\protected\def\removelastskip % also in supp-box {\ifvmode\ifzeropt\lastskip\else\vskip-\lastskip\fi\fi} +\popoverloadmode + % The whitespace handler. We could cache settings but normally there are not % that many in a set. @@ -353,8 +351,31 @@ %def\v_spac_whitespace_current{\zeropoint} \let\v_spac_whitespace_current\v!none -\unexpanded\def\setupwhitespace - {\doifelsenextoptionalcs\spac_whitespace_setup_yes\spac_whitespace_setup_nop} +% \permanent\tolerant\protected\def\setupwhitespace[#1]% +% {\ifarguments +% \spac_whitespace_setup_nop +% \or +% \spac_whitespace_setup_yes{#1}% +% \fi} +% +% \def\spac_whitespace_setup_yes#1% +% {\edef\m_spac_whitespace_asked{#1}% +% \ifempty\m_spac_whitespace_asked +% \spac_whitespace_setup_nop +% \else +% \let\v_spac_whitespace_current\m_spac_whitespace_asked +% \spac_whitespace_setup +% \fi} + +\permanent\tolerant\protected\def\setupwhitespace[#1]% + {\ifarguments + \spac_whitespace_setup_nop + \orelse\iftok{#1}\emptytoks + \spac_whitespace_setup_nop + \else + \edef\v_spac_whitespace_current{#1}% + \spac_whitespace_setup + \fi} \def\spac_whitespace_setup_nop {\ifx\v_spac_whitespace_current\v!none\else @@ -363,15 +384,6 @@ \let\synchronizewhitespace\spac_whitespace_setup_nop -\def\spac_whitespace_setup_yes[#1]% - {\edef\m_spac_whitespace_asked{#1}% - \ifempty\m_spac_whitespace_asked - \spac_whitespace_setup_nop - \else - \let\v_spac_whitespace_current\m_spac_whitespace_asked - \spac_whitespace_setup - \fi} - \def\spac_whitespace_setup % quick test for no list {\ifcsname\??whitespacemethod\v_spac_whitespace_current\endcsname \lastnamedcs @@ -407,7 +419,7 @@ \fi \fi} -\unexpanded\def\installwhitespacemethod#1#2% +\permanent\protected\def\installwhitespacemethod#1#2% {\setvalue{\??whitespacemethod#1}{#2}} \installwhitespacemethod \v!fix {} @@ -431,7 +443,7 @@ \s_spac_whitespace_parskip#1\fi \relax} -\unexpanded\def\forgetparskip +\permanent\protected\def\forgetparskip {\s_spac_whitespace_parskip\zeropoint \parskip\zeropoint \let\v_spac_whitespace_current\v!none} @@ -445,8 +457,8 @@ % \def\spac_whitespace_setup_method#1% % {\csname\??whitespacemethod\ifcsname\??whitespacemethod#1\endcsname#1\else\s!unknown\endcsname\relax} -\unexpanded\def\nowhitespace{\directcheckedvspacing\v!nowhite} % {\vspacing[\v!nowhite]} -\unexpanded\def\whitespace {\directcheckedvspacing\v!white} % {\vspacing[\v!white]} +\permanent\protected\def\nowhitespace{\directcheckedvspacing\v!nowhite} % {\vspacing[\v!nowhite]} +\permanent\protected\def\whitespace {\directcheckedvspacing\v!white} % {\vspacing[\v!white]} \setupwhitespace [\v!none] @@ -458,10 +470,7 @@ \newconditional\c_spac_packed_blank \settrue\c_spac_packed_blank \newcount \c_spac_packed_level -\unexpanded\def\startpacked - {\dosingleempty\spac_packed_start} - -\def\spac_packed_start[#1]% nesting afvangen +\permanent\tolerant\protected\def\startpacked[#1]% {\global\advance\c_spac_packed_level\plusone \par \ifnum\c_spac_packed_level=\plusone \ifvmode @@ -472,18 +481,18 @@ \setupwhitespace[\v!none]% or \forgetparskip \fi \fi} -\unexpanded\def\stoppacked +\permanent\protected\def\stoppacked {\par \ifnum\c_spac_packed_level=\plusone \ifvmode \endgroup \fi \fi \global\advance\c_spac_packed_level\minusone} -\unexpanded\def\startunpacked +\permanent\protected\def\startunpacked {\directdefaultvspacing % \blank \begingroup} -\unexpanded\def\stopunpacked +\permanent\protected\def\stopunpacked {\endgroup \directdefaultvspacing}% \blank} @@ -500,8 +509,8 @@ \installtextracker {linecorrection.boxes} - {\let\spac_lines_vbox\ruledvbox} - {\let\spac_lines_vbox\vbox} + {\letfrozen\let\spac_lines_vbox\ruledvbox} + {\letfrozen\let\spac_lines_vbox\vbox} \let\v_spac_lines_around_action_set\relax \let\m_spac_lines_around \empty @@ -517,20 +526,14 @@ \ifcsname\??linesaround\m_spac_lines_around\endcsname\m_spac_lines_around\else\s!unknown\fi \endcsname} -\unexpanded\def\startlinecorrection - {\endgraf - \begingroup - \setconstant\c_spac_lines_correction_mode\plusone - \dosingleempty\spac_lines_start_correction} +\permanent\tolerant\protected\def\startlinecorrection [#1]{\spac_lines_start_correction\plusone{#1}} +\permanent\tolerant\protected\def\startlocallinecorrection[#1]{\spac_lines_start_correction\plustwo{#1}} -\unexpanded\def\startlocallinecorrection +\protected\def\spac_lines_start_correction#1#2% {\endgraf \begingroup - \setconstant\c_spac_lines_correction_mode\plustwo - \dosingleempty\spac_lines_start_correction} - -\unexpanded\def\spac_lines_start_correction[#1]% - {\edef\m_spac_lines_around{#1}% + \setconstant\c_spac_lines_correction_mode#1% + \edef\m_spac_lines_around{#2}% \spac_lines_action_around \d_spac_prevdepth\prevdepth \spac_lines_initialize_corrections @@ -548,7 +551,7 @@ \fi \ignorespaces} -\unexpanded\def\spac_lines_stop_correction +\protected\def\spac_lines_stop_correction {\removeunwantedspaces \egroup \ifgridsnapping @@ -558,14 +561,14 @@ \fi \endgroup} -\unexpanded\def\spac_lines_stop_correction_ongrid +\protected\def\spac_lines_stop_correction_ongrid {\directcheckedvspacing\v!white % \blank[\v!white]% \spac_lines_action_around \snaptogrid\hpack{\box\scratchbox}% \directcheckedvspacing\v!white \spac_lines_action_around} -\unexpanded\def\spac_lines_stop_correction_normal +\protected\def\spac_lines_stop_correction_normal {\directcheckedvspacing\v!nowhite % \blank[\v!nowhite]% \ifdim\parskip>\zeropoint % too fuzzy otherwise @@ -616,16 +619,16 @@ % todo: -\unexpanded\def\correctwhitespace +\permanent\protected\def\correctwhitespace {\dowithnextboxcs\correctwhitespacefinish\vbox} -\unexpanded\def\correctwhitespacefinish +\permanent\protected\def\correctwhitespacefinish {\startbaselinecorrection \flushnextbox \stopbaselinecorrection} -\unexpanded\def\verticalstrut {\vpack{\hsize\zeropoint\forgetall\strut}} -\unexpanded\def\horizontalstrut{\hpack {\strut}} +\permanent\protected\def\verticalstrut {\vpack{\hsize\zeropoint\forgetall\strut}} +\permanent\protected\def\horizontalstrut{\hpack {\strut}} %D Here follow some presets related to interline spacing and therefore also struts. %D The values 2.8, 0.07, 0.72 and 0.28 originate in \INRSTEX, a package that we used @@ -700,19 +703,19 @@ \def\normalizedbodyfontsize{12pt} \fi -\unexpanded\def\topskipcorrection +\permanent\protected\def\topskipcorrection {\simpletopskipcorrection \vskip-\struttotal \verticalstrut} -\unexpanded\def\simpletopskipcorrection +\permanent\protected\def\simpletopskipcorrection {\ifdim\topskip>\openstrutheight % == \vskip\topskipgap \vskip\topskip \vskip-\openstrutheight \fi} -\unexpanded\def\settopskip % the extra test is needed for the lbr family +\permanent\protected\def\settopskip % the extra test is needed for the lbr family {\topskip \ifgridsnapping \zeropoint @@ -735,24 +738,24 @@ \fi \fi} -\unexpanded\def\setmaxdepth +\protected\def\setmaxdepth {\maxdepth\systemmaxdepthfactor\globalbodyfontsize} \newskip \usedbaselineskip % These used to be \normal... but that isn't pretty \newskip \usedlineskip % in the token interface, so thes few now have new \newdimen\usedlineskiplimit % names. They are public but not really user commands. -\unexpanded\def\normalbaselines +\permanent\protected\def\normalbaselines {\baselineskip \usedbaselineskip \lineskip \usedlineskip \lineskiplimit\usedlineskiplimit} -\unexpanded\def\flexiblebaselines +\permanent\protected\def\flexiblebaselines {\baselineskip \usedbaselineskip \lineskip 1\usedlineskip \s!plus 1\s!fill \lineskiplimit\usedlineskiplimit} -\unexpanded\def\setnormalbaselines +\permanent\protected\def\setnormalbaselines % used in overload {\ifdim\normallineheight>\zeropoint \lineheight\normallineheight \fi @@ -779,7 +782,7 @@ \usedlineskiplimit\zeropoint\relax \normalbaselines} -\unexpanded\def\spacing#1% vertical +\permanent\protected\def\spacing#1% vertical {\ifgridsnapping \let\spacingfactor\plusone \else @@ -790,10 +793,10 @@ \setnormalbaselines \setstrut} -% \unexpanded\def\forgetverticalstretch % \forgetspacing +% \protected\def\forgetverticalstretch % \forgetspacing % {\spacing\plusone} -\unexpanded\def\forgetverticalstretch +\permanent\protected\def\forgetverticalstretch {\let\spacingfactor \plusone \let\systemtopskipfactor \topskipfactor \let\systemmaxdepthfactor\maxdepthfactor @@ -812,8 +815,8 @@ \let\restoreinterlinespace\relax -\unexpanded\def\saveinterlinespace - {\unexpanded\edef\restoreinterlinespace +\permanent\protected\def\saveinterlinespace + {\protected\edef\restoreinterlinespace {\lineheight \the\lineheight \openstrutheight \the\openstrutheight \openstrutdepth \the\openstrutdepth @@ -844,7 +847,7 @@ \def\strut{\relax\ifmmode\copy\else\unhcopy\fi\strutbox} -% \unexpanded\def\strut +% \protected\def\strut % {\relax % \ifmmode\copy\else\dontleavehmode\unhcopy\fi\strutbox} @@ -852,17 +855,17 @@ %D The double \type {\hbox} construction enables us to backtrack boxes. -\let\strutht\undefined \newdimen\strutht -\let\strutdp\undefined \newdimen\strutdp +\overloaded\let\strutht\undefined \newdimen\strutht +\overloaded\let\strutdp\undefined \newdimen\strutdp -\unexpanded\def\setstrut +\permanent\protected\def\setstrut {\ifgridsnapping \setstrutgridyes \else \setstrutgridnop \fi} -\unexpanded\def\setstrutgridyes +\permanent\protected\def\setstrutgridyes {\strutht\spacingfactor\dimexpr \ifdim\minimumstrutheight>\zeropoint \minimumstrutheight @@ -879,7 +882,7 @@ \relax \dosetstrut} -\unexpanded\def\setstrutgridnop +\permanent\protected\def\setstrutgridnop {\strutht\spacingfactor\dimexpr \ifdim\minimumstrutheight>\zeropoint \minimumstrutheight @@ -896,30 +899,30 @@ \relax \dosetstrut} -\unexpanded\def\setcharstrut#1% +\permanent\protected\def\setcharstrut#1% {\setbox\strutbox\hbox{#1}% no \hpack, in case we have smallcaps \strutht\ht\strutbox \strutdp\dp\strutbox \dosetstrut} -\unexpanded\def\settightstrut +\permanent\protected\def\settightstrut {\setcharstrut{(}} -\unexpanded\def\setfontstrut +\permanent\protected\def\setfontstrut {\setcharstrut{(gplQT}} -\unexpanded\def\setcapstrut% could be M, but Q has descender +\permanent\protected\def\setcapstrut% could be M, but Q has descender {\setcharstrut{Q}} %D Handy for math (used in mathml): -\unexpanded\def\charhtstrut +\permanent\protected\def\charhtstrut {\begingroup \setcharstrut{GJY}% \vrule\s!width\zeropoint\s!depth\zeropoint\s!height\strutht \endgroup} -\unexpanded\def\chardpstrut +\permanent\protected\def\chardpstrut {\begingroup \setcharstrut{gjy}% \vrule\s!width\zeropoint\s!depth\strutdp\s!height\zeropoint @@ -930,8 +933,8 @@ %D an attribute so far have shown that it's slower because testing the attribute %D takes time too. -\unexpanded\def\dosetstrut - {\let\strut\normalstrut +\permanent\protected\def\dosetstrut + {\enforced\let\strut\normalstrut \ifabsnum\dimexpr\strutht+\strutdp-\lineheight\relax<\plustwo % compensate rounding error /- 1sp to avoid too many % 1sp baselineskips in for instance verbatim @@ -1012,18 +1015,18 @@ \ht\strutbox\strutht \dp\strutbox\strutdp} -\unexpanded\def\strut % still callbacks for \hbox{\strut} +\permanent\protected\def\strut % still callbacks for \hbox{\strut} {\relax \dontleavehmode \copy\strutbox} -% \unexpanded\def\strut % slightly faster +% \protected\def\strut % slightly faster % {\relax % \ifmmode\copy\else\dontleavehmode\unhcopy\fi\strutbox} \let\normalstrut\strut -\unexpanded\def\halfstrut +\permanent\protected\def\halfstrut {\relax \dontleavehmode \begingroup @@ -1033,7 +1036,7 @@ \box\scratchbox \endgroup} -\unexpanded\def\quarterstrut +\permanent\protected\def\quarterstrut {\relax \dontleavehmode \begingroup @@ -1043,7 +1046,7 @@ \box\scratchbox \endgroup} -\unexpanded\def\depthstrut +\permanent\protected\def\depthstrut {\relax \dontleavehmode \begingroup @@ -1052,7 +1055,7 @@ \box\scratchbox \endgroup} -\unexpanded\def\halflinestrut +\permanent\protected\def\halflinestrut {\relax \dontleavehmode \begingroup @@ -1061,7 +1064,7 @@ \box\scratchbox \endgroup} -\unexpanded\def\noheightstrut +\permanent\protected\def\noheightstrut {\relax \dontleavehmode \begingroup @@ -1084,10 +1087,7 @@ \installcorenamespace{struts} -\unexpanded\def\setupstrut - {\dosingleempty\spac_struts_setup} - -\def\spac_struts_setup[#1]% +\permanent\tolerant\protected\def\setupstrut[#1]% {\edef\m_strut{#1}% \ifcsname\??struts\m_strut\endcsname \lastnamedcs @@ -1095,7 +1095,7 @@ \setcharstrut\m_strut \fi} -\unexpanded\def\synchronizestrut#1% no [] parsing, faster for internal +\permanent\protected\def\synchronizestrut#1% no [] parsing, faster for internal {\edef\m_strut{#1}% \ifcsname\??struts\m_strut\endcsname \lastnamedcs @@ -1103,38 +1103,38 @@ \setcharstrut\m_strut \fi} -\unexpanded\def\dosynchronizestrut#1% no [] parsing, faster for internal +\permanent\protected\def\dosynchronizestrut#1% no [] parsing, faster for internal {\ifcsname\??struts#1\endcsname \lastnamedcs \else \setcharstrut{#1}% \fi} -\unexpanded\def\showstruts % adapts .. is wrong +\permanent\protected\def\showstruts % adapts .. is wrong {\c_strut_visual_mode\zerocount \setteststrut \settestcrlf} -\unexpanded\def\showcolorstruts % adapts .. is wrong +\permanent\protected\def\showcolorstruts % adapts .. is wrong {\c_strut_visual_mode\plusone \setteststrut \settestcrlf} -\unexpanded\def\setteststrut +\permanent\protected\def\setteststrut {\def\strutwidth{.8pt}% \setstrut} -\unexpanded\def\dontshowstruts +\permanent\protected\def\dontshowstruts {\unsetteststrut \settestcrlf} -\unexpanded\def\unsetteststrut +\permanent\protected\def\unsetteststrut {\let\strutwidth\zeropoint \setstrut} \def\autostrutfactor{1.1} -\unexpanded\def\setautostrut +\permanent\protected\def\setautostrut {\begingroup \setbox\scratchbox\copy\strutbox \setstrut @@ -1150,26 +1150,26 @@ \newtoks\everysetnostrut -\unexpanded\def\setnostrut +\permanent\protected\def\setnostrut {\the\everysetnostrut} \appendtoks \setbox\strutbox\copy\nostrutbox - \let\strut\empty - \let\endstrut\empty - \let\begstrut\empty + \enforced\let\strut \empty + \enforced\let\endstrut\empty + \enforced\let\begstrut\empty \to \everysetnostrut %D When enabled, sigstruts will remove themselves if nothing goes inbetween. For %D practical reasons we define some boundary characters here. -\unexpanded\def\leftboundary {\protrusionboundary\plusone} -\unexpanded\def\rightboundary {\protrusionboundary\plustwo} -\unexpanded\def\signalcharacter{\boundary\plusone\char\zerocount\boundary\plustwo} % not the same as strut signals +\permanent\protected\def\leftboundary {\protrusionboundary\plusone} +\permanent\protected\def\rightboundary {\protrusionboundary\plustwo} +\permanent\protected\def\signalcharacter{\boundary\plusone\char\zerocount\boundary\plustwo} % not the same as strut signals \newsignal\strutsignal \setfalse\sigstruts -\unexpanded\def\begstrut +\permanent\protected\def\begstrut {\relax\ifcase\strutht % \ignorespaces % maybe \else @@ -1198,7 +1198,7 @@ %\boundary\plusone \hskip\zeropoint} -\unexpanded\def\endstrut +\permanent\protected\def\endstrut {\relax\ifhmode \ifcase\strutht % \removeunwantedspaces % maybe @@ -1251,13 +1251,13 @@ % % so: -\unexpanded\def\pseudostrut +\permanent\protected\def\pseudostrut {\noindent} % better: \dontleavehmode \let\pseudobegstrut\pseudostrut \let\pseudoendstrut\removeunwantedspaces -\unexpanded\def\resetteststrut +\permanent\protected\def\resetteststrut {\def\strutwidth{\zeropoint}% no let \setstrut} @@ -1284,17 +1284,21 @@ %D assignment, and |<|don't ask me why|>| this assignment gives troubles in for %D instance the visual debugger. -\unexpanded\def\offinterlineskip +\pushoverloadmode + +\overloaded\permanent\protected\def\offinterlineskip {\baselineskip-\thousandpoint \lineskip \zeropoint \lineskiplimit\maxdimen % We also need this here now; thanks to taco for figuring that out! \def\minimumlinedistance{\zeropoint}} -\unexpanded\def\nointerlineskip +\overloaded\permanent\protected\def\nointerlineskip {\prevdepth-\thousandpoint} -\let\normaloffinterlineskip\offinterlineskip % knuth's original +\aliased\let\normaloffinterlineskip\offinterlineskip % knuth's original + +\popoverloadmode %D This is tricky. The prevdepth value is still set to the last one even if there is %D nothing on the page. The same is true for prevgraf, which doesn't resemble the @@ -1312,19 +1316,19 @@ \let\getnofpreviouslines\!!zerocount \fi -\unexpanded\def\page_otr_synchronize_page_yes +\protected\def\page_otr_synchronize_page_yes {\aftergroup\page_otr_synchronize_page_indeed - \glet\page_otr_synchronize_page\relax} + \global\enforced\let\page_otr_synchronize_page\relax} -% \unexpanded\def\page_otr_synchronize_page_indeed +% \protected\def\page_otr_synchronize_page_indeed % {\clf_synchronizepage % \glet\page_otr_synchronize_page\page_otr_synchronize_page_yes} % % This has to become an otr method: \s!page_otr_command_synchonize_page -\unexpanded\def\page_otr_synchronize_page_indeed +\protected\def\page_otr_synchronize_page_indeed {\ifx\currentoutputroutine\s!multicolumn\else\clf_synchronizepage\fi - \glet\page_otr_synchronize_page\page_otr_synchronize_page_yes} + \global\enforced\let\page_otr_synchronize_page\page_otr_synchronize_page_yes} \let\page_otr_synchronize_page\page_otr_synchronize_page_yes @@ -1334,18 +1338,20 @@ %D My own one: -\unexpanded\def\spac_helpers_push_interlineskip_yes - {\edef\oninterlineskip +\protected\def\spac_helpers_push_interlineskip_yes + {\enforced\edef\oninterlineskip {\baselineskip \the\baselineskip \lineskip \the\lineskip \lineskiplimit\the\lineskiplimit \noexpand\edef\noexpand\minimumlinedistance{\the\dimexpr\minimumlinedistance}% - \let\noexpand\offinterlineskip\noexpand\normaloffinterlineskip}} % \noexpand not needed + \enforced\let\noexpand\offinterlineskip\noexpand\normaloffinterlineskip}} % \noexpand not needed -\unexpanded\def\spac_helpers_push_interlineskip_nop - {\let\oninterlineskip\setnormalbaselines} +\protected\def\spac_helpers_push_interlineskip_nop + {\enforced\let\oninterlineskip\setnormalbaselines} -\unexpanded\def\offinterlineskip +\pushoverloadmode + +\overloaded\permanent\protected\def\offinterlineskip {\ifdim\baselineskip>\zeropoint \spac_helpers_push_interlineskip_yes \else @@ -1353,14 +1359,16 @@ \fi \normaloffinterlineskip} -\let\oninterlineskip\relax +\permanent\let\oninterlineskip\relax + +\popoverloadmode -\unexpanded\def\resetpenalties#1% +\permanent\protected\def\resetpenalties#1% {\ifdefined#1% \frozen#1\minusone \fi} -\unexpanded\def\setpenalties#1#2#3% +\permanent\protected\def\setpenalties#1#2#3% {\ifdefined#1% space before #3 prevents lookahead problems, needed when #3=text \frozen#1\numexpr#2+\plusone\relax\space\doexpandedrecurse{\the\numexpr#2\relax}{ #3}\zerocount\relax \fi} @@ -1376,16 +1384,16 @@ \newcount\c_spac_keep_lines_together \let\restoreinterlinepenalty\relax -\unexpanded\def\spac_penalties_restore - {\glet\restoreinterlinepenalty\relax - \global\resetpenalties\interlinepenalties +\protected\def\spac_penalties_restore + {\global\enforced\let\restoreinterlinepenalty\relax + \overloaded\global\resetpenalties\interlinepenalties \global\c_spac_keep_lines_together\zerocount} -\unexpanded\def\keeplinestogether#1% +\protected\def\keeplinestogether#1% {\ifnum#1>\c_spac_keep_lines_together \global\c_spac_keep_lines_together#1% - \global\setpenalties\interlinepenalties\c_spac_keep_lines_together\plustenthousand - \glet\restoreinterlinepenalty\spac_penalties_restore + \overloaded\global\setpenalties\interlinepenalties\c_spac_keep_lines_together\plustenthousand + \global\enforced\let\restoreinterlinepenalty\spac_penalties_restore \fi} \def\defaultdisplaywidowpenalty {50} @@ -1404,7 +1412,7 @@ \def\defaultgridfinalhyphendemerits {5000} % always was so \def\defaultgridadjdemerits {10000} % always was so -\unexpanded\def\nopenalties +\permanent\protected\def\nopenalties {\frozen\widowpenalty \zerocount \frozen\clubpenalty \zerocount \frozen\brokenpenalty \zerocount @@ -1412,7 +1420,7 @@ \frozen\finalhyphendemerits \zerocount \frozen\adjdemerits \zerocount} -\unexpanded\def\setdefaultpenalties +\permanent\protected\def\setdefaultpenalties {\directsetup{\systemsetupsprefix\s!default}} \startsetups [\systemsetupsprefix\s!reset] @@ -1472,8 +1480,8 @@ \newbox\b_spac_struts_saved -\unexpanded\def\savestrut {\setbox\b_spac_struts_saved\copy\strutbox} -\unexpanded\def\savedstrut{\copy \b_spac_struts_saved} +\permanent\protected\def\savestrut {\setbox\b_spac_struts_saved\copy\strutbox} +\permanent\protected\def\savedstrut{\copy \b_spac_struts_saved} %D Good old blank redone: @@ -1499,8 +1507,8 @@ \newdimen \globalbodyfontstrutheight \newdimen \globalbodyfontstrutdepth -\def\snappedvboxattribute{\ifgridsnapping attr\snapvboxattribute\c_attr_snapmethod\fi} -\def\setlocalgridsnapping{\ifgridsnapping \c_attr_snapvbox \c_attr_snapmethod\fi} +\permanent\def\snappedvboxattribute{\ifgridsnapping attr\snapvboxattribute\c_attr_snapmethod\fi} +\permanent\def\setlocalgridsnapping{\ifgridsnapping \c_attr_snapvbox \c_attr_snapmethod\fi} \def\spac_grids_set_local_snapping#1% {\ifgridsnapping @@ -1516,7 +1524,7 @@ \lastnamedcs\else#1% \fi}} -\unexpanded\def\installsnapvalues#1#2% +\permanent\protected\def\installsnapvalues#1#2% {\let\m_spac_snapper\empty \rawprocesscommacommand[#2]\spac_grids_expand_snapper \edef\currentsnapper{#1:\m_spac_snapper}% @@ -1529,9 +1537,9 @@ \setevalue{\??gridsnappers#1}{\c_attr_snapmethod\the\scratchcounter\relax}% \letvalue{\??gridsnappersets#1}\m_spac_snapper} -\def\theexpandedsnapperset#1{\begincsname\??gridsnappersets#1\endcsname} % only for manuals +\permanent\def\theexpandedsnapperset#1{\begincsname\??gridsnappersets#1\endcsname} % only for manuals -\unexpanded\def\usegridparameter#1% no checking here +\permanent\protected\def\usegridparameter#1% no checking here {\edef\m_spac_grid_asked{#1\c!grid}% \ifempty\m_spac_grid_asked \c_attr_snapvbox\attributeunsetvalue @@ -1540,10 +1548,7 @@ \c_attr_snapvbox\c_attr_snapmethod \fi} -\unexpanded\def\definegridsnapping - {\dodoubleargument\spac_grids_define} - -\def\spac_grids_define[#1][#2]% +\permanent\tolerant\protected\def\definegridsnapping[#1]#*[#2]% {\installsnapvalues{#1}{#2}} \edef\spac_grids_snap_value_reset @@ -1637,12 +1642,12 @@ \definegridsnapping[\v!math:-\v!line] [\v!math,-\v!line,\v!split] \definegridsnapping[\v!math:-\v!halfline][\v!math,-\v!halfline,\v!split] -\unexpanded\def\synchronizelocallinespecs +\permanent\protected\def\synchronizelocallinespecs {\bodyfontlineheight \normallineheight \bodyfontstrutheight\strutht \bodyfontstrutdepth \strutdp} -\unexpanded\def\synchronizegloballinespecs +\permanent\protected\def\synchronizegloballinespecs {\global\globalbodyfontlineheight \normallineheight \global\globalbodyfontstrutheight\strutht \global\globalbodyfontstrutdepth \strutdp} @@ -1658,7 +1663,7 @@ %D We still have to synchronize these: -\unexpanded\def\synchronizeskipamounts +\permanent\protected\def\synchronizeskipamounts {\bigskipamount \skipfactor\baselineskip \s!plus\skipgluefactor\baselineskip @@ -1669,30 +1674,20 @@ %D Snapping. -\newif\ifgridsnapping - -%unexpanded\def\moveongrid {\dosingleempty\spac_grids_move_on} -\unexpanded\def\snaptogrid {\dosingleempty\spac_grids_snap_to} -\unexpanded\def\placeongrid{\dosingleempty\spac_grids_place_on} +% \newif\ifgridsnapping % already defined -\unexpanded\def\startgridsnapping - {\dosingleempty\spac_grids_start_snapping} - -\unexpanded\def\spac_grids_start_snapping[#1]% +\permanent\tolerant\protected\def\startgridsnapping[#1]% {\snaptogrid[#1]\vbox\bgroup} -\unexpanded\def\stopgridsnapping +\permanent\protected\def\stopgridsnapping {\egroup} -% \def\spac_grids_move_on[#1]% -% {[obsolete]} % gone, unless we set an attribute - -\def\spac_grids_place_on[#1]% +\permanent\tolerant\protected\def\placeongrid[#1]% {\snaptogrid[#1]\vbox} % mark as done -\def\spac_grids_snap_to[#1]% list or predefined +\permanent\tolerant\protected\def\snaptogrid[#1]% list or predefined {\ifgridsnapping - \expandafter\spac_grids_snap_to_indeed + \expandafter\spac_grids_snap_to_indeed % todo: move inline \else \expandafter\gobbleoneargument \fi{#1}} @@ -1723,7 +1718,7 @@ \setsystemmode\v!grid \spac_grids_snap_value_set\askedgridmode} -\unexpanded\def\synchronizegridsnapping +\protected\def\synchronizegridsnapping {\edef\askedgridmode{\layoutparameter\c!grid}% \ifx\askedgridmode\v!no % official \spac_grids_check_nop @@ -1735,10 +1730,10 @@ \spac_grids_check_yes \fi} -\unexpanded\def\setupgridsnapping[#1]% less overhead than setuplayout (needs testing) +\permanent\protected\def\setupgridsnapping[#1]% less overhead than setuplayout (needs testing) {\setlayoutparameter\c!grid{#1}\synchronizegridsnapping} -\unexpanded\def\checkgridmethod#1% +\permanent\protected\def\checkgridmethod#1% {\edef\p_grid{#1}% \ifempty\p_grid \let\checkedgridmethod\empty @@ -1753,7 +1748,7 @@ \fi \fi} -\unexpanded\def\applygridmethod#1#2#3% content localsettings (used in head rendering) +\permanent\protected\def\applygridmethod#1#2#3% content localsettings (used in head rendering) {\checkgridmethod{#1}% \ifx\checkedgridscope\v!global \ifempty\checkedgridmethod \else @@ -1778,13 +1773,13 @@ \egroup \fi} -\unexpanded\gdef\page_layouts_calculate_overshoot +\protected\gdef\page_layouts_calculate_overshoot {\ifgridsnapping\ifcase\layoutlines \getnoflines\textheight \textovershoot\dimexpr\noflines\globalbodyfontlineheight-\textheight\relax \fi\fi} -\unexpanded\def\page_layouts_report_overshoot +\protected\def\page_layouts_report_overshoot {\page_layouts_calculate_overshoot \ifdim\textovershoot>\zeropoint \writestatus\m!layouts{gridmode,\space @@ -1809,7 +1804,7 @@ three=blue, four=gray] -\unexpanded\def\setgridtracebox#1[#2]% % maybe reverse the order +\permanent\protected\def\setgridtracebox#1[#2]% % maybe reverse the order {\setbox\nextbox#1% {\hbox {\hbox to \zeropoint @@ -1821,7 +1816,7 @@ \setnewconstant\gridboxlinenomode\plusone % 0:nothing 1:all 2:lines 3:frame 4:l/r \setnewconstant\gridboxlinemode \plusone -\unexpanded\def\gridboxvbox +\permanent\protected\def\gridboxvbox {\ifcase\gridboxlinemode \vpack \or @@ -1834,9 +1829,9 @@ \ruledvpack \fi} -\def\gridboxwidth{\ifcase\gridboxlinemode0\or.5\or.5\or0\else.5\fi\linewidth} +\permanent\def\gridboxwidth{\ifcase\gridboxlinemode0\or.5\or.5\or0\else.5\fi\linewidth} -\unexpanded\def\setgridbox#1#2#3% maybe ifgridsnapping at outer level +\permanent\protected\def\setgridbox#1#2#3% maybe ifgridsnapping at outer level {\setbox#1\gridboxvbox to #3 % given size {\forgetall \resetvisualizers @@ -1878,7 +1873,7 @@ %D Helper: -\unexpanded\def\spac_helpers_assign_skip#1#2% ook nog \v!halfline+fuzzysnap +\protected\def\spac_helpers_assign_skip#1#2% ook nog \v!halfline+fuzzysnap {\doifelse{#2}\v!line {#1\ifgridsnapping \bodyfontlineheight @@ -1921,21 +1916,20 @@ \installcorenamespace{vspacingamount} -\unexpanded\def\definevspacingamount - {\dotripleempty\spac_vspacing_define_amount} - -\def\spac_vspacing_define_amount[#1][#2][#3]% can be combined - {\ifthirdargument - \setvalue{\??vspacingamount#1}{\ifgridsnapping#3\else#2\fi}% - \orelse\ifsecondargument - \setvalue{\??vspacingamount#1}{\ifgridsnapping\lineheight\else#2\fi}% - \else +\permanent\tolerant\protected\def\definevspacingamount[#1]#*[#2]#*[#3]% can be combined + {\ifarguments + %setvalue{\??vspacingamount#1}{\lineheight}% + \or \setvalue{\??vspacingamount#1}{\lineheight}% + \or + \setvalue{\??vspacingamount#1}{\ifgridsnapping\lineheight\else#2\fi}% + \or + \setvalue{\??vspacingamount#1}{\ifgridsnapping#3\else#2\fi}% \fi \clf_vspacingsetamount{#1}} \def\spac_vspacing_no_topskip % use grouped - {\c_attr_skipcategory\plusten} + {\c_attr_skipcategory\pluseleven} % \installcorenamespace{vspacingamountnormal} % \installcorenamespace{vspacingamountgrid} @@ -1949,13 +1943,10 @@ % \csname g>#1\endcsname{#3}% % \clf_vspacingsetamount{#1}} -\unexpanded\def\definevspacing - {\dodoubleempty\spac_vspacing_define} - -\def\spac_vspacing_define[#1][#2]% +\permanent\tolerant\protected\def\definevspacing[#1]#*[#2]% {\clf_vspacingdefine{#1}{#2}} -%D The injector code (generated at the \LUA\ end): +%D The injector code (generated at the \LUA\ end). This will go away! \newtoks\everybeforeblankhandling \newtoks\everyafterblankhandling @@ -1985,34 +1976,34 @@ \relax \to \everyafterblankhandling -\unexpanded\def\setblankpacked +\permanent\protected\def\setblankpacked {\settrue\c_space_ignore_parskip} -\unexpanded\def\setblankcategory#1% +\permanent\protected\def\setblankcategory#1% {\settrue\c_space_vspacing_done \c_attr_skipcategory#1\relax} -\unexpanded\def\setblankorder#1% +\permanent\protected\def\setblankorder#1% {\c_attr_skiporder#1\relax} -\unexpanded\def\fixedblankskip +\permanent\protected\def\fixedblankskip {\settrue\c_space_vspacing_fixed} -\unexpanded\def\flexibleblankskip +\permanent\protected\def\flexibleblankskip {\setfalse\c_space_vspacing_fixed} -% \unexpanded\def\addblankskip#1#2#3% +% \protected\def\addblankskip#1#2#3% % {\settrue\c_space_vspacing_done % \advance\s_spac_vspacing_temp#1\dimexpr\ifgridsnapping#3\else#2\fi\relax\relax} -\unexpanded\def\setblankpenalty#1% +\permanent\protected\def\setblankpenalty#1% {\flushblankhandling \settrue\c_space_vspacing_done \c_attr_skipcategory\plusthree \c_attr_skippenalty #1\relax \flushblankhandling} -\unexpanded\def\startblankhandling % move this to \vspacing +\permanent\protected\def\startblankhandling % move this to \vspacing {\par \ifvmode \expandafter\dostartblankhandling @@ -2020,16 +2011,16 @@ \expandafter\nostartblankhandling \fi} -\unexpanded\def\nostartblankhandling#1\stopblankhandling +\permanent\protected\def\nostartblankhandling#1\stopblankhandling {} -\def\dostartblankhandling +\permanent\def\dostartblankhandling {\begingroup \setfalse\c_space_vspacing_done \setfalse\c_space_ignore_parskip \the\everybeforeblankhandling} -\unexpanded\def\stopblankhandling +\permanent\protected\def\stopblankhandling {\the\everyafterblankhandling \ifconditional\c_space_vspacing_done \vskip\s_spac_vspacing_temp @@ -2040,30 +2031,37 @@ \endgroup \fi} -\unexpanded\def\flushblankhandling +\permanent\protected\def\flushblankhandling {\the\everyafterblankhandling \ifconditional\c_space_vspacing_done \vskip\s_spac_vspacing_temp + \setfalse\c_space_vspacing_done \fi - \setfalse\c_space_vspacing_done \the\everybeforeblankhandling} -\unexpanded\def\addpredefinedblankskip#1#2% +\permanent\protected\def\addpredefinedblankskip#1#2% {\settrue\c_space_vspacing_done \advance\s_spac_vspacing_temp#1\dimexpr\csname\??vspacingamount#2\endcsname\relax} -% \unexpanded\def\addpredefinedblankskip#1#2% +% \protected\def\addpredefinedblankskip#1#2% % {\settrue\c_space_vspacing_done % \advance\s_spac_vspacing_temp#1\dimexpr\the\csname\ifgridsnapping g\else n\fi>#2\endcsname\relax} -\unexpanded\def\addaskedblankskip#1#2% +\permanent\protected\def\addaskedblankskip#1#2% {\settrue\c_space_vspacing_done \advance\s_spac_vspacing_temp#1\dimexpr#2\relax} % The main spacer: -\unexpanded\def\vspacing - {\doifelsenextoptionalcs\spac_vspacing_yes\spac_vspacing_nop} +% \protected\def\vspacing +% {\doifelsenextoptionalcs\spac_vspacing_yes\spac_vspacing_nop} + +\tolerant\protected\def\vspacing[#1]% + {\ifarguments + \spac_vspacing_yes[\currentvspacing]% in the new mechanism no [] needed + \else + \spac_vspacing_yes[#1]% in the new mechanism no [] needed + \fi} \def\spac_vspacing_yes {\ifinpagebody % somewhat weird @@ -2097,7 +2095,7 @@ \installcorenamespace{vspacing} -\unexpanded\def\directvspacing#1% +\protected\def\directvspacing#1% {\par \ifchkdim#1\or \spac_vspacing_dim_preset{\the\dimexpr#1}% @@ -2131,14 +2129,14 @@ \directvspacing\currentvspacing \fi} -\def\directdefaultvspacing +\permanent\protected\def\directdefaultvspacing {\ifinpagebody % somewhat weird \directvspacing\currentvspacing \orelse\ifconditional\c_spac_packed_blank \directvspacing\currentvspacing \fi} -\def\directcheckedvspacing +\permanent\protected\def\directcheckedvspacing {\ifinpagebody % somewhat weird \expandafter\directvspacing \orelse\ifconditional\c_spac_packed_blank @@ -2147,7 +2145,7 @@ \expandafter\gobbleoneargument \fi} -\unexpanded\def\useblankparameter#1% faster local variant +\permanent\protected\def\useblankparameter#1% faster local variant {\edef\m_spac_blank_asked{#1\c!blank}% \ifempty\m_spac_blank_asked\else \directvspacing\m_spac_blank_asked @@ -2155,7 +2153,7 @@ %D Handy (and faster): -\unexpanded\def\directvpenalty#1% +\permanent\protected\def\directvpenalty#1% {\begingroup \c_attr_skipcategory\plusthree \c_attr_skippenalty #1\relax @@ -2163,7 +2161,7 @@ \vskip\zeropoint \endgroup} -\unexpanded\def\directvskip#1% +\permanent\protected\def\directvskip#1% {\begingroup \c_attr_skipcategory\plusone \c_attr_skippenalty \attributeunsetvalue @@ -2173,27 +2171,23 @@ %D These depend on bigskipamount cum suis so we'd better sync them: -\unexpanded\def\setupvspacing - {\doifelsenextoptionalcs\setupvspacing_yes\setupvspacing_nop} - \let\currentvspacing\s!default % hm, default, standard ... -\def\setupvspacing_yes[#1]% - {\edef\currentvspacing{#1}% - \spac_whitespace_setup_nop % yes or no, was forgotten - } +\permanent\tolerant\protected\def\setupvspacing[#1]% + {\ifarguments\else + \edef\currentvspacing{#1}% + \fi + \synchronizevspacing} -\def\setupvspacing_nop +\permanent\protected\def\synchronizevspacing {\ifempty\currentvspacing % mistakenly had an \else \let\currentvspacing\s!default \fi \spac_whitespace_setup_nop} -\unexpanded\def\restorestandardblank % or default ? +\permanent\protected\def\restorestandardblank % or default ? {\let\currentvspacing\v!standard} -\let\synchronizevspacing\setupvspacing_nop - %D The \type {category:4} is default. \definevspacingamount[\v!none] [\zeropoint] [\zeropoint] @@ -2210,7 +2204,7 @@ \definevspacingamount[\v!standard] [.75\openlineheight] [.75\openlineheight] % mkii compatible -\def\bodyfontwhitespace +\permanent\def\bodyfontwhitespace {\dimexpr \ifzeropt\parskip \zeropoint @@ -2274,7 +2268,7 @@ % 2019-05-31 : upgraded a bit to more distinctive samepage-[level]-[0|1|2] names -\unexpanded\def\spac_vspacing_define_same_step#1#2% alternatively we could have samepage-n-m +\protected\def\spac_vspacing_define_same_step#1#2% alternatively we could have samepage-n-m {\begingroup \scratchcounterone\numexpr\plusthree*#1+#2\relax \scratchcountertwo\numexpr\c_spac_vspacing_special_base+\c_spac_vspacing_special_step*\scratchcounterone\relax @@ -2282,7 +2276,7 @@ \normalexpanded{\definevspacing[\v!samepage-\number#1-\number#2][penalty:\the\scratchcountertwo]}% \endgroup} -\unexpanded\def\spac_vspacing_define_same_page#1% +\protected\def\spac_vspacing_define_same_page#1% {\dostepwiserecurse\c_spac_vspacing_special_done{#1}\plusone {\spac_vspacing_define_same_step\recurselevel\zerocount % before \spac_vspacing_define_same_step\recurselevel\plusone % after @@ -2311,12 +2305,12 @@ % We keep this one as reference % -% \unexpanded\def\inhibitblank +% \protected\def\inhibitblank % {\vspacing[\v!disable]} % % but use the following more efficient variant instead: -\unexpanded\def\inhibitblank +\permanent\protected\def\inhibitblank {\ifvmode \begingroup \c_attr_skipcategory\plusfive @@ -2337,30 +2331,27 @@ \installcorenamespace{vspace} -\unexpanded\def\definevspace - {\dotripleempty\spac_vspace_define} - -\def\spac_vspace_define[#1][#2][#3]% - {\ifthirdargument - \setvalue{\??vspace#1:#2}{#3}% - \else +\permanent\tolerant\protected\def\definevspace[#1]#*[#2]#*[#3]% + {\ifarguments + \or + \letvalue{\??vspace:#1}\empty % or undefined? + \or \setvalue{\??vspace:#1}{#2}% + \or + \setvalue{\??vspace#1:#2}{#3}% \fi} \letvalue{\??vspace:\s!unknown}\zeropoint -\unexpanded\def\vspace - {\dodoubleempty\spac_vspace_inject} - \def\spac_vspace_unknown {\csname\??vspace:\s!unknown\endcsname} -\def\spac_vspace_inject[#1][#2]% use \lastnamedcs +\permanent\tolerant\protected\def\vspace[#1]#*[#2]% {\par \ifvmode \removelastskip \vskip - \ifsecondargument + \ifparameter#2\or \ifcsname\??vspace#1:#2\endcsname \lastnamedcs \orelse\ifcsname\??vspace:#2\endcsname @@ -2368,7 +2359,7 @@ \else \spac_vspace_unknown \fi - \orelse\iffirstargument + \orelse\ifparameter#1\or \ifcsname\??vspace:#1\endcsname \lastnamedcs \else @@ -2395,26 +2386,25 @@ \c!location=\v!left, \c!n=\zerocount] -\unexpanded\def\starthanging - {\dontleavehmode\bgroup - \dosingleempty\spac_hanging_start} - -\unexpanded\def\stophanging - {\endgraf - \egroup} - \let\m_spac_hanging_location\empty -\def\spac_hanging_start[#1]% - {\doifelseassignment{#1} - {\let\m_spac_hanging_location\empty - \setupcurrenthanging[#1]}% - {\edef\m_spac_hanging_location{#1}}% +\permanent\tolerant\protected\def\starthanging[#1]% + {\dontleavehmode\bgroup + \ifhastok={#1}% + \let\m_spac_hanging_location\empty + \setupcurrenthanging[#1]% + \else + \edef\m_spac_hanging_location{#1}% + \fi \ifempty\m_spac_hanging_location \edef\m_spac_hanging_location{\directhangingparameter\c!location}% \fi \dowithnextboxcs\spac_hanging_finish\hbox} +\permanent\protected\def\stophanging + {\endgraf + \egroup} + \def\spac_hanging_finish {\scratchdistance\directhangingparameter\c!distance\relax \ifdim\ht\nextbox>\strutht @@ -2440,7 +2430,6 @@ \fi \ignorespaces} - %D \macros %D {startfixed} %D @@ -2465,34 +2454,33 @@ \installcorenamespace{fixedalternatives} -\unexpanded\def\startfixed - {\bgroup - \dosingleempty\typo_fixed_start} +\let\stopfixed\relax -\def\typo_fixed_start - {\ifhmode +\permanent\protected\def\startfixed + {\bgroup + \ifhmode \expandafter\typo_fixed_start_h \else \expandafter\typo_fixed_start_v \fi} -\def\typo_fixed_start_h[#1]% - {\let\stopfixed\typo_fixed_stop_h +\tolerant\def\typo_fixed_start_h[#1]% + {\enforced\let\stopfixed\typo_fixed_stop_h \dowithnextbox{\typo_fixed_finish{#1}}% \vbox\bgroup %ignorespaces \setlocalhsize} -\unexpanded\def\typo_fixed_stop_h +\protected\def\typo_fixed_stop_h {%removeunwantedspaces \egroup \egroup} -\def\typo_fixed_start_v[#1]% - {\let\stopfixed\typo_fixed_stop_v +\tolerant\def\typo_fixed_start_v[#1]% + {\enforced\let\stopfixed\typo_fixed_stop_v \startbaselinecorrection} -\unexpanded\def\typo_fixed_stop_v +\protected\def\typo_fixed_stop_v {\stopbaselinecorrection \egroup} @@ -2503,7 +2491,7 @@ \letvalue{\??fixedalternatives\s!unknown}\tbox \letvalue{\??fixedalternatives\s!default}\tbox -\unexpanded\def\typo_fixed_finish#1% +\protected\def\typo_fixed_finish#1% {\expandnamespacevalue\??fixedalternatives{#1}\s!default{\box\nextbox}} % %D Forgotten already: @@ -2534,7 +2522,7 @@ %D Helper: -\unexpanded\def\checkedblank[#1]% +\permanent\protected\def\checkedblank[#1]% {\edef\p_blank{#1}% \ifempty\p_blank % ignore @@ -2550,7 +2538,7 @@ \newskip\prerolledblank -\unexpanded\def\prerollblank[#1]% +\permanent\protected\def\prerollblank[#1]% {\begingroup \edef\p_blank{#1}% \ifempty\p_blank @@ -2588,6 +2576,51 @@ % test \par % test \par -\unexpanded\def\ignoreparskip{\c_spac_vspacing_ignore_parskip\plusone} +\protected\def\ignoreparskip{\c_spac_vspacing_ignore_parskip\plusone} + +% experimental (for the moment only for hh and ws) + +%def\vspacingfromscratchtoks {\scratchdimen\dimexpr\csname\??vspacingamount\the\scratchtoks\endcsname\relax} +\def\vspacingpredefinedvalue#1{\scratchdimen\dimexpr\csname\??vspacingamount#1\endcsname\relax} +%def\vspacingfromtempstring {\scratchdimen\dimexpr\csname\??vspacingamount\tempstring\endcsname\relax} + +\let\spac_vspacing_yes_indeed_old\spac_vspacing_yes_indeed +\let\spac_vspacing_nop_indeed_old\spac_vspacing_nop_indeed +\let\directvspacing_old \directvspacing + +\def\spac_vspacing_yes_indeed_new[#1]% + {\ifmmode\else\par\ifvmode\clf_injectvspacing\ifgridsnapping\plusone\else\zerocount\fi{#1}\fi\fi} + +\def\spac_vspacing_nop_indeed_new + {\ifmmode\else\par\ifvmode\clf_injectvspacing\ifgridsnapping\plusone\else\zerocount\fi{\currentvspacing}\fi\fi} + +\protected\def\directvspacing_new#1% +%{\ifmmode\else\par\ifvmode\clf_injectvspacing\ifgridsnapping\plusone\else\zerocount\fi{#1}\fi\fi} + {\ifmmode\else\par\ifvmode\clf_injectvspacing\ifgridsnapping\plusone\else\zerocount\fi{\iftok{#1}\emptytoks\currentvspacing\else#1\fi}\fi\fi} + +\let\directvpenalty_old\directvpenalty +\let\directvskip_old \directvskip +\let\inhibitblank_old \inhibitblank + +\protected\def\directvpenalty_new#1{\ifmmode\else\par\ifvmode\clf_injectvpenalty#1\relax\fi\fi} +\protected\def\directvskip_new #1{\ifmmode\else\par\ifvmode\clf_injectvskip #1\relax\fi\fi} +\protected\def\inhibitblank_new {\ifmmode\else\par\ifvmode\clf_injectdisable \fi\fi} + +\installtexdirective + {vspacing.experimental} + {\writestatus{vspacing}{enabling experimental handler}% + \let\spac_vspacing_yes_indeed\spac_vspacing_yes_indeed_new + \let\spac_vspacing_nop_indeed\spac_vspacing_nop_indeed_new + \enforced\let\directvspacing\directvspacing_new + \enforced\let\directvpenalty\directvpenalty_new + \enforced\let\directvskip\directvskip_new + \enforced\let\inhibitblank\inhibitblank_new} + {\writestatus{vspacing}{disabling experimental handler}% + \let\spac_vspacing_yes_indeed\spac_vspacing_yes_indeed_old + \let\spac_vspacing_nop_indeed\spac_vspacing_nop_indeed_old + \enforced\let\directvspacing\directvspacing_old + \enforced\let\directvpenalty\directvpenalty_old + \enforced\let\directvskip\directvskip_old + \enforced\let\inhibitblank\inhibitblank_old} \protect \endinput diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index d3e36d330..4970622c9 100644 Binary files a/tex/context/base/mkiv/status-files.pdf and b/tex/context/base/mkiv/status-files.pdf differ diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf index e449f1238..ceb04ac24 100644 Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf differ diff --git a/tex/context/base/mkiv/strc-con.mklx b/tex/context/base/mkiv/strc-con.mklx new file mode 100644 index 000000000..ce7f60176 --- /dev/null +++ b/tex/context/base/mkiv/strc-con.mklx @@ -0,0 +1,1156 @@ +%D \module +%D [ file=strc-con, +%D version=2008.10.20, +%D title=\CONTEXT\ Structure Macros, +%D subtitle=Constructions, +%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 Structure Macros / Constructions} + +\registerctxluafile{strc-con}{} + +% todo: check why \copy .. probably mkii leftover +% +% todo: check if commands similar to lists +% todo: \strc_constructions_setup_counter\strc_constructions_setup_counter{#1} in setup ... synchronization +% +% ? : \def\showdnlisttext{\constructionparameter\c!listtext} % space in default +% +% maybe: pickup text and store in buffer ... +% +% \@@notemakeconstruction[##1]{}{##2}% +% \expandafter\endgroup\noteparameter\c!next}} +% +% todo: \currentconstructionattribute : can be a counter instead + +%D Constructions are just descriptions but a bit more abstract so that we can +%D conveniently build upon them. They are not really meant for users but module +%D writers might find them useful. We mention a couple of parameters but these are +%D only mentioned because in the shared code we map all resolvers to constructions. +%D +%D On top of constructions we build descriptions, enumerations, notes, labels and +%D maybe some day more. + +\unprotect + +%D Todo: + +\installcorenamespace{construction} + +\installcommandhandler \??construction {construction} \??construction + +\aliased\let\setupconstructions\setupconstruction + +\setupconstructions[% + %c!title=, + %c!text=, + % + %c!style=, + %c!color=, + %c!command=, + %c!align=, + % + %c!headstyle=, + %c!headcolor=, + %c!headalign=, + % + %c!titlestyle=, + %c!titlecolor=, + %c!titlecommand=, + %c!titleleft=, + %c!titleright=, + % + %c!closesymbol=, + %c!closecommand=, + % + \c!alternative=\v!left, + \c!display=\v!yes, + \c!width=7\emwidth, + \c!distance=\emwidth, + \c!stretch=.50, + \c!shrink=.25, + \c!titledistance=.5\emwidth, + %c!hang=, + %c!sample=, + \c!margin=\v!no, + \c!before=\blank, + \c!inbetween=\blank, + \c!after=\blank, + %c!indentnext=, + %c!indenting=, + % + \c!expansion=\v!no, + %c!xmlsetup=, + %s!catcodes=, +] + +%D Constructions and alike uses similar structures. In order to prevent issues +%D we freeze some states. There is some overhead in the intermediate define +%D step (as we could set them directly) but this is more flexible (and looks +%D nicer). Keep in mind that descriptions, enumeration and notations are all +%D independent and that we just remap the resolvers. + +% \defineconstruction[test][handler=description,level=1] +% \defineconstruction[test][parent][handler=description,level=3] + +\installcorenamespace{constructionmain} % frozen after definition +\installcorenamespace{constructionlevel} % frozen after definition +\installcorenamespace{constructionclass} % frozen after definition + +\let\currentconstructionmain \empty +\let\currentconstructionlevel \empty +\let\currentconstructionhandler\empty + +\settrue\c_strc_constructions_define_commands % use with care, might become a proper key + +\appendtoks + \ifx\currentconstructionparent\empty + \letvalue{\??constructionmain\currentconstruction}\currentconstruction + \definelist[\currentconstruction]% goodie + \else + \letvalue{\??constructionmain\currentconstruction}\currentconstructionparent + \definelist[\currentconstruction][\currentconstructionparent]% goodie + \fi + \instance\setevalue{\??constructionlevel\currentconstruction}{\number\constructionparameter\c!level}% + \instance\setevalue{\??constructionclass\currentconstruction}{\constructionparameter\s!handler}% +\to \everydefineconstruction + +\appendtoks + \ifconditional\c_strc_constructions_define_commands + %% \setuevalue{\e!start\currentconstruction}{\strc_constructions_start{\currentconstruction}}% + \instance\setuevalue{\e!start\currentconstruction}{\strc_constructions_start[\currentconstruction]}% + \instance\setuevalue{\e!stop \currentconstruction}{\strc_constructions_stop}% + \fi +\to \everydefineconstruction + +%D Just a basic environment (mostly for testing). We will provide a 'setup' based +%D plugin once the rest is sorted out. + +\tolerant\protected\def\strc_constructions_start[#1]#*[#2]#*[#3]% + {\begingroup + \strc_constructions_initialize{#1}% + \strc_constructions_register[#3][\c!label={\constructionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,#2]% + \csname\??constructionstarthandler\currentconstructionhandler\endcsname} + +\protected\def\strc_constructions_stop + {\csname\??constructionstophandler\currentconstructionhandler\endcsname + \endgroup} + +%D As we will build on top of the generic construction mechanism we have handlers +%D as a sort of plug in mechanism. In order to have some consistency we share +%D some namespaces. + +\installcorenamespace{constructioninitializer} +\installcorenamespace{constructionfinalizer} + +\installcorenamespace{constructionmainhandler} +\installcorenamespace{constructioncommandhandler} +\installcorenamespace{constructionstarthandler} +\installcorenamespace{constructionstophandler} + +\installcorenamespace{constructiontexthandler} +\installcorenamespace{constructionnotehandler} + +\protected\def\strc_constructions_initialize#1% class instance + {\edef\currentconstruction{#1}% + \enforced\let\currentconstructionhash\??construction + \let\currentconstructionlistentry\!!zerocount + \enforced\expandafter\let\expandafter\currentconstructionmain \csname\??constructionmain \currentconstruction\endcsname + \enforced\expandafter\let\expandafter\currentconstructionlevel \csname\??constructionlevel\currentconstruction\endcsname + \enforced\expandafter\let\expandafter\currentconstructionhandler\csname\??constructionclass\currentconstruction\endcsname + \csname\??constructioninitializer\currentconstructionhandler\endcsname} + +\protected\def\strc_constructions_finalize + {\csname\??constructionfinalizer\currentconstructionhandler\endcsname + \strc_constructions_discard} + +\newconditional\c_strc_constructions_number_state +\newconditional\c_strc_constructions_title_state + +\protected\setvalue{\??constructioninitializer\v!construction}% + {\setfalse\c_strc_constructions_number_state + \setfalse\c_strc_constructions_title_state} + +\protected\setvalue{\??constructionfinalizer\v!construction}% + {} + +%D We keep the command variant around but rather would move to the start-stop one. +%D Also, passing the title as argument has some history so we need to keep that as +%D well. + +% \ifdefined\dotagsetconstruction \else \let\dotagsetconstruction\relax \fi + +% \startuseMPgraphic{MyFrame} +% picture p ; numeric o ; path a, b ; pair c ; +% p := textext.rt("\FunnyFramed{\currentconstructiontext}") ; +% % p := textext.rt("\wrappedconstruction{\FunnyFramed{\currentconstructiontext}}") ; +% % p := textext.rt("\FunnyFramed{\wrappedconstruction{\currentconstructiontext}}") ; +% % p := textext.rt("\FunnyFramed{\wrappedcurrentconstruction}") ; +% ... +% \stopuseMPgraphic +% +% \defineoverlay[MyFrame][\useMPgraphic{MyFrame}] +% +% \defineframedtext +% [MyText] +% [frame=off, +% background=MyFrame] +% +% \defineenumeration[Theorem] +% [alternative=empty, +% before=\startMyText, +% after=\stopMyText] + +\newtoks\everyconstruction + +\permanent\protected\def\currentconstructiontext + {\begstrut + \csname\??constructiontexthandler\currentconstructionhandler\endcsname + \endstrut} + +\permanent\protected\def\currentconstructionsample + {\begstrut + \constructionparameter\c!text + \p_strc_constructions_sample + \endstrut} + +\permanent\protected\def\wrappedconstruction#1% + {\begingroup + \iftrialtypesetting \else + \currentconstructionsynchronize + \c_attr_destination\currentconstructionattribute\relax + \fi + #1% + \endgroup} + +\permanent\protected\def\wrappedcurrentconstruction + {\begingroup + \iftrialtypesetting \else + \currentconstructionsynchronize + \c_attr_destination\currentconstructionattribute\relax + \fi + \currentconstructiontext + \endgroup} + +\protected\setvalue{\??constructionmainhandler\v!construction}#1% + {\iftrialtypesetting \else + \begingroup + \currentconstructionsynchronize % reinstated + \c_attr_destination\currentconstructionattribute\relax % todo, whole text + \signalcharacter + \endgroup + \fi#1} + +\protected\setvalue{\??constructiontexthandler\v!construction}% + {\begingroup + \useconstructionstyleandcolor\c!headstyle\c!headcolor % move to \currentconstructiontext + \the\everyconstruction + \constructionparameter\c!headcommand + {\strut + \constructionparameter\c!text + \clf_savedlisttitle{\currentconstructionmain}\currentconstructionlistentry\relax}% + \endgroup} + +\protected\def\strc_constructions_stored_start + {\begingroup % brrr \endgroup elsewhere ... will be sorted out + \csname\??constructionstarthandler\currentconstructionhandler\endcsname} + +\protected\def\strc_constructions_stored_stop + {\csname\??constructionstophandler\currentconstructionhandler\endcsname} + +\newconstant\c_strc_constructions_nested_state % to be redone + +\def\resetconstructions % to be used in e.g. footnotes + {\c_strc_constructions_nested_state\zerocount} + +\protected\setvalue{\??constructioncommandhandler\v!construction}% + {\endgroup} + +\let\p_strc_constructions_sample \empty +\let\p_strc_constructions_align \empty +\let\p_strc_constructions_indenting \empty +\let\p_strc_constructions_width \empty +\let\p_strc_constructions_aligntitle \empty +\let\p_strc_constructions_renderingsetup\empty +\let\p_strc_constructions_headalign \empty +\let\p_strc_constructions_hang \empty +\let\p_strc_constructions_inbetween \empty +\let\p_strc_constructions_closesymbol \empty +\let\p_strc_constructions_distance \empty + +\newconditional\c_strc_constructions_distance_none + +\def\strc_constructions_set_width_and_distance + {\assignwidth + \p_strc_constructions_width + \constructionsheadwidth + {\unhcopy\constructionheadbox} + \constructionsheaddistance} + +\def\strc_constructions_preroll_head#content% + {\setbox\constructionheadbox\hbox + {\forgetall + \dontcomplain + \settrialtypesetting + \csname\??constructionmainhandler\currentconstructionhandler\endcsname#content}} + +\def\strc_constructions_ignore_head + {\constructionsheaddistance\zeropoint + \constructionsheadwidth \zeropoint + % we also need to make sure that no stretch creeps in (new per 2015-02-02, for Alan) + \settrue\c_strc_constructions_distance_none} + +\overloaded\let\currentconstructionhash\??construction + +\protected\setvalue{\??constructionstarthandler\v!construction}% this will be redone (reorganized) .. too much boxing + {\dostarttaggedchained\t!construction\currentconstruction\currentconstructionhash +% \dotagsetconstruction + \constructionparameter\c!before + \begingroup + \edef\currentconstructionalternative{\constructionparameter\c!alternative}% + \edef\p_strc_constructions_renderingsetup{\constructionalternativeparameter\c!renderingsetup}% + % catch fuzzyness + \ifx\p_strc_constructions_renderingsetup\empty + \letconstructionparameter\c!alternative\v!left + \let\currentconstructionalternative\v!left + \edef\p_strc_constructions_renderingsetup{\constructionalternativeparameter\c!renderingsetup}% + \else + \doifnotsetups\p_strc_constructions_renderingsetup + {\letconstructionparameter\c!alternative\v!left + \let\currentconstructionalternative\v!left + \edef\p_strc_constructions_renderingsetup{\constructionalternativeparameter\c!renderingsetup}}% + \fi + % + \doadaptleftskip{\constructionparameter\c!margin}% + \setlocalhsize % so we can use \localhsize in width assignments + \edef\p_strc_constructions_distance{\constructionalternativeparameter\c!distance}% + \edef\p_strc_constructions_width{\constructionalternativeparameter\c!width}% + \ifx\p_strc_constructions_distance\v!none + \settrue\c_strc_constructions_distance_none + \constructionsheaddistance\zeropoint + \else + \setfalse\c_strc_constructions_distance_none + \constructionsheaddistance\p_strc_constructions_distance\relax + \ifdim\constructionsheaddistance=\zeropoint + \ifx\p_strc_constructions_width\v!broad + \constructionsheaddistance\emwidth + \orelse\ifx\p_strc_constructions_width\v!line + \constructionsheaddistance\emwidth + \fi + \fi + \fi + % inefficient and not always needed, for instance not with margins so we will make checkers + % per alternative some day (especially in labels this is unwanted overhead) + % + % maybe we should have an option as i cannot oversee the consequences now + % + % \edef\p_strc_constructions_sample{\constructionparameter\c!sample}% + % \ifx\p_strc_constructions_sample\empty + % \strc_constructions_preroll_head\currentconstructiontext + % \else + % \strc_constructions_preroll_head\currentconstructiontextsample + % \fi + % \strc_constructions_set_width_and_distance + % + \strc_constructions_preroll_head\currentconstructiontext + \ifzeropt\wd\constructionheadbox + \strc_constructions_ignore_head + \else + \edef\p_strc_constructions_sample{\constructionparameter\c!sample}% + \ifx\p_strc_constructions_sample\empty + \strc_constructions_set_width_and_distance + \else + \strc_constructions_preroll_head\currentconstructionsample + \ifzeropt\wd\constructionheadbox + \strc_constructions_ignore_head + \else + \strc_constructions_set_width_and_distance + \fi + \fi + \fi + % + \dostarttagged\t!constructiontag\empty % todo + \setbox\constructionheadbox\hbox + {\forgetall + \dontcomplain + \ifx\currentconstructionalternative\v!serried % brrr, hack, will change + \csname\??constructionmainhandler\currentconstructionhandler\endcsname\currentconstructiontext + \else + \csname\??constructionmainhandler\currentconstructionhandler\endcsname{\boxedconstructionhead\currentconstructiontext}% + \fi}% + \edef\p_strc_constructions_aligntitle{\constructionparameter\c!aligntitle}% + \ifx\p_strc_constructions_aligntitle\v!no + \leftconstructionskip \leftskip + \rightconstructionskip\rightskip + \else + \ifcase\c_strc_constructions_nested_state + \leftconstructionskip \leftskip + \rightconstructionskip\rightskip + \fi + \fi + \edef\p_strc_constructions_align{\constructionparameter\c!align}% + \ifx\p_strc_constructions_align\empty \else + \setupalign[\p_strc_constructions_align]% \use... + \fi + \ifcase\c_strc_constructions_nested_state + \c_strc_constructions_nested_state\plusone + \or + \c_strc_constructions_nested_state\plustwo + \fi + \strc_constructions_close_symbol_reset + % + \edef\p_strc_constructions_headalign{\constructionparameter\c!headalign}% + % + \directsetup\p_strc_constructions_renderingsetup\relax + % moved to here 2014-07-03 + \edef\p_strc_constructions_indenting{\constructionparameter\c!indenting}% + \ifx\p_strc_constructions_indenting\empty \else + \indenting[\p_strc_constructions_indenting]% \use... + \fi + % + \dostoptagged % tag + \dostarttagged\t!constructioncontent\empty + %\freezeparagraphproperties + \updateparagraphshapes + \ignorespaces} % args not needed + +\protected\setvalue{\??constructionstophandler\v!construction}% + {\strc_constructions_close_symbol_place + \doifnot{\constructionparameter\c!display}\v!no\par + \dostoptagged % content + \dostoptagged % construction + \endgroup + \constructionparameter\c!after + \useindentnextparameter\constructionparameter + \strc_constructions_finalize +% \endgroup + \dorechecknextindentation} + +\protected\def\boxedconstructionhead#1% + {\doifelse{\constructionalternativeparameter\c!alignbottom}{\v!yes}\vbox\vtop + {\hsize\constructionsheadwidth + \edef\p_strc_constructions_headalign{\constructionparameter\c!headalign}% + \ifx\p_strc_constructions_headalign\empty \else + \setupalign[\p_strc_constructions_headalign]% \use... + \fi + #1}} + +\installcorenamespace{constructionalternative} +\installcorenamespace{constructionrenderings} + +% see lists: alternativemethods ... todo +% +% there will be a proper interface to variables + +\installcommandhandler \??constructionalternative {constructionalternative} \??constructionalternative + +\setupconstructionalternative + [%c!left=, % no inheritance + %c!right=,% no inheritance + \c!width=\constructionparameter\c!width, + \c!distance=\constructionparameter\c!distance, + \c!stretch=\constructionparameter\c!stretch, + \c!shrink=\constructionparameter\c!shrink] + +\defineconstructionalternative + [\v!left] + [%\c!width=7em, + %\c!distance=1em, + \c!renderingsetup=\??constructionrenderings:\v!left] + +\defineconstructionalternative + [\v!right] + [%\c!width=7em, + %\c!distance=1em, + \c!renderingsetup=\??constructionrenderings:\v!right] + +\defineconstructionalternative + [\v!inmargin] + [\c!renderingsetup=\??constructionrenderings:\v!inmargin] + +\defineconstructionalternative + [\v!inleft] + [\c!renderingsetup=\??constructionrenderings:\v!inleft] + +\defineconstructionalternative + [\v!inright] + [\c!renderingsetup=\??constructionrenderings:\v!inright] + +\defineconstructionalternative + [\v!margin] + [\c!renderingsetup=\??constructionrenderings:\v!margin] + +\defineconstructionalternative + [\v!leftmargin] + [\c!renderingsetup=\??constructionrenderings:\v!leftmargin] + +\defineconstructionalternative + [\v!rightmargin] + [\c!renderingsetup=\??constructionrenderings:\v!rightmargin] + +\defineconstructionalternative + [\v!innermargin] + [\c!renderingsetup=\??constructionrenderings:\v!innermargin] + +\defineconstructionalternative + [\v!outermargin] + [\c!renderingsetup=\??constructionrenderings:\v!outermargin] + +\defineconstructionalternative + [\v!serried] + [\c!renderingsetup=\??constructionrenderings:\v!serried] + +\defineconstructionalternative + [\v!hanging] + [%\c!width=.75\emwidth + \c!renderingsetup=\??constructionrenderings:\v!hanging] + +\defineconstructionalternative + [\v!top] + [\c!renderingsetup=\??constructionrenderings:\v!top, + \c!width=\localhsize] + +\defineconstructionalternative + [\v!command] + [\c!renderingsetup=\??constructionrenderings:\v!command] + +\defineconstructionalternative + [\v!empty] + [\c!renderingsetup=\??constructionrenderings:\v!empty] + +\defineconstructionalternative + [\v!label] + [\c!renderingsetup=\??constructionrenderings:\v!label, + \c!width=] + +\newbox \constructionheadbox +\newskip \leftconstructionskip +\newskip \rightconstructionskip +\newdimen \constructionsheadwidth % replaces \!!widtha % TODO: proper namespace dimens +\newdimen \constructionsheaddistance % replaces \!!widthb % TODO: proper namespace dimens + +\def\strc_constructions_set_hang_box#1% messy left/rightskip + {\setbox\constructionheadbox\vtop % \vbox gaat fout in hang + {\forgetall + \dontcomplain + \hsize\constructionsheadwidth\relax + \ifx\p_strc_constructions_headalign\empty + \setupalign[#1]% use fast one + \else + \setupalign[\p_strc_constructions_headalign]% use fast one + \fi + \ifconditional\c_strc_constructions_distance_none \else + \advance\ifx#1\v!flushleft\rightskip\else\leftskip\fi\constructionsheaddistance % only difference and wrong anyway + \fi + \flushconstructionheadbox}% + \setbox\constructionheadbox\hpack{\box\constructionheadbox}% needed in case of e.g. a real big head font, see descriptions-006.tex + \ht\constructionheadbox\strutht + \dp\constructionheadbox\strutdp} + +\def\strc_constructions_set_pure_box#1% default ... better set up differently + {\setbox\constructionheadbox\vtop + {\forgetall + \dontcomplain + \hsize\constructionsheadwidth\relax + \ifx\p_strc_constructions_headalign\empty + \setupalign[#1]% use fast one + \else + \setupalign[\p_strc_constructions_headalign]% use fast one + \fi + \flushconstructionheadbox}% + \setbox\constructionheadbox\hpack{\box\constructionheadbox}% needed in case of e.g. a real big head font, see descriptions-006.tex + \ht\constructionheadbox\strutht + \dp\constructionheadbox\strutdp} + +\def\strc_constructions_set_hang#1% + {\ifx\p_strc_constructions_hang\empty + % nothing + \orelse\ifx\p_strc_constructions_hang\v!fit + \scratchdimen\htdp\constructionheadbox + \getnoflines\scratchdimen + \hangafter-\noflines + \orelse\ifx\p_strc_constructions_hang\v!broad + \scratchdimen\dimexpr\htdp\constructionheadbox+.5\strutht\relax + \getnoflines\scratchdimen + \hangafter-\noflines + \else + \hangafter-\p_strc_constructions_hang + \fi + \relax + \hangindent\ifx#1\v!right-\fi\constructionsheadwidth} + +\protected\def\flushconstructionheadbox + {\ifhbox\constructionheadbox\unhbox\else\box\fi\constructionheadbox} + +% The setups. These only deal with placement of the descriptor and initializing the +% environment. The wrapping happens elsewhere. + +% todo: optimize the setups with +% +% \ifconditional\c_strc_constructions_distance_none : no need for skip +% \ifzeropt\wd\constructionheadbox : no need for box and skips + +\startsetups[\??constructionrenderings:\v!left] + \edef\p_strc_constructions_hang{\constructionparameter\c!hang}% + \doifelsesetups{\??constructionrenderings:\v!left:\p_strc_constructions_hang} { + \directsetup{\??constructionrenderings:\v!left:\p_strc_constructions_hang} + } { + \directsetup{\??constructionrenderings:\v!left:\v!hanging} + } +\stopsetups + +\startsetups[\??constructionrenderings:\v!right] + \edef\p_strc_constructions_hang{\constructionparameter\c!hang} + \doifelsesetups{\??constructionrenderings:\v!right:\p_strc_constructions_hang} { + \directsetup{\??constructionrenderings:\v!right:\p_strc_constructions_hang} + } { + \directsetup{\??constructionrenderings:\v!right:\v!hanging} + } +\stopsetups + +\startsetups[\??constructionrenderings:\v!left:\v!none] + \enforced\let\\\crlf + \noindent + \strc_constructions_set_pure_box\v!flushleft + \leftskip\dimexpr\leftconstructionskip+\constructionsheadwidth+\constructionsheaddistance\relax + \rightskip\rightconstructionskip\relax + \llap { + \hpack to \leftskip { + \hskip\leftconstructionskip + \box\constructionheadbox % was copy + \hss + } + } + \nobreak + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!left:0] + \directsetup{\??constructionrenderings:\v!left:\v!none} +\stopsetups + +\startsetups[\??constructionrenderings:\v!left:] + \directsetup{\??constructionrenderings:\v!left:\v!none} +\stopsetups + +\startsetups[\??constructionrenderings:\v!right:\v!none] + \enforced\let\\\crlf + \noindent + \leftskip\leftconstructionskip + \rightskip\dimexpr\rightconstructionskip+\constructionsheadwidth\relax + %\strc_constructions_pure_hang_box\raggedleft + \strc_constructions_set_pure_box\v!flushright + \rlap { + \hskip\dimexpr\hsize-\leftskip-\rightskip\relax + \copy\constructionheadbox + \hskip\rightconstructionskip + } + \nobreak + \advance\rightskip \constructionsheaddistance + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!right:0] + \directsetup{\??constructionrenderings:\v!right:\v!none} +\stopsetups + +\startsetups[\??constructionrenderings:\v!right:] + \directsetup{\??constructionrenderings:\v!right:\v!none} +\stopsetups + +\startsetups[\??constructionrenderings:\v!left:\v!margin]% + \enforced\let\\\crlf + \noindent + \strc_constructions_set_pure_box\v!flushleft + \llap { + \hpack to \constructionsheadwidth { + \box\constructionheadbox % was copy + \hss + } + \hskip\constructionsheaddistance + } + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!right:\v!margin]% + \enforced\let\\\crlf + \noindent + \strc_constructions_set_pure_box\v!flushright + \rlap { + \hskip\constructionsheaddistance + \hpack to \constructionsheadwidth { + \box\constructionheadbox % was copy + \hss + } + } + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!left:\v!hanging]% + \enforced\let\\\crlf + \dontcomplain + \advance\constructionsheadwidth \constructionsheaddistance + \strc_constructions_set_hang_box\v!flushleft + \strc_constructions_set_hang\v!left + \noindent + \llap { + \tpack to \zeropoint { + \box\constructionheadbox + } + } + \nobreak + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!right:\v!hanging]% + \enforced\let\\\crlf + \dontcomplain + \advance\constructionsheadwidth \constructionsheaddistance + \strc_constructions_set_hang_box\v!flushright + \strc_constructions_set_hang\v!right + \noindent + \rlap { + \hpack to \dimexpr\hsize-\leftskip-\rightskip\relax { + \hss + \tpack to \zeropoint { + \box\constructionheadbox + } + } + } + \nobreak + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!top] + % \strc_sectioning_prevent_page_break % commented per 31/5/2019 + \enforced\let\\\space + \noindent + \copy\constructionheadbox % why copy ? + \par + \nobreak + \edef\p_strc_constructions_inbetween{\constructionparameter\c!inbetween}% + \ifx\p_strc_constructions_inbetween\empty \else + \p_strc_constructions_inbetween + % shouldn't this move to after the fi? + \directcheckedvspacing\v!samepage + \fi + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +% why copy? historic reason? + +\startsetups[\??constructionrenderings:\v!margin] + \enforced\let\\\crlf + \noindent + \inmargin[\c!scope=\v!local]{\flushconstructionheadbox}% + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!leftmargin] + \enforced\let\\\crlf + \noindent + \inleft[\c!scope=\v!local]{\flushconstructionheadbox}% + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!rightmargin] + \enforced\let\\\crlf + \noindent + \inright[\c!scope=\v!local]{\flushconstructionheadbox}% + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!innermargin] + \enforced\let\\\crlf + \noindent + \ininner[\c!scope=\v!local]{\flushconstructionheadbox}% + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!outermargin] + \enforced\let\\\crlf + \noindent + \inouter[\c!scope=\v!local]{\flushconstructionheadbox}% + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!inmargin] + \directsetup{\??constructionrenderings:\v!margin} +\stopsetups + +\startsetups[\??constructionrenderings:\v!inleft] + \directsetup{\??constructionrenderings:\v!leftmargin} +\stopsetups + +\startsetups[\??constructionrenderings:\v!inright] + \directsetup{\??constructionrenderings:\v!rightmargin} +\stopsetups + +\startsetups[\??constructionrenderings:\v!serried] + % already set? + \edef\p_strc_constructions_width{\constructionparameter\c!width}% CHECK ! ! ! wrong parameter namespace + \doifelsesetups{\??constructionrenderings:\v!serried:\p_strc_constructions_width} { + \directsetup{\??constructionrenderings:\v!serried:\p_strc_constructions_width} + } { + \directsetup{\??constructionrenderings:\v!serried:\v!wide} + } +\stopsetups + +\startsetups[\??constructionrenderings:\v!serried:\v!fit] + \enforced\let\\\crlf + \noindent + \flushconstructionheadbox + \nobreak + \hskip\constructionsheaddistance\relax + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!serried:\v!broad] + \enforced\let\\\crlf + \noindent + \flushconstructionheadbox + \ifconditional\c_strc_constructions_distance_none \else + \nobreak + \hskip\constructionsheaddistance + \s!plus \constructionalternativeparameter\c!stretch\constructionsheaddistance + \s!minus\constructionalternativeparameter\c!shrink \constructionsheaddistance + \relax + \fi + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!serried:] + \directsetup{\??constructionrenderings:\v!serried:\v!broad} +\stopsetups + +\startsetups[\??constructionrenderings:\v!serried:\v!wide] + \enforced\let\\\crlf + \noindent + \hbox to \constructionsheadwidth { + \flushconstructionheadbox + \hss + } + \nobreak + \hskip\constructionsheaddistance\relax + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!hanging] + % tricky: leftskipadaption is somewhat unpredictable + \enforced\let\\\crlf + \noindent + \advance\leftskip-\leftskipadaption\relax + \ifdim\leftskipadaption=\zeropoint + \leftskipadaption1.5\emwidth\relax % just some default + \ifnum\c_strc_constructions_nested_state=\plusone + \ifdim\leftskip>\zeropoint \relax + \leftskipadaption\leftskip + \fi + \fi + \fi + \ifnum\c_strc_constructions_nested_state>\zerocount % was \ifnum\c_strc_constructions_nested_state=\plusone + \advance\leftskip\leftskipadaption % but we're already further on + \fi + \hskip-\leftskipadaption\relax + \ifhbox\constructionheadbox \unhbox\else\box\fi\constructionheadbox + \ifconditional\c_strc_constructions_distance_none \else + % we used to have just a kern, but long lines look bad then + \scratchdistance\ifdim\constructionsheaddistance=\zeropoint .75\emwidth\else\constructionsheaddistance\fi + \hskip \scratchdistance + \s!plus \constructionalternativeparameter\c!stretch\scratchdistance + \s!minus\constructionalternativeparameter\c!shrink \scratchdistance + \fi + \ifhmode + \ifx\p_strc_constructions_width\v!line + \hfill\break + \else + \allowbreak + \fi + \fi + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +%D \starttyping +%D \setupfootnotation[location=command,headcommand=\llap] +%D \stoptyping + +\startsetups[\??constructionrenderings:\v!command] + \noindent + \constructionparameter\c!headcommand{\flushconstructionheadbox} + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!empty] + \noindent + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +\startsetups[\??constructionrenderings:\v!label] + \dontleavehmode + \begingroup + \constructionparameter\c!headcommand{\flushconstructionheadbox} + \endgroup +\stopsetups + +\ifcase\contextlmtxmode \else + % just an empty check so that we can grep for contextlmtxmode in mkiv files +\fi + +% \definedescription[whatever][alternative=right:bottom] +% +% \startwhatever{just a small\\example} +% \input ward +% \stopwhatever + +\defineconstructionalternative + [\v!right:\v!bottom] + [%\c!width=7em, + %\c!distance=1em, + \c!alignbottom=\v!yes, + \c!renderingsetup=\??constructionrenderings:\v!right:\v!bottom] + +\startsetups[\??constructionrenderings:\v!right:\v!bottom] + \enforced\let\\\crlf + \noindent + \leftskip\leftconstructionskip + \rightskip\dimexpr\rightconstructionskip+\constructionsheadwidth+\constructionsheaddistance\relax + \parfillskip\zeropoint + \strc_constructions_set_pure_box\v!flushright + \directparwrapper \relax {% + \hfilll + \rlap + {\kern\constructionsheaddistance + \copy\constructionheadbox}% + }% + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +%D This next feature will get an lmtx implementation (probably by using a new generic +%D close mechanism). + +% you can use \placeclosesymbol or \qed to place a symbol at the end of a +% construction + +\installcorenamespace{constructionclosesymbol} + +\let\placeclosesymbol\donothing +\let\qed \donothing + +\def\strc_constructions_close_symbol_reset % no need for global + {\global\expandafter\settrue\csname\??constructionclosesymbol\currentconstruction\endcsname + \let\placeclosesymbol\strc_constructions_close_symbol_place + \let\qed \strc_constructions_close_symbol_place} + +\protected\def\strc_constructions_close_symbol_place + {\ifconditional\csname\??constructionclosesymbol\currentconstruction\endcsname + \global\expandafter\setfalse\csname\??constructionclosesymbol\currentconstruction\endcsname + \edef\p_strc_constructions_closesymbol{\constructionparameter\c!closesymbol}% + \ifx\p_strc_constructions_closesymbol\empty \else + \constructionparameter\c!closecommand{\p_strc_constructions_closesymbol}% hm why {} maybe because box expected + \fi + \fi} + +\newif\ifnoconstructioncaption + +%D The storage macros: + +\let\currentconstructionlistentry\!!zerocount + +\protected\def\strc_constructions_register + {\clf_doifelselisthasentry\numexpr\currentconstructionlistentry\relax + \strc_constructions_register_nop + \strc_constructions_register_yes} + +% \def\strc_constructions_register{\strc_constructions_register_yes} + +\def\strc_constructions_register_nop[#1][#2]% #1=optional user data #2=interfaced-settings + %{\writestatus{constructions}{reusing \currentconstruction: \number\currentconstructionlistentry}} + {} + +\def\strc_constructions_discard + {\iftrialtypesetting + % \writestatus{constructions}{discarding \currentconstruction: \number\currentconstructionlistentry}% + \clf_discardfromlist\currentconstructionlistentry\relax + \fi} + +\let\currentconstructionlistnumber \!!zerocount +\let\currentconstructionsynchronize\relax +\let\currentconstructionattribute \attributeunsetvalue + +\def\strc_constructions_register_yes[#1][#2]% #1=optional user data #2=interfaced-settings + {\begingroup % similar to structure so we might generalize this + \setupcurrentconstruction[#2]% % xdef's will become edef's + \xdef\currentconstructionexpansion {\constructionparameter\c!expansion}% + \xdef\currentconstructionxmlsetup {\constructionparameter\c!xmlsetup}% + \xdef\currentconstructioncatcodes {\constructionparameter\s!catcodes}% + \xdef\currentconstructionlabel {\constructionparameter\c!label}% + \xdef\currentconstructionreference {\constructionparameter\c!reference}% + \xdef\currentconstructionreferenceprefix{\constructionparameter\c!referenceprefix}% + %xdef\currentconstructionshownumber {\constructionparameter\c!number}% + \xdef\currentconstructionincrementnumber{\constructionparameter\c!incrementnumber}% + % + \ifx\currentconstructionexpansion\empty + \glet\currentconstructionexpansion\v!no + \fi + % + \ifx\currentconstructionreferenceprefix\empty + \glet\currentconstructionreferenceprefix\referenceprefix + \fi + \ifx\currentconstructionexpansion\s!xml + \xmlstartraw + \xdef\currentconstructiontitle {\constructionparameter\c!title}% + \xdef\currentconstructionbookmark{\constructionparameter\c!bookmark}% + \xdef\currentconstructionmarking {\constructionparameter\c!marking}% + \xdef\currentconstructionlist {\constructionparameter\c!list}% + \xmlstopraw + \ifx\currentconstructionlist\empty + \glet\currentconstructionlist\currentconstructiontitle + \fi + \glet\currentconstructioncoding\s!xml + \else + \ifx\currentconstructionexpansion\v!yes + \xdef\currentconstructiontitle {\constructionparameter\c!title}% + \xdef\currentconstructionbookmark{\constructionparameter\c!bookmark}% + \xdef\currentconstructionmarking {\constructionparameter\c!marking}% + \xdef\currentconstructionlist {\constructionparameter\c!list}% + \else + \xdef\currentconstructiontitle {\detokenizedconstructionparameter\c!title}% + \xdef\currentconstructionbookmark{\detokenizedconstructionparameter\c!bookmark}% + \xdef\currentconstructionmarking {\detokenizedconstructionparameter\c!marking}% + \xdef\currentconstructionlist {\detokenizedconstructionparameter\c!list}% + \iflocation \ifx\currentconstructionbookmark\empty + \begingroup + \simplifycommands + \xdef\currentconstructionbookmark{\detokenize\expandafter{\normalexpanded{\constructionparameter\c!title}}}% + \endgroup + \fi \fi + \fi + \ifx\currentconstructionlist\empty + \glet\currentconstructionlist\currentconstructiontitle + \fi + \glet\currentconstructioncoding\s!tex + \fi + % + \ifx\currentconstructiontitle\v!none % will become obsolete + \global\noconstructioncaptiontrue\global\noconstructionnumbertrue + \fi + % + \ifnoconstructioncaption % then why analyze anyway? + \endgroup + \let\currentconstructionlistnumber \relax + \let\currentconstructionsynchronize\relax + \let\currentconstructionattribute \relax + \else + \setnextinternalreferences{construction}\currentconstructionmain % plural + \relax + \scratchcounter\clf_addtolist + metadata { + kind {construction} + name {\currentconstructionmain} + % level structures.sections.currentlevel() + catcodes \catcodetable + } + references { + internal \locationcount + order \locationorder + reference {\currentconstructionreference} + prefix {\currentconstructionreferenceprefix} + % block {\currentsectionblock} + % section structures.sections.currentid(), + } + titledata { + label {\detokenize\expandafter{\currentconstructionlabel}} + title {\detokenize\expandafter{\currentconstructiontitle}} + \ifx\currentconstructionbookmark\currentconstructiontitle \else + bookmark {\detokenize\expandafter{\currentconstructionbookmark}} + \fi + \ifx\currentconstructionlist\currentconstructiontitle \else + list {\detokenize\expandafter{\currentconstructionlist}} + \fi + } + \ifconditional\c_strc_constructions_number_state + prefixdata { + prefix {\constructionparameter\c!prefix} + separatorset {\constructionparameter\c!prefixseparatorset} + conversion {\constructionparameter\c!prefixconversion} + conversionset {\constructionparameter\c!prefixconversionset} + set {\constructionparameter\c!prefixset} + segments {\constructionparameter\c!prefixsegments} + connector {\constructionparameter\c!prefixconnector} + } + numberdata { + numbers {\currentconstructionnumber} + separatorset {\constructionparameter\c!numberseparatorset} + conversion {\constructionparameter\c!numberconversion} + conversionset {\constructionparameter\c!numberconversionset} + starter {\constructionparameter\c!numberstarter} + stopper {\constructionparameter\c!numberstopper} + segments {\constructionparameter\c!numbersegments} + } + \or + % symbol + \fi + userdata {\detokenize{#1}} + \relax + % \writestatus{constructions}{registering \currentconstruction: \number\scratchcounter}% + \clf_setinternalreference + prefix {\currentconstructionreferenceprefix}% + reference {\currentconstructionreference}% + internal \locationcount + view {\interactionparameter\c!focus}% + \relax + \normalexpanded {% + \endgroup + \edef\noexpand\currentconstructionlistentry {\the\scratchcounter}% + \edef\noexpand\currentconstructionattribute {\the\lastdestinationattribute}% + \edef\noexpand\currentconstructionsynchronize{\clf_deferredenhancelist\the\scratchcounter}% + }% + \fi} + +% This is not so nice, some day I'll just store the number with the entry +% and deal with all at the Lua end, but first we need to be able to set +% macros. + +\permanent\protected\def\reinstateconstructionnumberentry#1% was xdef + {\edef\currentconstructionattribute {\clf_getinternallistreference#1}% + \edef\currentconstructionsynchronize{\clf_deferredenhancelist\number#1}} + +\permanent\protected\def\reinstatecachedconstructionnumberentry#1% was xdef | #1 = cached index can be different from real + {\edef\currentconstructionattribute {\clf_getinternalcachedlistreference#1}% destination + \edef\currentconstructionsynchronize{\clf_deferredenhancelist\number#1}} + +\installstructurelistprocessor{construction}{\usestructurelistprocessor{number+title}} + +% Helpers: + +\def\currentconstructionnumber{\constructionparameter\s!counter} + +\protected\def\strc_constructions_next_indeed #get#tag#level{\strc_counters_increment_sub{#get{#tag}\s!counter}{#level}} +\protected\def\strc_constructions_reset_indeed#get#tag#level{\strc_counters_reset_sub {#get{#tag}\s!counter}{#level}} + +\protect \endinput diff --git a/tex/context/base/mkiv/strc-con.mkvi b/tex/context/base/mkiv/strc-con.mkvi index 681e813b7..81e28f67f 100644 --- a/tex/context/base/mkiv/strc-con.mkvi +++ b/tex/context/base/mkiv/strc-con.mkvi @@ -620,7 +620,7 @@ \stopsetups \startsetups[\??constructionrenderings:\v!left:\v!none] - \let\\=\crlf + \let\\\crlf \noindent \strc_constructions_set_pure_box\v!flushleft \leftskip\dimexpr\leftconstructionskip+\constructionsheadwidth+\constructionsheaddistance\relax @@ -646,7 +646,7 @@ \stopsetups \startsetups[\??constructionrenderings:\v!right:\v!none] - \let\\=\crlf + \let\\\crlf \noindent \leftskip\leftconstructionskip \rightskip\dimexpr\rightconstructionskip+\constructionsheadwidth\relax @@ -672,7 +672,7 @@ \stopsetups \startsetups[\??constructionrenderings:\v!left:\v!margin]% - \let\\=\crlf + \let\\\crlf \noindent \strc_constructions_set_pure_box\v!flushleft \llap { @@ -687,7 +687,7 @@ \stopsetups \startsetups[\??constructionrenderings:\v!right:\v!margin]% - \let\\=\crlf + \let\\\crlf \noindent \strc_constructions_set_pure_box\v!flushright \rlap { @@ -702,7 +702,7 @@ \stopsetups \startsetups[\??constructionrenderings:\v!left:\v!hanging]% - \let\\=\crlf + \let\\\crlf \dontcomplain \advance\constructionsheadwidth \constructionsheaddistance \strc_constructions_set_hang_box\v!flushleft @@ -719,7 +719,7 @@ \stopsetups \startsetups[\??constructionrenderings:\v!right:\v!hanging]% - \let\\=\crlf + \let\\\crlf \dontcomplain \advance\constructionsheadwidth \constructionsheaddistance \strc_constructions_set_hang_box\v!flushright @@ -740,7 +740,7 @@ \startsetups[\??constructionrenderings:\v!top] % \strc_sectioning_prevent_page_break % commented per 31/5/2019 - \let\\=\space + \let\\\space \noindent \copy\constructionheadbox % why copy ? \par @@ -758,7 +758,7 @@ % why copy? historic reason? \startsetups[\??constructionrenderings:\v!margin] - \let\\=\crlf + \let\\\crlf \noindent \inmargin[\c!scope=\v!local]{\flushconstructionheadbox}% \useconstructionstyleandcolor\c!style\c!color @@ -766,7 +766,7 @@ \stopsetups \startsetups[\??constructionrenderings:\v!leftmargin] - \let\\=\crlf + \let\\\crlf \noindent \inleft[\c!scope=\v!local]{\flushconstructionheadbox}% \useconstructionstyleandcolor\c!style\c!color @@ -774,7 +774,7 @@ \stopsetups \startsetups[\??constructionrenderings:\v!rightmargin] - \let\\=\crlf + \let\\\crlf \noindent \inright[\c!scope=\v!local]{\flushconstructionheadbox}% \useconstructionstyleandcolor\c!style\c!color @@ -782,7 +782,7 @@ \stopsetups \startsetups[\??constructionrenderings:\v!innermargin] - \let\\=\crlf + \let\\\crlf \noindent \ininner[\c!scope=\v!local]{\flushconstructionheadbox}% \useconstructionstyleandcolor\c!style\c!color @@ -790,7 +790,7 @@ \stopsetups \startsetups[\??constructionrenderings:\v!outermargin] - \let\\=\crlf + \let\\\crlf \noindent \inouter[\c!scope=\v!local]{\flushconstructionheadbox}% \useconstructionstyleandcolor\c!style\c!color @@ -820,7 +820,7 @@ \stopsetups \startsetups[\??constructionrenderings:\v!serried:\v!fit] - \let\\=\crlf + \let\\\crlf \noindent \flushconstructionheadbox \nobreak @@ -830,7 +830,7 @@ \stopsetups \startsetups[\??constructionrenderings:\v!serried:\v!broad] - \let\\=\crlf + \let\\\crlf \noindent \flushconstructionheadbox \ifconditional\c_strc_constructions_distance_none \else @@ -849,7 +849,7 @@ \stopsetups \startsetups[\??constructionrenderings:\v!serried:\v!wide] - \let\\=\crlf + \let\\\crlf \noindent \hbox to \constructionsheadwidth { \flushconstructionheadbox @@ -863,7 +863,7 @@ \startsetups[\??constructionrenderings:\v!hanging] % tricky: leftskipadaption is somewhat unpredictable - \let\\=\crlf + \let\\\crlf \noindent \advance\leftskip-\leftskipadaption\relax \ifdim\leftskipadaption=\zeropoint @@ -939,7 +939,7 @@ \c!renderingsetup=\??constructionrenderings:\v!right:\v!bottom] \startsetups[\??constructionrenderings:\v!right:\v!bottom] - \let\\=\crlf + \let\\\crlf \noindent \leftskip\leftconstructionskip \rightskip\dimexpr\rightconstructionskip+\constructionsheadwidth+\constructionsheaddistance\relax diff --git a/tex/context/base/mkiv/strc-des.mklx b/tex/context/base/mkiv/strc-des.mklx new file mode 100644 index 000000000..9bdb0e6ea --- /dev/null +++ b/tex/context/base/mkiv/strc-des.mklx @@ -0,0 +1,194 @@ +%D \module +%D [ file=strc-des, +%D version=2008.10.20, +%D title=\CONTEXT\ Structure Macros, +%D subtitle=Descriptions, +%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 Structure Macros / Descriptions} + +\unprotect + +\installcorenamespace{description} + +\installcommandhandler \??description {description} \??description + +\aliased\let\setupdescriptions\setupdescription + +% \setupdescription % check with old +% [\c!alternative=\descriptionparameter\c!location, +% \c!location=\v!left] + +\setupdescription % check with old + [\c!alternative=\v!left, + \c!headstyle=\v!bold, + \c!titlestyle=\v!bold, + %\c!style=, + %\c!color=, + %\c!headcolor=, + %\c!titlecolor=, + \c!width=7\emwidth, + \c!distance=\emwidth, + \c!titledistance=.5\emwidth, + %\c!hang=, + %\c!sample=, + %\c!align=, + %\c!headalign=, + \c!margin=\v!no, + \c!before=\blank, + \c!inbetween=\blank, + \c!after=\blank, + \c!indentnext=\v!yes, + \c!indenting=\v!never, + \c!titleleft=(, + \c!titleright=), + %\c!closesymbol=, + \c!closecommand=\wordright, + \c!display=\v!yes, + %\c!command=, + \c!titlecommand=, + \c!expansion=\v!no, + %\c!xmlsetup=, + %\s!catcodes=, + \c!title=\v!yes, + %\c!text=, + ] + +\appendtoks + \ifx\currentdescriptionparent\empty + \defineconstruction[\currentdescription][\currentdescriptionparent][\s!handler=\v!description,\c!level=1]% + \else + \defineconstruction[\currentdescription][\s!handler=\v!description,\c!level=1]% + \fi + % We can combine these but in tracing (or errors) using a different caller is nicer. + \instance\setuevalue {\currentdescription}{\strc_descriptions_command[\currentdescription]}% + \instance\setuevalue{\e!start\currentdescription}{\strc_descriptions_start [\currentdescription]}% + \instance\setuevalue{\e!stop \currentdescription}{\strc_descriptions_stop}% +\to \everydefinedescription + +\let\p_strc_constructions_title \empty + +\protected\setvalue{\??constructioninitializer\v!description}% + {\let \currentdescription \currentconstruction + \enforced\let\constructionparameter \descriptionparameter + \enforced\let\constructionnamespace \??description + \enforced\let\detokenizedconstructionparameter\detokenizeddescriptionparameter + \enforced\let\letconstructionparameter \letdescriptionparameter + \enforced\let\useconstructionstyleandcolor \usedescriptionstyleandcolor + \enforced\let\setupcurrentconstruction \setupcurrentdescription + \edef\p_strc_constructions_title{\constructionparameter\c!title}% + \ifx\p_strc_constructions_title\v!yes + \settrue\c_strc_constructions_title_state + \else + \setfalse\c_strc_constructions_title_state + \fi} + +% We keep the command variant around but rather would move to the +% start-stop one. Also, passing the title as argument has some +% history so we need to keep that as well. + +% \startdescription [reference] text \stopdescription +% \startdescription [reference]{title} text \stopdescription +% \startdescription [title=,title=,reference=] text \stopdescription + +% A bit over the top, the optional title but mkii has it too. + +\tolerant\protected\def\strc_descriptions_start[#1]#*[#2]% + {\begingroup + \strc_constructions_initialize{#1}% + \ifhastok={#2}% + \expandafter\strc_descriptions_start_setups + \orelse\ifconditional\c_strc_constructions_title_state + \expandafter\strc_descriptions_start_title + \else + \expandafter\strc_descriptions_start_reference + \fi[#2]} + +\protected\def\strc_descriptions_start_setups[#1]% + {\setfalse\c_strc_constructions_title_state + \strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,#1]% + \csname\??constructionstarthandler\currentconstructionhandler\endcsname} + +\protected\tolerant\def\strc_descriptions_start_title[#1]#*#=% + {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=]% + \csname\??constructionstarthandler\currentconstructionhandler\endcsname} + +\protected\def\strc_descriptions_start_reference[#1]% + {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title=,\c!bookmark=,\c!list=]% + \csname\??constructionstarthandler\currentconstructionhandler\endcsname} + +\protected\def\strc_descriptions_stop + {\csname\??constructionstophandler\currentconstructionhandler\endcsname} + +% \description [reference] text \par +% \description [reference] {title} text \par + +\tolerant\protected\def\strc_descriptions_command[#1]#*[#2]#:#*#=% + {\begingroup + \strc_constructions_initialize{#1}% + \ifhastok={#2}% + \expandafter\strc_descriptions_command_setups + \orelse\ifconditional\c_strc_constructions_title_state + \expandafter\strc_descriptions_command_title + \else + \expandafter\strc_descriptions_command_reference + \fi[#2]} + +\protected\def\strc_descriptions_command_setups[#1]% + {\setfalse\c_strc_constructions_title_state + \strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,#1]% + \csname\??constructioncommandhandler\currentconstructionhandler\endcsname} + +\protected\tolerant\def\strc_descriptions_command_title[#1]#:#*#=% + {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=]% + \csname\??constructioncommandhandler\currentconstructionhandler\endcsname} + +\protected\def\strc_descriptions_command_reference[#1]% + {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title=,\c!bookmark=,\c!list=]% + \csname\??constructioncommandhandler\currentconstructionhandler\endcsname} + +%D Handlers: + +\expandafter\let\csname\??constructionmainhandler \v!description\expandafter\endcsname\csname\??constructionmainhandler \v!construction\endcsname +\expandafter\let\csname\??constructioncommandhandler\v!description\expandafter\endcsname\csname\??constructioncommandhandler\v!construction\endcsname +\expandafter\let\csname\??constructiontexthandler \v!description\expandafter\endcsname\csname\??constructiontexthandler \v!construction\endcsname + +\protected\setvalue{\??constructioncommandhandler\v!description}% + {\dowithpar + {\csname\??constructionstarthandler\v!construction\endcsname}% + {\csname\??constructionstophandler \v!construction\endcsname\endgroup}} + +\protected\setvalue{\??constructionstarthandler\v!description}% + {\dogotopar + {\csname\??constructionstarthandler\v!construction\endcsname}} + +\protected\setvalue{\??constructionstophandler\v!description}% + {\csname\??constructionstophandler\v!construction\endcsname + \endgroup} + +%D For historic reasons we have (from now on undocumented): + +\definedescription + [tab] + [\c!alternative=\v!left, + \c!headstyle=\v!normal, + \c!headcolor=, + \c!style=\v!normal, + \c!color=, + \c!width=\v!broad, + \c!sample=\kern4\emwidth, % was \hskip but that no longer is okay + \c!before=, + \c!after=] + +\protected\def\setuptab + {\setupdescription[tab]} + +%D Maybe we should remove this definition. + +\protect \endinput diff --git a/tex/context/base/mkiv/strc-enu.mklx b/tex/context/base/mkiv/strc-enu.mklx new file mode 100644 index 000000000..6bc2f39d4 --- /dev/null +++ b/tex/context/base/mkiv/strc-enu.mklx @@ -0,0 +1,375 @@ +%D \module +%D [ file=strc-enu, % moved from strc-des +%D version=2008.10.20, +%D title=\CONTEXT\ Structure Macros, +%D subtitle=Enumerations, +%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 Structure Macros / Enumerations} + +\unprotect + +% command -> headcommand + +%D Enumerations are just super descriptions. Therefore we implement +%D them as an extension. After all, the keys don't clash. In order +%D to be able to differentiate between specific settings we use +%D some flags. Unfortunately we have some historic differences +%D in default values. Therefore we push an extra step in the +%D parent chain (we might do the same for regular descriptions). + +%D In order to be more flexible with theorems Aditya Mahajan added +%D support for titles and endsymbols. At the same time we added more +%D flexible support for inheriting numbers. +%D +%D \startbuffer +%D \defineenumeration[one] +%D \defineenumeration[two] [one] % clone one +%D \defineenumeration[three] [counter=one,style=slanted] % only use counter of one +%D \defineenumeration[four] [three] % clone three +%D \defineenumeration[five] [three] [counter=five] % clone three and use own counter +%D \defineenumeration[six] [three] [counter=four] % clone tree and use counter four (undefined) +%D +%D \startone test test 6 \stopone +%D \starttwo test test 7 \stoptwo +%D \startthree test test 8 \stopthree +%D \startfour test test 9 \stopfour +%D \startfive test test 2 \stopfive +%D \startsix test test 10 \stopsix +%D \stopbuffer +%D +%D \typebuffer \start \getbuffer \stop +%D +%D \starttyping +%D \setupenumerations[one] [prefix=yes,prefixsegments=section] +%D \setupenumerations[two] [prefix=yes,prefixsegments=section] +%D \setupenumerations[three][prefix=yes,prefixsegments=section] +%D \setupenumerations[four] [prefix=yes,prefixsegments=chapter:section] +%D \setupenumerations[five] [prefix=yes,prefixsegments=chapter:section] +%D \setupenumerations[six] [prefix=yes,prefixsegments=chapter:section] +%D \stoptyping + +% list and titles are experimental +% +% \definedescription[test] [location=left,hang=4,headalign={right},distance=1em,list=test] +% \defineenumeration[lemma][title=yes,right=:,textdistance=1em, location=top, titlestyle=\bs,list=lemma] +% \defineenumeration[ammel][title=yes,right=:,textdistance=.5em,location=left,titlestyle=\it,width=9em] +% +% \placelist[enumeration:lemma] +% \placelist[description:test][width=0pt] +% +% \starttest {something something something} \input zapf \stoptest +% \startlemma {with a title of a certain length} \input tufte \stoplemma +% \startammel {with a title} \input zapf \stopammel +% +% \defineenumeration[lemma][...] +% \defineenumeration[titledlemma][lemma][title=yes,right=:,text=lemma,list=lemma] + +\installcorenamespace{enumeration} + +\installcommandhandler \??enumeration {enumeration} \??enumeration + +\installcounterassociation{enumeration} + +\let\setupenumerations\setupenumeration + +\setupenumeration % check with old + [\c!alternative=\v!top, + \c!headstyle=\v!bold, + \c!titlestyle=\v!bold, + %\c!style=, + %\c!color=, + %\c!headcolor=, + %\c!titlecolor=, + \c!width=8\emwidth, + %\c!distance=\zeropoint, + \c!distance=\emwidth, + \c!titledistance=.5\emwidth, + %\c!hang=, + %\c!sample=, + %\c!align=, + %\c!headalign=, + \c!margin=\v!no, + \c!before=\blank, + \c!inbetween=\blank, + \c!after=\blank, + \c!indentnext=\v!yes, + \c!indenting=\v!never, + \c!titleleft=(, + \c!titleright=), + %\c!closesymbol=, + \c!closecommand=\wordright, + \c!display=\v!yes, + %\c!command=, + \c!titlecommand=, + \c!expansion=\v!no, + %\c!xmlsetup=, + %\s!catcodes=, + \c!way=\v!by\v!text, + \c!prefix=\v!no, + \c!prefixconnector=., + %\c!starter=, + %\c!stopper=, + \c!text=\currentenumeration, + \c!number=\v!yes, % else description + \c!start=0, + \c!state=\v!start, + \c!levels=4] + +% to be considered: +% +% \let\??construction\??enumeration +% +% with push/pop (also at definition time) + +\protected\def\strc_define_commands_enumeration#tag#level#parent% + {\doifelsenothing{#parent} + {\normalexpanded{\defineconstruction[#tag][\s!handler=\v!enumeration,\c!level=#level]}% + \setevalue{\??enumeration#tag:\s!parent}{\??enumeration}}% + {\normalexpanded{\defineconstruction[#tag][#parent][\s!handler=\v!enumeration,\c!level=#level]}% + \setevalue{\??enumeration#tag:\s!parent}{\??enumeration#parent}}% + \instance\setuevalue{\e!next #tag}{\strc_enumerations_next {#tag}{\number#level}}% obsolete + \instance\setuevalue{\c!reset#tag}{\strc_enumerations_reset {#tag}{\number#level}}% obsolete + %instance\setuevalue{\c!set #tag}{\strc_enumerations_set {#tag}{\number#level}}% obsolete + \instance\setuevalue {#tag}{\strc_enumerations_command[#tag]}% we could pass level here as well (faster) + \instance\setuevalue{\e!start#tag}{\strc_enumerations_start [#tag]}% we could pass level here as well (faster) + \instance\setuevalue{\e!stop #tag}{\strc_enumerations_stop }} + +\appendtoks + \ifx\currentenumerationparent\empty + % clone => parent | subclone => clone | subsubclone => subclone + \let\currentenumerationsub\empty + \strc_define_commands_enumeration + {\currentenumerationsub\currentenumeration}% + \plusone + \empty + \edef\p_levels{\enumerationparameter\c!levels}% + \dostepwiserecurse\plustwo\p_levels\plusone + {\strc_define_commands_enumeration + {\v!sub\currentenumerationsub\currentenumeration}% + \recurselevel + {\currentenumerationsub\currentenumeration}% + \edef\currentenumerationsub{\v!sub\currentenumerationsub}}% + \else + % clone => parent | subclone => subparent | subsubclone => subsubparent + \let\currentenumerationsub\empty + \edef\p_levels{\enumerationparameter\c!levels}% + \dorecurse\p_levels + {\strc_define_commands_enumeration + {\currentenumerationsub\currentenumeration}% + \recurselevel + {\currentenumerationsub\currentenumerationparent}% + \edef\currentenumerationsub{\v!sub\currentenumerationsub}}% + \fi + \edef\p_counter{\enumerationparameter\s!counter}% can inherit from parent + \ifx\p_counter\empty % + \let\p_counter\currentenumeration + \fi + \doifelsecounter\p_counter\donothing{\strc_enumerations_define_counter\p_counter}% + \letenumerationparameter\s!counter\p_counter + %\strc_enumerations_setup_counter\currentenumeration +\to \everydefineenumeration + +\let\p_strc_constructions_title \empty +\let\p_strc_constructions_number\empty + +\protected\setvalue{\??constructioninitializer\v!enumeration}% + {\let \currentenumeration \currentconstruction + \enforced\let\constructionparameter \enumerationparameter + \enforced\let\constructionnamespace \??enumeration + \enforced\let\detokenizedconstructionparameter\detokenizedenumerationparameter + \enforced\let\letconstructionparameter \letenumerationparameter + \enforced\let\useconstructionstyleandcolor \useenumerationstyleandcolor + \enforced\let\setupcurrentconstruction \setupcurrentenumeration + \edef\p_strc_constructions_number{\constructionparameter\c!number}% + \ifx\p_strc_constructions_number\v!yes + \settrue\c_strc_constructions_number_state + \iftrialtypesetting + \strc_counters_save\currentconstructionnumber + \fi + \strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel + \else + \setfalse\c_strc_constructions_number_state + \fi + \edef\p_strc_constructions_title{\constructionparameter\c!title}% + \ifx\p_strc_constructions_title\v!yes + \settrue\c_strc_constructions_title_state + \else + \setfalse\c_strc_constructions_title_state + \fi} + +\protected\setvalue{\??constructionfinalizer\v!enumeration}% + {\ifconditional\c_strc_constructions_number_state + \iftrialtypesetting + \strc_counters_restore\currentconstructionnumber + \fi + \fi} + +%D Interfaces: + +\let\strc_enumerations_command\strc_descriptions_command +\let\strc_enumerations_start \strc_descriptions_start +\let\strc_enumerations_stop \strc_descriptions_stop + +\protected\def\strc_enumerations_next {\strc_constructions_next_indeed \namedenumerationparameter} % #1#2 +\protected\def\strc_enumerations_reset{\strc_constructions_reset_indeed\namedenumerationparameter} % #1#2 +%unexpanded\def\strc_enumerations_set {\strc_constructions_set_indeed \namedenumerationparameter} % #1#2 + +%D Counters (maybe we can share this code): (not ok yet, messy with notes) + +% Maybe we should move counters to the construction level as more derived mechanisms +% use it \unknown\ so don't depend on names here! + +\def\strc_enumerations_define_counter#tag% todo: move inline + {\definecounter[#tag]% + \registerenumerationcounter{#tag}} + +\appendtoks + \synchronizeenumerationcounters +\to \everysetupenumeration + +\appendtoks + \synchronizeenumerationcounters +\to \everydefineenumeration + +%D Initializer: + +%D The handlers. + +\newtoks\everyenumeration + +\appendtoks + \disablepseudocaps % sorry, uppercase causes troubles +\to \everyenumeration + +\expandafter\let\csname\??constructionmainhandler \v!enumeration\expandafter\endcsname\csname\??constructionmainhandler \v!description\endcsname +\expandafter\let\csname\??constructioncommandhandler\v!enumeration\expandafter\endcsname\csname\??constructioncommandhandler\v!description\endcsname +\expandafter\let\csname\??constructionstarthandler \v!enumeration\expandafter\endcsname\csname\??constructionstarthandler \v!description\endcsname +\expandafter\let\csname\??constructionstophandler \v!enumeration\expandafter\endcsname\csname\??constructionstophandler \v!description\endcsname + +\protected\setvalue{\??constructiontexthandler\v!enumeration}% + {\begingroup + \useconstructionstyleandcolor\c!headstyle\c!headcolor + \strc_enumerations_text + \endgroup} + +\protected\def\strc_enumerations_text + {\the\everyenumeration % will become obsolete + \ifconditional\c_strc_constructions_number_state + \ifx\currentconstructionreference\!!plustoken + \strc_enumerations_full_number_symbol + \else\ifx\currentconstructionreference\!!minustoken + \strc_enumerations_full_number_nop + \else + \strc_enumerations_full_number_coupling + \fi\fi + \else + \strc_enumerations_full_number_nop + \fi} + +\protected\def\strc_enumerations_inject_text_with_space + {\edef\p_text{\constructionparameter\c!text}% + \ifx\p_text\empty \else + \p_text + \removeunwantedspaces + \nobreakspace + \fi} + +\protected\def\strc_enumerations_inject_extra_text + {\ifconditional\c_strc_constructions_title_state + \clf_doifelselisthastitle{\currentconstructionmain}\numexpr\currentconstructionlistentry\relax + \strc_enumerations_inject_extra_text_indeed + \donothing + \fi} + +\protected\def\strc_enumerations_inject_text + {\constructionparameter\c!numbercommand + {\constructionparameter\c!text}} + +% head ( number title ) + +\protected\def\strc_enumerations_inject_extra_text_indeed + {\begingroup + \hskip\constructionparameter\c!titledistance % we listen to the headstyle + \useconstructionstyleandcolor\c!titlestyle\c!titlecolor + \constructionparameter\c!titlecommand + {\constructionparameter\c!titleleft + \clf_savedlisttitle{\currentconstructionmain}\currentconstructionlistentry\relax + \constructionparameter\c!titleright}% + \endgroup} + +\protected\def\strc_enumerations_inject_symbol % todo check + {\constructionparameter\c!left + \constructionparameter\c!symbol + \constructionparameter\c!right} + +\protected\def\strc_enumerations_inject_number + {\constructionparameter\c!left + \constructionparameter\c!starter + \clf_savedlistprefixednumber{\currentconstructionmain}\currentconstructionlistentry\relax + \constructionparameter\c!stopper + \constructionparameter\c!right} + +\protected\def\strc_enumerations_inject_text_and_number + {\constructionparameter\c!numbercommand + {\strc_enumerations_inject_text_with_space + \strc_enumerations_inject_number}} + +\protected\def\strc_enumerations_inject_text_and_symbol + {\constructionparameter\c!numbercommand + {\strc_enumerations_inject_text_with_space + \strc_enumerations_inject_symbol}} + +\protected\def\strc_enumerations_full_number_yes + {\constructionparameter\c!headcommand + {\begstrut + \strc_enumerations_inject_text_and_number + \strc_enumerations_inject_extra_text + \endstrut}} + +\protected\def\strc_enumerations_full_number_nop + {\constructionparameter\c!headcommand + {\begstrut + \strc_enumerations_inject_text + \strc_enumerations_inject_extra_text + \endstrut}} + +\protected\def\strc_enumerations_full_number_symbol + {\constructionparameter\c!headcommand + {\begstrut + \strc_enumerations_inject_text_and_symbol + \strc_enumerations_inject_extra_text + \endstrut}} + +% to be used in for instance: +% +% coupling=questions .... coupling=answers +% +% we will provide some more control, like skipping etc or reference relates + +% to do / to be checked + +\protected\def\strc_enumerations_full_number_coupling + {\iflocation + \strc_enumerations_full_number_yes + \else + \iftrialtypesetting \else + % \doenumerationregistercoupling + \fi + \strc_enumerations_full_number_yes + \edef\p_coupling{\constructionparameter\c!coupling}% + \ifx\p_coupling\empty \else + \symbolreference[order(construction:\p_coupling:\the\locationorder)]% + \fi + \fi} + +\protected\def\strc_enumerations_skip_number_coupling[#tag]% e.g. for questions with no answer + {\clf_setnextreferenceorder{construction}{#tag}} + +\protect \endinput diff --git a/tex/context/base/mkiv/strc-flt.lua b/tex/context/base/mkiv/strc-flt.lua index e3a0ea30e..59c67efa1 100644 --- a/tex/context/base/mkiv/strc-flt.lua +++ b/tex/context/base/mkiv/strc-flt.lua @@ -31,13 +31,13 @@ function builders.checksidefloat(mode,indented) return indented end -appendaction ("newgraf","system","builders.checksidefloat") -disableaction("newgraf","builders.checksidefloat") +appendaction ("paragraph","system","builders.checksidefloat") +disableaction("paragraph","builders.checksidefloat") interfaces.implement { name = "enablesidefloatchecker", onlyonce = true, actions = function() - enableaction("newgraf","builders.checksidefloat") + enableaction("paragraph","builders.checksidefloat") end, } diff --git a/tex/context/base/mkiv/strc-flt.mkvi b/tex/context/base/mkiv/strc-flt.mkvi index 91cc3f666..d9fd359c6 100644 --- a/tex/context/base/mkiv/strc-flt.mkvi +++ b/tex/context/base/mkiv/strc-flt.mkvi @@ -211,7 +211,7 @@ \let\strc_floats_define_saved\definefloat -\unexpanded\def\definefloat +\unexpanded\overloaded\def\definefloat {\dotripleempty\strc_floats_define} \def\strc_floats_define[#1][#2][#3]% name+plural+parent | name+parent+settings @@ -1230,7 +1230,7 @@ \let\doifoddpagefloatelse \doifelseoddpagefloat \appendtoks - \let\rightorleftpageaction\doifelserightpagefloat + \overloaded\frozen\let\rightorleftpageaction\doifelserightpagefloat \to \everyinsidefloat % \let\movesidefloat\gobbleoneargument diff --git a/tex/context/base/mkiv/strc-itm.mklx b/tex/context/base/mkiv/strc-itm.mklx index 86d2275d7..aa105af33 100644 --- a/tex/context/base/mkiv/strc-itm.mklx +++ b/tex/context/base/mkiv/strc-itm.mklx @@ -328,7 +328,7 @@ \installcommandhandler \??itemgroup {itemgroup} \??itemgroup -\let\setupitemgroups\setupitemgroup +\aliased\let\setupitemgroups\setupitemgroup \appendtoks \setuevalue{\e!start\currentitemgroup}{\startitemgroup[\currentitemgroup]}% @@ -386,12 +386,12 @@ \vspacing[\v!item @500]% \fi} -\unexpanded\def\strc_itemgroups_process_options#options% +\protected\def\strc_itemgroups_process_options#options% {\processcommacommand[#options]\strc_itemgroups_process_option} % expansion of options is handy for xml % \installcommalistprocessorcommand \strc_itemgroups_process_option_list \strc_itemgroups_process_option % -% \unexpanded\def\strc_itemgroups_process_options#options% +% \protected\def\strc_itemgroups_process_options#options% % {\normalexpanded{\strc_itemgroups_process_option_list[#options]}} % expansion of options is handy for xml \def\strc_itemgroups_process_option#option% @@ -599,29 +599,31 @@ \let\strc_itemgroups_normal_setup\setupitemgroup -\unexpanded\def\setupitemgroup - {\doquadrupleempty\strc_itemgroups_setup} - -\def\strc_itemgroups_setup[#category][#levels][#options][#settings]% category level|each options|settings settings|options - {\edef\strc_itemgroups_setup_what{#levels}% - \iffourthargument +\permanent\overloaded\tolerant\protected\def\setupitemgroup[#category]#spacer[#levels]#spacer[#options]#spacer[#settings]% category level|each options|settings settings|options + {\ifarguments + % nothing to set up + \or + \edef\strc_itemgroups_setup_what{#levels}% + \strc_itemgroups_normal_setup[#category]% == settings + \or + \edef\strc_itemgroups_setup_what{#levels}% + \strc_itemgroups_setup_each{#category}{#levels}% + \or + \edef\strc_itemgroups_setup_what{#levels}% \ifx\strc_itemgroups_setup_what\v!each \strc_itemgroups_setup_each{#category}{#options}% - \strc_itemgroups_setup_each{#category}{#settings}% \else \strc_itemgroups_setup_list{#levels}{#category}{#options}% - \strc_itemgroups_setup_list{#levels}{#category}{#settings}% \fi - \orelse\ifthirdargument + \or + \edef\strc_itemgroups_setup_what{#levels}% \ifx\strc_itemgroups_setup_what\v!each \strc_itemgroups_setup_each{#category}{#options}% + \strc_itemgroups_setup_each{#category}{#settings}% \else \strc_itemgroups_setup_list{#levels}{#category}{#options}% + \strc_itemgroups_setup_list{#levels}{#category}{#settings}% \fi - \orelse\ifsecondargument - \strc_itemgroups_setup_each{#category}{#levels}% - \else - \strc_itemgroups_normal_setup[#category]% == settings \fi} % can be made a bit faster @@ -663,7 +665,7 @@ \fi \fi} -\unexpanded\def\strc_itemgroups_insert_item_counter +\protected\def\strc_itemgroups_insert_item_counter {\ifconditional\c_strc_itemgroups_repeat \ifcase\c_strc_itemgroups_nesting % skip @@ -792,11 +794,9 @@ \advance\d_strc_itemgroups_list_width\itemgroupparameter\c!distance\relax \let\currentitemgroup\savedcurrentitemgroup} -\unexpanded\def\startitemgroup - {\dotripleempty\strc_itemgroups_start} - -\def\strc_itemgroups_start[#category][#options][#settings]% +\permanent\tolerant\protected\def\startitemgroup[#category]#spacer[#options]#spacer[#settings]% {\begingroup % (1) + \nofarguments\lastarguments \def\currentitemgroup{#category}% no nested mixing of itemgroups \let\currentparentitemgroup\currentitemgroup \global\advance\c_strc_itemgroups_nesting\plusone @@ -804,22 +804,26 @@ \normalexpanded{\chaintocurrentitemgroup{\currentparentitemgroup:\currentitemlevel}}% \edef\currentitemgroup{\currentparentitemgroup:\currentitemlevel}% % - \ifthirdargument - \strc_itemgroups_start_indeed[#options][#settings]% - \orelse\ifsecondargument + \edef\itemgroupoptions{\itemgroupparameter\c!option}% + \let\itemgroupextraoptions\empty + \ifcase\nofarguments + \strc_itemgroups_start_indeed{}% + \or + \strc_itemgroups_start_indeed{}% + \or \ifcondition\validassignment{#options}% - \strc_itemgroups_start_indeed[][#options]% + \strc_itemgroups_start_indeed{#options}% \else - \strc_itemgroups_start_indeed[#options][]% + \edef\itemgroupextraoptions{#options}% + \strc_itemgroups_start_indeed{}% \fi - \else - \strc_itemgroups_start_indeed[][]% + \or + \edef\itemgroupextraoptions{#options}% + \strc_itemgroups_start_indeed{#settings}% \fi} -\def\strc_itemgroups_start_indeed[#options][#settings]% - {\edef\itemgroupoptions{\itemgroupparameter\c!option}% - \edef\itemgroupextraoptions{#options}% - \ifempty\itemgroupoptions +\def\strc_itemgroups_start_indeed#settings% + {\ifempty\itemgroupoptions \let\itemgroupoptions\itemgroupextraoptions \orelse\ifempty\itemgroupextraoptions % ok @@ -998,8 +1002,8 @@ % will be redefined in page-mix \ifdefined\startcolumns \else - \unexpanded\def\startcolumns[#settings]{} - \unexpanded\def\stopcolumns {} + \protected\def\startcolumns[#settings]{} + \protected\def\stopcolumns {} \fi \def\strc_itemgroups_start_columns @@ -1015,7 +1019,7 @@ \fi -\unexpanded\def\stopitemgroup +\permanent\protected\def\stopitemgroup {\stopcollectitems \ifconditional\c_strc_itemgroups_text \removeunwantedspaces @@ -1069,9 +1073,6 @@ % The items. -\unexpanded\def\startitemgroupitem - {\dosingleempty\strc_itemgroups_start_item} - \def\strc_itemgroups_start_item_first {\setfalse\c_strc_itemgroups_first % \begingroup % (3) @@ -1133,7 +1134,7 @@ % \stopitemize % \stopitemize -\unexpanded\def\strc_itemgroups_start_item[#reference]% we can reuse more +\tolerant\protected\def\startitemgroupitem[#reference]% we can reuse more {\def\currentitemreference{#reference}% \ifconditional\c_strc_itemgroups_text % begin of item @@ -1171,7 +1172,7 @@ \hskip\d_strc_itemgroups_signal % concat \itemgroupparameter\c!command} -\unexpanded\def\stopitemgroupitem +\protected\def\stopitemgroupitem {\ifhmode \endstrut % new per 2017-12-15 \fi @@ -1180,10 +1181,8 @@ \else \endgraf \fi} -\unexpanded\def\startitemgrouphead - {\dosingleempty\strc_itemgroups_start_head} -\unexpanded\def\strc_itemgroups_start_head[#reference]% +\tolerant\protected\def\startitemgrouphead[#reference]% {\ifconditional\c_strc_itemgroups_first \else \strc_itemgroups_insert_breakallow \fi @@ -1197,23 +1196,24 @@ \fi \fi \fi - \strc_itemgroups_start_item[#reference]% + %\strc_itemgroups_start_item[#reference]% + \startitemgroupitem[#reference]% \pickupgroupedcommand \strc_itemgroups_start_head_indeed \strc_itemgroups_stop_head_indeed \strc_itemgroups_head_body_indeed} -\unexpanded\def\stopitemgrouphead +\protected\def\stopitemgrouphead {\dostoptagged \stopitemgroupitem} -\unexpanded\def\strc_itemgroups_start_head_indeed +\protected\def\strc_itemgroups_start_head_indeed {\settrue\c_strc_itemgroups_head \dotagsetitem\s!head% % weird place \dostarttagged\t!itemhead\empty \useitemgroupstyleandcolor\c!headstyle\c!headcolor\ignorespaces} -\unexpanded\def\strc_itemgroups_stop_head_indeed +\protected\def\strc_itemgroups_stop_head_indeed {\removeunwantedspaces \dostoptagged \ifconditional\c_strc_itemgroups_inline_head @@ -1231,17 +1231,17 @@ \strc_itemgroups_insert_breakno \fi} -\unexpanded\def\strc_itemgroups_head_body_indeed +\protected\def\strc_itemgroups_head_body_indeed {\dostarttagged\t!itembody\empty \noindentation \ignorespaces} % Simple commands. -\unexpanded\def\strc_itemgroups_start_do_item +\protected\def\strc_itemgroups_start_do_item {\startitemgroupitem} -\unexpanded\def\strc_itemgroups_start_no_item +\protected\def\strc_itemgroups_start_no_item {\let\currentitemreference\empty \strc_itemgroups_increment_item_counter %\advance\c_strc_itemgroups_n_of_items\plusone @@ -1249,27 +1249,27 @@ \strc_itemgroups_check_for_repeated \ignorespaces} -\unexpanded\def\strc_itemgroups_start_button[#destination]% +\protected\def\strc_itemgroups_start_button[#destination]% {\edef\m_strc_itemgroups_destination{#destination}% \startitemgroupitem} -\unexpanded\def\strc_itemgroups_start_symbol#text% +\protected\def\strc_itemgroups_start_symbol#text% {\def\strc_itemgroups_extra_symbol{#text}% \settrue\c_strc_itemgroups_symbol \startitemgroupitem \dotagsetitem\s!symbol} -\unexpanded\def\strc_itemgroups_start_dummy +\protected\def\strc_itemgroups_start_dummy {\strc_itemgroups_start_symbol %\strut\strut} % two ? \begstrut} -\unexpanded\def\strc_itemgroups_start_subitem +\protected\def\strc_itemgroups_start_subitem {\settrue\c_strc_itemgroups_sub \startitemgroupitem \dotagsetitem\s!sub} -\unexpanded\def\strc_itemgroups_start_edge#text% +\protected\def\strc_itemgroups_start_edge#text% {\strc_itemgroups_start_symbol {\strc_itemgroups_calculate_list_width\c_strc_itemgroups_nesting \dostarttagged\t!ignore\empty % for the moment, maybe an attribute @@ -1277,7 +1277,7 @@ {#text\hskip\itemgroupparameter\c!distance}% \dostoptagged}} -\unexpanded\def\strc_itemgroups_start_margin#text% +\protected\def\strc_itemgroups_start_margin#text% {\def\strc_itemgroups_margin_symbol % brrr {\dostarttagged\t!ignore\empty % for the moment, maybe an attribute \llap @@ -1290,35 +1290,32 @@ \startitemgroupitem \dotagsetitem\s!margin} -\unexpanded\def\strc_itemgroups_start_text#text% +\protected\def\strc_itemgroups_start_text#text% {\def\strc_itemgroups_extra_symbol{#text}% \settrue\c_strc_itemgroups_symbol \settrue\c_strc_itemgroups_txt \startitemgroupitem} -% \unexpanded\def\strc_itemgroups_start_head +% \protected\def\strc_itemgroups_start_head % {\settrue\c_strc_itemgroups_head % \startitemgrouphead} -\unexpanded\def\strc_itemgroups_start_items +\protected\def\strc_itemgroups_start_items {\dosingleempty\strc_itemgroups_start_items_indeed} -\unexpanded\def\strc_itemgroups_start_items_indeed[#whatever]% something got lost +\protected\def\strc_itemgroups_start_items_indeed[#whatever]% something got lost {\strc_itemgroups_start_edge {\dorecurse{0\itemgroupparameter\c!items}{\strc_itemgroups_used_symbol\hss}% \unskip}} -% \unexpanded\def\startspecialitemgroupitem[#name]% -% {\csname\??itemgroupstart\ifcsname\??itemgroupstart#name\endcsname#name\else\v!item\fi\endcsname} - -\unexpanded\def\startspecialitemgroupitem[#name]% +\protected\def\startspecialitemgroupitem[#name]% todo: frozen {\ifcsname\??itemgroupstart#name\endcsname \expandafter\lastnamedcs \else \expandafter\strc_itemgroups_start_do_item \fi} -\unexpanded\def\stopspecialitemgroupitem +\protected\def\stopspecialitemgroupitem % todo: frozen {\stopitemgroupitem} \letvalue{\??itemgroupstart\v!item}\strc_itemgroups_start_do_item @@ -1329,7 +1326,7 @@ \letvalue{\??itemgroupstart\v!mar }\strc_itemgroups_start_margin \letvalue{\??itemgroupstart\v!txt }\strc_itemgroups_start_text -\def\optimizelistitemsbreak +\def\strc_itemgroups_optimize_breaks {\ifcase\c_strc_itemgroups_column_depth \ifconditional\c_strc_itemgroups_optimize \ifcase\c_strc_itemgroups_max_items @@ -1411,11 +1408,12 @@ \box\b_strc_itemgroups \hss}} % was: \hfill -\unexpanded\def\strc_itemgroups_start_head_sym#text% +\protected\def\strc_itemgroups_start_head_sym#text% {\def\strc_itemgroups_extra_symbol{#text}% \settrue\c_strc_itemgroups_symbol \settrue\c_strc_itemgroups_head - \strc_itemgroups_start_head} + %\strc_itemgroups_start_head} + \startitemgrouphead} \def\strc_itemgroups_make_symbol_box {\setbox\b_strc_itemgroups\autodirhbox @@ -1490,7 +1488,7 @@ \par % done twice? \fi \advance\c_strc_itemgroups_n_of_items\plusone - \optimizelistitemsbreak + \strc_itemgroups_optimize_breaks \strc_itemgroups_check_indenting \dontleavehmode \ifconditional\c_strc_itemgroups_indented_first @@ -1551,7 +1549,7 @@ \setvalue\??itemgroupdistance % catches empty value {\let\m_strc_itemgroups_text_distance\zeropoint} -\unexpanded\def\strc_itemgroups_set_text_item_distance +\protected\def\strc_itemgroups_set_text_item_distance {\edef\m_strc_itemgroups_text_distance{\itemgroupparameter\c!textdistance}% \ifempty\m_strc_itemgroups_text_distance % @@ -1569,45 +1567,45 @@ {\interwordspace \s!plus \emwidth}% {\emwidth \s!plus \interwordstretch\s!minus\interwordshrink}} -% \unexpanded\def\strc_itemgroups_default_command +% \protected\def\strc_itemgroups_default_command % {\EveryPar{\ignorespaces}% needed ? % \ignorespaces} -\unexpanded\def\strc_itemgroups_default_command +\protected\def\strc_itemgroups_default_command {\ignorespaces} %D Special case: -\unexpanded\def\strc_itemgroups_head#text\par +\protected\def\strc_itemgroups_head#text\par {\startitemgrouphead{#text}} %D The local commands: \appendtoks - \let\item \strc_itemgroups_start_do_item - \let\sub \strc_itemgroups_start_subitem - \let\sym \strc_itemgroups_start_symbol - \let\ran \strc_itemgroups_start_edge - \let\its \strc_itemgroups_start_items - \let\mar \strc_itemgroups_start_margin - \let\noitem \strc_itemgroups_start_no_item - \let\itm \strc_itemgroups_start_do_item - \let\but \strc_itemgroups_start_button - \let\nop \strc_itemgroups_start_dummy - \let\txt \strc_itemgroups_start_text - \let\head \strc_itemgroups_head - \let\headsym \strc_itemgroups_start_head_sym - \let\startitem \startitemgroupitem - \let\stopitem \stopitemgroupitem - \let\starthead \startitemgrouphead - \let\stophead \stopitemgrouphead - \let\startspecialitem\startspecialitemgroupitem - \let\stopspecialitem \stopspecialitemgroupitem + \enforced\let\item \strc_itemgroups_start_do_item + \enforced\let\sub \strc_itemgroups_start_subitem + \enforced\let\sym \strc_itemgroups_start_symbol + \enforced\let\ran \strc_itemgroups_start_edge + \enforced\let\its \strc_itemgroups_start_items + \enforced\let\mar \strc_itemgroups_start_margin + \enforced\let\noitem \strc_itemgroups_start_no_item + \enforced\let\itm \strc_itemgroups_start_do_item + \enforced\let\but \strc_itemgroups_start_button + \enforced\let\nop \strc_itemgroups_start_dummy + \enforced\let\txt \strc_itemgroups_start_text + \enforced\let\head \strc_itemgroups_head + \enforced\let\headsym \strc_itemgroups_start_head_sym + \enforced\let\startitem \startitemgroupitem + \enforced\let\stopitem \stopitemgroupitem + \enforced\let\starthead \startitemgrouphead + \enforced\let\stophead \stopitemgrouphead + \enforced\let\startspecialitem\startspecialitemgroupitem + \enforced\let\stopspecialitem \stopspecialitemgroupitem \to \itemgroupcommands \ifx\currentinterface \s!english \else - \def\next#1#2{\ifcsname#1\endcsname\else\let\csname#1\endcsname#2\fi} + \def\next#1#2{\ifcsname#1\endcsname\else\enforced\expandafter\let\csname#1\endcsname#2\fi} \etoksapp\itemgroupcommands{% \next{\v!item }\strc_itemgroups_start_do_item @@ -1666,10 +1664,6 @@ \newcount\c_strc_itemgroups_collected_done \newcount\c_strc_itemgroups_collected_current -% \expandafter\def\expandafter\strc_itemgroups_collected_store\expandafter#\expandafter1\csname\e!stop\v!item\endcsname % use grabuntil -% {\advance\c_strc_itemgroups_collected_stored\plusone -% \setvalue{\??itemgroupstack\number\c_strc_itemgroups_collected_stored}{\startitemgroupitem#1\stopitemgroupitem}} - \let\strc_itemgroups_collected_store\relax \normalexpanded{\def\strc_itemgroups_collected_store#1\csname\e!stop\v!item\endcsname}% @@ -1722,7 +1716,7 @@ \expandafter\strc_itemgroups_collected_flush \fi} -\unexpanded\def\stopcollectitems +\protected\def\stopcollectitems % todo: frozen {\ifconditional\c_strc_itemgroups_collecting \c_strc_itemgroups_collected_done \zerocount \c_strc_itemgroups_collected_current\zerocount @@ -1738,7 +1732,7 @@ \fi \fi} -\unexpanded\def\startcollectitems +\protected\def\startcollectitems % todo: frozen {\ifconditional\c_strc_itemgroups_collecting \c_strc_itemgroups_collected_stored\zerocount \letvalue{\e!start\v!item}\strc_itemgroups_collected_store @@ -1746,7 +1740,7 @@ %D Left-overs: -\unexpanded\def\item +\protected\def\item % todo: frozen {\strc_itemgroups_item_alone} \def\strc_itemgroups_item_alone[#category]#text\par @@ -1754,7 +1748,7 @@ \startitem#text\stopitem \stopitemgroup} -\unexpanded\def\head +\protected\def\head % todo: frozen {\strc_itemgroups_head_alone} \def\strc_itemgroups_head_alone[#category]#head\par#body\par @@ -1762,10 +1756,10 @@ \starthead{#head}#body\stophead \stopitemgroup} -\setuvalue{\e!start\v!item}% +\setuvalue{\e!start\v!item}% todo: frozen {\startitemgroup[\v!itemize]% \startitemgroupitem - \setuvalue{\e!stop\v!item}{\stopitemgroupitem\stopitemgroup}} + \setuvalue{\e!stop\v!item}{\stopitemgroupitem\stopitemgroup}} % todo: frozen % \def\sym#text% % {\noindent @@ -1779,11 +1773,9 @@ %D Something for tables: -\unexpanded\def\itemtag - {\dosingleempty\strc_itemgroups_item_tag} - -\unexpanded\def\strc_itemgroups_item_tag[#reference]% we can reuse more - {\def\currentitemreference{#reference}% +\permanent\tolerant\protected\def\itemtag[#reference]% we can reuse more + {% what if empty + \def\currentitemreference{#reference}% \iftrialtypesetting \strc_counters_save\v_strc_itemgroups_counter \strc_itemgroups_increment_item_counter @@ -1888,8 +1880,8 @@ \global\c_strc_itemgroups_column_depth\zerocount \global\c_strc_itemgroups_nesting \zerocount \glet\currentitemlevel\!!zerocount - \unexpanded\def\startitemize{\startitemgroup[\v!itemize:\v!note]}% - \unexpanded\def\stopitemize {\stopitemgroup}} + \enforced\permanent\protected\def\startitemize{\startitemgroup[\v!itemize:\v!note]}% + \enforced\permanent\protected\def\stopitemize {\stopitemgroup}} \let\strc_itemgroups_pop\relax diff --git a/tex/context/base/mkiv/strc-lab.mkxl b/tex/context/base/mkiv/strc-lab.mkxl new file mode 100644 index 000000000..2de2b1007 --- /dev/null +++ b/tex/context/base/mkiv/strc-lab.mkxl @@ -0,0 +1,198 @@ +%D \module +%D [ file=strc-lab, % was part of strc-des, +%D version=2008.10.20, +%D title=\CONTEXT\ Structure Macros, +%D subtitle=Labels, +%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 Structure Macros / Labels} + +\unprotect + +% todo: reset and increment will go + +%D Labels are implemented somewhat inefficient but have the advantage that they +%D can be controlled like other constructions. Who knows when that comes in +%D handy? + +\installcorenamespace{labels} + +\installcommandhandler \??labels {label} \??labels % plural hash, else clash with label (or rename that one) + +\installcounterassociation{label} + +\let\setuplabels\setuplabel + +\setuplabel + [\c!alternative=\v!intext, + \c!headstyle=\v!bold, + \c!titlestyle=\v!bold, + \c!distance=\zeropoint, + \c!width=\v!fit, + \c!titledistance=.5\emwidth, + \c!margin=\v!no, + \c!titleleft=(, + \c!titleright=), + \c!display=\v!no, + \c!titlecommand=, + \c!expansion=\v!no, + \c!way=\v!by\v!text, + \c!prefix=\v!no, + \c!prefixconnector=., + \c!text=\currentlabel, + \c!number=\v!yes, % else description + \c!start=0, + \c!state=\v!start, + \c!levels=3] + +\protected\def\strc_define_commands_label#1#2#3% current level parent + {\doifelsenothing{#3} + {\normalexpanded{\defineconstruction[#1][\s!handler=\v!label,\c!level=#2]}% + \setevalue{\??label#1:\s!parent}{\??label}}% + {\normalexpanded{\defineconstruction[#1][#3][\s!handler=\v!label,\c!level=#2]}% + \setevalue{\??label#1:\s!parent}{\??label#3}}% + \ifconditional\c_strc_constructions_define_commands + \setuevalue{\e!next #1}{\strc_labels_next {#1}{\number#2}}% obsolete + \setuevalue{\v!reset #1}{\strc_labels_reset {#1}{\number#2}}% obsolete % should be \e!reset anyway + %setuevalue{\c!set #1}{\strc_labels_set {#1}{\number#2}}% obsolete + \ifcsname\v!current#1\endcsname + % we play safe + \else + \setuevalue{\v!current#1}{\strc_labels_current{#1}}% % obsolete % should be \e!current anyway + \fi + \setuevalue{#1}{\strc_labels_command[#1]}% + \fi} + +% todo: \strc_labels_command for user + +\appendtoks + \ifx\currentlabelparent\empty + % clone => parent | subclone => clone | subsubclone => subclone + \let\currentlabelsub\empty + \strc_define_commands_label + {\currentlabelsub\currentlabel}% + \plusone + \empty + \edef\p_levels{\labelparameter\c!levels}% + \dostepwiserecurse\plustwo\p_levels\plusone + {\strc_define_commands_label + {\v!sub\currentlabelsub\currentlabel}% + \recurselevel + {\currentlabelsub\currentlabel}% + \edef\currentlabelsub{\v!sub\currentlabelsub}}% + \else + % clone => parent | subclone => subparent | subsubclone => subsubparent + \let\currentlabelsub\empty + \edef\p_levels{\labelparameter\c!levels}% + \dorecurse\p_levels + {\strc_define_commands_label + {\currentlabelsub\currentlabel}% + \recurselevel + {\currentlabelsub\currentlabelparent}% + \edef\currentlabelsub{\v!sub\currentlabelsub}}% + \fi + \edef\p_counter{\labelparameter\s!counter}% can inherit from parent + \ifx\p_counter\empty % + \let\p_counter\currentlabel + \fi + \doifelsecounter\p_counter\donothing{\strc_labels_define_counter\p_counter}% + \letlabelparameter\s!counter\p_counter +\to \everydefinelabel + +\let\p_strc_constructions_title \empty +\let\p_strc_constructions_number\empty + +\newconditional\c_strc_constructions_number_keep + +\setvalue{\??constructioninitializer\v!label}% + {\let \currentlabel \currentconstruction + \enforced\let\constructionparameter \labelparameter + \enforced\let\constructionnamespace \??label + \enforced\let\detokenizedconstructionparameter\detokenizedlabelparameter + \enforced\let\letconstructionparameter \letlabelparameter + \enforced\let\useconstructionstyleandcolor \uselabelstyleandcolor + \enforced\let\setupcurrentconstruction \setupcurrentlabel + % shared with enumerations + \edef\p_strc_constructions_number{\constructionparameter\c!number}% + \ifx\p_strc_constructions_number\v!yes + \settrue\c_strc_constructions_number_state + \iftrialtypesetting + \strc_counters_save\currentconstructionnumber + \fi + \ifconditional\c_strc_constructions_number_keep \else + \strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel + \fi + \else + \setfalse\c_strc_constructions_number_state + \fi + \edef\p_strc_constructions_title{\constructionparameter\c!title}% + \ifx\p_strc_constructions_title\v!yes + \settrue\c_strc_constructions_title_state + \else + \setfalse\c_strc_constructions_title_state + \fi} + +\setvalue{\??constructionfinalizer\v!label}% + {\ifconditional\c_strc_constructions_number_state + \iftrialtypesetting + \strc_counters_restore\currentconstructionnumber + \fi + \fi} + +%D Interfaces: + +\protected\def\strc_labels_command{\setfalse\c_strc_constructions_number_keep\strc_descriptions_command} +\protected\def\strc_labels_current{\settrue \c_strc_constructions_number_keep\strc_descriptions_command} + +\protected\def\strc_labels_next {\strc_constructions_next_indeed \namedlabelparameter} % #1#2 +\protected\def\strc_labels_reset {\strc_constructions_reset_indeed\namedlabelparameter} % #1#2 +%protected\def\strc_labels_set {\strc_constructions_set_indeed \namedlabelparameter} % #1#2 + +% similar to enumerations + +\def\strc_labels_define_counter#1% + {\definecounter[#1]% + \registerlabelcounter{#1}} + +\appendtoks + \synchronizelabelcounters +\to \everysetuplabel + +\appendtoks + \synchronizelabelcounters +\to \everydefinelabel + +% no start stop here + +\expandafter\let\csname\??constructionmainhandler\v!label\expandafter\endcsname\csname\??constructionmainhandler\v!description\endcsname + +\protected\setevalue{\??constructioncommandhandler\v!label}% + {\csname\??constructionstarthandler\v!construction\endcsname + \csname\??constructionstophandler \v!construction\endcsname + \endgroup} + +\protected\setvalue{\??constructiontexthandler\v!label}% + {\begingroup + \useconstructionstyleandcolor\c!headstyle\c!headcolor + \strc_labels_text + \endgroup} + +\let\strc_labels_text\strc_enumerations_text + +% inline variant + +\defineconstructionalternative + [\v!intext] + [\c!renderingsetup=\??constructionrenderings:\v!intext] + +\startsetups[\??constructionrenderings:\v!intext] + \dontleavehmode\box\constructionheadbox +\stopsetups + +\protect \endinput diff --git a/tex/context/base/mkiv/strc-lst.mkvi b/tex/context/base/mkiv/strc-lst.mkvi index 678c02e15..7a593878c 100644 --- a/tex/context/base/mkiv/strc-lst.mkvi +++ b/tex/context/base/mkiv/strc-lst.mkvi @@ -892,7 +892,7 @@ \appendtoks % better is to use a special list entry but we keep this for compatibility - \let\\=\space + \enforced\let\\\space % so expanding this token register has to come *after* the font switch \dontconvertfont % (**) this has to become an option (see publ) \to \t_lists_every_renderingtext diff --git a/tex/context/base/mkiv/strc-mat.mkiv b/tex/context/base/mkiv/strc-mat.mkiv index fe25e236e..7f5a19154 100644 --- a/tex/context/base/mkiv/strc-mat.mkiv +++ b/tex/context/base/mkiv/strc-mat.mkiv @@ -499,6 +499,8 @@ %D %D Otherwise we get a missing \type {$$} error reported. +\pushoverloadmode + \let\reqno\eqno % no longer valid as we just nil it \let\math_native_leqno\leqno @@ -513,6 +515,8 @@ \let\reqno\normaleqno \let\eqno \normaleqno +\popoverloadmode + %D \macros %D {startsubformulas} diff --git a/tex/context/base/mkiv/strc-not.mklx b/tex/context/base/mkiv/strc-not.mklx new file mode 100644 index 000000000..6e82c9c4e --- /dev/null +++ b/tex/context/base/mkiv/strc-not.mklx @@ -0,0 +1,1972 @@ +%D \module +%D [ file=strc-not, +%D version=2008.10.20, +%D title=\CONTEXT\ Structure Macros, +%D subtitle=Note 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 Structure Macros / Note Handling} + +\registerctxluafile{strc-not}{} + +\unprotect + +% todo: finish local rendering +% todo: more p_strc_notations_* (outside trial loop) +% todo: see if we can now use \insertpenalties (>0 == some left) + +\ifdefined\dotagsetnotesymbol \else \let\dotagsetnotesymbol\relax \fi +\ifdefined\dotagsetnotation \else \let\dotagsetnotation \relax \fi + +\protected\def\unvboxed {\ifvmode\unvbox \else\box \fi} % will change or used more often +\protected\def\unvcopied{\ifvmode\unvcopy\else\copy\fi} % will change or used more often + +%D \LMTX\ testcase: +%D +%D \starttyping +%D \hbox {\hbox{\footnote{HH1}\footnote{HH2}}} \par +%D \hbox {\hbox{x\footnote{XHH1}x\footnote{XHH2}}} \par +%D \vbox {\setbox0\hbox{\footnote{VH1}\footnote{VH2}}\box0} \par +%D \vbox {\hbox{\footnote{VH1}xxx\footnote{VH2}}} \par +%D \vbox {\hbox{\footnote{VH1}\footnote{VH2}} +%D \hbox{\footnote{VH1}\footnote{VH2}}} \par +%D \vbox {\hbox{x\footnote{XVH1}x\footnote{XVH2}}} \par +%D \vbox {\vbox{\footnote{VV1}\footnote{VV2}}} \par % two lines +%D \vbox {\vbox{x\footnote{XVV1}x\footnote{XVV2}}} \par +%D \stoptyping + +%D Notes have two handlers: notations and notes. Although notations can be defined +%D independently it makes not much sense. In principle we can treat notes as lists +%D but they are currently done as a variant on enumerations. I will provide a list +%D variant as well. One complication is that for page related notes inserts are used +%D and therefore notes are typeset immediately and descriptions are better suited +%D for that. For instance endnotes can as well be typeset using lists. + +% textcommand/textstyle/textcolor : set by note commandhandler and used for inline number + +%D \macros +%D {setupnote,setupnotation} +%D +%D We can influence footnote typesetting with the setup command: +%D +%D \showsetup{setupnotation} +%D \showsetup{setupnote} +%D +%D The definition command indicate that we can frame the footnote area. The +%D footnotes themselves are treated as descriptions. +%D +%D \showsetup{definenote} +%D +%D It's sort of a custom to precede footnotes by a horizontal rule and although +%D fancy rules like +%D +%D \starttyping +%D \hbox to 10em{\hskip-3em\dotfill} +%D \stoptyping +%D +%D Are quite ligitimate, we default to a simple one 20\% of the text width. + +% \c!headstyle=\noteparameter\c!style, +% \c!headcolor=\noteparameter\c!color, + +\installcorenamespace{notation} + +\installcommandhandler \??notation {notation} \??notation + +\installcounterassociation{notation} + +\aliased\let\setupnotations\setupnotation + +\definesymbol[\v!note:\v!previouspage][\llap{\low{\symbol[\v!previouspage]}}] +\definesymbol[\v!note:\v!nextpage ][\llap{\low{\symbol[\v!nextpage ]}}] + +\setupnotations % check with old + [\c!alternative=\v!note, + %\c!headstyle=, + %\c!titlestyle=, + %\c!style=, + %\c!color=, + %\c!headcolor=, + %\c!titlecolor=, + \c!numbercommand=\high, + %\c!symbolcommand=\lowllap, % experiment + %\c!indicator=\v!no, % was \v!yes in mkii for page notes + \c!width=\v!fit, + \c!titledistance=.5em, + \c!distance=.5em, + %\c!hang=, + %\c!sample=, + %\c!align=, + %\c!headalign=, + \c!margin=\v!no, + \c!before=, + \c!inbetween=, + \c!after=, + \c!indentnext=\v!yes, + \c!indenting=\v!never, + \c!titleleft=(, + \c!titleright=), + %\c!closesymbol=, + \c!closecommand=\wordright, + \c!display=\v!yes, + %\c!command=, + \c!titlecommand=, + \c!expansion=\v!no, + %\c!xmlsetup=, + %\s!catcodes=, + \c!way=\v!by\v!text, + \c!prefix=\v!no, + \c!prefixconnector=., + %\c!starter=, + %\c!stopper=, + \c!number=\v!yes, + \c!text=, + \c!start=0, + \c!state=\v!start, + \c!levels=3] + +%D The code here is mostly the same as enumerations but we want to keep them +%D isolated and at some point we might differentiate. + +% \installcorenamespace{noteclass} + +\protected\def\strc_define_commands_notation#tag#level#parent% + {\doifelsenothing{#parent} + {\normalexpanded{\defineconstruction[#tag][\s!handler=\v!notation,\c!level=#level]}% + \setevalue{\??notation#tag:\s!parent}{\??notation}}% + {\normalexpanded{\defineconstruction[#tag][#parent][\s!handler=\v!notation,\c!level=#level]}% + \setevalue{\??note #tag:\s!parent}{\??note#parent}% see later for \s!note + \setevalue{\??notation#tag:\s!parent}{\??notation#parent}}% + \instance\setuevalue{\e!next #tag}{\strc_notations_next {#tag}{\number#level}}% obsolete + \instance\setuevalue{\c!reset#tag}{\strc_notations_reset {#tag}{\number#level}}% obsolete + \instance\setuevalue {#tag}{\strc_notations_command[#tag]}% + \instance\setuevalue{\e!start#tag}{\strc_notations_start [#tag]}% + \instance\setuevalue{\e!stop #tag}{\strc_notations_stop }} + +\appendtoks + \ifx\currentnotationparent\empty + % clone => parent | subclone => clone | subsubclone => subclone + \let\currentnotationsub\empty + \strc_define_commands_notation + {\currentnotationsub\currentnotation}% + \plusone + \empty + \edef\p_levels{\notationparameter\c!levels}% + \dostepwiserecurse\plustwo\p_levels\plusone + {\strc_define_commands_notation + {\v!sub\currentnotationsub\currentnotation}% + \recurselevel + {\currentnotationsub\currentnotation}% + \edef\currentnotationsub{\v!sub\currentnotationsub}}% + \definelist[\currentnotation]% goodie + \else + % clone => parent | subclone => subparent | subsubclone => subsubparent + \let\currentnotationsub\empty + \edef\p_levels{\notationparameter\c!levels}% + \dorecurse\p_levels + {\strc_define_commands_notation + {\currentnotationsub\currentnotation}% + \recurselevel + {\currentnotationsub\currentnotationparent}% + \edef\currentnotationsub{\v!sub\currentnotationsub}}% + \definelist[\currentnotation][\currentnotationparent]% goodie + \fi + \edef\p_counter{\notationparameter\s!counter}% can inherit from parent + \ifx\p_counter\empty % + \let\p_counter\currentnotation + \fi + \doifelsecounter\p_counter\donothing{\strc_notes_define_counter\p_counter}% + \letnotationparameter\s!counter\p_counter + %\strc_notes_setup_counter\currentnotation +\to \everydefinenotation + +\let\p_strc_constructions_title \empty +\let\p_strc_constructions_number\empty + +\protected\setvalue{\??constructioninitializer\v!notation}% + {\let \currentnotation \currentconstruction + \enforced\let\constructionparameter \notationparameter + \enforced\let\constructionnamespace \??notation + \enforced\let\detokenizedconstructionparameter\detokenizednotationparameter + \enforced\let\letconstructionparameter \letnotationparameter + \enforced\let\useconstructionstyleandcolor \usenotationstyleandcolor + \enforced\let\setupcurrentconstruction \setupcurrentnotation + \edef\p_strc_constructions_number{\constructionparameter\c!number}% + \ifx\p_strc_constructions_number\v!yes + \settrue\c_strc_constructions_number_state + \iftrialtypesetting + \strc_counters_save\currentconstructionnumber + \fi + %\strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel + \else + \setfalse\c_strc_constructions_number_state + \fi + \edef\p_strc_constructions_title{\constructionparameter\c!title}% + \ifx\p_strc_constructions_title\v!yes + \settrue\c_strc_constructions_title_state + \else + \setfalse\c_strc_constructions_title_state + \fi} + +\protected\setvalue{\??constructionfinalizer\v!notation}% + {\ifconditional\c_strc_constructions_number_state + \iftrialtypesetting + \strc_counters_restore\currentconstructionnumber + \fi + \fi} + +%D Notations (we simply needed a word that relates to notes and is and sounds like +%D description and enumeration) are a special case in the sense that they are +%D stored, rendered elsewhere and referered to from where they are specified. For +%D that reason they have a different set op main commands. + +% \notation[ref]{title} +% \notation[reference=,title=] +% \startnotation[ref] title \stopnotation + +\protected\def\strc_notations_next {\strc_constructions_next_indeed \namednotationparameter} % #1#2 +\protected\def\strc_notations_reset{\strc_constructions_reset_indeed\namednotationparameter} % #1#2 +%protected\def\strc_notations_set {\strc_constructions_set_indeed \namednotationparameter} % #1#2 + +\newconditional\c_strc_notations_anchored_next + +\def\strc_notations_finalize + {\ifconditional\c_strc_notations_anchored_next + \expandafter\strc_notations_finalize_next + \else + \expandafter\strc_notations_finalize_previous + \fi} + +\def\strc_notations_finalize_previous + {\normalexpanded{\endgroup\noteparameter\c!next}} + +\def\strc_notations_finalize_next + {\endgroup\ignorespaces} + +\tolerant\protected\def\strc_notations_command[#1]#*[#2]% + {\begingroup + \edef\currentnote{#1}% + \strc_constructions_initialize{#1}% + \strc_notes_synchronize + \edef\p_next{\noteparameter\c!anchor}% + \ifx\p_next\v!next % for now only two states + \settrue \c_strc_notations_anchored_next + \else + \setfalse\c_strc_notations_anchored_next + \fi + \ifnotesenabled + \strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel + \fi + \ifhastok={#2}% + \expandafter\strc_notations_command_setups + \else + \expandafter\strc_notations_command_reference + \fi[#2]} + +\def\strc_notations_command_setups[#1]% + {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,#1]% + \strc_notations_wrapup} + +\tolerant\def\strc_notations_command_reference[#1]#*#=% + {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=]% + \strc_notations_wrapup} + +\def\strc_notations_wrapup + {\csname\??constructionnotehandler\currentconstructionhandler\endcsname + \strc_constructions_finalize + \strc_notations_finalize} + +\tolerant\protected\def\strc_notations_start[#1]#*[#2]% + {\begingroup + \edef\currentnote{#1}% + \strc_constructions_initialize{#1}% + \strc_notes_synchronize + \ifnotesenabled + \strc_counters_increment_sub\currentconstructionnumber\currentconstructionlevel + \fi + \ifhastok={#2}% + \expandafter\strc_notations_start_setups + \else + \expandafter\strc_notations_start_reference + \fi[#2]} + +\protected\def\strc_notations_start_setups[#1]% + {\normalexpanded{\def\noexpand\strc_pickup_yes##/\csname\e!stop\currentconstruction\endcsname{\strc_notations_start_setups_indeed[#1]{##1}}}% + \strc_pickup_yes} + +\protected\def\strc_notations_start_setups_indeed[#1]#*#2% + {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference=,\c!title={#2},\c!bookmark=,\c!list=,#1]% + \strc_notations_wrapup} + +\protected\def\strc_notations_start_reference[#1]% + {\normalexpanded{\def\noexpand\strc_pickup_yes##/\csname\e!stop\currentconstruction\endcsname{\strc_notations_start_reference_indeed[#1]{##1}}}% + \strc_pickup_yes} + +\protected\def\strc_notations_start_reference_indeed[#1]#*#2% + {\strc_constructions_register[][\c!label={\descriptionparameter\c!text},\c!reference={#1},\c!title={#2},\c!bookmark=,\c!list=]% + \strc_notations_wrapup} + +\protected\def\strc_notations_stop + {} + +%D A complication is that we need to set up rather specific properties of e.g. +%D footnotes. It is for this reason that we introduce an extra level of +%D indirectness. This way notations don't bark on undefined macros when used in +%D combination. + +\protected\setvalue{\??constructionnotehandler\v!notation}% + {\csname\??constructionnotehandler\currentconstructionhandler:\constructionparameter\c!type\endcsname} + +\protected\setvalue{\??constructionnotehandler\v!notation:}% empty case + {[\currentconstructionhandler:\currentconstruction]} + +%D Here is a simple renderer for notes + +\defineconstructionalternative + [\v!note] + [\c!renderingsetup=\??constructionrenderings:\v!note] + +\startsetups[\??constructionrenderings:\v!note] + \noindent + \leftboundary % experiment, to be done in more places + \llap{\box\constructionheadbox\hskip\constructionparameter\c!distance}% + \useconstructionstyleandcolor\c!style\c!color + \ignorespaces +\stopsetups + +%D We now implement the note definer. + +\installcorenamespace{note} + +\installframedcommandhandler \??note {note} \??note + +\let\setupnotes\setupnote + +% These only concern the inline symbol/number and wrapping of the whole list. + +\setupnotes % not all make sense here + [\c!location=\v!page, + %\c!conversion=, + \c!rule=\v!on, + \c!before=\blank, + \c!bodyfont=\v!small, + \c!anchor=, % can also be v!next + %\c!style=, + %\c!color=, + %\c!after=, + %\c!rulecolor=, + %\c!rulecommand=, + \c!rulethickness=\linewidth, + \c!frame=\v!off, + \c!distance=.125em, % in the text between symbols + % \c!textseparator={,}, % optional separator + \c!columndistance=1em, + % \c!margindistance=.5em, + \c!align=, % also use instead of \c!tolerance + \c!split=\v!tolerant, + \c!width=\makeupwidth, % \ifdim\hsize<\makeupwidth\hsize\else\makeupwidth\fi + \c!height=\textheight, + \c!command=, % \noteparameter\c!numbercommand, % (command in enumeration) too messy, called twice + \c!separator=,% + \c!textcommand=\high, + \c!textstyle=\tx, + %\c!textcolor=, + \c!interaction=\v!yes, + %\c!factor=, + %\c!scope=, % \v!text \v!page + \c!prefixconnector=., + %\c!next=\autoinsertnextspace, + \c!prefix=\v!no, + %\c!continue=\v!no, + \c!paragraph=\v!no, + \c!inbetween=\hskip\emwidth, + \c!symbol=\mathematics{*}, + \c!n=1] + +\setupnotes + [\c!expansion=\v!no, + \c!xmlsetup=, + \s!catcodes=] + +%D Insertions are part of notes. + +% \installcorenamespace{noteinsertion} + +\permanent\def\currentnoteinsertion {\noteparameter\s!insert} +\permanent\def\currentnoteinsertionnumber{\namedinsertionnumber{\noteparameter\s!insert}} + +\appendtoks + \ifx\currentnoteparent\empty + \doifelseinsertion\currentnote + \donothing + {\defineinsertion[\currentnote]% could be an option + \normalexpanded{\t_strc_notes{\the\t_strc_notes\noexpand\strc_notes_process_list{\currentnote}}}}% + \letnoteparameter\s!insert\currentnote + \definenotation[\currentnote][\c!type=\v!note]% + \else + \setexpandednoteparameter\s!insert{\namednoteparameter\currentnoteparent\s!insert}% + \definenotation[\currentnote][\currentnoteparent][\c!type=\v!note]% + \fi + \clf_definenote + {\currentnote}% + {insert}% + \currentnoteinsertionnumber + \relax +\to \everydefinenote + +% maybe we will share this at some point: + +\def\strc_notes_define_counter#tag% todo: move inline + {\definecounter[#tag]% + \registerenumerationcounter{#tag}} + +\appendtoks + \synchronizenotationcounters +\to \everysetupnotation + +\appendtoks + \synchronizenotationcounters +\to \everydefinenotation + +% so far + +%expandafter\let\csname\??constructionstarthandler \v!notation\expandafter\endcsname\csname\??constructionstarthandler \v!enumeration\endcsname +\expandafter\let\csname\??constructionstarthandler \v!notation\expandafter\endcsname\csname\??constructionstarthandler \v!construction\endcsname % no par mess +\expandafter\let\csname\??constructionstophandler \v!notation\expandafter\endcsname\csname\??constructionstophandler \v!enumeration \endcsname +\expandafter\let\csname\??constructioncommandhandler\v!notation\expandafter\endcsname\csname\??constructioncommandhandler\v!enumeration \endcsname +\expandafter\let\csname\??constructiontexthandler \v!notation\expandafter\endcsname\csname\??constructiontexthandler \v!enumeration \endcsname + +\protected\setvalue{\??constructionmainhandler\v!notation}#following% + {\iftrialtypesetting \else + \begingroup + \currentconstructionsynchronize + \c_attr_destination\currentconstructionattribute\relax % todo, whole text + \signalcharacter + \endgroup + \fi#following} + +\protected\setvalue{\??constructionnotehandler\v!notation:\v!note}% in the running text + {\ifnotesenabled + % do be done elsewhere + % + %let\currentnote\currentconstructionmain + \let\currentnote\currentconstruction % else wrong inheritance + % + \iftrialtypesetting + \strc_notes_inject_dummy + \else + \begingroup + \edef\currentnotenumber{\clf_storenote{\currentnote}\currentconstructionlistentry}% + \settrue\processingnote + \ifconditional\c_strc_notes_skip + \glet\lastnotesymbol\strc_notes_inject_symbol_nop + \else + \iftypesettinglines % otherwise problems with \type {xxx} + \ignorelines % makes footnotes work in \startlines ... \stoplines + \fi + \ifconditional\c_strc_notes_symbol + \strc_notes_inject_symbol_yes + \else + \unskip\unskip + \glet\lastnotesymbol\strc_notes_inject_symbol_yes + \fi + \fi + \ifconditional\postponingnotes % todo: per note class + \global\settrue\postponednote + \orelse\ifconditional\inlocalnotes % todo: per note class + \global\settrue\postponednote + \orelse\ifconditional\c_strc_notes_delayed + % probably end notes + \else + \handlenoteinsert\currentnote\currentnotenumber % either an insert or just delayed + \fi + \endgroup + \fi + \fi + \ifconditional\c_strc_notes_skip + \global\setfalse\c_strc_notes_skip + \else + \kern\notesignal\relax % \relax is needed to honor spaces + \fi} + +%D Interaction in notes is somewhat complex due to the way notes get flushed. In +%D principle it is more or less the same as lists but where in lists we pack whole +%D entries, in notes this doesn't happen. Okay, in retrospect we could have made +%D descriptions lists but that will be a backward compatibility mess. At some point +%D a completely new mechanism might show up, but not now. Also, as notes are inserts +%D there is some extra mess to be kept in mind and it's easier to maintain two +%D mechanisms than to combine too much. +%D +%D Interaction is also complicated because we want to provide several variants. For +%D simple reference there is no need for anything special, as page references will +%D do and we store them in the list anyway. But if we want a destination with +%D dimensions we will use an additional destination because we can have only one +%D with the same name and we always have the number as one. + +% interaction: +% +% all : text and number +% number|yes: only number +% text : only text +% +% \dogetsimple : injects + +\installcorenamespace{noteinteractioninline} +\installcorenamespace{noteinteractiondisplay} + +\newconstant\a_strc_notes_symbol_reference +\newconstant\a_strc_notes_number_reference +\newconstant\a_strc_notes_text_reference +\newconstant\a_strc_notes_text_destination + +\let\strc_notes_get_reference_attribute_symbol \empty +\let\strc_notes_get_destination_attribute_symbol\empty + +\def\strc_notes_interaction_check_inline + {\edef\p_interaction{\noteparameter\c!interaction}% + \csname\??noteinteractioninline + \ifcsname\??noteinteractioninline\p_interaction\endcsname\p_interaction\else\v!no\fi + \endcsname} + +\def\strc_notes_interaction_check_display + {\edef\p_interaction{\noteparameter\c!interaction}% + \csname\??noteinteractiondisplay + \ifcsname\??noteinteractiondisplay\p_interaction\endcsname\p_interaction\else\v!no\fi + \endcsname} + +\def\currentnotenumber{0} + +\let\strc_notes_get_reference_attribute_symbol \empty +\let\strc_notes_get_destination_attribute_symbol\empty + +\let\strc_notes_set_reference_attribute_number\donothing +\let\strc_notes_set_reference_attribute_text \donothing +\let\strc_notes_set_destination_attribute_text\donothing + +% inline + +\def\strc_references_prepare_inline_references_nop + {\let\strc_notes_get_reference_attribute_symbol\empty + \let\strc_notes_get_destination_attribute_symbol\empty + \let\strc_notes_set_style_color_inline\strc_notes_set_style_color_inline_nop} + +% \def\strc_references_prepare_inline_references_yes +% {\strc_references_set_simple_reference{symb:\currentnote:\currentnotenumber}% destination +% \strc_references_get_simple_reference{internal(\clf_noteinternal{\currentnote}\currentnotenumber)}% reference +% \edef\strc_notes_get_destination_attribute_symbol{attr\destinationattribute\currentdestinationattribute}% +% \edef\strc_notes_get_reference_attribute_symbol{attr\referenceattribute\currentreferenceattribute}% +% \let\strc_notes_set_style_color_inline\strc_notes_set_style_color_inline_yes} + +\def\strc_references_prepare_inline_references_yes + {\edef\currentnoteinternal{\clf_noteinternal{\currentnote}\currentnotenumber}% + \strc_references_set_simple_reference{*\currentnoteinternal}% destination + \strc_references_get_simple_reference{internal(\currentnoteinternal)}% reference + \edef\strc_notes_get_destination_attribute_symbol{attr\destinationattribute\currentdestinationattribute}% + \edef\strc_notes_get_reference_attribute_symbol{attr\referenceattribute\currentreferenceattribute}% + \let\strc_notes_set_style_color_inline\strc_notes_set_style_color_inline_yes} + +\letvalue{\??noteinteractioninline\v!no }\strc_references_prepare_inline_references_nop +\letvalue{\??noteinteractioninline\v!all }\strc_references_prepare_inline_references_yes +\letvalue{\??noteinteractioninline\v!number}\strc_references_prepare_inline_references_yes +\letvalue{\??noteinteractioninline\v!text }\strc_references_prepare_inline_references_yes +\letvalue{\??noteinteractioninline\v!yes }\strc_references_prepare_inline_references_yes + +% display (for 'all' we need unique text and number attributes so we resolve twice +% as we otherwise don't get the number one which is lapped in the margin so we need +% to explicitly visit it) + +\def\strc_references_prepare_display_references_nop + {\let\strc_notes_set_reference_attribute_number\donothing + \let\strc_notes_set_reference_attribute_text\donothing + \let\strc_notes_set_destination_attribute_text\donothing + \let\strc_notes_set_style_color_display\strc_notes_set_style_color_display_nop} + +\def\strc_references_prepare_display_references_yes_number + {\edef\currentnoteinternal{\clf_noteinternal{\currentnote}\currentnotenumber}% + \ifcase\currentnoteinternal\relax + \strc_references_prepare_display_references_nop + \else + \let\strc_notes_set_reference_attribute_text\donothing + \strc_references_get_simple_reference{*\currentnoteinternal}% reference + \edef\strc_notes_set_reference_attribute_number{\c_attr_reference\currentreferenceattribute}% + \let\strc_notes_set_style_color_display\strc_notes_set_style_color_display_yes + \fi} + +\def\strc_references_prepare_display_references_yes_text + {\edef\currentnoteinternal{\clf_noteinternal{\currentnote}\currentnotenumber}% + \ifcase\currentnoteinternal\relax + \strc_references_prepare_display_references_nop + \else + \strc_references_get_simple_reference{*\currentnoteinternal}% reference + \edef\strc_notes_set_reference_attribute_text{\c_attr_reference\currentreferenceattribute}% + \let\strc_notes_set_reference_attribute_number\donothing + \let\strc_notes_set_style_color_display\strc_notes_set_style_color_display_yes + \fi} + +\def\strc_references_prepare_display_references_yes_all + {\edef\currentnoteinternal{\clf_noteinternal{\currentnote}\currentnotenumber}% + \ifcase\currentnoteinternal\relax + \strc_references_prepare_display_references_nop + \else + \strc_references_get_simple_reference{*\currentnoteinternal}% reference + \edef\strc_notes_set_reference_attribute_text{\c_attr_reference\currentreferenceattribute}% + \strc_references_get_simple_reference{*\currentnoteinternal}% reference + \edef\strc_notes_set_reference_attribute_number{\c_attr_reference\currentreferenceattribute}% + \let\strc_notes_set_style_color_display\strc_notes_set_style_color_display_yes + \fi} + +\letvalue{\??noteinteractiondisplay\v!no }\strc_references_prepare_display_references_nop +\letvalue{\??noteinteractiondisplay\v!all }\strc_references_prepare_display_references_yes_all +\letvalue{\??noteinteractiondisplay\v!number}\strc_references_prepare_display_references_yes_number +\letvalue{\??noteinteractiondisplay\v!text }\strc_references_prepare_display_references_yes_text +\letvalue{\??noteinteractiondisplay\v!yes }\strc_references_prepare_display_references_yes_number + +\let\strc_notes_set_style_color_inline_nop \usenotestyleandcolor +\let\strc_notes_set_style_color_display_nop\usenotationstyleandcolor + +\protected\def\strc_notes_set_style_color_inline_yes#style#color% + {\usenotestyleandcolor#style#color% + \iflocation\strc_notes_set_style_color_special\fi} + +\protected\def\strc_notes_set_style_color_display_yes#style#color% + {\usenotationstyleandcolor#style#color% + \iflocation\strc_notes_set_style_color_special\fi} + +\def\strc_notes_set_style_color_special + {\iftrialtypesetting + % keep + \orelse\ifx\currentcolorparameter\empty + \scratchcounter\clf_notedeltapage{\currentnote}\currentnotenumber\relax % todo calculate once + \setlocationcolorspecified\scratchcounter + \fi} + +\setvalue{\??constructiontexthandler\v!notation}% + {\begingroup + % we need to retrigger the reference as otherwise it gets lost because we don't do nested + % references with the same id ... maybe some day if we can figure out a nice heuristic ... + % the problem is that normally it's no issue but here we lap into the margin, so maybe that's + % a criterium + % \strc_notes_interaction_check_display + \strc_notes_set_reference_attribute_number + \dotagsetnotation + \strc_notes_set_style_color_display\c!headstyle\c!headcolor + \strc_enumerations_text + \endgroup} + +% in mkii the pointer only showed up in pagewise notes + +\protected\def\strc_notes_inject_pointer % todo calculate once + {\ifcase\clf_notedeltapage{\currentnote}\currentnotenumber\relax\relax + % unknown + \or + % same page + \or + \noteparameter\c!symbolcommand{\symbol[\v!note:\v!nextpage]}% + \or + \noteparameter\c!symbolcommand{\symbol[\v!note:\v!previouspage]}% + \fi} + +\protected\def\strc_notes_inject_symbol_yes + {\strc_notes_inject_symbol_indeed\conditionaltrue} + +\protected\def\strc_notes_inject_symbol_nop + {\strc_notes_inject_symbol_indeed\conditionalfalse} + +\definemargindata + [strc_notes_destination_margin] + [\v!left] + [\c!margin=\zeropoint, + \c!width=\zeropoint, + \c!style=, + \c!color=] + +\protected\def\strc_notes_inject_symbol_indeed#synchronize% + {\ifconditional\c_strc_notations_anchored_next\else + \removeunwantedspaces + \doifelseitalic\/\donothing % Charles IV \footnote{the fourth} + \fi + \ifdim\lastkern=\notesignal + % \kern\noteparameter\c!distance % yes or no note font? or main text + \strc_notes_inject_separator + \fi + \nobreak + \begingroup + \strc_notes_interaction_check_inline + \strc_notes_set_style_color_inline\c!textstyle\c!textcolor + \hbox \strc_notes_get_reference_attribute_symbol \strc_notes_get_destination_attribute_symbol \bgroup + % \hbox \strc_notes_get_reference_attribute_symbol \bgroup \strc_notes_destination_hack + \strc_references_flush_destination_nodes % a bit late but ok + \dostarttagged\t!descriptionsymbol\currentnote + \dotagsetnotesymbol + \noteparameter\c!textcommand{\clf_noteprefixednumber{\currentnote}\currentnotenumber\relax}% + % the next one can cycle so we need to make sure it has no advance width + \doif{\noteparameter\c!indicator}\v!yes\strc_notes_inject_pointer + \dostoptagged + \egroup + \endgroup + \glet\lastnotesymbol\relax} + +\protected\def\strc_notes_inject_dummy % temp hack + {\removeunwantedspaces + \doifelseitalic\/\donothing % Charles IV \footnote{the fourth} + \ifdim\lastkern=\notesignal + % \kern\noteparameter\c!distance % yes or no note font? or main text + \strc_notes_inject_separator + \fi + \nobreak + \hpack to .5\emwidth{}% + \glet\lastnotesymbol\relax} + +\protected\def\strc_notes_inject_separator % patch by WS due to request on list + {\edef\p_textseparator{\noteparameter\c!textseparator}% + \ifx\p_textseparator\empty + \kern\noteparameter\c!distance + \else + % skip or kern + \nobreak + \hbox\bgroup + \strc_notes_interaction_check_inline + \strc_notes_set_style_color_inline\c!textstyle\c!textcolor + \noteparameter\c!textcommand{\p_textseparator}% + \kern\noteparameter\c!distance + \egroup + \nobreak + \fi} + +% this needs a further cleanup ... soon as it's a slow mechanism +% +% -- set breakpoint in descriptions +% -- reset after trialtypesetting +% -- that way we can trick the symbol space + +% removed: +% +% \pushsomestates +% +% core-ins -> obsolete +% +% saveinsertiondata +% restoreinsertiondata +% saveinsertionbox +% eraseinsertionbackup +% restoreinsertionbackup + +\def\savenotedata {} % \writestatus{todo}{save note data}} +\def\restorenotedata {} % \writestatus{todo}{restore note data}} +\def\savenotecontent {} % \writestatus{todo}{save note content}} +\def\restorenotecontent{} % \writestatus{todo}{restore note content}} +\def\erasenotebackup {} % \writestatus{todo}{erase note backup}} + +% page-set: + +\def\enablenotes {\writestatus{todo}{enable notes}} +\def\disablenotes {\writestatus{todo}{disable notes}} +\def\savenotes {\writestatus{todo}{save notes}} +\def\flushsavednotes{\writestatus{todo}{flush notes}} + +% experiment: (compare scope=text and scope=page) +% +% \definenote[mynote][way=bytext,location=text,width=\leftmarginwidth,scope=page,rule=,before=,after=,factor=0] +% \setuptexttexts[margin][\vbox to \textheight{\placenotes[mynote]\vfill}][] + +%D Footnotes are can be characterized by three components: +%D +%D \startitemize[packed] +%D \item a small number \footnote {a footnote number} or symbol {\setupfootnotes +%D [conversion=set 2]\footnote {a footnote}} +%D \item and a similar mark at the bottom of the page +%D \item followed by some additional text +%D \stopitemize +%D +%D Because footnotes are declared at the location of their reference they can be +%D seen as a special kind of floating bodies. Their placement is postponed but has +%D to be taken into account in the pagebreak calculations. This kind of calculations +%D are forced by using \type{\insert}s and dealing with all cases is not trivial. + +%D \macros +%D {notesenabled} +%D +%D We need a couple of states because at some moments we don't want to mess around +%D with inserts at all. Take for instance a table of contents. And so we can +%D temporary disable footnotes by saying +%D +%D \starttyping +%D \notesenabledfalse +%D \stoptyping + +\newif\ifnotesenabled \notesenabledtrue + +% better mark a note .. once flushed no more flushing + +%appendtoks \notesenabledfalse \to \everymarking +\appendtoks \notesenabledfalse \to \everybeforepagebody +\appendtoks \notesenabledfalse \to \everystructurelist % quick hack +\appendtoks \notesenabledfalse \to \everysimplifycommands % quick hack +\appendtoks \notesenabledfalse \to \everypreroll % quick hack + +%D Often we need to process the whole set of notes and to make that fast, we use a +%D token register: + +% we have several synchronizers: +% +% - after a definition +% - after a specific setup +% - after a general setup (inheritance of dimensions) +% - just before a note is typeset + +\newtoks\t_strc_notes + +\let\strc_notes_process_list\gobbleoneargument + +\protected\def\strc_notes_process#action% argument is a \macro that uses \currentnote + {\def\strc_notes_process_list##1{\edef\currentnote{##1}\let\currentdescription\currentnote#action}% + \the\t_strc_notes} + +\newtoks\everychecknote % just before a note is typeset +\newtoks\everysynchronizenote % after a general setup has happened + +\appendtoks + \ifx\currentnote\empty \else + \setupnotations[\currentnote][]% also a synchronize + \fi +\to \everysynchronizenote + +\def\strc_notes_synchronize + {\the\everysynchronizenote} % we can speed this one up if needed by avoiding the commalist + +\appendtoks + \strc_notes_process\strc_notes_synchronize +\to \everysetupnoteroot + +\appendtoks + \the\everysynchronizenote +\to \everydefinenote + +% \starttext +% text \startfootnote Test.\stopfootnote +% test \footnote{xxxx} \subfootnote{xxxx} +% test \footnote{xxxx} \subfootnote{xxxx} +% \stoptext + +\installcorenamespace{notecommand} +\installcorenamespace{notealign} +\installcorenamespace{notepenalty} +\installcorenamespace{noterule} + +\permanent\protected\def\currentnoterulecommand{\begincsname\??notecommand\currentnote\endcsname} +\permanent\protected\def\currentnoterulealign {\begincsname\??notealign \currentnote\endcsname} + +\permanent\protected\def\currentnoterulecommandcommand{\noteparameter\c!rulecommand} +\permanent\protected\def\currentnoterulecommandnormal {\normalnoterule} % no let as it can be changed afterwards + +\permanent\protected\def\letcurrentnoterulecommand{\enforced\expandafter\let\csname\??notecommand\currentnote\endcsname} +\permanent\protected\def\letcurrentnoterulealign {\enforced\expandafter\let\csname\??notealign \currentnote\endcsname} + +\appendtoks + \enforced\expandafter\let\csname\??notecommand\currentnote\endcsname\currentnoterulecommandnormal + \enforced\expandafter\let\csname\??notealign \currentnote\endcsname\lefttoright +\to \everysynchronizenote + +\def\strc_notes_set_rule + {\letcurrentnoterulecommand\relax % so we default to nothing + \letcurrentnoterulealign \relax + \processcommacommand[\noteparameter\c!rule]\strc_notes_set_rule_step} + +\def\strc_notes_set_rule_step#alternative% + {\begincsname\??noterule#alternative\endcsname} + +\def\strc_notes_set_rule_autodir + {\doifelserighttoleftinbox\currentnoteinsertionnumber\righttoleft\lefttoright} + +\setvalue{\??noterule \v!command}{\letcurrentnoterulecommand\currentnoterulecommandcommand} +\setvalue{\??noterule \v!on}{\letcurrentnoterulecommand\currentnoterulecommandnormal} +\setvalue{\??noterule \v!normal}{\letcurrentnoterulecommand\currentnoterulecommandnormal} +\setvalue{\??noterule \v!left}{\letcurrentnoterulecommand\currentnoterulecommandnormal + \letcurrentnoterulealign \lefttoright} +\setvalue{\??noterule \v!right}{\letcurrentnoterulecommand\currentnoterulecommandnormal + \letcurrentnoterulealign \righttoleft} +\setvalue{\??noterule\v!paragraph}{\letcurrentnoterulecommand\currentnoterulecommandnormal + \letcurrentnoterulealign \strc_notes_set_rule_autodir} +\setvalue{\??noterule \v!off}{\letcurrentnoterulecommand\relax} + +\appendtoks + \strc_notes_set_rule +\to \everysynchronizenote + +\permanent\def\currentnotepenalty + {\ifcsname\??notepenalty\noteparameter\c!split\endcsname + \lastnamedcs + \else + \numexpr\noteparameter\c!split\relax + \fi} + +\setnewconstant\notepenaltytolerant \zerocount +\setnewconstant\notepenaltystrict 9999 +\setnewconstant\notepenaltyverystrict\maxdimen + +\letvalue{\??notepenalty\v!tolerant }\notepenaltytolerant +\letvalue{\??notepenalty\v!strict }\notepenaltystrict +\letvalue{\??notepenalty\v!verystrict}\notepenaltyverystrict +\letvalue{\??notepenalty }\notepenaltytolerant + +%D The following switch can be used to disable limiting the height of the footnote +%D area, something that is needed in multi column balancing. Use this switch with +%D care. + +\newif\ifnotelimit \notelimittrue % shared + +\def\strc_notes_set_factor + {\edef\p_factor{\noteparameter\c!factor}% + \ifx\p_factor\empty \else + \ifnum\p_factor<\zerocount \else +% \global + \count\currentnoteinsertionnumber\p_factor % new: global + \fi + \fi} + +\appendtoks + \strc_notes_set_factor +\to \everysynchronizenote + +% locations: + +\installcorenamespace{notelocationvariant} +\installcorenamespace{notepositionvariant} +\installcorenamespace{notedelayedvariant} +\installcorenamespace{notelocation} + +\newconditional\c_strc_notes_delayed + +\protected\def\strc_notes_set_delayed_yes{\settrue \c_strc_notes_delayed} +\protected\def\strc_notes_set_delayed_nop{\setfalse\c_strc_notes_delayed} + +\setvalue{\??notelocation\v!page }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_nop + \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_page} +\setvalue{\??notelocation\v!columns }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_nop + \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_columns} +\setvalue{\??notelocation\v!lastcolumn }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_nop + \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_lastcolumn} +\setvalue{\??notelocation\v!firstcolumn}{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_nop + \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_firstcolumn} +\setvalue{\??notelocation\v!none }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_yes + \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_none} +\setvalue{\??notelocation\v!text }{\letvalue{\??notedelayedvariant \currentnote}\strc_notes_set_delayed_yes + \letvalue{\??notelocationvariant\currentnote}\strc_notes_set_location_text} +\setvalue{\??notelocation\v!high }{\letvalue{\??notepositionvariant\currentnote}\strc_notes_set_position_high} +\setvalue{\??notelocation\v!bottom }{\letvalue{\??notepositionvariant\currentnote}\strc_notes_set_position_bottom} + +\setvalue{\??notedelayedvariant \??notedelayedvariant }{\strc_notes_set_delayed_nop} % not let +\setvalue{\??notepositionvariant\??notepositionvariant}{\strc_notes_set_position_bottom} % not let +\setvalue{\??notelocationvariant\??notelocationvariant}{\strc_notes_set_location_page} % not let + +\protected\def\strc_notes_set_delayed + {\csname\??notedelayedvariant + \ifcsname\??notedelayedvariant\currentnote\endcsname + \currentnote + \else + \??notedelayedvariant + \fi + \endcsname} + +\protected\def\strc_notes_set_position + {\csname\??notepositionvariant + \ifcsname\??notepositionvariant\currentnote\endcsname + \currentnote + \else + \??notepositionvariant + \fi + \endcsname} + +\protected\def\strc_notes_set_location + {\csname\??notelocationvariant + \ifcsname\??notelocationvariant\currentnote\endcsname + \currentnote + \else + \??notelocationvariant + \fi + \endcsname} + +\protected\def\strc_notes_set_variants + {\normalexpanded{\rawprocesscommalist[\noteparameter\c!location]\strc_notes_set_location_step}} + +\protected\def\strc_notes_set_location_step#alternative% the insert related one + {\begincsname\??notelocation#alternative\endcsname} + +\appendtoks + \strc_notes_set_variants + \strc_notes_set_delayed +\to \everysynchronizenote + +\newskip \s_strc_notes_distance % we need to implement stretch +\newcount\c_strc_notes_columns + +\newskip \s_strc_notes_before +\newskip \s_strc_notes_inbetween +\newconditional\c_strc_notes_first_flushed + +\appendtoks + \edef\p_spacebefore{\rootnoteparameter\c!spacebefore}% + \ifx\p_spacebefore\empty + \global\s_strc_notes_before\zeropoint + \else + \setbox\scratchbox\vbox{\blank[\p_spacebefore]\global\s_strc_notes_before\lastskip}% + \fi + \edef\p_spaceinbetween{\rootnoteparameter\c!spaceinbetween}% + \ifx\p_spaceinbetween\empty + \global\s_strc_notes_inbetween\zeropoint + \else + \setbox\scratchbox\vbox{\blank[\p_spaceinbetween]\global\s_strc_notes_inbetween\lastskip}% + \fi +\to \everysynchronizenote + +\def\strc_notes_set_distance + {\begingroup + \restoreglobalbodyfont + \setbox\scratchbox\vbox % no reuse as it can mirror + {\forgetall + \dontcomplain + \noteparameter\c!before + \placenoterule + \strut + \noteparameter\c!after}% + % also dp now + \scratchdimen\dimexpr\htdp\scratchbox-\lineheight\relax + \ifgridsnapping + \getnoflines\scratchdimen + \scratchdimen\noflines\lineheight + \fi + \expandafter\endgroup\expandafter + \s_strc_notes_distance\the\scratchdimen\relax} + +\def\strc_notes_set_columns + {\c_strc_notes_columns\noteparameter\c!n\relax + \ifcase\c_strc_notes_columns + \c_strc_notes_columns\plusone + \fi} + +\def\strc_notes_set_location_page + {\setfalse\c_strc_notes_delayed + \strc_notes_set_distance + \strc_notes_set_columns + \page_inserts_set_location\currentnoteinsertion\v!page % \setupinsertion[\currentnote][\c!location=\v!page]% + \global\count\currentnoteinsertionnumber\numexpr(\plusthousand/\c_strc_notes_columns)*\nofmulticolumns\relax + \global\dimen\currentnoteinsertionnumber\ifnotelimit\dimexpr\noteparameter\c!height*\c_strc_notes_columns\relax\else\maxdimen\fi + \global\skip \currentnoteinsertionnumber\s_strc_notes_distance} + +\def\strc_notes_set_location_columns + {\setfalse\c_strc_notes_delayed + \strc_notes_set_distance + \strc_notes_set_columns + \ifnum\currentnofcolumns=\zerocount + \c_strc_notes_columns\plusone + \fi + \page_inserts_set_location\currentnoteinsertion\v!columns % \setupinsertion[\currentnote][\c!location=\v!columns]% + \global\count\currentnoteinsertionnumber\numexpr\plusthousand/\c_strc_notes_columns\relax + \global\dimen\currentnoteinsertionnumber\ifnotelimit\dimexpr\noteparameter\c!height*\c_strc_notes_columns\relax\else\maxdimen\fi + \global\skip \currentnoteinsertionnumber\s_strc_notes_distance} + +\def\strc_notes_set_location_somecolumn#whatcolumn% + {\setfalse\c_strc_notes_delayed + \strc_notes_set_distance + \strc_notes_set_columns + \page_inserts_set_location\currentnoteinsertion#whatcolumn% \setupinsertion[\currentnote][\c!location=#whatcolumn]% + \global\count\currentnoteinsertionnumber\plusthousand + \global\dimen\currentnoteinsertionnumber\ifnotelimit\noteparameter\c!height\else\maxdimen\fi + \global\skip \currentnoteinsertionnumber\s_strc_notes_distance} + +\def\strc_notes_set_location_firstcolumn{\strc_notes_set_location_somecolumn\v!firstcolumn} +\def\strc_notes_set_location_lastcolumn {\strc_notes_set_location_somecolumn\v!lastcolumn } + +\def\strc_notes_set_location_text % we don't use inserts anyway (e.g. endnotes) + {\settrue\c_strc_notes_delayed + \clf_setnotestate{\currentnote}{store}% + \page_inserts_set_location\currentnoteinsertion\v!text % \setupinsertion[\currentnote][\c!location=\v!text]% + \global\count\currentnoteinsertionnumber\zerocount + \global\dimen\currentnoteinsertionnumber\maxdimen + \global\skip \currentnoteinsertionnumber\zeropoint} + +\let\strc_notes_set_location_none\strc_notes_set_location_text + +\def\strc_notes_set_properties + {\strc_notes_set_columns + \strc_notes_set_distance + \strc_notes_set_location + \strc_notes_set_delayed} + +\let\strc_notes_set_position_high\relax + +\def\strc_notes_set_position_bottom + {\settrue\c_notes_bottom_present} + +\appendtoks + \strc_notes_set_properties +\to \everysynchronizenote + +%D A fast checker for bottom notes being used: + +\newconditional\c_notes_bottom_present + +\def\strc_notes_check_if_bottom_present_indeed % in otr ! + {\ifvoid\currentnoteinsertionnumber\else + \strc_notes_set_position + \fi} + +\def\strc_notes_check_if_bottom_present_step + {\ifconditional\c_notes_bottom_present\else\strc_notes_check_if_bottom_present_indeed\fi} + +\def\strc_notes_check_if_bottom_present + {\setfalse\c_notes_bottom_present + \strc_notes_process\strc_notes_check_if_bottom_present_step} + +% Example of using factor: +% +% \definenote[mynote][way=bypage,location=text,width=\marginwidth,rule=,before=,factor=0] +% \setuplayout[backspace=5cm,margin=3cm,margindistance=.5cm,width=middle] +% \setuptexttexts[margin][\vbox to \textheight{\placenotes[mynote]\vfill}][] +% \starttext +% \dorecurse{10}{test \mynote{one one one one one one} \input zapf \mynote{one one one one one one} } +% \stoptext + +%D The noterule can be a graphic and therefore calling this setup macro at every +%D skipswitch is tricky (many many MP runs). Let's just reserve a few points, that +%D probably match those of the stretch component. A bit messy: + +\permanent\protected\def\placenoterule + {\begingroup + \currentnoterulealign + \currentnoterulecommand + \par + \endgroup} + +\permanent\protected\def\normalnoterule + {\ifvmode + \dontleavehmode \blackrule + [\c!color=\noteparameter\c!rulecolor, + \c!width=.2\hsize, + \c!height=\noteparameter\c!rulethickness, + \c!depth=\zeropoint]% + \endgraf + \kern\strutdepth + \fi} + +%D The formatting depends on the width of the table, so we have to set \type {n} to +%D zero. +%D +%D \starttyping +%D \startbuffer +%D \bTABLE +%D \bTR \bTD one \footnote{\dorecurse{10}{abcd }} \eTD \bTD two \eTD \eTR +%D \bTR \bTD three fout five six seven eight nine \eTD \bTD ten \eTD \eTR +%D \eTABLE +%D \stopbuffer +%D +%D \startlocalfootnotes[n=0,location={text,none}] +%D \placelegend[n=2]{\getbuffer}{\placelocalfootnotes} +%D \stoplocalfootnotes +%D \stoptyping + +%D \macros +%D {footnote} +%D +%D A footnote can have a reference as optional argument and therefore its formal +%D specification looks like: +%D +%D \showsetup{footnote} +%D +%D This command has one optional command: the reference. By saying \type{[-]} the +%D number is omitted. The footnote command is not that sensitive to spacing, so it's +%D quite legal to say: +%D +%D \startbuffer +%D Users of \CONTEXT\ must keep both feet \footnote {Given they have two.} on the +%D ground and not get confused \footnote {Or even crazy.} by all those obscure +%D \footnote {But fortunately readable.} parameters. +%D \stopbuffer +%D +%D \typebuffer +%D +%D When setting the \type{conversion} to \type{set 2} we get +%D something like: +%D +%D \bgroup +%D \startnarrower +%D \setupfootnotes[conversion=set 1] +%D \getbuffer +%D \stopnarrower +%D \egroup +%D +%D Typesetting footnotes is, at least for the moment, disabled when reshaping boxes. +%D The additional macro \type {\footnotetext} and the associated \type {\note} macro +%D were implemented at request of users on the mailing list and a suggestion by taco +%D to split of the symbol placement. I decided to merge this functionality with the +%D existing \type {\note} functionality. + +\newconditional\c_strc_notes_symbol \settrue\c_strc_notes_symbol % not used +\newconditional\c_strc_notes_skip + +\permanent\protected\def\setnote [#tag]{\csname#tag\endcsname} +\permanent\protected\def\setnotetext[#tag]{\global\settrue\c_strc_notes_skip\csname#tag\endcsname} + +\permanent\protected\def\handlenoteinsert#tag#id% + {\begingroup + \edef\currentnote{#tag}% + \strc_constructions_initialize{#tag}% + \strc_notes_synchronize + \the\everybeforenoteinsert + \insert\currentnoteinsertionnumber\bgroup + \the\everyinsidenoteinsert\relax + \usesetupsparameter\noteparameter % experimental + \useinterlinespaceparameter\noteparameter + \doifelse{\noteparameter\c!paragraph}\v!yes + {\nointerlineskip + \startvboxtohboxseparator + \noteparameter\c!inbetween + \stopvboxtohboxseparator + \startvboxtohbox + \handlenoteitself{#tag}{#id}% + \stopvboxtohbox} + {\handlenoteitself{#tag}{#id}}% + \egroup + \the\everyafternoteinsert + \endgroup} + +\permanent\protected\def\betweennoteitself#tag% used ? + {\edef\currentnote{#tag}% + \doif{\noteparameter\c!paragraph}\v!yes{\noteparameter\c!inbetween}} + +\permanent\protected\def\handlenoteitself#tag#id% + {\edef\currentnotenumber{#id}% + \edef\currentnote{#tag}% + \strc_constructions_initialize{#tag}% + \strc_notes_synchronize + \edef\currentconstructionlistentry{\clf_notelistindex{\currentnote}#id}% index in list cache + % as we can have collected notes (e.g. in tables) we need to recover + % \currentdescriptionattribute and \currentdescriptionsynchronize + % + \reinstatecachedconstructionnumberentry\currentconstructionlistentry % we could store the number in the entry (e.g. needed when local notes in table) + % + \dontcomplain + %begingroup + \strc_notes_interaction_check_display + \strc_notes_set_reference_attribute_text + \strc_constructions_stored_start + \begstrut + \strc_references_flush_destination_nodes + \strc_notes_set_destination_attribute_text + \strc_notes_inject_text\relax + \ifvmode\obeydepth\else\endstrut\fi % \obeydepth is new per 2015-01-10 + \strc_constructions_stored_stop + %endgroup + } + +\protected\def\strc_notes_inject_text % hm main? + {\clf_savedlisttitle{\currentconstructionmain}\currentconstructionlistentry\relax} + +\let\startpushnote\relax +\let\stoppushnote \relax + +\newsignal\notesignal + +\newconditional\processingnote +\newconditional\postponednote + +\newtoks\everybeforenoteinsert +\newtoks\everyinsidenoteinsert +\newtoks\everyafternoteinsert + +\permanent\protected\def\doifelseinnote + {\ifconditional\processingnote + \expandafter\firstoftwoarguments + \else + \expandafter\secondoftwoarguments + \fi} + +\appendtoks + \enforced\let\flushnotes \relax + \enforced\let\postponenotes\relax + \forgetall + \resetallattributes % new, we don't want color bleed into notes + \inheritmaintextcolor % but we do want to obey the textcolor +\to \everybeforenoteinsert + +\def\strc_notes_set_penalties + {% stored in insert node + \floatingpenalty \currentnotepenalty + % used when typesetting + \interlinepenalty\plushundred % plain value + % used when we need to split in columns + \ifnum\noteparameter\c!n>\plusone + \penalty\zerocount % otherwise no split in columns, maybe just always (tex just adds it to accumulated) + \fi} + +\appendtoks + \strc_notes_set_penalties + \forgetall % again + \strc_notes_set_bodyfont + \redoconvertfont % to undo \undo calls in in headings etc + \splittopskip\strutht % not actually needed here + \splitmaxdepth\strutdp % not actually needed here + % + % not: + % + % \leftmargindistance \noteparameter\c!margindistance + % \rightmargindistance\leftmargindistance + % \ifnum\noteparameter\c!n=\zerocount % no ifcase new 31-07-99 ; always ? + % \doifnotinset{\noteparameter\c!width}{\v!fit,\v!broad}\setnotehsize % ? + % \fi + % + \pickupattributes +\to \everyinsidenoteinsert + +%D Nasty, the might be more: + +\appendtoks \strc_itemgroups_push \to \everybeforenoteinsert +\appendtoks \strc_itemgroups_pop \to \everyafternoteinsert + +% maybe but better use [scope=local] here +% +% \appendtoks +% \setfalse\inhibitmargindata +% \to \everyinsidenoteinsert + +\setupnotes + [\c!width=\v!auto] + +\permanent\protected\def\setnotehsize + {\ifinsidemulticolumns + \setnoteparameter\c!width{\makeupwidth}% + \else + \edef\p_width{\noteparameter\c!width}% + \ifx\p_width\v!auto + % \ifinsidecolumns + \setnoteparameter\c!width{\ifdim\hsize<\makeupwidth\hsize\else\makeupwidth\fi}% + % \else + % \setnoteparameter\c!width{\makeupwidth}% + % \fi + \orelse\ifx\p_width\empty + \setnoteparameter\c!width{\hsize}% + \fi + \fi + \hsize\noteparameter\c!width\relax} + +\appendtoks + % only needed when columns (could be three \set...) + \setnotehsize + \setsimplecolumnshsize[\c!distance=\noteparameter\c!columndistance,\c!n=\noteparameter\c!n,\c!width=\noteparameter\c!width]% +\to \everyinsidenoteinsert + +%D Normally footnotes are saved as inserts that are called upon as soon as the +%D pagebody is constructed. The footnote insertion routine looks just like the +%D \PLAIN\ \TEX\ one, except that we check for the end note state. + +% testcase for split bottom alignment see (a) below +% +% \dorecurse{6}{\input tufte\footnote{\input ward \input tufte \relax}} + +\newconditional\c_strc_notes_first_placed + +\permanent\protected\def\placenoteinserts + {\setfalse\c_strc_notes_first_placed + \strc_notes_process\strc_notes_place_inserts} + +\def\strc_notes_place_inserts + {\strc_notes_set_delayed % \strc_notes_synchronize % we need to know if it's delayed + \ifconditional\c_strc_notes_delayed \else + \ifdim\ht\currentnoteinsertionnumber>\zeropoint % or a faster delayed test + \strc_notes_place_inserts_indeed + \settrue\c_strc_notes_first_placed + \fi + \fi} + +\def\strc_notes_place_inserts_indeed + {\relax + \ifdim\ht\currentnoteinsertionnumber>\zeropoint + \endgraf + \ifvmode + \whitespace + \ifconditional\c_strc_notes_first_placed + \edef\p_spaceinbetween{\noteparameter\c!spaceinbetween}% + \ifx\p_spaceinbetween\empty\else + \blank[\p_spaceinbetween]% + \fi + \else + \edef\p_spacebefore{\noteparameter\c!spacebefore}% + \ifx\p_spacebefore\empty\else + \blank[\p_spacebefore]% + \fi + \fi + \noteparameter\c!before + \fi + \placenoterule + \bgroup + \strc_notes_set_bodyfont + \setbox\scratchbox\hbox + {\strc_notes_flush_inserts}% + \page_postprocessors_linenumbers_deepbox\scratchbox + \setbox\scratchbox\hbox + {\setupcurrentnote + [\c!location=, + \c!width=\v!fit, + \c!height=\v!fit, + \c!strut=\v!no, + \c!offset=\v!overlay]% + \inheritednoteframed + {\ifzeropt\dp\scratchbox % this hack is needed because \vadjust + \hpack{\lower\strutdp\box\scratchbox}% % in margin number placement + \else % hides the (always) present depth + \box\scratchbox + \fi}}% + \setbox\scratchbox\hpack{\lower\strutdepth\box\scratchbox}% + \dp\scratchbox\strutdepth % so we know that it has the note bodyfont depth + \ifvmode + \nointerlineskip % else sometimes empty line + \fi + \box\scratchbox + \egroup + \endgraf + \ifvmode + \noteparameter\c!after + \fi + \fi} + +\def\strc_notes_flush_inserts + {\ifcase\noteparameter\c!n\relax + % should not happen + \or + \strc_notes_flush_inserts_normal + \else + \strc_notes_flush_inserts_columns + \fi} + +\def\strc_notes_flush_inserts_normal + {\strc_notes_flush_global + \obeydepth} % (a) added , since split footnotes will not align properly + +\def\strc_notes_flush_inserts_columns + {\begingroup + \setnotehsize % probably still not ok for columns + \startsimplecolumns[\c!distance=\noteparameter\c!columndistance,\c!n=\noteparameter\c!n,\c!width=\noteparameter\c!width]% + \strc_notes_flush_global + \stopsimplecolumns + \endgroup} + +% idea: tag with attr and then just flush them again + +\def\strc_notes_flush_global + {\begingroup + \useinterlinespaceparameter\noteparameter + \doifelse{\noteparameter\c!paragraph}\v!yes + {\leftorrightvbox % cf mail from ws to list + {\starthboxestohbox + \iftrialtypesetting\unvcopy\else\unvbox\fi\currentnoteinsertionnumber + \stophboxestohbox}} + {\iftrialtypesetting\unvcopied\else\unvboxed\fi\currentnoteinsertionnumber}% + \endgroup} + +%D Supporting end notes is surprisingly easy. Even better, we can combine this +%D feature with solving the common \TEX\ problem of disappearing inserts when +%D they're called for in deeply nested boxes. The general case looks like: +%D +%D \starttyping +%D \postponenotes +%D \.box{whatever we want with footnotes} +%D \flushnotes +%D \stoptyping +%D +%D This alternative can be used in headings, captions, tables etc. The latter one +%D sometimes calls for notes local to the table, which can be realized by saying +%D +%D \starttyping +%D \setlocalfootnotes +%D some kind of table with local footnotes +%D \placelocalfootnotes +%D \stoptyping +%D +%D Postponing is accomplished by simply redefining the (local) insert operation. A +%D not too robust method uses the \type{\insert} primitive when possible. This +%D method fails in situations where it's not entirely clear in what mode \TEX\ is. +%D Therefore the auto method can is to be overruled when needed. + +\newconditional\postponingnotes + +% we need a proper state: normal, postponing, flushing + +\permanent\protected\def\postponenotes % will be locally overloaded + {\ifcase\insertionmigrationmode + \ifconditional\postponingnotes\else + \global\settrue\postponingnotes + \glet\flushnotes\doflushnotes + \clf_postponenotes + \fi + \fi} + +\let\flushnotes\relax + +% also \ifcase\insertionmigrationmode here, needs testing: + +\permanent\protected\def\startpostponingnotes % experimental, page-mix + {\ifconditional\postponingnotes\else + \global\settrue\postponingnotes + %\glet\flushnotes\doflushnotes + \clf_postponenotes + \fi} + +\permanent\protected\def\stoppostponingnotes % experimental, page-mix + {\doflushnotes} + +\permanent\protected\def\doflushnotes + {\ifconditional\postponingnotes + \begingroup + \enforced\let\flushnotes \relax + \enforced\let\postponenotes\relax + \ifconditional\postponednote + \ifhmode + % needed for tagging ... otherwise we get some weird node free error + \signalcharacter + \fi + \fi + \clf_flushpostponednotes% this also resets the states ! + \global\setfalse\postponednote + \global\setfalse\postponingnotes + \glet\flushnotes\relax + \endgroup + \fi} + +%D \macros +%D {startlocalfootnotes,placelocalfootnotes} +%D +%D The next two macros can be used in for instance tables, as we'll demonstrate +%D later on. +%D +%D \showsetup{startlocalfootnotes} +%D \showsetup{placelocalfootnotes} + +% todo: compatibility mode: when first arg is assignment or missing, then all + +\newtoks\everyplacelocalnotes + +\appendtoks + \enforced\let\flushnotes \relax + \enforced\let\postponenotes\relax +\to \everyplacelocalnotes + +\newconditional\inlocalnotes + +\permanent\tolerant\protected\def\startlocalnotes[#list]% grouping ? (we used to have a second argument ... settings) + {\def\localnoteslist{#list}% + \settrue\inlocalnotes + \processcommacommand[\localnoteslist]\strc_notes_local_start_step} + +\permanent\protected\def\stoplocalnotes + {\processcommacommand[\localnoteslist]\strc_notes_local_stop_step + \setfalse\inlocalnotes} + +\let\p_strc_notes_continue\empty + +\def\strc_notes_local_start_step#tag% + {\p_strc_notes_continue{\noteparameter\c!continue}% + \ifx\p_strc_notes_continue\v!yes \else + \strc_counters_save{#tag}% + \strc_counters_reset{#tag}% + \fi + \clf_savenote{#tag}{store}} + +\def\strc_notes_local_stop_step#tag% + {\p_strc_notes_continue{\noteparameter\c!continue}% + \ifx\p_strc_notes_continue\v!yes \else + \strc_counters_restore{#tag}% + \fi + \clf_restorenote{#tag}} + +\permanent\tolerant\protected\def\placelocalnotes[#tag]#spacer[#settings]% + {\doif{\clf_getnotestate{#tag}}{store}{\strc_notes_local_place_indeed{#settings}{#tag}}} + +\def\strc_notes_local_place_indeed#settings#tag% + {\begingroup + \edef\currentnote{#tag}% is already set? + \the\everyplacelocalnotes + % beware, we cannot trust setting \currentnote here + \setupcurrentnote[#settings]% later we set height etc for framed + \strc_notes_place_local_alternative + \strc_notes_set_properties % restore globals (if needed) + \endgroup + }% TODO: just restore properties \the\everychecknote} % we need to restore the old state + +%D These commands can be used like: +%D +%D \startbuffer +%D \startlocalnotes[footnote] +%D \placetable +%D {Some Table} +%D \placeontopofeachother +%D {\starttable[|l|r|] +%D \HL +%D \VL Nota\footnote{Bene} \VL Bene\footnote{Nota} \VL\SR +%D \VL Bene\footnote{Nota} \VL Nota\footnote{Bene} \VL\SR +%D \HL +%D \stoptable} +%D {\setupnotation[footnote][alternative={serried},distance=.5em,after=\hskip1em]% +%D \placelocalnotes[footnote]} +%D \stoplocalnotes +%D \stopbuffer +%D +%D \typebuffer +%D +%D Because this table placement macro expect box content, and thanks to the grouping +%D of the local footnotes, we don't need additional braces. +%D +%D \getbuffer + +%D \macros +%D {placefootnotes} +%D +%D We still have no decent command for placing footnotes somewhere else than at the +%D bottom of the page (for which no user action is needed). Footnotes (endnotes) can +%D be placed by using +%D +%D \showsetup{placefootnotes} + +\permanent\protected\def\placebottomnotes + {\strc_notes_process\strc_notes_place_inserts} + +\permanent\tolerant\protected\def\placenotes[#list]#spacer[#settings]% + {\processcommalist[#list]{\strc_notes_place_indeed{#settings}}} + +\def\strc_notes_place_indeed#settings#tag% settings note + {\edef\currentnote{#tag}% grouping ? + \doifelse{\clf_getnotestate{#tag}}{store} + \strc_notes_local_place_indeed + \strc_notes_global_place_indeed + {#settings}{#tag}} + +\def\strc_notes_global_place_indeed#settings#tag% + {\begingroup + \setupnote[#tag][#settings]% + \strc_notes_place_inserts + \endgroup + \the\everysetupnote} % to be checked .. synchronize + +%D Placement + +\installcorenamespace{notealternative} + +\permanent\protected\def\installnotealternative#alternative#command% + {\setvalue{\??notealternative#alternative}{#command}} + +\permanent\protected\def\doifnotescollected#tag% + {\clf_doifnotecontent{#tag}} + +\def\strc_notes_place_local_alternative % will be a setup (wrapper) + {\doifnotescollected\currentnote + {\endgraf + \ifvmode + \whitespace + \noteparameter\c!before + \fi + \begingroup + \strc_notes_set_bodyfont + \csname\??notealternative\noteparameter\c!alternative\endcsname + \endgroup + \ifvmode + \noteparameter\c!after + \fi}} + +%D A stupid alternative is also provided: +%D +%D \starttyping +%D \setupfootnotes[location=text,alternative=none] +%D \stoptyping + +% setups ? + +\permanent\def\flushlocalnotes#tag{\clf_flushnotes{#tag}{store}{\noteparameter\c!criterium}} + +\installnotealternative \v!none + {\flushlocalnotes\currentnote} + +\installnotealternative \empty + {\flushlocalnotes\currentnote} + +\installnotealternative \v!grid % test if n > 0 + {\begingroup + \setupcurrentnote[\c!location=]% + \snaptogrid\hbox + {\inheritednoteframed + {\flushlocalnotes\currentnote}}% + \endgroup} + +\installnotealternative \v!fixed % test if n > 0 + {\begingroup + \setupcurrentnote[\c!location=]% + \inheritednoteframed + {\flushlocalnotes\currentnote}% + \endgroup} + +\installnotealternative \v!columns % redundant + {\begingroup + \setupcurrentnote[\c!location=]% + \inheritednoteframed + {\edef\currentnotewidth{\noteparameter\c!width}% + \doifelsedimension\currentnotewidth\donothing + {\edef\currentnotewidth{\the\hsize}}% + \startsimplecolumns[\c!distance=\noteparameter\c!columndistance,\c!n=\noteparameter\c!n,\c!width=\currentnotewidth]% + \flushlocalnotes\currentnote + \stopsimplecolumns}% + \endgroup} + +% 0:page 1:firstcolumn 2:lastcolumn + +\newconstant\c_strc_notes_page_location + +\protected\def\strc_notes_check_locations + {\edef\p_strc_notes_location{\rootnoteparameter\c!location}% + \c_strc_notes_page_location + \ifx\p_strc_notes_location\v!firstcolumn\plusone \else + \ifx\p_strc_notes_location\v!lastcolumn \plustwo \else + \zerocount\fi\fi} + +\appendtoks + \strc_notes_check_locations +\to \everysynchronizenote + +% still semi public (but will change) + +\newif\ifnotespresent + +\permanent\protected\def\checknotepresence + {\notespresentfalse + \strc_notes_process\strc_notes_check_presence} + +\def\strc_notes_check_presence + {\ifdim\ht\currentnoteinsertionnumber>\zeropoint + \notespresenttrue + \fi} + +%D \macros +%D {fakenotes} + + % used in page-mul + + \ifdefined\currentnofcolumns\else \def\currentnofcolumns{\nofcolumns} \fi + + \protected\def\fakenotes + {\ifhmode\endgraf\fi\ifvmode + \calculatetotalclevernoteheight + \ifdim\totalnoteheight>\zeropoint \kern\totalnoteheight \fi + \fi} + + \protected\def\fakepagenotes + {\ifhmode\endgraf\fi\ifvmode + \calculatetotalpagenoteheight + \ifdim\totalnoteheight>\zeropoint \kern\totalnoteheight \fi + \fi} + + % used in page-not but not yet ok + + \newdimen\totalnoteheight + + \protected\def\additionaltotalnoteheight#insert% temp hacks anyway + {\dimexpr + \ifdim\ht#insert>\zeropoint + \ifcase\count#insert % + \zeropoint + \else % todo: divide by count + \ht#insert+\skip#insert% hm, no stretch but a dimen anyway + \fi + \else + \zeropoint + \fi + \relax} + + \def\docalculatetotalnoteheight + {\ifcase\c_strc_notes_page_location % tricky here ! ! ! to be sorted out ! ! ! + \advance\totalnoteheight\normalexpanded{\additionaltotalnoteheight\currentnoteinsertionnumber}% + \fi} + + \def\docalculatetotalclevernoteheight + {\ifcase\c_strc_notes_page_location \else % tricky here ! ! ! to be sorted out ! ! ! + \advance\totalnoteheight\normalexpanded{\additionaltotalnoteheight\currentnoteinsertionnumber}% + \fi} + + \def\docalculatetotalpagenoteheight + {\advance\totalnoteheight\normalexpanded{\additionaltotalnoteheight\currentnoteinsertionnumber}} + + \def\calculatetotalnoteheight {\totalnoteheight\zeropoint\strc_notes_process\docalculatetotalnoteheight} + \def\calculatetotalclevernoteheight{\totalnoteheight\zeropoint\strc_notes_process\docalculatetotalclevernoteheight} + \def\calculatetotalpagenoteheight {\totalnoteheight\zeropoint\strc_notes_process\docalculatetotalpagenoteheight} + +%D Now how can this mechanism be hooked into \CONTEXT\ without explictly postponing +%D footnotes? The solution turned out to be rather simple: +%D +%D \starttyping +%D \everypar {...\flushnotes...} +%D \neverypar {...\postponenotes} +%D \stoptyping +%D +%D We can use \type {\neverypar} because in most commands sensitive to footnote +%D gobbling we disable \type {\everypar} in favor for \type {\neverypar}. In fact, +%D this footnote implementation is the first to use this scheme. + +%D This is a nasty and new secondary footnote flusher. It can be hooked into \type +%D {\everypar} like: +%D +%D \starttyping +%D \appendtoks \synchronizenotes \to \everypar +%D \stoptyping + +\let\synchronizenotes\relax + +%D When typesetting footnotes, we have to return to the footnote specific bodyfont +%D size, which is in most cases derived from the global document bodyfont size. In +%D the previous macros we already used a footnote specific font setting macro. + +\def\strc_notes_set_bodyfont + {\let\strc_notes_set_bodyfont\relax + \restoreglobalbodyfont + \usebodyfontparameter\noteparameter + \usealignparameter\noteparameter} + +%D The footnote mechanism defaults to a traditional one column way of showing them. +%D By default we precede them by a small line. + +% end notes in the margin: +% +% \setuptexttexts +% [margin] +% [] [{\directsetup{notabene}}] +% +% \startsetups notabene +% \vbox to \textheight \bgroup +% \setupalign[tolerant] +% \topskipcorrection +% \placenotes[endnote][before=,after=] +% \vfilll +% \egroup +% \stopsetups + +\definenote [\v!footnote] +\definenote [\v!endnote ] [\c!location=\v!none] % else no break + +%D Compatibility macros: + +\permanent\protected\def\setupfootnotedefinition{\setupnotation [\v!footnote]} +\permanent\protected\def\setupfootnotes {\setupnote [\v!footnote]} +\permanent \def\footnotetext {\setnotetext [\v!footnote]} +\permanent\protected\def\placefootnotes {\dodoubleempty\strc_notes_place_footnotes [\v!footnote]} +\permanent\protected\def\placelocalfootnotes {\dodoubleempty\strc_notes_place_local_footnotes[\v!footnote]} +\permanent\protected\def\startlocalfootnotes {\startlocalnotes [\v!footnote]} % alleen footnote +\permanent\protected\def\stoplocalfootnotes {\stoplocalnotes } + +\def\strc_notes_place_footnotes[#list][#settings]% + {\ifsecondargument + \placenotes[#list][#settings,\c!height=\textheight]% + \else + \placenotes[#list][\c!height=\textheight]% + \fi} + +\def\strc_notes_place_local_footnotes[#list][#settings]% + {\ifsecondargument + \placelocalnotes[#list][#settings,\c!height=\textheight]% + \else + \placelocalnotes[#list][\c!height=\textheight]% + \fi} + +%D Goodies: +%D +%D \starttyping +%D \dorecurse {100} { +%D test \footnote{\doifnoteonsamepageelse[footnote]{ibidem}{aaa}} +%D } +%D \stoptyping + +\permanent\def\doifelsenoteonsamepage#tag{\clf_doifnoteonsamepageasprevious{#tag}} + +\aliased\let\doifnoteonsamepageelse\doifelsenoteonsamepage + +%D New trickery: + +%D \macros +%D {note} +%D +%D Refering to a note is accomplished by the rather short command: +%D +%D \showsetup{note} +%D +%D This command is implemented rather straightforward as: + +\installcorenamespace{notesymbol} + +\let\lastnotesymbol\relax % todo: per class + +\permanent\tolerant\protected\def\notesymbol[#tag]#spacer[#reference]% + {\ifnotesenabled + \dontleavehmode + \begingroup + \edef\currentnote{#tag}% + \usenotestyleandcolor\c!textstyle\c!textcolor + \iftok{#reference}\emptytoks + \noteparameter\c!textcommand\lastnotesymbol % check if command double + \else + \unskip + \noteparameter\c!textcommand{\in[#reference]}% command here? + \fi + \endgroup + \fi} + +\permanent\tolerant\protected\def\note[#tag]#spacer[#reference]% + {\iftok{#reference}\emptytoks + \notesymbol[\v!footnote][#tag]% + \else + \notesymbol[#tag][#reference]% + \fi} + +% will be redone if needed +% +% \def\ownnotesymbol#1% #1 gets number passed +% {\executeifdefined{\??notesymbol\currentnote}\empty} +% +% \protected\def\setnotesymbol[#1]#2#3% +% {\prewordbreak % prevent lookback +% \setgvalue{\??notesymbol#1}{#3} +% \strc_notes_inject_symbol} +% +% \protected\def\ownnote[#1]#2#3#4% +% {\setnotesymbol[#1]{#2}{#3}% +% \setnotetext [#1]{#4}} +% +% \defineconversion +% [ownnote] +% [\ownnotesymbol] + +% tricky: +% +% \enabletrackers[nodes.areas] +% \enabletrackers[nodes.references] +% \enabletrackers[nodes.destinations] +% +% \setupnotes[interaction=all,rule=no] +% \setupinteraction[state=start,focus=standard] +% +% \starttext +% \goto{\input tufte\relax}[page(2)] \par +% \ruledhbox{\gotobox{\vtop{\input tufte\relax}}[page(2)]} \par +% \ruledhbox{\gotobox{\vbox{\input tufte\relax}}[page(2)]} \par +% % \completecontent +% % \chapter{Chapter} +% % \dorecurse{5}{\input knuth} +% a\footnote{\input tufte\par\input ward\relax} +% \stoptext + +%D Bonus: + +\appendtoks + \setsystemmode\currentnote +\to \everysynchronizenote + +\protect \endinput diff --git a/tex/context/base/mkiv/strc-pag.mkiv b/tex/context/base/mkiv/strc-pag.mkiv index 01361e2c5..909c418f9 100644 --- a/tex/context/base/mkiv/strc-pag.mkiv +++ b/tex/context/base/mkiv/strc-pag.mkiv @@ -21,14 +21,14 @@ % Allocation: -\countdef\realpageno \zerocount \realpageno \plusone -\countdef\userpageno \plusone \userpageno \plusone -\countdef\subpageno \plustwo \subpageno \plusone % was \zerocount but that doesn't work well with bytext -\countdef\arrangeno \plusthree \arrangeno \zerocount % ! -\countdef\pagenoshift\plusfour \pagenoshift\zerocount % ! -\countdef\lastpageno \plusfive \lastpageno \zerocount % ! +\ifdefined\realpageno \else \countdef\realpageno \zerocount \fi \realpageno \plusone +\ifdefined\userpageno \else \countdef\userpageno \plusone \fi \userpageno \plusone +\ifdefined\subpageno \else \countdef\subpageno \plustwo \fi \subpageno \plusone % was \zerocount but that doesn't work well with bytext +\ifdefined\arrangeno \else \countdef\arrangeno \plusthree \fi \arrangeno \zerocount % ! +\ifdefined\pagenoshift \else \countdef\pagenoshift\plusfour \fi \pagenoshift\zerocount % ! +\ifdefined\lastpageno \else \countdef\lastpageno \plusfive \fi \lastpageno \zerocount % ! -\let\pageno\userpageno +\ifdefined\pageno \else \let\pageno\userpageno \fi \def\realfolio{\the\realpageno} \def\userfolio{\the\userpageno} @@ -268,8 +268,8 @@ % States: -\newif\ifdoublesided \newconditional\layoutisdoublesided -\newif\ifsinglesided \newconditional\layoutissinglesided +\newconditional\layoutisdoublesided % already defined: \newif\ifdoublesided +\newconditional\layoutissinglesided % already defined: \newif\ifsinglesided % Realpage and subpage numbers: @@ -316,7 +316,8 @@ \doublesidedfalse \setfalse\layoutissinglesided \resetsystemmode\v!singlesided \resetsystemmode\v!doublesided - \processallactionsinset[\directpagenumberingparameter\c!alternative] + \processallactionsinset + [\directpagenumberingparameter\c!alternative]% [ \v!singlesided=>\setsystemmode\v!singlesided\singlesidedtrue\settrue\layoutissinglesided, \v!doublesided=>\setsystemmode\v!doublesided\doublesidedtrue\settrue\layoutisdoublesided]% \the\everysidedswitch diff --git a/tex/context/base/mkiv/strc-ref.mkvi b/tex/context/base/mkiv/strc-ref.mkvi index d68ecb805..3bf339638 100644 --- a/tex/context/base/mkiv/strc-ref.mkvi +++ b/tex/context/base/mkiv/strc-ref.mkvi @@ -1006,8 +1006,8 @@ \unexpanded\def\strc_references_about[#label]% {\dontleavehmode \begingroup - \let\crlf\space - \let\\\space + \enforced\let\crlf\space + \enforced\let\\\space \postponenotes % might go \referencingparameter\c!left \doifelsereferencefound{#label} diff --git a/tex/context/base/mkiv/strc-reg.mkiv b/tex/context/base/mkiv/strc-reg.mkiv index e2fede024..1e632eebc 100644 --- a/tex/context/base/mkiv/strc-reg.mkiv +++ b/tex/context/base/mkiv/strc-reg.mkiv @@ -48,7 +48,7 @@ \let\strc_registers_setup_saved\setupregister -\unexpanded\def\setupregister % maybe we should drop the plural form +\unexpanded\overloaded\def\setupregister % maybe we should drop the plural form {\dotripleempty\strc_registers_setup} \def\strc_registers_setup[#1][#2][#3]% @@ -618,7 +618,7 @@ \edef\currentregister{\firstinset{#1}}% \the\everyplaceregister \ifnum\namedmixedcolumnsparameter\currentregister\c!n>\plusone - \startmixedcolumns[\currentregister] + \startmixedcolumns[\currentregister]% \strc_registers_place_indeed{#1}% \stopmixedcolumns \else diff --git a/tex/context/base/mkiv/strc-ren.mkiv b/tex/context/base/mkiv/strc-ren.mkiv index 2b344bbfb..359bd6aec 100644 --- a/tex/context/base/mkiv/strc-ren.mkiv +++ b/tex/context/base/mkiv/strc-ren.mkiv @@ -187,7 +187,7 @@ \ifx\p_strut\v!no \setnostrut \fi - \let\\\strc_rendering_shortcut_backslash} + \enforced\let\\\strc_rendering_shortcut_backslash} \unexpanded\def\strc_rendering_shortcut_backslash {\crlf @@ -745,8 +745,8 @@ \vbox { \headsetupspacing \veryraggedcenter - \let\\\endgraf - \let\crlf\endgraf + \enforced\let\\\endgraf + \enforced\let\crlf\endgraf \ifconditional\headshownumber \strut \headnumbercontent diff --git a/tex/context/base/mkiv/strc-sbe.mkxl b/tex/context/base/mkiv/strc-sbe.mkxl new file mode 100644 index 000000000..1b903cec7 --- /dev/null +++ b/tex/context/base/mkiv/strc-sbe.mkxl @@ -0,0 +1,139 @@ +%D \module +%D [ file=strc-sbe, +%D version=2008.10.20, +%D title=\CONTEXT\ Structure Macros, +%D subtitle=Section Block Environments, +%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 Structure Macros / Section Block Environments} + +\unprotect + +% \def\ChapterEntry#1#2#3% +% {chapter : \hbox to \hsize{\strut\bf#2\hss#3}\endgraf\placelist[section]} +% +% \startfrontmatter % optional +% \placelist[chapter][alternative=command,command=\ChapterEntry,criterium=text] \page +% \stopfrontmatter % optional +% +% \startbodymatter % optional +% \chapter{first} \section{one} test \section{two} test \page +% \chapter{second} \section{alpha} test \section{beta} test \page +% \stopbodymatter % optional + +\installcorenamespace{sectionblock} + +\installcommandhandler \??sectionblock {sectionblock} \??sectionblock + +\setupsectionblock + [\c!number=\v!yes, + \c!page=\v!right] % otherwise marks are reset too soon + +\newtoks\everybeforesectionblock +\newtoks\everyaftersectionblock + +\let\strc_sectionblock_define_normal\definesectionblock + +\permanent\overloaded\tolerant\protected\def\definesectionblock[#1]#*[#2]#*[#3]% singular plural settings + {\strc_sectionblock_define_normal[#1][#3]% + %\expandafter\newif\csname if#2\endcsname % obsolete + \strc_sectionblock_set_environment{#1}\empty + \setuvalue{\e!start#2}{\startsectionblock[#1]}% + \setuvalue{\e!stop #2}{\stopsectionblock}} + +\ifdefined \resetallstructuremarks \else + \let\resetallstructuremarks\relax +\fi + +\def\strc_sectionblock_handle_page + {\edef\p_strc_sectionblock_page{\sectionblockparameter\c!page}% + \ifx\p_strc_sectionblock_page\empty \else + \page[\p_strc_sectionblock_page]% + \fi} + +\appendtoks + \strc_sectionblock_handle_page + \resetallstructuremarks + \strc_sectionblock_get_environment\currentsectionblock + \sectionblockparameter\c!before % don't move + \dostarttagged\t!division\currentsectionblock % no parents +\to \everybeforesectionblock + +\appendtoks + \sectionblockparameter\c!after % don't move + \strc_sectionblock_handle_page + \dostoptagged + \resetallstructuremarks +\to \everyaftersectionblock + +\permanent\tolerant\protected\def\setsectionblock[#1]#*[#2]% used to set the default + {\edef\currentsectionblock{#1}% from now on we assume a value + \setupcurrentsectionblock[#2]% + \clf_setsectionblock{#1} + bookmark {\sectionblockparameter\c!bookmark}% + \relax} + +\let\currentsectionblock\empty % was \s!unknown + +\permanent\tolerant\protected\def\startsectionblock[#1]#*[#2]% + {%\ctxlua{structures.counters.check(0)}% we assume sane usage of \page, as this is the only workable place (in push) + \begingroup + \edef\currentsectionblock{#1}% from now on we assume a value + \setupcurrentsectionblock[#2]% + \clf_pushsectionblock{#1} + bookmark {\sectionblockparameter\c!bookmark}% + \relax + %\csname #1true\endcsname % obsolete + \setsystemmode\currentsectionblock + \the\everybeforesectionblock\relax + \showmessage\m!structures1\currentsectionblock} + +\permanent\protected\def\stopsectionblock + {\showmessage\m!structures2\currentsectionblock + \the\everyaftersectionblock\relax + \clf_popsectionblock + \endgroup} + +%D \starttyping +%D \startsectionblockenvironment[frontpart] +%D \setupnumber[userpage][numberconversion=romannumerals,start=1] +%D \stopsectionblockenvironment +%D +%D \startsectionblockenvironment[bodypart] +%D \setupnumber[userpage][numberconversion=numbers,start=1] +%D \stopsectionblockenvironment +%D +%D \startsectionblockenvironment[backpart] +%D \setupnumber[userpage][numberconversion=numbers,start=1] +%D \stopsectionblockenvironment +%D +%D \starttext +%D \startfrontmatter \chapter{test} \stopfrontmatter +%D \startbodymatter \chapter{test} \stopbodymatter +%D \startappendices \chapter{test} \stopappendices +%D \stoptext +%D \stoptyping + +\installcorenamespace{sectionblockenvironment} + +\protected\def\strc_sectionblock_set_environment#1#2% + {\setvalue{\??sectionblockenvironment#1}{#2}} + +\protected\def\strc_sectionblock_get_environment#1% + {\csname\??sectionblockenvironment#1\endcsname} + +\protected\setvalue{\e!start\v!sectionblockenvironment}% + {\dosingleargument\strc_sectionblock_environment_start} + +\letvalue{\e!stop\v!sectionblockenvironment}\relax + +\def\strc_sectionblock_environment_start[#1]% evt \pushendofline \popendofline + {\grabuntil{\e!stop\v!sectionblockenvironment}{\strc_sectionblock_set_environment{#1}}} + +\protect \endinput diff --git a/tex/context/base/mkiv/strc-sec.mkiv b/tex/context/base/mkiv/strc-sec.mkiv index 2a2384656..fb21254f2 100644 --- a/tex/context/base/mkiv/strc-sec.mkiv +++ b/tex/context/base/mkiv/strc-sec.mkiv @@ -1044,7 +1044,7 @@ \def\strc_sectioning_delayed_flush {\ifvoid\b_sectioning_delayed\else - \smashboxed\b_sectioning_delayed + \smashedbox\b_sectioning_delayed \fi} \unexpanded\def\strc_rendering_place_head_section % see hidden below diff --git a/tex/context/base/mkiv/strc-sec.mkxl b/tex/context/base/mkiv/strc-sec.mkxl new file mode 100644 index 000000000..51d1f6019 --- /dev/null +++ b/tex/context/base/mkiv/strc-sec.mkxl @@ -0,0 +1,1345 @@ +%D \module +%D [ file=strc-sec, +%D version=2008.10.20, +%D title=\CONTEXT\ Structure Macros, +%D subtitle=Sectioning, +%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 retrospect I should have gone futher and move more to the +%D \LUA\ end but here we are now. Maybe some day. + +\writestatus{loading}{ConTeXt Structure Macros / Sectioning} + +\unprotect + +\startcontextdefinitioncode + +\installcorenamespace{structure} + +\installdirectcommandhandler \??structure {structure} % unchecked, so we need to initialize used parameters + +\setupstructure % not a user command so we might need to change the name + [\c!number=, + \c!level=, + \c!name=, + \c!title=, + \c!bookmark=, + \c!marking=, + \c!list=, + \c!label=, + \c!coupling=, + \c!ownnumber=, + % \c!interaction=\v!list, + \c!sectionseparatorset=\s!default, + \c!sectionconversionset=\s!default, + \c!sectionstopper=, + \c!sectionstarter=, + \c!sectionsegments=, + \c!sectionresetset=, + \c!reference=, + \c!backreference=, + \c!expansion=\v!no, + \c!xmlsetup=, + \s!catcodes=, + \c!saveinlist=\v!yes] + +% maybe flags for list, bm, mark + +\def\m_strc_references_prefix_yes{+} +\def\m_strc_references_prefix_nop{-} + +\let\currentstructurereferenceprefix\empty + +\installglobalmacrostack\currentstructurereferenceprefix + +\def\strc_sectioning_set_reference_prefix + {\ifx\currentstructurereferenceprefix\empty + % nothing + \orelse\ifx\currentstructurereferenceprefix\m_strc_references_prefix_yes + \global\advance\prefixcounter \plusone % temp here + \setupglobalreferenceprefix[\the\prefixcounter]% + \orelse\ifx\currentstructurereferenceprefix\m_strc_references_prefix_nop + \setupglobalreferenceprefix[]% + \else + \setupglobalreferenceprefix[\currentstructurereferenceprefix]% + \fi + \glet\currentstructurereferenceprefix\referenceprefix} + +% why xdef ? + +\setupstructure + [\c!label={\headparameter{\currentsectionblock\c!label}}, + \c!incrementnumber=\ifconditional\c_strc_sectioning_increment\v!yes\else\v!no\fi, % not that needed + \c!saveinlist=\ifconditional\c_strc_sectioning_to_list\v!yes\else\v!no\fi, + \c!level=\currentheadlevel, + \c!number=\ifconditional\c_strc_sectioning_increment\ifconditional\headshownumber\v!yes\else\v!no\fi\else\v!no\fi, + \c!expansion=\headparameter\c!expansion, + \c!xmlsetup=\headparameter\c!xmlsetup, + \s!catcodes=\headparameter\s!catcodes, + \c!sectionresetset=\headparameter\c!sectionresetset, + \c!sectionseparatorset=\headparameter\c!sectionseparatorset, + \c!sectionconversionset=\headparameter\c!sectionconversionset, + \c!sectionconversion=\headparameter\c!conversion, % just for compatibility + \c!sectionstarter=\headparameter\c!sectionstarter, + \c!sectionstopper=\headparameter\c!sectionstopper, + \c!sectionset=\headparameter\c!sectionset, + \c!sectionsegments=\headparameter\c!sectionsegments, + \c!reference=\headparameter\c!reference, + \c!referenceprefix=\headparameter\c!referenceprefix, + \c!criterium=\headparameter\c!criterium] + +% see lists/neat-001.tex for usage of: + +\permanent\def\namedstructureheadlocation#1% expandable, maybe [#1] + {\csname\??savedinternalreference\ifcsname\??savedinternalreference#1\endcsname#1\else\s!default\fi\endcsname} + +% The next directive only makes sense when we have sort of garanteed outcome (math is not so +% nice for instance). +% +% \enabledirectives[references.bookmarks.preroll] + +\newconditional\c_strc_bookmarks_preroll + +\installtexdirective + {references.bookmarks.preroll} + {\settrue \c_strc_bookmarks_preroll} + {\setfalse\c_strc_bookmarks_preroll} + +\def\strc_sectioning_autobookmark#1% + {\begingroup + % \settrialtypesetting + \the\everypreroll + \nodestostring\tempstring{#1}% + \glet\currentstructurebookmark\tempstring + \endgroup} + +% zeros: +% +% \setuphead[subsection][criterium=all] +% +% \dorecurse{3} { +% \chapter{Blabla} \subsection{bla 1 1} \subsection{bla 1 2} +% \section{bla 2} \subsection{bla 2 1} \subsection{bla 2 2} +% } + +\protected\def\strc_sectioning_register#1#2#3% #1=interfaced-settings, #2=optional user data (not yet supported) + {\begingroup + \setupstructure[\c!name={#1},#2]% + \xdef\currentstructurename {\structureparameter\c!name}% + \xdef\currentstructurecoupling {\structureparameter\c!coupling}% + \xdef\currentstructureownnumber {\structureparameter\c!ownnumber}% optional own number + \xdef\currentstructurelevel {\structureparameter\c!level}% + \edef\currentstructureexpansion {\structureparameter\c!expansion}% + \xdef\currentstructurexmlsetup {\structureparameter\c!xmlsetup}% + \xdef\currentstructurecatcodes {\structureparameter\s!catcodes}% + \xdef\currentstructurelabel {\structureparameter\c!label}% + \xdef\currentstructurereference {\structureparameter\c!reference}% + \xdef\currentstructurereferenceprefix{\structureparameter\c!referenceprefix}% + \xdef\currentstructurebackreference {\structureparameter\c!backreference}% + \xdef\currentstructureshownumber {\structureparameter\c!number}% + \xdef\currentstructuresaveinlist {\structureparameter\c!saveinlist}% + \xdef\currentstructureincrementnumber{\structureparameter\c!incrementnumber}% + \xdef\currentstructureplaceholder {\structureparameter\c!placeholder}% + \ifx\currentstructureexpansion\s!xml + \xmlstartraw + \xdef\currentstructuretitle {\structureparameter\c!title}% + \xdef\currentstructurebookmark{\structureparameter\c!bookmark}% + \xdef\currentstructuremarking {\structureparameter\c!marking}% + \xdef\currentstructurelist {\structureparameter\c!list}% + \xmlstopraw + \iflocation \ifx\currentstructurebookmark\empty \ifconditional\c_strc_bookmarks_preroll + \strc_sectioning_autobookmark\currentstructuretitle + \fi \fi \fi + \ifx\currentstructurelist\empty + \glet\currentstructurelist\currentstructuretitle + \fi + \glet\currentstructurecoding\s!xml + \else + \ifx\currentstructureexpansion\v!yes + \xdef\currentstructuretitle {\structureparameter\c!title}% + \xdef\currentstructurebookmark{\structureparameter\c!bookmark}% + \xdef\currentstructuremarking {\structureparameter\c!marking}% + \xdef\currentstructurelist {\structureparameter\c!list}% + \iflocation \ifx\currentstructurebookmark\empty \ifconditional\c_strc_bookmarks_preroll + \strc_sectioning_autobookmark\currentstructuretitle + \fi \fi \fi + \else + \xdef\currentstructuretitle {\detokenizedstructureparameter\c!title}% + \xdef\currentstructurebookmark{\detokenizedstructureparameter\c!bookmark}% + \xdef\currentstructuremarking {\detokenizedstructureparameter\c!marking}% + \xdef\currentstructurelist {\detokenizedstructureparameter\c!list}% + \iflocation \ifx\currentstructurebookmark\empty + \ifconditional\c_strc_bookmarks_preroll + \strc_sectioning_autobookmark{\structureparameter\c!title}% + \else + \begingroup + \simplifycommands + \xdef\currentstructurebookmark{\detokenize\expandafter{\normalexpanded{\structureparameter\c!title}}}% + \endgroup + \fi + \fi \fi + \fi + \ifx\currentstructurelist\empty + \glet\currentstructurelist\currentstructuretitle + \fi + \glet\currentstructurecoding\s!tex + \fi + \setnextinternalreference + \storeinternalreference\currentstructurename{\the\locationcount}% + \strc_sectioning_set_reference_prefix + \clf_setsectionentry + references { + internal \locationcount + % block {\currentsectionblock} + prefix {\currentstructurereferenceprefix} + reference {\currentstructurereference} + backreference {\currentstructurebackreference} + } + directives { + resetset {\structureparameter\c!sectionresetset} + } + metadata { + kind {section} + name {\currentstructurename} + catcodes \ifx\currentstructurecatcodes\empty\catcodetable\else\csname\currentstructurecatcodes\endcsname\fi\space + coding {\currentstructurecoding} + \ifx\currentstructurecoding\s!xml + xmlroot {\xmldocument} + \fi + \ifx\currentstructurexmlsetup\empty \else + xmlsetup {\currentstructurexmlsetup} + \fi + \ifx\currentstructuresaveinlist\v!no + nolist \space true\space + \fi + \ifx\currentstructureincrementnumber\v!yes + increment {\currentstructureincrementnumber} + \fi + } + titledata { + label {\detokenize\expandafter{\currentstructurelabel}} + title {\detokenize\expandafter{\currentstructuretitle}} + \ifx\currentstructurebookmark\currentstructuretitle \else + bookmark {\detokenize\expandafter{\currentstructurebookmark}} + \fi + \ifx\currentstructuremarking\currentstructuretitle \else + marking {\detokenize\expandafter{\currentstructuremarking}} + \fi + \ifx\currentstructuresaveinlist\v!no \else + \ifx\currentstructurelist\currentstructuretitle \else + list {\detokenize\expandafter{\currentstructurelist}} + \fi + \fi + } + numberdata { + % block {\currentsectionblock} + \ifx\currentstructureshownumber\v!no + hidenumber \space true\space % space needed for parser + \fi + separatorset {\structureparameter\c!sectionseparatorset} + conversionset {\structureparameter\c!sectionconversionset} + conversion {\structureparameter\c!sectionconversion} + starter {\structureparameter\c!sectionstarter} + stopper {\structureparameter\c!sectionstopper} + set {\structureparameter\c!sectionset} + segments {\structureparameter\c!sectionsegments} + ownnumber {\currentstructureownnumber} + language {\currentlanguage}% for the moment, needed for bookmarks conversion + criterium {\structureparameter\c!criterium} + } + userdata {\detokenize{#3}}% will be converted to table at the lua end + \relax + \xdef\currentstructurelistnumber{\clf_currentsectiontolist}% + % \currentstructuresynchronize has to be called someplace, since it introduces a node + \setstructuresynchronization\currentstructurelistnumber + \endgroup} + +\let\currentsectioncountervalue \!!zerocount % redefined later +\let\previoussectioncountervalue\!!zerocount % redefined later + +% We can access the (stored) data with the following macros. +% +% \def\MyHeadCommand #1#2{\framed{#1}\framed{#2 / \structureuservariable{subtitle}}} +% \def\MyListCommand#1#2#3{\externalfigure[\structurelistuservariable{figure}][height=5mm]#2} +% +% \setuphead[chapter][command=\MyHeadCommand] +% \setuplist[chapter][alternative=command,command=\MyListCommand] +% +% \starttext +% \setupheadertexts[chapter] +% \setupinteraction[state=start] +% \placebookmarks[chapter] +% \placelist[chapter] +% \startchapter[ownnumber=10,title=Ton,list=Hans,marking=Kees,bookmark=Bram][figure=cow.pdf,subtitle=oeps] +% \stopchapter +% \stoptext + +% todo: #1 => "#1" ... adapt lua code for name and number + +\permanent\def\structurenumber {\clf_structurenumber} +\permanent\def\structuretitle {\clf_structuretitle} +\permanent\def\structurevariable #1{\clf_structurevariable {#1}} +\permanent\def\structureuservariable #1{\clf_structureuservariable {#1}} +\permanent\def\structurecatcodedget #1{\clf_structurecatcodedget {#1}} % bad name +\permanent\def\structuregivencatcodedget #1#2{\clf_structuregivencatcodedget {#1}#2 } % bad name +\permanent\def\structureautocatcodedget #1#2{\clf_structureautocatcodedget {#1}{#2}} +\permanent\def\namedstructurevariable #1#2{\clf_namedstructurevariable {#1}{#2}} +\permanent\def\namedstructureuservariable#1#2{\clf_namedstructureuservariable{#1}{#2}} + +% compatibility issue: +% +% \def\setfullsectionnumber #1{} +% \def\preparefullnumber #1{} +% \def\fullsectionnumber {1--1--1} +% \def\makesectionnumber [#1]{} +% \def\makesectionformat {} +% \def\sectionformat {1--1-1-1-1-1-1} +% \def\composedsectionnumber{} +% \def\@@kolist{} + +% \setuphead[section] [separator=\separatorlist{?,!,*}] +% \setuphead[subsection][separator=\separatorlist{??,!!,**}] +% +% \let\spr\separatorlist % this will enable this feature +% +% \setuphead[section] [separator={?,!,*}] +% \setuphead[subsection][separator={??,!!,**}] +% +% \setupheads[separator={A,B,C,D,E,F}] +% \chapter{test} +% \section{test} \subsection{test} \subsection{test} +% \section{test} \subsection{test} \subsection{test} + +% lua interface / names and interface might change + +% \newconditional\c_strc_rendering_continuous % not used (mkii ?) + +\permanent\def\setstructurelevel #1#2{\clf_setstructurelevel {#1}{#2}} % name, level|parent +\permanent\def\getstructurelevel #1{\clf_getstructurelevel {#1}} % name +\permanent\def\setstructurenumber #1#2{\clf_setstructurenumber #1{#2}} % level, number (+/-) +\permanent\def\getstructurenumber #1{\clf_getstructurenumber \numexpr#1\relax} % level +\permanent\def\getsomestructurenumber #1#2{\clf_getsomestructurenumber #1{#2}} % level, what +\permanent\def\getfullstructurenumber #1{\clf_getfullstructurenumber \numexpr#1\relax} % level +\permanent\def\getsomefullstructurenumber#1#2{\clf_getsomefullstructurenumber #1{#2}} % level, what +\permanent\def\getspecificstructuretitle #1{\clf_getspecificstructuretitle {#1}{\headparameter\s!catcodes}} + +% structure heads (like \startchapter) + +% \c!deeptextcommand, \c!deepnumbercommand: undefined ! +% \c!before \c!after \c!distance +% \c!page \c!header \c!text \c!footer=, +% \c!numbercommand \c!textcommand \c!ownnumber \c!number +% \c!file \c!grid \c!margintext +% \c!expansion \c!xmlsetup \s!catcode + +\installcorenamespace{head} +\installcorenamespace{headlevel} +\installcorenamespace{headincrement} +\installcorenamespace{headplace} +\installcorenamespace{headmarkyes} +\installcorenamespace{headmarknop} + +\installcommandhandler \??head {head} \??head + +\installmacrostack\currenthead +\installmacrostack\currentheadparent + +\setuphead [% + %\c!after=, + %\c!align=, + %\c!aligntitle=, + \c!alternative=\v!normal, + %\c!before=, + %\c!color=, + %\c!command=, + \c!continue=\v!yes, + %\c!coupling=, + %\c!deepnumbercommand=, + %\c!deeptextcommand=, + %\c!default=, + \c!distance=\zeropoint, + \c!textdistance=\zeropoint, + \c!textwidth=\zeropoint, % signal too + \c!numberwidth=\zeropoint, % signal too + \c!width=\zeropoint, % signal too + \c!expansion=\v!no, + %\c!file=, + %\c!footer=, + %\c!grid=, + \c!hang=\v!none, + %\c!header=, + \c!incrementnumber=\v!yes, + \c!indentnext=\v!no, + %\c!label=, + %\c!limittext=\languageparameter\c!limittext, + \c!margin=\zeropoint, + %\c!margintext=, + \c!number=\v!yes, + \c!numbercolor=\headparameter\c!color, + \c!textcolor=\headparameter\c!color, + \c!numberstyle=\headparameter\c!style, + \c!textstyle=\headparameter\c!style, + %\c!numbercommand=, + %\c!textcommand=, + \c!ownnumber=\v!no, + %\c!page=, + \c!placehead=\v!yes, + \c!sectionconversionset=\s!default, + \c!sectionnumber=\v!yes, + %\c!sectionsegments=, + \c!sectionseparatorset=\s!default, + \c!sectionset=\v!all, + \c!interlinespace=, + %\c!sectionstopper=, + %\c!sectionstarter=, + %\c!strut=, + %\c!style=, + %\c!text=, + %\c!tolerance=, + %\c!beforesection=\directsetup{document:\currenthead:start}, % these might become defaults i.e. acpect document: namespace + %\c!insidesection=\directsetup{document:\currenthead:inside}, % these might become defaults i.e. acpect document: namespace + %\c!aftersection=\directsetup{document:\currenthead:stop}, % these might become defaults i.e. acpect document: namespace + ] + +\let\setupheads\setuphead % will go + +\appendtoks + \ifx\currentheadparent\empty + \edef\currentheaddefault{\headparameter\c!default}% + \edef\currentheadsection{\headparameter\c!section}% + \ifx\currenthead\currentheaddefault + \let\currentheadparent\currentheadsection + \orelse\ifx\currentheaddefault\empty + \let\currentheadparent\currentheadsection + \else + \let\currentheadparent\currentheaddefault + \fi + \normalexpanded {% + \setheadparameter{\c!label}{\currenthead}% + \setheadparameter{\c!coupling}{\currenthead}% + \setheadparameter{\s!parent}{\??head\currentheadparent}% + \definemarking[\currenthead] [\currentheadsection]% + \definemarking[\currenthead\v!number][\currentheadsection]% + \setupmarking [\currenthead] [\c!filtercommand=\noexpand\sectionheadmarkingtitle {\currenthead}]% + \setupmarking [\currenthead\v!number][\c!filtercommand=\noexpand\sectionheadmarkingnumber{\currenthead}]% + }% + \doifelselist\currenthead\donothing + {\definelist[\currenthead][\c!prefix=\v!no]}% + % we can't do this now for backward compatibility reasons + % \doifelselist\currenthead\donothing + % {\normalexpanded{\definelist[\currenthead][\currentheadparent][\c!prefix=\v!no]}}% + \else + \normalexpanded {% + \setheadparameter{\c!label}{\currenthead}% + \setheadparameter{\c!coupling}{\currentheadparent}% + \definemarking[\currenthead] [\currentheadparent]% + \definemarking[\currenthead\v!number][\currentheadparent\c!number]% + }% + \doifelselist\currenthead\donothing + {\normalexpanded{\definelist[\currenthead][\currentheadparent][\c!prefix=\v!no]}}% + \fi + \presetlabeltext[\currenthead=]% + \the\everysetuphead +\to \everydefinehead + +\newtoks\everyredefinehead + +\appendtoks + \the\everyredefinehead +\to \everydefinehead + +\appendtoks + \setstructurelevel\currenthead{\thenamedheadlevel\currenthead}% +\to \everyredefinehead + +\appendtoks + % beware, this is a global register + \begingroup + \edef\currentsectionheadcoupling{\sectionheadcoupling\currenthead}% + \edef\currentsectionheadsection {\sectionheadsection \currentsectionheadcoupling}% + \edef\currentsectionlevel {\sectionlevel \currentsectionheadsection}% + \clf_registersection {\currenthead} { + coupling {\currentsectionheadcoupling} + section {\currentsectionheadsection} + level \space \currentsectionlevel \space % space needed for parser + parent {\currentheadparent} + }% + \endgroup +\to \everyredefinehead + +\appendtoks + \instance\setuevalue{\e!start\currenthead}{\strc_sectioning_start[\currenthead]}% + \instance\setuevalue{\e!stop \currenthead}{\strc_sectioning_stop [\currenthead]}% +\to \everydefinehead + +% so \subject as well as \section will need two commands when ownnumber +% is used (one can disable it anyway for subject) .. this is not downward +% compatible but better + +\appendtoks + \ifx\currenthead\empty \else + \doifelse{\headparameter\c!ownnumber}\v!yes + {\instance\setuevalue\currenthead{\strc_sectioning_handle_own[\currenthead]}} + {\instance\setuevalue\currenthead{\strc_sectioning_handle_nop[\currenthead]}}% + \fi +\to \everysetuphead + +\permanent\protected\def\doredefinehead#1#2% called at lua end + {\push_macro_currenthead + \push_macro_currentheadparent + \edef\currenthead{#1}% + \edef\currentheadparent{#2}% + \the\everyredefinehead\relax + \pop_macro_currentheadparent + \pop_macro_currenthead} + +\let\currentnamedsection\empty + +\installmacrostack\currentnamedsection + +% todo: add grouping but where: before/after trickery .. probably inside because one can always add +% grouping to the before/after settings + +\permanent\protected\def\startnamedsection + {\dotripleempty\strc_sectioning_start_named_section} + +\permanent\protected\def\stopnamedsection + {\normalexpanded{\strc_sectioning_stop[\currentnamedsection]}} + +% structure sections (the parents of chapter etc) + +\let\firstsectionname\empty +\let\lastsectionname \empty + +\let\resetallstructuremarks \relax +\let\resetcurrentstructuremarks \relax +\let\resetcurrentstructuremarkswithpage\relax + +\def\resetallstructuremarks {\resetmarking[\firstsectionname]} % will become option (was \v!section-1) +\def\resetcurrentstructuremarks {\resetmarking[\lastsectionname]} % will become option +%def\resetcurrentstructuremarkswithpage{\resetmarking[\lastsectionname]} % will become option + +% We could use a commandhandler here but sections are somewhat special in the +% sense that we have two ways of chaining: the main section (levels) as well +% as rendering (head). + +% -2 = text +% -1 = manual +% 0 = block +% +1 = structurelevel 1 .. n + +\newcount\maxstructuredepth + +\permanent\def\sectionlevel#1% + {\csname\??headlevel\ifcsname\??headlevel#1\endcsname#1\else\v!none\fi\endcsname} + +\permanent\def\namedsectionlevel#1#2% direct indirect + {\csname\??headlevel + \ifcsname\??headlevel#1\endcsname + #1% + \orelse\ifcsname\??headlevel#2\endcsname + #2% + \else + \v!none + \fi + \endcsname} + +\permanent\def\xthenamedheadlevel#1% + {\namedsectionlevel{#1}{\sectionheadsection{\sectionheadcoupling{#1}}}} + +\setvalue{\??headlevel\v!block}{0} +\setvalue{\??headlevel\v!none }{-1} +\setvalue{\??headlevel\v!text }{-2} +\setvalue{\??headlevel\v!head }{-3} + +\newtoks\everydefinesection + +\protected\def\definesection[#1]% + {\ifcsname\??headlevel#1\endcsname \else + \edef\currentsection{#1}% not used, will go + \edef\currenthead{#1}% + \global\advance\maxstructuredepth\plusone + \setevalue{\??headlevel#1}{\the\maxstructuredepth}% + \setstructurelevel{#1}{\sectionlevel{#1}}% + \normalexpanded{\setheadparameter{\s!parent}{\??head\lastsectionname}}% TO BE CHECKED, WE HAVE A HELPER + \the\everydefinesection + % so far for these default inheritances + \definemarking[#1]% + \ifnum\maxstructuredepth>\plusone + \normalexpanded{\relatemarking[#1][\lastsectionname]}% so, the parent will reset the child + \fi + \xdef\lastsectionname{#1}% + \ifx\firstsectionname\empty + \glet\firstsectionname\lastsectionname + \fi + \fi} + +\permanent\tolerant\protected\def\setupsection[#1]#*[#2]#*[#3]% + {\ifparameter#1\else + \ifcsname\??headlevel#1\endcsname + \strc_sectioning_setup_indeed[#1][#2][#3]% + \else + \strc_sectioning_setup_indeed[\sectionheadsection{#1}][#2][#3]% + \fi + \fi} + +\def\strc_sectioning_setup_indeed[#1][#2][#3]% + {\push_macro_currenthead + \ifthirdargument + \edef\currenthead{#1#2}% % not used at any more in mkiv (sets now) + \setupcurrenthead[#3]% + \else + \edef\currenthead{#1}% + \setupcurrenthead[#2]% + \fi + \pop_macro_currenthead} + +% we share the parameters as sections are roots of heads so eventually we can +% consider \definesection -> \definehead with one argument + +\appendtoks + % This is a rather practical default that we don't want to + % be part of the parent chain lookup mechanism; it's also + % mkii compatible. Somewhat weird that it's part of the + % top level structure but it will be flattened anyway. + \let\currenthead\currentsection % + \setheadparameter\c!textstyle {\directheadparameter\c!style}% + \setheadparameter\c!textcolor {\directheadparameter\c!color}% + \setheadparameter\c!numberstyle{\directheadparameter\c!style}% + \setheadparameter\c!numbercolor{\directheadparameter\c!color}% +\to \everydefinesection + +% head -> head + +\permanent\def\sectionheadmarkingtitle #1#2{\clf_markingtitle {#1}{#2}} +\permanent\def\sectionheadmarkingnumber#1#2{\clf_markingnumber{#1}{#2}} + +\permanent\def\sectionheadcoupling#1{\namedheadparameter{#1}\c!coupling} +\permanent\def\sectionheadsection #1{\namedheadparameter{#1}\c!section} + +% head construction + +\protected\def\strc_sectioning_handle_own{\dodoubleempty\strc_sectioning_handle_own_indeed} % [ref] {nr} {title} +\protected\def\strc_sectioning_handle_nop{\dodoubleempty\strc_sectioning_handle_nop_indeed} % [ref] {title} +\protected\def\strc_sectioning_start {\dotripleempty\strc_sectioning_start_named_section} % [settings] [userdata] !!! also used at lua end + +\newconditional\currentstructureown + +\newtoks\everybeforehead % hook, todo: before/after keys +\newtoks\everyafterhead % hook, todo: before/after keys + +\protected\def\strc_sectioning_handle_own_indeed[#1][#2]#3#4% + {\settrue\currentstructureown + \triggerautostructurelevel + \strc_sectioning_handle{#1}{\c!reference={#2},\c!ownnumber={#3},\c!title={#4}}{}} % name ref nr title -- + +\protected\def\strc_sectioning_handle_nop_indeed[#1][#2]% for taco: [key=value] variant + {\setfalse\currentstructureown + \triggerautostructurelevel + \ifcondition\validassignment{#2}% + \expandafter\strc_sectioning_handle_nop_indeed_yes + \else + \expandafter\strc_sectioning_handle_nop_indeed_nop + \fi + {#1}{#2}} + +\protected\def\strc_sectioning_handle_nop_indeed_yes#1#2% + {\strc_sectioning_handle{#1}{#2}{}} + +\protected\def\strc_sectioning_handle_nop_indeed_nop#1#2#3% + {\strc_sectioning_handle{#1}{\c!reference={#2},\c!title={#3}}{}} % name ref nr title -- + +\protected\def\strc_sectioning_start_named_section[#1][#2][#3]% for the moment no grouping, too annoying with page breaks + {\push_macro_currentnamedsection + \push_macro_currentstructurereferenceprefix + \edef\currentnamedsection{#1}% + \setfalse\currentstructureown + %\globalpushmacro\currenthead % this does not work out well + \xdef\currenthead{#1}% + \setsystemmode\currenthead % new, also here now + \headparameter\c!beforesection % beware, no users vars set yet + \the\everybeforehead + \strc_sectioning_handle{#1}{#2}{#3}% name -- -- -- userdata (we might move the tagged to here) + % potential: \bgroup (can be optional: grouped = yes) + \headparameter\c!insidesection} + +\protected\def\strc_sectioning_stop[#1]% !!! also used at lua end + {\dostoptagged + \dostoptagged + % potential: \egroup + %\globalpopmacro\currenthead % so we do a hard recover + \xdef\currenthead{#1}% recover + \headparameter\c!aftersection + \the\everyafterhead + \resetsystemmode\currenthead + \pop_macro_currentstructurereferenceprefix + \pop_macro_currentnamedsection} % new, also here now + +\permanent\let\dostarthead\strc_sectioning_start % used at lua end +\permanent\let\dostophead \strc_sectioning_stop % used at lua end + +% \newconditional\structurereversesectionnumbers % todo: key/val + +\newconditional\c_strc_sectioning_to_list +\newconditional\c_strc_sectioning_increment +\newconditional\c_strc_sectioning_place +\newconditional\c_strc_sectioning_empty +\newconditional\c_strc_sectioning_hidden +\newconditional\c_strc_sectioning_section + +\newconditional\headshownumber % public +\newconditional\headisdisplay % public +\newconditional\headissomewhere % public + +\setvalue{\??headincrement\v!yes }{\settrue \c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list} +\setvalue{\??headincrement\v!no }{\setfalse\c_strc_sectioning_increment\setfalse\c_strc_sectioning_to_list} +\setvalue{\??headincrement\v!list }{\setfalse\c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list} +\setvalue{\??headincrement\s!empty}{\settrue \c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list} + +\protected\def\strc_sectioning_initialize_increment + {\edef\currentheadincrement{\headparameter\c!incrementnumber}% + \ifcsname\??headincrement\currentheadincrement\endcsname + \lastnamedcs + \else + \settrue \c_strc_sectioning_increment\settrue \c_strc_sectioning_to_list + % \filterheadnumber + \fi} + +\permanent\protected\def\filterheadnumber + {\settrue\c_strc_sectioning_increment + \settrue\c_strc_sectioning_to_list + \ifx\currentproduct\empty + % todo : filter from other toc (number, file, title) + % use : \currentheadincrement as spec + \fi} + +\setvalue{\??headplace\v!yes}% + {\setfalse\c_strc_sectioning_empty + \settrue \c_strc_sectioning_place + \setfalse\c_strc_sectioning_hidden + \setfalse\c_strc_sectioning_section} + +\setvalue{\??headplace\v!empty}% + {\settrue \c_strc_sectioning_empty + \settrue \c_strc_sectioning_place + \setfalse\c_strc_sectioning_hidden + \setfalse\c_strc_sectioning_section} + +\setvalue{\??headplace\v!no}% + {\settrue \c_strc_sectioning_empty + \setfalse\c_strc_sectioning_place + \setfalse\c_strc_sectioning_hidden + \setfalse\c_strc_sectioning_section} + +\setvalue{\??headplace\v!hidden}% + {\settrue \c_strc_sectioning_empty + \setfalse\c_strc_sectioning_place + \settrue \c_strc_sectioning_hidden + \setfalse\c_strc_sectioning_section} + +\setvalue{\??headplace\v!section}% + {\settrue \c_strc_sectioning_empty + \setfalse\c_strc_sectioning_place + \settrue \c_strc_sectioning_hidden + \settrue \c_strc_sectioning_section} + +\protected\def\strc_sectioning_initialize_placement + {\expandnamespaceparameter\??headplace\headparameter\c!placehead\v!yes} + +\newmode\v!sectionnumber + +\def\dosetstructureheadnumbercontent + {\setsystemmode\v!sectionnumber + \settrue\headshownumber} % why ? + +\def\doresetstructureheadnumbercontent + {\resetsystemmode\v!sectionnumber + \setfalse\headshownumber} % why ? + +\protected\def\strc_sectioning_initialize_number + {\edef\p_number{\sectionblockparameter\c!number}% + \ifx\p_number\v!yes + \edef\p_number{\headparameter\c!number}% + \ifx\p_number\v!yes + \settrue\headshownumber + \else + \setfalse\headshownumber + \fi + \else + \setfalse\headshownumber + \fi} + +% Beware, we do need some node for anchoring marks and normally a zwnj will +% do but it interferes so we deal with it at the \LUA\ end. + +\newtoks\everyheadsynchronization + +% \appendtoks +% \currentstructuresynchronize +% \to \everyheadsynchronization + +\let\currentstructuresynchronize\donothing + +\appendtoks + \currentstructuresynchronize + \glet\currentstructuresynchronize\donothing +\to \everyheadsynchronization + +\protected\def\theheadsynchonization + {% no, interferes: \signalcharacter + \the\everyheadsynchronization} + +% BEWARE: \marking[section]{my text} does not work as we use list indices instead +% so we need a 'keep track of raw set option' (or maybe a funny internal prefix) + +\permanent\protected\def\setheadmarking % li:: so that we can use \marking[section]{Taco needed this} + {\strc_sectioning_delayed_flush + \normalexpanded{\setmarking[\currenthead]{li::\currentstructurelistnumber}}} + +\let\deepstructurenumbercommand\relax +\let\deepstructuretitlecommand \relax + +\permanent\protected\def\fullheadnumber + {\edef\currentheadlabeltag{\currentsectionblock\c!label}% + \dostarttagged\t!sectionnumber\empty + \labeltexts + {\headparameter\currentheadlabeltag} + {\ifx\deepstructurenumbercommand\relax + \structurenumber + \else + \normalexpanded{\noexpand\deepstructurenumbercommand{\structurenumber}}% + \fi}% + \dostoptagged} + +\permanent\protected\def\fullheadtitle + {\dostarttagged\t!sectiontitle\empty + \ifx\deepstructuretitlecommand\relax + \structuretitle + \else + \normalexpanded{\noexpand\deepstructuretitlecommand{\structuretitle}}% + \fi + \dostoptagged} + +\let\currenthead \empty +\let\currentheadcoupling\empty +\let\currentheadsection \empty +\let\currentheadlevel \!!zerocount +\let\currentheadcounter \!!zerocount + +\let\strc_show_used\relax + +\installtextracker + {structures.showused} + {\let\strc_show_used\clf_showstructure} + {\let\strc_show_used\relax} + +\appendtoks + \strc_show_used +\to \everystoptext + +\permanent\protected\def\placeheadtext {\dosingleempty\strc_sectioning_place_head_text } % use with care +\permanent\protected\def\placeheadnumber{\dosingleempty\strc_sectioning_place_head_number} % use with care + +\protected\def\strc_sectioning_report{\clf_reportstructure} + +\ifdefined\strc_rendering_initialize_style_and_color \else + + \protected\def\strc_rendering_initialize_style_and_color#1#2% + {\dontconvertfont + \useheadstyleandcolor\c!style\c!color + \useheadstyleandcolor#1#2% + \setupinterlinespace} + +\fi + +\def\strc_sectioning_place_head_text[#1]% + {\dontleavehmode + \begingroup + \protected\def\\{\space}% messy here, but the default (and needs to be grouped) + \global\settrue\headisdisplay % triggers interlinespace checking + \edef\currenthead{#1}% + \strc_rendering_initialize_style_and_color\c!textstyle\c!textcolor + \relax + \getspecificstructuretitle{\thenamedheadlevel{#1}}% + \endgraf + \endgroup} + +\def\strc_sectioning_place_head_number[#1]% + {\dontleavehmode + \begingroup + \global\settrue\headisdisplay % triggers interlinespace checking + \edef\currenthead{#1}% + \strc_rendering_initialize_style_and_color\c!numberstyle\c!numbercolor + \relax + \getfullstructurenumber{\thenamedheadlevel{#1}}% + \endgraf + \endgroup} + +\ifdefined\triggerautostructurelevel \else \let\triggerautostructurelevel\relax \fi + +\newtoks\everybeforesectionheadhandle +\newtoks\everyaftersectionheadhandle + +\def\strc_sectioning_handle#1#2#3% name data userdata (we can move #1 to the caller) + {\xdef\currenthead {#1}% + \xdef\currentheadcoupling{\sectionheadcoupling\currenthead}% + \xdef\currentheadsection {\sectionheadsection \currentheadcoupling}% + \xdef\currentheadlevel {\sectionlevel \currentheadsection}% + % + %\writestatus\m!system{setup: \currenthead,\currentheadcoupling,\currentheadsection,\currentheadlevel}% + % + \strc_sectioning_initialize_autolevel + \strc_sectioning_initialize_increment + \strc_sectioning_initialize_placement + \strc_sectioning_initialize_number + % + \the\everybeforesectionheadhandle + % + % todo: also mark (for header) + % + % we might remove the lower level + % + % not here, after optional \page: \strc_sectioning_register{#1}{#2}{#3}% + % +% \xdef\currentheadcounter{\currentsectioncountervalue}% lua call + % + % \currentstructuresynchronize % will move + % + \let\getheadnumber\empty + \let\getheadtitle \empty + \let\getheadsyncs \empty + \ifconditional\c_strc_sectioning_increment + \ifconditional\c_strc_sectioning_place + \strc_sectioning_before_yes + \strc_sectioning_register{#1}{#2}{#3}% after optional \page + \strc_sectioning_report + \dostarttagged\t!sectioncaption\empty + \let\getheadsyncs\theheadsynchonization + \let\getheadtitle\fullheadtitle + \ifconditional\headshownumber + \let\getheadnumber\fullheadnumber + \strc_rendering_place_head_number_and_text + \else + \strc_rendering_place_head_text + \fi + \dostoptagged + \strc_sectioning_after_yes + \orelse\ifconditional\c_strc_sectioning_hidden + \strc_sectioning_register{#1}{#2}{#3}% after optional \page + \strc_sectioning_report + \dostarttagged\t!sectioncaption\empty + \let\getheadsyncs\theheadsynchonization + \ifconditional\c_strc_sectioning_section + \strc_rendering_place_head_section + \else + \strc_rendering_place_head_hidden % only something when tracing + \fi + \dostoptagged + \else + \strc_sectioning_before_nop % toegevoegd ivm subpaginanr / tug sheets + \strc_sectioning_register{#1}{#2}{#3}% after optional \page + \strc_sectioning_report + \dostarttagged\t!sectioncaption\empty + \let\getheadsyncs\theheadsynchonization + \strc_rendering_place_head_empty % just flush 'm + \dostoptagged + \strc_sectioning_after_nop + \fi + \else + \ifconditional\c_strc_sectioning_place + \strc_sectioning_before_yes + \strc_sectioning_register{#1}{#2}{#3}% after optional \page + \strc_sectioning_report + \dostarttagged\t!sectioncaption\empty + \let\getheadsyncs\theheadsynchonization + \let\getheadtitle\fullheadtitle + \strc_rendering_place_head_text + \dostoptagged + \strc_sectioning_after_yes + \orelse\ifconditional\c_strc_sectioning_hidden + \strc_sectioning_register{#1}{#2}{#3}% after optional \page + \strc_sectioning_report + \let\getheadsyncs\theheadsynchonization + \dostarttagged\t!sectioncaption\empty + \ifconditional\c_strc_sectioning_section + \strc_rendering_place_head_section + \else + \strc_rendering_place_head_hidden % only something when tracing + \fi + \dostoptagged + \else + % do nothing / should be vbox to 0pt + \strc_sectioning_before_nop + \strc_sectioning_register{#1}{#2}{#3}% after optional \page + \strc_sectioning_report + \dostarttagged\t!sectioncaption\empty + \let\getheadsyncs\theheadsynchonization + \strc_rendering_place_head_empty % just flush 'm + \dostoptagged + \strc_sectioning_after_nop + \fi + \fi + % + \the\everyaftersectionheadhandle + % + \setfalse\c_strc_sectioning_ignore_page + % ignorespaces prevents spaces creeping in when after=\dontleavehmode + \dostarttagged\t!sectioncontent\empty + \ifx\currentstructureplaceholder\empty + \ifconditional\headisdisplay + \doubleexpandafter\ignorespaces + \else + \doubleexpandafter\ignorepars + \fi + \else + \expandafter\strc_sectioning_placeholder + \fi} + +%D \starttyping +%D \startsubject[placeholder=todo,title=one] +%D whatever one +%D \stopsubject +%D \stoptyping + +\def\strc_sectioning_placeholder + {\placeholder[\currentstructureplaceholder]% + \gobblenested{\e!start\currenthead}{\e!stop\currenthead}{\e!stop\currenthead}} + +% typesetting (the getters are public) + +\protected\def\strc_rendering_place_head_number_and_text + {\setheadmarking + \getheadnumber/\getheadtitle + \getheadsyncs} + +\protected\def\strc_rendering_place_head_text + {\setheadmarking + \getheadtitle + \getheadsyncs} + +\protected\def\strc_rendering_place_head_empty + {\setheadmarking + \getheadsyncs} + +\installcorenamespace{hiddenheadattr} +\installcorenamespace{hiddenheadsync} + +% todo: when in the page builder we need to resolve the marking immediately +% because otherwise we have an async + +\newbox\b_sectioning_delayed + +\def\strc_sectioning_delayed_flush + {\ifvoid\b_sectioning_delayed\else + \smashedbox\b_sectioning_delayed + \fi} + +\protected\def\strc_rendering_place_head_section % see hidden below + {\global\setbox\b_sectioning_delayed\hpack\bgroup + \setmarking[\currentheadcoupling]{li::\currentstructurelistnumber}% + \hpack\headreferenceattributes{}% also does the mark + \theheadsynchonization + \egroup} + +\protected\def\strc_rendering_place_head_hidden % maybe trialtypesetting check + {\setxvalue{\??hiddenheadattr\currenthead}% + {\headreferenceattributes}% can be used when making a box + \setxvalue{\??hiddenheadsync\currenthead}% + {\noexpand\letgvalue{\??hiddenheadsync\currenthead}\relax + \noexpand\setmarking[\currentheadcoupling]{li::\currentstructurelistnumber}% + \hpack\headreferenceattributes{}% otherwise no destination ... maybe tag ref as hidden and fall back on page reference + \theheadsynchonization}} % and it's a node anyway + +\permanent\def\synchronizehead #1{\csname\??hiddenheadsync#1\endcsname} +\permanent\def\theheadreferenceattributes#1{\csname\??hiddenheadattr#1\endcsname} + +\permanent\protected\def\placerawheaddata [#1]{\synchronizehead{#1}} +\permanent\protected\def\placerawheadtext [#1]{\getspecificstructuretitle{\thenamedheadlevel{#1}}} +\permanent\protected\def\placerawheadnumber[#1]{\getfullstructurenumber{\thenamedheadlevel{#1}}} + +\permanent\protected\def\repeathead[#1]% + {\begingroup + \setupinteraction[\c!state=\v!stop]% + \def\currenthead{#1} + \strc_sectioning_initialize_placement + \strc_sectioning_initialize_number + \dostarttagged\t!sectioncaption\empty + \let\getheadsyncs \relax + \def\getheadtitle {\getmarking[#1]} + \def\getheadnumber{\getmarking[#1\v!number]} + \strc_sectioning_before_yes + \ifconditional\headshownumber + \strc_rendering_place_head_number_and_text + \else + \strc_rendering_place_head_text + \fi + \dostoptagged + \strc_sectioning_after_yes + \endgroup} + +% \setuphead[chapter][placehead=hidden] +% \chapter {test} +% +% %(\synchronizehead{chapter}) % \getheadsyncs +% %(\getfullstructurenumber{\thenamedheadlevel{chapter}}) +% %(\getspecificstructuretitle{\thenamedheadlevel{chapter}}) +% +% (\placerawheaddata [chapter]) +% (\placerawheadnumber[chapter]) +% (\placerawheadtext [chapter]) + +% pagebreaks + +\letvalue{\??headmarknop\v!page }\donothing +\setvalue{\??headmarknop\v!reset }{\resetcurrentstructuremarks} +\letvalue{\??headmarknop\s!unknown}\donothing + +\letvalue{\??headmarkyes\v!page }\donothing % to be checked: {\resetcurrentstructuremarks} +\setvalue{\??headmarkyes\v!reset }{\resetcurrentstructuremarks} +\letvalue{\??headmarkyes\s!unknown}\donothing + +\def\strc_sectioning_check_layout + {\edef\p_page{\headparameter\c!page}% + \ifx\p_page\empty + \strc_sectioning_check_layout_nop + \else + \strc_sectioning_check_layout_yes + \fi} + +\def\strc_sectioning_check_layout_nop + {\expandnamespaceparameter\??headmarknop\headparameter\c!marking\s!unknown} + +\def\strc_sectioning_check_layout_yes + {\page[\p_page]% + \expandnamespaceparameter\??headmarkyes\headparameter\c!marking\s!unknown + \edef\p_header{\headparameter\c!header}% + \ifx\p_header\empty \else + \doifelselayouttextline\v!header{\normalexpanded{\setuplayouttext[\v!header][\c!state=\p_header]}}\donothing + \fi + \edef\p_text{\headparameter\c!text}% + \ifx\p_text\empty \else + \doifelselayouttextline\v!text {\normalexpanded{\setuplayouttext[\v!text ][\c!state=\p_text ]}}\donothing + \fi + \edef\p_footer{\headparameter\c!footer}% + \ifx\p_footer\empty \else + \doifelselayouttextline\v!footer{\normalexpanded{\setuplayouttext[\v!footer][\c!state=\p_footer]}}\donothing + \fi} + +\newcount \c_strc_sectioning_preceding_level \c_strc_sectioning_preceding_level\plusone +\newconditional\c_strc_sectioning_auto_break \settrue\c_strc_sectioning_auto_break +\newconditional\c_strc_sectioning_ignore_page +\newsignal \s_strc_sectioning_continuous_signal + +\protected\def\strc_sectioning_inject_continuous_signal + {\ifhmode + \hskip\s_strc_sectioning_continuous_signal\relax + \fi} + +% \let\dotagsectionlevel\relax + +\def\strc_sectioning_before_yes + {\strc_sectioning_check_before\strc_sectioning_handle_page_yes + \headparameter\c!inbetween + \dostarttaggedchained\t!section\currenthead\??head +% \dotagsectionlevel + } + +\def\strc_sectioning_before_nop + {\strc_sectioning_check_before\strc_sectioning_handle_page_nop + \headparameter\c!inbetween + \dostarttagged\currenthead\empty} % this is a weird one .. needs checking + +\def\strc_sectioning_empty_correction + {\ifconditional\c_strc_sectioning_empty + % this needs checking + \penalty\plustenthousand + \vskip-\lineheight + \kern\zeropoint + \prevdepth\strutdepth + \fi} + +\def\strc_sectioning_after_nop + {} + +\def\strc_sectioning_check_before#1% + {\ifhmode + \scratchcounter\lastpenalty + \unpenalty % no beauty in this + \ifdim\lastskip=\s_strc_sectioning_continuous_signal + % no page break + \ifconditional\c_strc_sectioning_ignore_page + \setfalse\c_strc_sectioning_ignore_page + \else + \global\c_strc_sectioning_preceding_level\currentheadlevel + \nobreak + \fi + % \global\settrue\c_strc_rendering_continuous + \else + \penalty\scratchcounter + % \global\setfalse\c_strc_rendering_continuous + #1% + \fi + \else + % \global\setfalse\c_strc_rendering_continuous + #1% + \fi} + +%permanent\def\currentsectioncountervalue {\clf_depthnumber\numexpr\thenamedheadlevel\currenthead\relax} +%permanent\def\previoussectioncountervalue{\clf_depthnumber\numexpr\thenamedheadlevel\currenthead+\minusone\relax} + +\permanent\def\currentsectioncountervalue {\clf_depthnumber\numexpr\thenamedheadlevel\currenthead\relax} +%permanent\def\previoussectioncountervalue{\clf_depthnumber\numexpr\thenamedheadlevel\currenthead+\minusone\relax} +\permanent\def\previoussectioncountervalue{\clf_depthnumber\numexpr\thenamedheadlevel\previoushead\relax} + +\let\previoushead\empty + +\def\strc_sectioning_handle_page_nop + {\edef\p_continue{\headparameter\c!continue}% + \ifx\p_continue\v!yes + \ifx\currenthead\previoushead % not really needed + \strc_sectioning_check_layout + \orelse\ifnum\previoussectioncountervalue=\zerocount + \strc_sectioning_check_layout + \orelse\ifnum\currentsectioncountervalue>\zerocount + \strc_sectioning_check_layout + \fi + \else + \strc_sectioning_check_layout + \fi + \glet\previoushead\currenthead} + + +\def\strc_sectioning_handle_page_yes + {\ifconditional\c_strc_sectioning_ignore_page + \setfalse\c_strc_sectioning_ignore_page + \else + % beware, these numbers are not yet know here + \strc_sectioning_handle_page_nop + \edef\p_aligntitle{\headparameter\c!aligntitle}% + \ifx\p_aligntitle\v!float + \ifconditional\c_strc_sectioning_auto_break + \spac_vspacing_same_page\currentheadlevel\zerocount + \fi + \headparameter\c!before\relax + \indent + \else + \page_otr_command_flush_side_floats + \ifconditional\c_strc_sectioning_auto_break + \spac_vspacing_same_page\currentheadlevel\zerocount + \fi + \headparameter\c!before\relax + \fi + \global\c_strc_sectioning_preceding_level\currentheadlevel + \fi + \glet\previoushead\currenthead} + +\def\strc_sectioning_depth_correction + {\ifvmode + \edef\p_depthcorrection{\headparameter\c!depthcorrection}% + \ifx\p_depthcorrection\v!strut + \prevdepth\strutdepth + \fi + \fi} + +\def\strc_sectioning_after_yes + {\ifconditional\headisdisplay + \ifconditional\c_strc_sectioning_auto_break + \spac_vspacing_same_page\currentheadlevel\plusone + \fi + \strc_sectioning_empty_correction + \headparameter\c!after + \strc_sectioning_depth_correction + \fi} + +\protected\def\strc_sectioning_prevent_page_break % see strc-con + {\ifconditional\c_strc_sectioning_auto_break + \spac_vspacing_same_page\currentheadlevel\plustwo + \fi} + + +% We do support negative numbers but it can have side effects that we won't catch: +% +% \chapter{some} \setupheadnumber[chapter][3] \chapter{more} +% \setupheadnumber[section][8] \section{b} \section{c} \setupheadnumber[section][-1] \section{d} + +\def\thenamedheadlevel#1% + {\sectionlevel{\sectionheadsection{\sectionheadcoupling{#1}}}} + +\permanent\protected\def\setupheadnumber + {\dodoubleargument\strc_sectioning_setup_number} + +\def\strc_sectioning_setup_number[#1][#2]% todo: reset if at other level + {\setstructurenumber{\thenamedheadlevel{#1}}{\number#2}} + +\def\currentheadnumber{0} % ==> \currentheadnumber + +\permanent\protected\def\determineheadnumber[#1]% + {\xdef\currentheadnumber{\getstructurenumber{\thenamedheadlevel{#1}}}} + +% The previous macro is been replaced by the expandable: + +\permanent\def\namedheadnumber #1{\getstructurenumber {\thenamedheadlevel{#1}}} +\permanent\def\somenamedheadnumber#1#2{\getsomestructurenumber{\thenamedheadlevel{#1}}{#2}} + +\permanent\protected\def\headnumber + {\dodoubleempty\strc_sectioning_number} + +\def\strc_sectioning_number[#1][#2]% simple case is just a number + {\getsomefullstructurenumber{\iffirstargument\thenamedheadlevel{#1}\fi}{#2}} + +\permanent\protected\def\someheadnumber + {\dodoubleempty\strc_sectioning_number_some} + +\def\strc_sectioning_number_some[#1][#2]% + {\dontleavehmode + \begingroup + \edef\currenthead{#1}% + \getsomefullstructurenumber{\thenamedheadlevel{#1}}{#2}% + \endgroup} + +\aliased\let\sectioncountervalue\structurevalue + +\def\currentheadtext{obsolete,\space use marks} + +% list references, will be redone in lua when we need it + +\let\startlistreferences\relax +\let\stoplistreferences \relax + +% experimental + +\newconditional\c_strc_sectioning_auto_levels + +\appendtoks + \settrue\c_strc_sectioning_auto_levels +\to \everyenableelements + +\protected\def\strc_sectioning_initialize_autolevel + {\ifconditional\c_strc_sectioning_auto_levels + \clf_autonextstructurelevel\currentheadlevel\relax + \global\setfalse\c_strc_sectioning_auto_levels + \fi} + +\permanent\protected\def\triggerautostructurelevel + {\global\settrue\c_strc_sectioning_auto_levels} + +\permanent\protected\def\finalizeautostructurelevels + {\clf_autofinishstructurelevels} + +\permanent\protected\def\finalizeautostructurelevel + {\dostoptagged + \dostoptagged} + +\appendtoks + \finalizeautostructurelevels +\to \everystoptext + +\stopcontextdefinitioncode + +\protect \endinput diff --git a/tex/context/base/mkiv/strc-syn.mkxl b/tex/context/base/mkiv/strc-syn.mkxl new file mode 100644 index 000000000..130d1737a --- /dev/null +++ b/tex/context/base/mkiv/strc-syn.mkxl @@ -0,0 +1,658 @@ +%D \module +%D [ file=strc-syn, +%D version=2008.10.20, +%D title=\CONTEXT\ Structure Macros, +%D subtitle=Synonyms and Sorting, +%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 Structure Macros / Synonyms and Sorting} + +\registerctxluafile{strc-syn}{} + +%D Although we could nowadays build this on top of regular lists we keep this +%D more efficient variant around. Eventually we can add some options to lists +%D that also provide such functionality but at the cost of much more overhead. +%D +%D We show a usage of both synonyms and sorts, which are deep down variants of +%D so called simple lists. A definition looks like this: +%D +%D \startbuffer +%D \definesynonyms +%D [myabbreviation] +%D +%D \setupsynonyms +%D [myabbreviation] +%D [headstyle=bold, +%D headcolor=darkred, +%D synonymstyle=boldslanted, +%D synonymcolor=darkblue, +%D textstyle=slanted, +%D textcolor=darkgreen, +%D style=normal, +%D color=darkyellow] +%D +%D \definesorting +%D [mylogo] +%D +%D \setupsorting +%D [mylogo] +%D [style=bold, +%D color=darkmagenta] +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D More complex definitions involves commands to call up meanings and such. The +%D use of the defined commands is as follows: \ +%D +%D \startbuffer +%D \myabbreviation [FIRST] {TheFirst} {The First Words} +%D \myabbreviation [SECOND] {TheSecond} {The Second Words} +%D \myabbreviation [THIRD] {TheThird} {The Third Words} +%D +%D \mylogo [FOURTH] {TheFourth} +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D By default a synonym is just typeset and flagges as being used, so that in +%D a list it wil be shows with its meaning. You can however also expand the +%D meaning automatically at first use: +%D +%D \startbuffer +%D \setupsynonyms[myabbreviation][alternative=first] +%D +%D We have \FIRST, \SECOND\ and also \THIRD\ but no \FOURTH. +%D +%D We have \FIRST, \SECOND\ and also \THIRD\ but no \FOURTH. +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D We can change the order, as demonstrated in: +%D +%D \startbuffer +%D \resetshownsynonyms[myabbreviation] +%D +%D \setupsynonyms[myabbreviation][alternative=last] +%D +%D We have \FIRST\ and \THIRD\ or \FOURTH. +%D +%D We have \FIRST\ and \THIRD\ or \FOURTH. +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D A list is called up with: +%D +%D \startbuffer +%D \placelistofsynonyms[myabbreviation] +%D +%D \placelistofsorts[mylogo] +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D The lists are constructions (like descriptions are) and can be set up +%D likewise. + +% todo: add 'define only' option to descriptions, then add sorting (also based on key) +% and call to definition -> replaces this module + +\unprotect + +% split but common in lua + +\permanent\protected\def\preprocessexpansion#1#2#3#4% do this at the lua end if still needed + {\ifx#1\s!xml + \xmlstartraw + \xdef#2{#4}% + \xmlstopraw + \glet#3\s!xml + \else + \ifx#1\v!yes + \xdef#2{#4}% + \else + \xdef#2{\detokenize{#4}}% + \fi + \glet#3\s!tex + \fi} + +%D We now use a simple list variant: + +\installcorenamespace {simplelist} + +\installcommandhandler \??simplelist {simplelist} \??simplelist + +\let\setupsimplelists\setupsimplelist + +\setupsimplelists[% + %c!title=, + %c!text=, + % + %c!style=, + %c!color=, + %c!command=, + %c!align=, + % + %c!headstyle=, + %c!headcolor=, + %c!headalign=, + % + %c!titlestyle=, + %c!titlecolor=, + %c!titlecommand=, + %c!titleleft=, + %c!titleright=, + % + %c!closesymbol=, + %c!closecommand=, + % + \c!alternative=\v!left, + \c!display=\v!yes, + \c!width=7\emwidth, + \c!distance=\emwidth, + \c!titledistance=.5\emwidth, + %c!hang=, + %c!sample=, + \c!margin=\v!no, + \c!before=\startpacked, + \c!inbetween=\blank, + \c!after=\stoppacked, + %c!indentnext=, + %c!indenting=, + % + \c!expansion=\v!no, + %c!xmlsetup=, + %s!catcodes=, + \s!language=\currentmainlanguage, +] + +\appendtoks + \setfalse\c_strc_constructions_define_commands + \ifx\currentsimplelistparent\empty + \defineconstruction[\currentsimplelist][\s!handler=\v!simplelist,\c!level=1]% + \else + \defineconstruction[\currentsimplelist][\currentsimplelistparent][\s!handler=\v!simplelist,\c!level=1]% + \fi + \settrue\c_strc_constructions_define_commands +\to \everydefinesimplelist + +\setuvalue{\??constructioninitializer\v!simplelist}% + {\let \currentsimplelist \currentconstruction + \enforced\let\constructionparameter \simplelistparameter + \enforced\let\constructionnamespace \??simplelist + \enforced\let\detokenizedconstructionparameter\detokenizedsimplelistparameter + \enforced\let\letconstructionparameter \letsimplelistparameter + \enforced\let\useconstructionstyleandcolor \usesimpleliststyleandcolor + \enforced\let\setupcurrentconstruction \setupcurrentsimplelist} + +\setuvalue{\??constructionfinalizer\v!simplelist}% + {} + +\setuvalue{\??constructiontexthandler\v!simplelist}% + {\begingroup + \useconstructionstyleandcolor\c!headstyle\c!headcolor + \the\everyconstruction + \constructionparameter\c!headcommand + {\strut + \currentsimplelistentry}% + \endgroup} + +% And we build on top of this. + +\ifdefined\dotagsynonym \else \let\dotagsynonym\relax \fi +\ifdefined\dotagsorting \else \let\dotagsorting\relax \fi + +\definesimplelist + [\v!synonym] + [\c!state=\v!start, + %\c!synonymstyle=, + %\c!textstyle=, + %\c!headstyle=, + %\c!headcolor=, + %\c!criterium=, + \c!location=\v!left, + \c!width=5\emwidth, + \c!distance=\zeropoint, + %\c!sample=, + %\c!hang=, + %\c!align=, + %\c!before=, + %\c!inbetween=, + %\c!after=, + \c!indentnext=\v!no, + %\c!expansion=, + \c!method=] + +\aliased\let\setupsynonyms\setupsimplelist + +\permanent\tolerant\protected\def\definesynonyms[#1]#*[#2]#*[#3]#*[#4]% name plural \meaning \use + {\ifnum\lastarguments=\plusfour + \protected\instance\def#4##1{\strc_synonyms_insert{#1}{##1}}% name tag + \frozen\instance\setuvalue{#1}{\definesynonym[\v!no][#1]}% \name + \else + \frozen\instance\setuvalue{#1}{\definesynonym[\v!yes][#1]}% \name + \fi + \ifnum\lastarguments>\plustwo + \protected\frozen\instance\def#3##1{\strc_synonyms_insert_meaning{#1}{##1}}% \meaning + \fi + \edef\currentsynonym{#1}% + % + %\checksynonymparent + %\setupcurrentsynonym[\s!single={#1},\s!multi={#2}]% + \setfalse\c_strc_constructions_define_commands + \definesimplelist + [\currentsynonym]% + [\v!sorting] + [\s!single={#1},% + \s!multi={#2}]% + \settrue\c_strc_constructions_define_commands + \ifparameter#2\or + % + \presetheadtext[#2=\Word{#2}]% changes the \if...argument + % + % These will go away. Actually the overloads catched this empty case! + % + \instance\setuvalue{\e!setup #2\e!endsetup}{\setupsynonyms[#1]}% obsolete definition + \instance\setuvalue{\e!place \e!listof#2}{\placelistofsynonyms[#1]}% accepts extra argument + \instance\setuvalue{\e!complete\e!listof#2}{\completelistofsynonyms[#1]}% + \fi} + +\permanent\tolerant\protected\def\definesynonym[#1]#*[#2]#*[#3]% + {\begingroup + \edef\currentsynonymoption{#1}% + \edef\currentsynonym{#2}% + \edef\currentsynonymtag{#3}% + \strc_synonyms_define_entry} + +\def\strc_synonyms_define_entry#1#2% + {\let\currentsimplelist\currentsynonym + \ifempty\currentsynonymtag + \edef\currentsynonymtag{#1}% + \fi + \ifempty\currentsynonymtag \else + % this is not that efficient, esp when we load a big list + \edef\currentsynonymexpansion{\simplelistparameter\c!expansion}% + \preprocessexpansion\currentsynonymexpansion\m_synonyms_text \currentsynonymcoding{#1}% + \preprocessexpansion\currentsynonymexpansion\m_synonyms_meaning\currentsynonymcoding{#2}% + % + \clf_registersynonym + {\currentsynonym}% + {synonym}% + {% + metadata {% + catcodes \catcodetable + coding {\currentsynonymcoding}% + \ifx\currentsynonymcoding\s!xml + xmlroot {\xmldocument}% + \fi + }% + definition {% + tag {\currentsynonymtag}% + synonym {\m_synonyms_text}% + meaning {\m_synonyms_meaning}% + % used false + }% + }% + \relax + \ifx\currentsynonymoption\v!yes + \instance\setuxvalue\currentsynonymtag{\strc_synonyms_insert{\currentsynonym}{\currentsynonymtag}}% + \fi + \fi + \endgroup} + +\permanent\tolerant\protected\def\registersynonym [#1]#*[#2]{\clf_registerusedsynonym{#1}{#2}} +\permanent \protected\def\currentsynonymname {\clf_synonymname{\currentsimplelist}{\currentsynonymtag}} +\permanent \protected\def\currentsynonymmeaning {\clf_synonymmeaning{\currentsimplelist}{\currentsynonymtag}} +\permanent \protected\def\doifelsecurrentsynonymused {\clf_doifelsesynonymused{\currentsimplelist}{\currentsynonymtag}} +\permanent \protected\def\doifelsecurrentsynonymshown{\clf_doifelsesynonymshown{\currentsimplelist}{\currentsynonymtag}} +\permanent \protected\def\resetusedsynonyms [#1]{\clf_resetusedsynonyms{#1}} +\permanent \protected\def\resetshownsynonyms [#1]{\clf_resetshownsynonyms{#1}} + +\aliased\let\rawsynonymname \clf_synonymname +\aliased\let\rawsynonymmeaning\clf_synonymmeaning + +\installcorenamespace{simplelistalternative} % specific ways of rendering a list +\installcorenamespace{simplelistrenderings} % a namespace for setups (rather local) + +\installcommandhandler \??simplelistalternative {simplelistalternative} \??simplelistalternative + +\setupsimplelist + [\v!synonym] + [\c!alternative=\v!normal] + +\protected\def\strc_synonyms_insert_meaning#1#2% name tag + {\dontleavehmode % otherwise we don't get it right at the beginning of a par + \begingroup + \def\currentsimplelist{#1}% + \def\currentsynonymtag{#2}% + \fastsetup{\??simplelistrenderings::\v!text}% + \endgroup} + +\protected\def\strc_synonyms_insert#1#2% name tag + {\dontleavehmode % otherwise we don't get it right at the beginning of a par + \begingroup + \edef\currentsimplelist{#1}% + \let\currentsynonym\currentsimplelist % for a while + \def\currentsynonymtag{#2}% + \edef\currentsimplelistalternative{\simplelistparameter\c!alternative}% + \doifnotcommandhandler\??simplelistalternative\currentsimplelistalternative + {\let\currentsimplelistalternative\v!normal}% + \fastsetup{\??simplelistrenderings:\v!synonym:\currentsimplelistalternative}% + \normalexpanded{\endgroup\simplelistparameter\c!next}} + +% \setupsimplelistalternative +% [\c!command=\directsimplelistparameter\c!command] + +\definesimplelistalternative + [\v!normal] + [\c!inbetween=\space, + \c!left=(, + \c!right=)] + +\definesimplelistalternative + [\v!first] + [\v!normal] + +\definesimplelistalternative + [\v!last] + [\v!normal] + +\startsetups[\??simplelistrenderings::\v!synonym] + \begingroup + \dostarttaggedchained\t!synonym\currentsynonym\??simplelist + \dotagsynonym + \usesimpleliststyleandcolor\c!synonymstyle\c!synonymcolor + \simplelistparameter\c!synonymcommand{\currentsynonymname}% + \dostoptagged + \endgroup +\stopsetups + +\startsetups[\??simplelistrenderings::\v!text] + \begingroup + \usehyphensparameter\simplelistparameter + \usesimpleliststyleandcolor\c!textstyle\c!textcolor + \simplelistparameter\c!textcommand{\currentsynonymmeaning}% + \endgroup +\stopsetups + +\startsetups[\??simplelistrenderings:\v!synonym:\v!normal] + \fastsetup{\??simplelistrenderings::\v!synonym} +\stopsetups + +\startsetups[\??simplelistrenderings:\v!synonym:\v!first] + \fastsetup{\??simplelistrenderings::\v!synonym} + \doifelsecurrentsynonymshown \donothing { + \simplelistalternativeparameter\c!inbetween + \simplelistalternativeparameter\c!left + \fastsetup{\??simplelistrenderings::\v!text} + \simplelistalternativeparameter\c!right + } +\stopsetups + +\startsetups[\??simplelistrenderings:\v!synonym:\v!last] + \doifelsecurrentsynonymshown { + \fastsetup{\??simplelistrenderings::\v!synonym} + } { + \fastsetup{\??simplelistrenderings::\v!text} + \simplelistalternativeparameter\c!inbetween + \simplelistalternativeparameter\c!left + \fastsetup{\??simplelistrenderings::\v!synonym} + \simplelistalternativeparameter\c!right + } +\stopsetups + +\permanent\tolerant\protected\def\placelistofsynonyms[#1]#*[#2]% + {\begingroup + \edef\currentsimplelist{#1}% + \doifelsecommandhandler\??simplelist\currentsimplelist + {\strc_constructions_initialize{#1}% + \setupcurrentsimplelist[#2]% + \let\synonymentry\strc_synonym_normal + % so we can hook tabulate into before and after + \normalexpanded{\simplelistparameter\c!before + \noexpand\clf_processsynonyms + {#1}% + {% + criterium {\simplelistparameter\c!criterium}% + language {\simplelistparameter\s!language}% + method {\simplelistparameter\c!method}% + }% + \relax + \simplelistparameter\c!after}% + \relax}% + {}% todo: message that invalid + \endgroup} + +\permanent\tolerant\protected\def\completelistofsynonyms[#1]#*[#2]% + {\begingroup + \edef\currentsimplelist{#1}% + \doifelsecommandhandler\??simplelist\currentsimplelist + {\normalexpanded{\startnamedsection[\v!chapter][\c!title={\headtext{\simplelistparameter\s!multi}},\c!reference=#1]}% + \strc_synonyms_place_list[#1][#2]% + \page + \stopnamedsection}% + {}% todo: message that invalid + \endgroup} + +\protected\def\strc_synonym_normal#1#2#3#4% + {\begingroup + \def\currentsimplelistentry{#3}% + \csname\??constructionstarthandler\v!construction\endcsname + #4% + \csname\??constructionstophandler\v!construction\endcsname + \endgroup} + +%D Sorting (a simplified version of synonym). + +\definesimplelist + [\v!sorting] + [\c!state=\v!start, + %\c!command=, % we test for defined ! + %\c!criterium=, + %\c!style=, + \c!before=\startpacked, + \c!after=\stoppacked, + %\c!expansion=, + \c!method=] + +\aliased\let\setupsorting\setupsimplelist + +% if #3=\relax or \v!none, then no command but still protected + +\permanent\tolerant\protected\def\definesorting[#1]#*[#2]#*[#3]% + {\ifnum\lastarguments=\plusthree + \doifnot{#3}\v!none + {\ifx#3\relax \else + \protected\instance\def#3##1{\strc_sorting_insert{#1}{##1}}% + \fi}% + \frozen\instance\setuvalue{#1}{\definesort[\v!no][#1]}% + \else + \frozen\instance\setuvalue{#1}{\definesort[\v!yes][#1]}% + \fi + \edef\currentsorting{#1}% + \setfalse\c_strc_constructions_define_commands + \definesimplelist + [\currentsorting]% + [\v!sorting] + [\s!single={#1},% + \s!multi={#2}]% + \settrue\c_strc_constructions_define_commands + \ifparameter#2\or + % + \presetheadtext[#2=\Word{#2}]% changes the \if...argument + % + % These will go away. Actually the overloads catched this empty case! + % + % + \presetheadtext[#2=\Word{#2}]% after \ifthirdargument -) + % + \instance\setuvalue{\e!setup #2\e!endsetup}{\setupsorting[#1]}% obsolete definition + \instance\setuvalue{\e!place \e!listof#2}{\placelistofsorts[#1]}% + \instance\setuvalue{\e!complete\e!listof#2}{\completelistofsorts[#1]}% + \fi} + +\permanent\tolerant\protected\def\definesort[#1]#*[#2]#*[#3]% + {\begingroup + \edef\currentsortingoption{#1}% + \edef\currentsorting{#2}% + \edef\currentsortingtag{#3}% + \strc_sorting_define_entry} + +\def\strc_sorting_define_entry#1% + {\let\currentsimplelist\currentsimplelist + \ifempty\currentsortingtag + \edef\currentsortingtag{#1}% + \fi + \ifempty\currentsortingtag \else + \edef\currentsortingexpansion{\simplelistparameter\c!expansion}% + \preprocessexpansion\currentsortingexpansion\currentsortingtext\currentsortingcoding{#1}% + \clf_registersynonym + {\currentsorting}% + {sorting}% + {% + metadata {% + catcodes \catcodetable + coding {\currentsortingcoding}% + \ifx\currentsortingcoding\s!xml + xmlroot {\xmldocument}% + \fi + }% + definition {% + tag {\currentsortingtag}% + synonym {\currentsortingtext}% + % used false + }% + }% + \relax + \ifx\currentsortingoption\v!yes + \instance\setuxvalue\currentsortingtag{\strc_sorting_insert{\currentsorting}{\currentsortingtag}}% + \fi + \fi + \endgroup} + +\permanent\protected\def\currentsortingname {\clf_synonymname {\currentsimplelist}{\currentsortingtag}} +\permanent\protected\def\doifelsecurrentsortingused {\clf_doifelsesynonymused {\currentsimplelist}{\currentsortingtag}} +\permanent\protected\def\resetusedsortings [#1]{\clf_resetusedsynonyms {#1}} + +\setupsimplelist + [\v!sorting] + [\c!alternative=\v!normal] + +\protected\def\strc_sorting_insert#1#2% name tag + {\dontleavehmode % otherwise we don't get it right at the beginning of a par + \begingroup + % no kap currently, of .. we need to map cap onto WORD + \edef\currentsorting{#1}% + \edef\currentsortingtag{#2}% + \let\currentsimplelist\currentsorting + \edef\currentsimplelistalternative{\simplelistparameter\c!alternative}% + \doifnotcommandhandler\??simplelistalternative\currentsimplelistalternative + {\let\currentsimplelistalternative\v!normal}% + \fastsetup{\??simplelistrenderings:\v!sorting:\currentsimplelistalternative}% + \normalexpanded{\endgroup\simplelistparameter\c!next}} + +% or: +% +% \doifelsesetups{\??simplelistrenderings:\v!sorting:\currentsimplelistalternative} +% {\fastsetup{\??simplelistrenderings:\v!sorting:\currentsimplelistalternative}} +% {\fastsetup{\??simplelistrenderings:\v!sorting:\v!normal}} + +\startsetups [\??simplelistrenderings:\v!sorting:\v!normal] + \fastsetup{\??simplelistrenderings::\v!sorting}% +\stopsetups + +\startsetups [\??simplelistrenderings::\v!sorting] + \begingroup + \dostarttaggedchained\t!sorting\currentsorting\??simplelist + \dotagsorting + \usesimpleliststyleandcolor\c!style\c!color + \currentsortingname + \dostoptagged + \endgroup +\stopsetups + +\permanent\tolerant\protected\def\registersort[#1]#*[#2]% + {\clf_registerusedsynonym{#1}{#2}} + +% before after +% +% maybe just 'commandset' and then combine + +\permanent\tolerant\protected\def\placelistofsorts[#1]#*[#2]% + {\begingroup + \edef\currentsimplelist{#1}% + \strc_constructions_initialize{#1}% + \setupcurrentsimplelist[#2]% + \edef\p_simplelist_command{\simplelistparameter\c!command}% + \ifx\p_simplelist_command\empty + \let\synonymentry\strc_sorting_normal + \else + \let\synonymentry\strc_sorting_command + \fi + % so we can hook tabulate into before and after + \normalexpanded{\simplelistparameter\c!before + \noexpand\clf_processsynonyms + {#1}% + {% + criterium {\simplelistparameter\c!criterium}% + language {\simplelistparameter\s!language}% + method {\simplelistparameter\c!method}% + }% + \relax + \simplelistparameter\c!after}% + \endgroup} + +\permanent\tolerant\protected\def\completelistofsorts[#1]#*[#2]% + {\begingroup + \edef\currentsimplelist{#1}% + \normalexpanded{\startnamedsection[\v!chapter][\c!title={\headtext{\simplelistparameter\s!multi}},\c!reference=#1]}% + \strc_sorting_place_list[#1][#2]% + \page + \stopnamedsection + \endgroup} + +\def\strc_sorting_command#1#2#3#4% #4 is meaning but empty here + {\p_simplelist_command{#1}{#2}{#3}} + +\def\strc_sorting_normal#1#2#3#4% #4 is meaning but empty here + {\begingroup + \usesimpleliststyleandcolor\c!style\c!color + #3% + \endgroup + \par} + +%D Presets. + +% To be considered: +% +% \setupsimplelist +% [\v!sorting] +% [\c!headstyle=\simplelistparameter\c!synonymstyle, +% \c!headcolor=\simplelistparameter\c!synonymcolor, +% \c!style=\simplelistparameter\c!textstyle, +% \c!color=\simplelistparameter\c!textcolor] + +\definesynonyms + [\v!abbreviation] + [\v!abbreviations] + [\infull] + +\setupsynonyms + [\v!abbreviation] + [\c!hyphens=\v!no, % new, not yet in setup definitions + \c!textstyle=\v!capital] + +\definesorting + [\v!logo] + [\v!logos] +% [\logogram] % no + +\protect \endinput diff --git a/tex/context/base/mkiv/supp-box.lmt b/tex/context/base/mkiv/supp-box.lmt index 61ec9b328..8a308f90f 100644 --- a/tex/context/base/mkiv/supp-box.lmt +++ b/tex/context/base/mkiv/supp-box.lmt @@ -29,7 +29,7 @@ local vlist_code = nodecodes.vlist local glue_code = nodecodes.glue local penalty_code = nodecodes.penalty local glyph_code = nodecodes.glyph -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local indent_code = nodes.listcodes.indent @@ -887,7 +887,7 @@ implement { b = getwidth(n) > 0 break end - elseif id ~= localpar_code then + elseif id ~= par_code then break end end @@ -1239,3 +1239,83 @@ do define_two("boxrangedp", "dp") end + +do + + local getbox = tex.getbox + local setfield = nodes.setfield + local getfield = nodes.getfield + local flush = nodes.flush + local copynode = nodes.copy + + local function get(n,field,copy) + local b = getbox(n) + if b then + local p = getfield(b,field) + if copy then + p = copynode(p) + else + setfield(b,field) + end + context(p) + end + end + + local function set(n,l,field) + local b = getbox(n) + if b then + setfield(b,field,l) + else + flush(l) + end + end + + implement { + name = "prelistbox", + public = true, + usage = "value", + arguments = { "integer", '"pre"' }, + actions = get, + } + + implement { + name = "postlistbox", + public = true, + usage = "value", + arguments = { "integer", '"post"' }, + actions = get, + } + + implement { + name = "prelistcopy", + public = true, + usage = "value", + arguments = { "integer", '"pre"', true }, + actions = get, + } + + implement { + name = "postlistcopy", + public = true, + usage = "value", + arguments = { "integer", '"post"', true }, + actions = get, + } + + implement { + name = "setprelistbox", + public = true, + usage = "value", + arguments = { "integer", "box", '"pre"' }, + actions = set, + } + + implement { + name = "setpostlistbox", + public = true, + usage = "value", + arguments = { "integer", "box", '"post"' }, + actions = set, + } + +end diff --git a/tex/context/base/mkiv/supp-box.lua b/tex/context/base/mkiv/supp-box.lua index d26742a5b..4914b6818 100644 --- a/tex/context/base/mkiv/supp-box.lua +++ b/tex/context/base/mkiv/supp-box.lua @@ -29,7 +29,7 @@ local vlist_code = nodecodes.vlist local glue_code = nodecodes.glue local penalty_code = nodecodes.penalty local glyph_code = nodecodes.glyph -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local indent_code = nodes.listcodes.indent @@ -854,7 +854,7 @@ implement { b = getwidth(n) > 0 break end - elseif id ~= localpar_code then + elseif id ~= par_code then break end end diff --git a/tex/context/base/mkiv/supp-box.mkiv b/tex/context/base/mkiv/supp-box.mkiv index b9835875d..16f093023 100644 --- a/tex/context/base/mkiv/supp-box.mkiv +++ b/tex/context/base/mkiv/supp-box.mkiv @@ -112,16 +112,16 @@ %D Smashing is introduced in \PLAIN\ \TEX, and stands for reducing the dimensions of %D a box to zero. The most resolute one is presented first. -\protected\def\smashbox#1% - {\wd#1\zeropoint - \ht#1\zeropoint - \dp#1\zeropoint} +% \protected\def\smashbox#1% +% {\wd#1\zeropoint +% \ht#1\zeropoint +% \dp#1\zeropoint} -\protected\def\smashboxed#1% - {\wd#1\zeropoint - \ht#1\zeropoint - \dp#1\zeropoint - \box#1\relax} +% \protected\def\smashboxed#1% +% {\wd#1\zeropoint +% \ht#1\zeropoint +% \dp#1\zeropoint +% \box#1\relax} %D \macros %D {hsmashbox,vsmashbox} @@ -170,6 +170,8 @@ \dp\c_boxes_register\zeropoint \box\c_boxes_register} +\let\smashboxed\smashedbox + %D \macros %D {hsmash,vsmash, %D hsmashed,vsmashed} @@ -1105,8 +1107,8 @@ \protected\def\processtokens#1#2#3#4#5% {\begingroup \def\lastcharacter{\lastcharacter}% hm, recursive ? + \let\\\space \def\space{ }% - \let\\=\space \def\before {#1}% \def\between{#2}% \def\after {#3}% @@ -2263,9 +2265,9 @@ \scratchdimen\zeropoint \def\docommand {\advance\sizeofbox\scratchdimen - \futurelet\next\dodocommand}% + \futurelet\nexttoken\dodocommand}% \def\dodocommand - {\ifx\next\bgroup + {\ifx\nexttoken\bgroup \expanded{\egroup#1 to \the\sizeofbox}% \else \expandafter\afterassignment\expandafter\docommand\expandafter\scratchdimen diff --git a/tex/context/base/mkiv/supp-box.mkxl b/tex/context/base/mkiv/supp-box.mkxl index 4e29550e2..2ed9ea9c1 100644 --- a/tex/context/base/mkiv/supp-box.mkxl +++ b/tex/context/base/mkiv/supp-box.mkxl @@ -25,18 +25,6 @@ % \fixupboxesmode\plusone % gone: is now the default -%D \macros -%D {dontcomplain} -%D -%D The next macro suppresses over- and underfull messages which often makes sense -%D when we deal with boxes. - -\protected\def\dontcomplain - {\hbadness\plustenthousand - \vbadness\plustenthousand - \hfuzz \maxdimen - \vfuzz \maxdimen} - %D This module implements some box manipulation macros. Some are quite simple, some %D are more advanced and when understood well, all can be of use. %D @@ -47,6 +35,8 @@ %D not, you're in trouble). These shortcuts can be used like a dimension, opposite %D to the core macros \type {\strutdepth} and alike, which are values. +%D These will be overloaded in spac-ver: + \def\strutdp {\dp\strutbox} \def\strutht {\ht\strutbox} \def\strutwd {\wd\strutbox} @@ -72,21 +62,21 @@ \newdimen\nextdepth %D \macros -%D {smashbox, smashedbox} +%D {smashbox, smashboxed, smashedbox} %D %D Smashing is introduced in \PLAIN\ \TEX, and stands for reducing the dimensions of %D a box to zero. The most resolute one is presented first. -\protected\def\smashbox#1% - {\wd#1\zeropoint - \ht#1\zeropoint - \dp#1\zeropoint} - -\protected\def\smashboxed#1% - {\wd#1\zeropoint - \ht#1\zeropoint - \dp#1\zeropoint - \box#1\relax} +% \permanent\protected\def\smashbox#1% +% {\wd#1\zeropoint +% \ht#1\zeropoint +% \dp#1\zeropoint} +% +% \permanent\protected\def\smashboxed#1% +% {\wd#1\zeropoint +% \ht#1\zeropoint +% \dp#1\zeropoint +% \box#1\relax} %D \macros %D {hsmashbox,vsmashbox} @@ -94,18 +84,18 @@ %D Smashing can be used for overlaying boxes. Depending on the mode, horizontal or %D vertical, one can use: -\protected\def\hsmashbox#1% - {\wd#1\zeropoint} - -\protected\def\vsmashbox#1% - {\ht#1\zeropoint - \dp#1\zeropoint} +% \permanent\protected\def\hsmashbox#1% +% {\wd#1\zeropoint} +% +% \permanent\protected\def\vsmashbox#1% +% {\ht#1\zeropoint +% \dp#1\zeropoint} %D The next implementation is less sensitive for spurious spaces. \newcount\c_boxes_register -\protected\def\smashbox +\permanent\protected\def\smashbox {\afterassignment\syst_boxes_smash_boxes_register\c_boxes_register} \def\syst_boxes_smash_boxes_register @@ -113,20 +103,20 @@ \ht\c_boxes_register\zeropoint \dp\c_boxes_register\zeropoint} -\protected\def\hsmashbox +\permanent\protected\def\hsmashbox {\afterassignment\syst_boxes_hsmashed_boxes_register\c_boxes_register} \def\syst_boxes_hsmashed_boxes_register {\wd\c_boxes_register\zeropoint} -\protected\def\vsmashbox +\permanent\protected\def\vsmashbox {\afterassignment\syst_boxes_vsmashed_boxes_register\c_boxes_register} \def\syst_boxes_vsmashed_boxes_register {\ht\c_boxes_register\zeropoint \dp\c_boxes_register\zeropoint} -\protected\def\smashedbox +\permanent\protected\def\smashedbox {\afterassignment\syst_boxes_smashed_boxes_register\c_boxes_register} \protected\def\syst_boxes_smashed_boxes_register @@ -135,6 +125,8 @@ \dp\c_boxes_register\zeropoint \box\c_boxes_register} +\let\smashboxed\smashedbox + %D \macros %D {hsmash,vsmash, %D hsmashed,vsmashed} @@ -143,10 +135,10 @@ %D some subtle differences betreen the smash and smashed alternatives. The later %D ones reduce all dimensions to zero. -\protected\def\hsmash {\bgroup\dowithnextboxcs\syst_boxes_hsmashed_nextbox\hbox} -\protected\def\vsmash {\bgroup\dowithnextboxcs\syst_boxes_vsmashed_nextbox\vbox} -\protected\def\hsmashed{\bgroup\dowithnextboxcs\syst_boxes_smashed_nextbox \hbox} -\protected\def\vsmashed{\bgroup\dowithnextboxcs\syst_boxes_smashed_nextbox \vbox} +\permanent\protected\def\hsmash {\bgroup\dowithnextboxcs\syst_boxes_hsmashed_nextbox\hbox} +\permanent\protected\def\vsmash {\bgroup\dowithnextboxcs\syst_boxes_vsmashed_nextbox\vbox} +\permanent\protected\def\hsmashed{\bgroup\dowithnextboxcs\syst_boxes_smashed_nextbox \hbox} +\permanent\protected\def\vsmashed{\bgroup\dowithnextboxcs\syst_boxes_smashed_nextbox \vbox} \protected\def\syst_boxes_hsmashed_nextbox {\wd\nextbox\zeropoint @@ -176,8 +168,8 @@ %D \smashedvbox to ... {...} %D \stoptyping -\protected\def\smashedhbox{\hpack\bgroup\dowithnextboxcs\syst_boxes_smashed_nextbox\hbox} -\protected\def\smashedvbox{\vpack\bgroup\dowithnextboxcs\syst_boxes_smashed_nextbox\vbox} +\permanent\protected\def\smashedhbox{\hpack\bgroup\dowithnextboxcs\syst_boxes_smashed_nextbox\hbox} +\permanent\protected\def\smashedvbox{\vpack\bgroup\dowithnextboxcs\syst_boxes_smashed_nextbox\vbox} %D First we define a helper. We use a \LUATEX\ feature in order to avoid %D mathpalettes. @@ -195,7 +187,7 @@ %D catcode safer. It is needed by the math module (although the \type {\leavevmode} %D is not added here). -\protected\def\smash +\permanent\protected\def\smash {\begingroup \futureexpandis[\syst_boxes_smash_yes\syst_boxes_smash_nop} @@ -267,9 +259,9 @@ %D {\mathchoice}, the next macro looks ugly. We also take care of non||braced %D arguments. -\protected\def\phantom {\begingroup\futurelet\nexttoken\syst_boxes_phantom_indeed } -\protected\def\vphantom{\begingroup\futurelet\nexttoken\syst_boxes_phantom_indeed_v} -\protected\def\hphantom{\begingroup\futurelet\nexttoken\syst_boxes_phantom_indeed_h} +\permanent\protected\def\phantom {\begingroup\futurelet\nexttoken\syst_boxes_phantom_indeed } +\permanent\protected\def\vphantom{\begingroup\futurelet\nexttoken\syst_boxes_phantom_indeed_v} +\permanent\protected\def\hphantom{\begingroup\futurelet\nexttoken\syst_boxes_phantom_indeed_h} \def\syst_boxes_phantom_math #1{\syst_boxes_math_set_nextbox{#1}\syst_boxes_phantom_make } \def\syst_boxes_phantom_math_v#1{\syst_boxes_math_set_nextbox{#1}\syst_boxes_phantom_make_v} @@ -333,7 +325,7 @@ %D We also define plain's \type {\mathstrut}. -\protected\def\mathstrut{\vphantom(} % can be made faster by inlining +\permanent\protected\def\mathstrut{\vphantom(} % can be made faster by inlining %D \macros %D {getboxheight} @@ -367,7 +359,7 @@ %D The next alternative is slightly more clever, since it accepts \type {{12}} as %D well as \type {12} as box number. -\protected\def\getboxheight#1\of#2\box#3% +\permanent\protected\def\getboxheight#1\of#2\box#3% {\def\next{#1\htdp\c_boxes_register}% \afterassignment\next\c_boxes_register=#3} @@ -416,7 +408,7 @@ \newcount\noflines \newdimen\noflinesheight -\protected\def\getnoflines#1% +\permanent\protected\def\getnoflines#1% {\noflinesheight#1\relax \ifzeropt\noflinesheight \noflines\zerocount @@ -432,7 +424,7 @@ \advance\noflines\minusone \fi} -\protected\def\getroundednoflines#1% +\permanent\protected\def\getroundednoflines#1% {\noflinesheight#1\relax \ifzeropt\noflinesheight \noflines\zerocount @@ -446,7 +438,7 @@ \noflines\noflinesheight \fi} -\protected\def\getrawnoflines#1% +\permanent\protected\def\getrawnoflines#1% {\noflinesheight#1\relax \ifzeropt\noflinesheight \noflines\zerocount @@ -510,11 +502,11 @@ \def\syst_boxes_determine_noflines {\expandafter\egroup\expandafter\noflines\noflinesinbox\nextbox\relax} -\protected\def\determinenoflines +\permanent\protected\def\determinenoflines {\bgroup \forgetall - \let\crlf\endgraf - \let\\\endgraf + \enforced\let\crlf\endgraf + \enforced\let\\\endgraf \dowithnextboxcs\syst_boxes_determine_noflines\vbox} %D \macros @@ -528,7 +520,7 @@ %D \doiftext {data} {then branch} %D \stoptyping -\protected\def\doifelsetext#1% +\permanent\protected\def\doifelsetext#1% {\begingroup \setbox\scratchbox\hbox % no \hpack because we can have fallbacks {\settrialtypesetting @@ -539,7 +531,7 @@ \endgroup\expandafter\firstoftwoarguments \fi} -\protected\def\doiftext#1% +\permanent\protected\def\doiftext#1% {\begingroup \setbox\scratchbox\hbox % no \hpack because we can have fallbacks {\settrialtypesetting @@ -589,7 +581,7 @@ %D In this implementation the \type {\aftergroup} construction is needed because %D \type {\afterassignment} is executed inside the box. -\protected\def\dowithnextbox#1% +\permanent\protected\def\dowithnextbox#1% {\def\syst_boxes_with_next_box{#1}% \afterassignment\syst_boxes_with_next_box_indeed \setbox\nextbox} @@ -597,7 +589,7 @@ \def\syst_boxes_with_next_box_indeed {\aftergroup\syst_boxes_with_next_box} -\protected\def\dowithnextboxcs#1% +\permanent\protected\def\dowithnextboxcs#1% {\let\syst_boxes_with_next_box#1% \afterassignment\syst_boxes_with_next_box_indeed \setbox\nextbox} @@ -642,12 +634,12 @@ %D The next couple of shortcuts saves us memory as well as \type {{}}'s in passing %D parameters. -\def\nextboxht {\ht\nextbox} -\def\nextboxwd {\wd\nextbox} -\def\nextboxdp {\dp\nextbox} -\def\nextboxhtdp{\htdp\nextbox} +\permanent\def\nextboxht {\ht\nextbox} +\permanent\def\nextboxwd {\wd\nextbox} +\permanent\def\nextboxdp {\dp\nextbox} +\permanent\def\nextboxhtdp{\htdp\nextbox} -\protected\def\flushnextbox{\box\nextbox} +\permanent\protected\def\flushnextbox{\box\nextbox} %D \macros %D {dowithnextboxcontent} @@ -661,16 +653,24 @@ %D %D {\em todo: Search source for potential usage!} -\protected\def\dowithnextboxcontent#1#2% inside, after - {\def\syst_boxes_with_next_box_one{#2}% - \def\syst_boxes_with_next_box_two{#1}% - \afterassignment\syst_boxes_with_next_box_content_indeed +% \protected\def\dowithnextboxcontent#1#2% inside, after +% {\def\syst_boxes_with_next_box_one{#2}% +% \def\syst_boxes_with_next_box_two{#1}% +% \afterassignment\syst_boxes_with_next_box_content_indeed +% \setbox\nextbox} +% +% \protected\def\dowithnextboxcontentcs#1#2% inside, after +% {\let\syst_boxes_with_next_box_one#2% +% \let\syst_boxes_with_next_box_two#1% +% \afterassignment\syst_boxes_with_next_box_content_indeed +% \setbox\nextbox} + +\permanent\unexpanded\def\dowithnextboxcontent#1#2% inside, after + {\afterassigned{#1\aftergrouped{#2}}% \setbox\nextbox} -\protected\def\dowithnextboxcontentcs#1#2% inside, after - {\let\syst_boxes_with_next_box_one#2% - \let\syst_boxes_with_next_box_two#1% - \afterassignment\syst_boxes_with_next_box_content_indeed +\permanent\unexpanded\def\dowithnextboxcontentcs#1#2% inside, after + {\afterassigned{#1\aftergroup#2}% \setbox\nextbox} \def\syst_boxes_with_next_box_content_indeed @@ -682,27 +682,28 @@ %D Some well known friends, but we implement them our own way. We want the macros to %D work in both math and text mode. -\def\dodorlap{\hpack to \zeropoint{\box\nextbox\hss}\endgroup} -\def\dodollap{\hpack to \zeropoint{\hss\box\nextbox}\endgroup} -\def\dodoclap{\hpack to \zeropoint{\hss\box\nextbox\hss}\endgroup} - -\def\dorlap{\begingroup\dowithnextboxcs\dodorlap\hbox} -\def\dollap{\begingroup\dowithnextboxcs\dodollap\hbox} -\def\doclap{\begingroup\dowithnextboxcs\dodoclap\hbox} - -\def\domathclap{\mathpalette\dodomathclap} \def\dodomathclap#1#2{\doclap{\normalstartimath\mathsurround\zeropoint#1#2\normalstopimath}} -\def\domathllap{\mathpalette\dodomathllap} \def\dodomathllap#1#2{\dollap{\normalstartimath\mathsurround\zeropoint#1#2\normalstopimath}} -\def\domathrlap{\mathpalette\dodomathrlap} \def\dodomathrlap#1#2{\dorlap{\normalstartimath\mathsurround\zeropoint#1#2\normalstopimath}} - -\protected\def\rlap{\mathortext\domathrlap\dorlap} -\protected\def\llap{\mathortext\domathllap\dollap} -\protected\def\clap{\mathortext\domathclap\doclap} - -\def\dodotlap{\vpack to \zeropoint{\vss\box\nextbox}\endgroup} -\def\dodoblap{\vpack to \zeropoint{\box\nextbox\vss}\endgroup} - -\protected\def\tlap{\begingroup\dowithnextboxcs\dodotlap\vbox} -\protected\def\blap{\begingroup\dowithnextboxcs\dodoblap\vbox} +\def\syst_boxes_do_rlap{\hpack to \zeropoint{\box\nextbox\hss}\endgroup} +\def\syst_boxes_do_llap{\hpack to \zeropoint{\hss\box\nextbox}\endgroup} +\def\syst_boxes_do_clap{\hpack to \zeropoint{\hss\box\nextbox\hss}\endgroup} +\def\syst_boxes_do_tlap{\vpack to \zeropoint{\vss\box\nextbox}\endgroup} +\def\syst_boxes_do_blap{\vpack to \zeropoint{\box\nextbox\vss}\endgroup} + +\def\syst_boxes_rlap {\begingroup\dowithnextboxcs\syst_boxes_do_rlap\hbox} +\def\syst_boxes_llap {\begingroup\dowithnextboxcs\syst_boxes_do_llap\hbox} +\def\syst_boxes_clap {\begingroup\dowithnextboxcs\syst_boxes_do_clap\hbox} +\def\syst_boxes_math_clap{\mathpalette\syst_boxes_do_math_clap} +\def\syst_boxes_math_llap{\mathpalette\syst_boxes_do_math_llap} +\def\syst_boxes_math_rlap{\mathpalette\syst_boxes_do_math_rlap} + +\def\syst_boxes_do_math_clap#1#2{\syst_boxes_clap{\normalstartimath\mathsurround\zeropoint#1#2\normalstopimath}} +\def\syst_boxes_do_math_llap#1#2{\syst_boxes_llap{\normalstartimath\mathsurround\zeropoint#1#2\normalstopimath}} +\def\syst_boxes_do_math_rlap#1#2{\syst_boxes_rlap{\normalstartimath\mathsurround\zeropoint#1#2\normalstopimath}} + +\permanent\protected\def\rlap{\mathortext\syst_boxes_math_rlap\syst_boxes_rlap} +\permanent\protected\def\llap{\mathortext\syst_boxes_math_llap\syst_boxes_llap} +\permanent\protected\def\clap{\mathortext\syst_boxes_math_clap\syst_boxes_clap} +\permanent\protected\def\tlap{\begingroup\dowithnextboxcs\syst_boxes_do_tlap\vbox} +\permanent\protected\def\blap{\begingroup\dowithnextboxcs\syst_boxes_do_blap\vbox} %D \macros %D {beginofshapebox, @@ -816,6 +817,10 @@ %D bad spacing. This means that for instance linenumbers etc. should be given zero %D height and depth before being lapped into the margin. The previous examples %D ignore this side effect, but beware! +%D +%D This is ancient stuff and proably not used any more but we keep it around or +%D maybe turn it into a module some day. It shows the kind of struggling that we +%D needed before \LUATEX\ came around. \newif \ifsomeshapeleft \newif \ifreshapingbox @@ -836,7 +841,7 @@ \def\shapesignal{.12345678pt} % or 12345sp -\protected\def\reshapebox#1% +\permanent\protected\def\reshapebox#1% {\doreshapebox {#1}% {\penalty\shapepenalty}% @@ -860,14 +865,14 @@ % We will turn this into a \MKIV\ variant (we can use \type {\vpack} too). -\protected\def\insertshapesignal +\permanent\protected\def\insertshapesignal {\hpack to \shapesignal{\strut\hss}% plus \strut \prevdepth\strutdp} % never \nointerlineskip -\protected\def\restoreshapebox % compensates for the signal +\permanent\protected\def\restoreshapebox % compensates for the signal {\global\setbox\tmpshapebox\vbox{\vskip-\lineheight\unvcopy\oldshapebox}} -\def\dodoreshapebox#1#2#3#4% \shapebox, \shapepenalty, \shapekern, \shapeskip +\permanent\def\dodoreshapebox#1#2#3#4% \shapebox, \shapepenalty, \shapekern, \shapeskip {\ifnum\lastnodetype=\gluenodecode \shapeskip\lastskip \global\setbox\tmpshapebox\vbox{#4\unvbox\tmpshapebox}% @@ -901,21 +906,21 @@ \advance\shapecounter \plusone \fi} -\protected\def\beginofshapebox +\permanent\protected\def\beginofshapebox {\setbox\oldshapebox\vbox \bgroup \reshapingboxtrue \the\everyshapebox \insertshapesignal} -\protected\def\endofshapebox +\permanent\protected\def\endofshapebox {\endgraf \egroup} \let\beginshapebox\beginofshapebox \let\endshapebox \endofshapebox -\protected\def\flushshapebox +\permanent\protected\def\flushshapebox {\bgroup \ifzeropt\ht\newshapebox \else @@ -966,7 +971,7 @@ % % \omlijnd[offset=0pt,hoogte=8mm,uitlijnen={rechts,laho}]{\bfa test} -\protected\def\innerflushshapebox +\permanent\protected\def\innerflushshapebox {\ifzeropt\ht\newshapebox \else \unvcopy\newshapebox\relax % unvcopy ! else spacing problem % \kern-\dp\newshapebox\relax @@ -989,7 +994,7 @@ %D use \type {\shapedhbox} instead of \type {\hbox}, since it manages the height and %D depth of the line. -\protected\def\shapedhbox % lines with non strutted dimensions have +\permanent\protected\def\shapedhbox % lines with non strutted dimensions have {\expanded{\dowithnextbox % interlineskip so if we want the original {\ht\nextbox\the\ht\shapebox % spacing, we need to preserve the original \dp\nextbox\the\dp\shapebox % height and depth which is definitely @@ -1009,10 +1014,10 @@ %D \showhyphens{dohyphenatedword} %D \stoptyping -\protected\def\doshowhyphenatednextbox +\permanent\protected\def\doshowhyphenatednextbox {\clf_showhyphenatedinlist\nextbox} -\protected\def\showhyphens % hpack: so no processing (we hyphenate in lua) +\permanent\protected\def\showhyphens % hpack: so no processing (we hyphenate in lua) {\dowithnextboxcs\doshowhyphenatednextbox\hpack} %D The following macros are seldom used but handy for tracing. @@ -1023,19 +1028,13 @@ %D \hyphenatedfile{tufte} %D \stoptyping -\protected\def\dohyphenatednextbox - {\clf_hyphenatedlist\nextbox false\relax - \unhbox\nextbox} - -\protected\def\hyphenatedword {\dowithnextboxcs\dohyphenatednextbox\hbox} -\protected\def\hyphenatedpar {\dowithnextboxcs\dohyphenatednextbox\hbox} -\protected\def\hyphenatedfile#1{\dowithnextboxcs\dohyphenatednextbox\hbox{\readfile{#1}\donothing\donothing}} +\def\syst_boxes_hyphenatednextbox {\clf_hyphenatedlist\nextbox false\relax\unhbox\nextbox} +\def\syst_boxes_hyphenatednextboxcolor{\clf_hyphenatedlist\nextbox true \relax\unhbox\nextbox} -\protected\def\dohyphenatednextboxcolor - {\clf_hyphenatedlist\nextbox true\relax - \unhbox\nextbox} - -\protected\def\hyphenatedcoloredword{\dowithnextboxcs\dohyphenatednextboxcolor\hbox} +\permanent\protected\def\hyphenatedword {\dowithnextboxcs\syst_boxes_hyphenatednextbox\hbox} +\permanent\protected\def\hyphenatedpar {\dowithnextboxcs\syst_boxes_hyphenatednextbox\hbox} +\permanent\protected\def\hyphenatedfile #1{\dowithnextboxcs\syst_boxes_hyphenatednextbox\hbox{\readfile{#1}\donothing\donothing}} +\permanent\protected\def\hyphenatedcoloredword{\dowithnextboxcs\syst_boxes_hyphenatednextboxcolor\hbox} %D \macros %D {processtokens} @@ -1064,34 +1063,36 @@ %D The list of tokens may contain spaces, while \type {\\}, \type {{}} and \type {\ %D } are handled as space too. -\protected\def\processtokens#1#2#3#4#5% +%D This can be done in a more modern way but for nostalgic reasons we keep it. + +\permanent\protected\def\processtokens#1#2#3#4#5% {\begingroup \def\lastcharacter{\lastcharacter}% hm, recursive ? - \def\space{ }% - \let\\=\space + \enforced\permanent\def\space{ }% + \enforced\let\\\space \def\before {#1}% \def\between{#2}% \def\after {#3}% \def\white {#4}% \let\savedbefore\before - \doprocesstokens#5\lastcharacter + \syst_boxes_processtokens#5\lastcharacter \endgroup} -\def\doprocesstokens% the space after = is essential - {\afterassignment\dodoprocesstokens\let\nextprocessedtoken= } +\def\syst_boxes_processtokens% the space after = is essential + {\afterassignment\syst_boxes_do_processtokens\let\nextprocessedtoken= } -\def\redoprocessedtoken +\def\syst_boxes_redo_processedtoken {\dowithnextbox {\before{\copy\nextbox}% \before can use nextbox several times \let\before\between - \doprocesstokens} + \syst_boxes_processtokens} \hbox\bgroup} -\def\dodoprocesstokens +\def\syst_boxes_do_processtokens {\ifx\nextprocessedtoken\lastcharacter \after \orelse\ifx\nextprocessedtoken\bgroup - \expandafter\redoprocessedtoken + \expandafter\syst_boxes_redo_processedtoken \else \expandafter\if\space\nextprocessedtoken \after\white @@ -1100,7 +1101,7 @@ \before\nextprocessedtoken \let\before\between \fi - \expandafter\doprocesstokens + \expandafter\syst_boxes_processtokens \fi} %D \macros @@ -1118,20 +1119,22 @@ %D %D When calculating the room needed, we take the width of the third argument into %D account, which leads to a bit more complex macro than needed at first sight. +%D +%D Sort of obsolete I guess: -\def\dodoboundtext#1% +\def\syst_boxes_boundtext#1% {\setbox\scratchboxone\hbox{#1}% \advance\scratchdimen -\wd\scratchboxone \ifdim\scratchdimen>\zeropoint\relax#1\fi} -\def\doboundtext#1#2#3% still used? +\permanent\protected\def\doboundtext#1#2#3% still used? {\hbox {\setbox\scratchbox\hbox{#1}% \scratchdimen#2\relax \ifdim\wd\scratchbox>\scratchdimen \setbox\scratchbox\hbox{#3}% \advance\scratchdimen -\wd\scratchbox - \handletokens#1\with\dodoboundtext + \handletokens#1\with\syst_boxes_boundtext \fi \box\scratchbox}} @@ -1155,7 +1158,7 @@ %D See \MKIV\ file for the older implementation. -\protected\def\limitatetext#1#2#3% +\permanent\protected\def\limitatetext#1#2#3% {\splitatcomma{#2}\leftlimit\rightlimit \limitated left \leftlimit @@ -1173,7 +1176,7 @@ %D \limitatefirstline{\input tufte\relax}{10cm}{\unknown} %D \stoptyping -\protected\def\limitatefirstline#1#2#3% +\permanent\protected\def\limitatefirstline#1#2#3% {\hbox\bgroup\strut % \hpack \setbox\scratchbox\hbox{\begstrut#1\endstrut}% \ifdim\wd\scratchbox>#2\relax @@ -1216,7 +1219,7 @@ % todo: provide variant with #1 picked up as box -\protected\def\processisolatedchars#1#2% +\permanent\protected\def\processisolatedchars#1#2% {\dontleavehmode \begingroup \setbox\scratchbox\hbox{\settrialtypesetting#2{\savecurrentattributes{pic}}}% @@ -1229,7 +1232,7 @@ \relax \endgroup} -\protected\def\processisolatedwords#1#2% +\permanent\protected\def\processisolatedwords#1#2% {\dontleavehmode \begingroup \setbox\scratchbox\hbox{\settrialtypesetting#2{\savecurrentattributes{pic}}}% @@ -1244,7 +1247,7 @@ %D A variant: -\protected\def\applytocharacters#1% +\permanent\protected\def\applytocharacters#1% {\dontleavehmode \dowithnextbox{\clf_applytobox method {char}% @@ -1254,7 +1257,7 @@ \relax}% \hbox} -\protected\def\applytowords#1% +\permanent\protected\def\applytowords#1% {\dontleavehmode \dowithnextbox{\clf_applytobox method {word}% @@ -1266,33 +1269,33 @@ %D The old call: -\protected\def\processwords#1% +\permanent\protected\def\processwords#1% {\processisolatedwords{#1}\processword} \let\processword\relax -\protected\def\applytosplitstringchar#1#2% +\permanent\protected\def\applytosplitstringchar#1#2% {\dontleavehmode\clf_processsplit data {#2}% command {\csstring#1}% method {char}% \relax} -\protected\def\applytosplitstringword#1#2% +\permanent\protected\def\applytosplitstringword#1#2% {\dontleavehmode\clf_processsplit data {#2}% command {\csstring#1}% method {word}% \relax} -\protected\def\applytosplitstringline#1#2% +\permanent\protected\def\applytosplitstringline#1#2% {\dontleavehmode\clf_processsplit data {#2}% command {\csstring#1}% method {line}% \relax} -\protected\def\applytosplitstringcharspaced#1#2% +\permanent\protected\def\applytosplitstringcharspaced#1#2% {\dontleavehmode\clf_processsplit data {#2}% command {\csstring#1}% @@ -1300,7 +1303,7 @@ spaced true% \relax} -\protected\def\applytosplitstringwordspaced#1#2% +\permanent\protected\def\applytosplitstringwordspaced#1#2% {\dontleavehmode\clf_processsplit data {#2}% command {\csstring#1}% @@ -1308,7 +1311,7 @@ spaced true% \relax} -\protected\def\applytosplitstringlinespaced#1#2% +\permanent\protected\def\applytosplitstringlinespaced#1#2% {\dontleavehmode\clf_processsplit data {#2}% command {\csstring#1}% @@ -1341,11 +1344,11 @@ %D would have ended up in the text. This macro can be useful when building %D complicated menus, headers and footers and|/|or margin material. -\protected\def\sbox +\permanent\protected\def\sbox {\vpack\bgroup \dowithnextboxcs\syst_boxes_sbox_finish\vbox} -\protected\def\syst_boxes_sbox_finish +\def\syst_boxes_sbox_finish {\boxyoffset\nextbox-\strutdp \dp\nextbox\strutdp \ht\nextbox\strutht @@ -1358,11 +1361,11 @@ %D xx \ruledhbox{\inlinedbox{\tfd test}} xx %D \stoptyping -\protected\def\inlinedbox +\permanent\protected\def\inlinedbox {\bgroup \dowithnextboxcs\syst_boxes_inlined_finish\hbox} -\protected\def\syst_boxes_inlined_finish +\def\syst_boxes_inlined_finish {\boxyoffset\nextbox-\dimexpr(\htdp\nextbox-\lineheight)/\plustwo+\strutdp\relax \ht\nextbox\strutht \dp\nextbox\strutdp @@ -1374,7 +1377,7 @@ %D %D This boxing macro limits the height and depth to those of a strut. -\protected\def\struttedbox +\permanent\protected\def\struttedbox {\hpack\bgroup \dowithnextboxcs\syst_boxes_struttedbox_finish\hbox} @@ -1390,7 +1393,7 @@ %D This macro compensates the difference between the topskip and strutheight. Watch %D how we preserve the depth when it equals strutdepth. -\protected\def\topskippedbox +\permanent\protected\def\topskippedbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_topskippedbox_finish\hbox} \def\syst_boxes_topskippedbox_finish @@ -1442,7 +1445,7 @@ %D The dimensions of the surrounding box are kept intact. This commands handles %D positive and negative dimensions (which is why we need two boxes with rules). -\protected\def\centeredbox#1#% height +/-dimen width +/-dimen +\permanent\protected\def\centeredbox#1#% height +/-dimen width +/-dimen {\bgroup \dontcomplain \forgetall @@ -1479,7 +1482,7 @@ %D %D Do you see why we call this one \type {next}? -\protected\def\centerednextbox#1#% +\permanent\protected\def\centerednextbox#1#% {\bgroup \dowithnextbox {\hsize\wd\nextbox @@ -1500,7 +1503,7 @@ %D When omitted, the current \type {\hsize} and \type {\vsize} are used. Local %D dimensions are supported. -\protected\def\centerbox#1#% optional height +/-dimen width +/-dimen +\permanent\protected\def\centerbox#1#% optional height +/-dimen width +/-dimen {\bgroup \dowithnextbox {\setlocalhsize @@ -1530,7 +1533,7 @@ \newif\ifstretchrigidcolumns \newif\iftightrigidcolumns % if true: just a vbox, no depth/noflines/gridsnap corrrections -\protected\def\setrigidcolumnhsize#1#2#3% todo: \dimexpr +\permanent\protected\def\setrigidcolumnhsize#1#2#3% todo: \dimexpr {\xdef\savedrigidhsize{\the\hsize}% \hsize#1\relax \global\chardef\rigidcolumns#3\relax @@ -1551,7 +1554,7 @@ \let\rigidcolumnlines\!!zerocount -\protected\def\rigidcolumnbalance#1% +\permanent\protected\def\rigidcolumnbalance#1% {\ifnum\rigidcolumns=1 % tzt ook h/d correctie \ifinner\ifhmode\box\else\unvbox\fi\else\unvbox\fi#1\relax \else @@ -1676,17 +1679,17 @@ %newbox\d_syst_boxes_vboxtohbox \newbox\d_syst_boxes_separator -\protected\def\startvboxtohboxseparator +\permanent\protected\def\startvboxtohboxseparator {\setbox\d_syst_boxes_separator\hbox attr \vboxtohboxseparatorattribute\plusone\bgroup} -\protected\def\stopvboxtohboxseparator +\permanent\protected\def\stopvboxtohboxseparator {\egroup} -\protected\def\startvboxtohbox +\permanent\protected\def\startvboxtohbox {\begingroup \setbox\scratchbox\hbox\bgroup} -\protected\def\stopvboxtohbox +\permanent\protected\def\stopvboxtohbox {\ifvoid\d_syst_boxes_separator \hskip\zeropoint\ifcase\vboxtohboxslack\else\s!minus\vboxtohboxslack\fi % we really need a skip \else @@ -1699,12 +1702,12 @@ % A possible reconstruction: -\protected\def\convertvboxtohbox +\permanent\protected\def\convertvboxtohbox {\makehboxofhboxes \setbox\scratchboxone\hpack{\unhbox\scratchboxone\removehboxes}% \hpack \noindent\unhbox\scratchboxone\par} -\protected\def\makehboxofhboxes +\permanent\protected\def\makehboxofhboxes {\setbox\scratchboxone\emptyhbox \loop % \doloop { .. \exitloop .. } \setbox\scratchboxtwo\lastbox @@ -1712,7 +1715,7 @@ \setbox\scratchboxone\hpack{\box\scratchboxtwo\unhbox\scratchboxone}% \repeat} -\protected\def\removehboxes +\permanent\protected\def\removehboxes {\setbox\scratchboxone\lastbox \ifhbox\scratchboxone {\removehboxes}\unhbox\scratchboxone @@ -1720,11 +1723,11 @@ % And one special for notes: -\protected\def\starthboxestohbox +\permanent\protected\def\starthboxestohbox {\bgroup \setbox\scratchbox\vbox\bgroup} -\protected\def\stophboxestohbox +\permanent\protected\def\stophboxestohbox {\egroup \clf_vboxlisttohbox\scratchbox\nextbox\dimexpr\hboxestohboxslack\relax \dontleavehmode @@ -1744,7 +1747,7 @@ \newdimen \lasthhboxwidth \newskip \hhboxindent -\protected\def\unhhbox#1\with#2% +\permanent\protected\def\unhhbox#1\with#2% {\bgroup \nopenalties \dontcomplain @@ -1770,14 +1773,14 @@ \fi}% \egroup} -\def\dohboxofvbox +\def\syst_boxes_hboxofvbox {\setbox0\vpack{\unvbox\scratchcounter\global\setbox1\lastbox}% \unhbox1 \egroup} -\protected\def\hboxofvbox +\permanent\protected\def\hboxofvbox {\bgroup - \afterassignment\dohboxofvbox + \afterassignment\syst_boxes_hboxofvbox \scratchcounter=} %D This macro can be used to break a paragraph apart and treat each line seperately, @@ -1818,7 +1821,7 @@ %D dimension of this box suggest some content, the resulting box is unboxed and %D surrounded by the first two arguments, else the third arguments is executed. -\protected\def\doifcontent#1#2#3% +\permanent\protected\def\doifcontent#1#2#3% {\dowithnextbox {\ifhbox\nextbox \ifdim\wd\nextbox>\zeropoint @@ -1861,7 +1864,7 @@ \newbox\processbox % public : this is the one where \nextbox's end up in -\protected\def\processboxes#1% +\permanent\protected\def\processboxes#1% {\bgroup \def\syst_boxes_process_indeed{#1}% #1 can be redefined halfway \setbox\processbox\emptybox @@ -1899,7 +1902,7 @@ %D %D \leavevmode\getbuffer -\def\boxisempty#1% +\permanent\def\boxisempty#1% {\ifdim\wd#1=\zeropoint \ifdim\ht#1=\zeropoint \ifdim\dp#1=\zeropoint @@ -1935,7 +1938,7 @@ \kern-\scratchwidth \hpack to \scratchwidth{\hss\box\nextbox \hss}}} -\protected\def\startoverlay +\permanent\protected\def\startoverlay {\bgroup \let\stopoverlay\egroup \processboxes\syst_boxes_overlay_process} @@ -1953,7 +1956,7 @@ %D %D returns an empty box with the dimensions of the box specified, here being zero. -\protected\def\fakebox +\permanent\protected\def\fakebox {\bgroup \afterassignment\syst_boxes_fakebox_finish\scratchcounter} @@ -1980,15 +1983,20 @@ %D \type {to 3cm}, but align to the left, middle and right. These box types can be %D used to typeset paragraphs. -\def\syst_boxes_lrc_process#1{\bgroup\forgetall\let\\\endgraf#1\let\next} +\def\syst_boxes_lrc_process#1% + {\bgroup + \forgetall + \enforced\let\\\endgraf + #1% + \let\nexttoken} -\protected\def\lbox#1#{\vbox#1\syst_boxes_lrc_process\raggedleft } -\protected\def\cbox#1#{\vbox#1\syst_boxes_lrc_process\raggedcenter} -\protected\def\rbox#1#{\vbox#1\syst_boxes_lrc_process\raggedright } +\permanent\protected\def\lbox#1#{\vbox#1\syst_boxes_lrc_process\raggedleft } +\permanent\protected\def\cbox#1#{\vbox#1\syst_boxes_lrc_process\raggedcenter} +\permanent\protected\def\rbox#1#{\vbox#1\syst_boxes_lrc_process\raggedright } -\protected\def\ltop#1#{\vtop#1\syst_boxes_lrc_process\raggedleft } -\protected\def\ctop#1#{\vtop#1\syst_boxes_lrc_process\raggedcenter} -\protected\def\rtop#1#{\vtop#1\syst_boxes_lrc_process\raggedright } +\permanent\protected\def\ltop#1#{\vtop#1\syst_boxes_lrc_process\raggedleft } +\permanent\protected\def\ctop#1#{\vtop#1\syst_boxes_lrc_process\raggedcenter} +\permanent\protected\def\rtop#1#{\vtop#1\syst_boxes_lrc_process\raggedright } %D The alternatives \type {\tbox} and \type {\bbox} can be used to properly align %D boxes, like in: @@ -2010,8 +2018,8 @@ %D %D \getbuffer -\protected\def\tbox{\hpack\bgroup\dowithnextboxcs\syst_boxes_tbox_finish\hbox} -\protected\def\bbox{\hpack\bgroup\dowithnextboxcs\syst_boxes_bbox_finish\hbox} +\permanent\protected\def\tbox{\hpack\bgroup\dowithnextboxcs\syst_boxes_tbox_finish\hbox} +\permanent\protected\def\bbox{\hpack\bgroup\dowithnextboxcs\syst_boxes_bbox_finish\hbox} \def\syst_boxes_tbox_finish {\scratchheight\ht\strutbox @@ -2036,13 +2044,13 @@ %D %D A few more boxes. -\def\dodolhbox{\hpack to \hsize{\box\nextbox\hss }} -\def\dodomhbox{\hpack to \hsize{\hss\box\nextbox\hss}} -\def\dodorhbox{\hpack to \hsize{\hss\box\nextbox }} +\def\syst_boxes_lhbox{\hpack to \hsize{\box\nextbox\hss }} +\def\syst_boxes_mhbox{\hpack to \hsize{\hss\box\nextbox\hss}} +\def\syst_boxes_rhbox{\hpack to \hsize{\hss\box\nextbox }} -\protected\def\lhbox{\dowithnextboxcs\dodolhbox\hbox} -\protected\def\mhbox{\dowithnextboxcs\dodomhbox\hbox} -\protected\def\rhbox{\dowithnextboxcs\dodorhbox\hbox} +\permanent\protected\def\lhbox{\dowithnextboxcs\syst_boxes_lhbox\hbox} +\permanent\protected\def\mhbox{\dowithnextboxcs\syst_boxes_mhbox\hbox} +\permanent\protected\def\rhbox{\dowithnextboxcs\syst_boxes_rhbox\hbox} \let\lefthbox \lhbox \let\midhbox \mhbox @@ -2063,15 +2071,15 @@ \newdimen\sizeofbox -\protected\def\boxofsize#1% +\permanent\protected\def\boxofsize#1% {\bgroup \sizeofbox\zeropoint \scratchdimen\zeropoint \def\docommand {\advance\sizeofbox\scratchdimen - \futurelet\next\dodocommand}% + \futurelet\nexttoken\dodocommand}% \def\dodocommand - {\ifx\next\bgroup + {\ifx\nexttoken\bgroup \expanded{\egroup#1 to \the\sizeofbox}% \else \expandafter\afterassignment\expandafter\docommand\expandafter\scratchdimen @@ -2085,7 +2093,7 @@ % \limitvbox % \limithbox -\protected\def\limitatelines#1#2% size sentinel +\permanent\protected\def\limitatelines#1#2% size sentinel {\dowithnextbox {\scratchdimen#1\hsize \ifdim\wd\nextbox>\scratchdimen @@ -2096,7 +2104,7 @@ \unhbox\nextbox} \hbox} -\protected\def\fittoptobaselinegrid % weg hier +\permanent\protected\def\fittoptobaselinegrid % weg hier {\dowithnextbox {\bgroup \par @@ -2125,7 +2133,7 @@ \setbox\fakedboxcursor\hpack {\vrule\s!width\zeropoint\s!height\zeropoint\s!depth\zeropoint} -\protected\def\boxcursor % overloaded in core-vis +\permanent\protected\def\boxcursor % overloaded in core-vis {\iftraceboxplacement \bgroup \scratchdimen2\onepoint @@ -2142,21 +2150,21 @@ \copy\fakedboxcursor \fi} -\protected\def\placedbox +\permanent\protected\def\placedbox {\iftraceboxplacement\ruledhbox\else\hbox\fi} \newdimen\boxoffset \newdimen\boxhdisplacement \newdimen\boxvdisplacement -\protected\def\rightbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_rightbox_finish \placedbox} -\protected\def\leftbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_leftbox_finish \placedbox} -\protected\def\topbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_topbox_finish \placedbox} -\protected\def\bottombox {\hpack\bgroup\dowithnextboxcs\syst_boxes_bottombox_finish \placedbox} -\protected\def\lefttopbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_lefttopbox_finish \placedbox} -\protected\def\righttopbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_righttopbox_finish \placedbox} -\protected\def\leftbottombox {\hpack\bgroup\dowithnextboxcs\syst_boxes_leftbottombox_finish \placedbox} -\protected\def\rightbottombox{\hpack\bgroup\dowithnextboxcs\syst_boxes_rightbottombox_finish\placedbox} +\permanent\protected\def\rightbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_rightbox_finish \placedbox} +\permanent\protected\def\leftbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_leftbox_finish \placedbox} +\permanent\protected\def\topbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_topbox_finish \placedbox} +\permanent\protected\def\bottombox {\hpack\bgroup\dowithnextboxcs\syst_boxes_bottombox_finish \placedbox} +\permanent\protected\def\lefttopbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_lefttopbox_finish \placedbox} +\permanent\protected\def\righttopbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_righttopbox_finish \placedbox} +\permanent\protected\def\leftbottombox {\hpack\bgroup\dowithnextboxcs\syst_boxes_leftbottombox_finish \placedbox} +\permanent\protected\def\rightbottombox{\hpack\bgroup\dowithnextboxcs\syst_boxes_rightbottombox_finish\placedbox} \let\topleftbox \lefttopbox \let\toprightbox \righttopbox @@ -2235,10 +2243,10 @@ \box\nextbox \egroup} -\protected\def\middlebox {\hpack\bgroup\dowithnextboxcs\syst_boxes_middlebox_finish \placedbox} -\protected\def\baselinemiddlebox{\hpack\bgroup\dowithnextboxcs\syst_boxes_baselinemiddlebox_finish\placedbox} -\protected\def\baselineleftbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_baselineleftbox_finish \placedbox} -\protected\def\baselinerightbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_baselinerightbox_finish \placedbox} +\permanent\protected\def\middlebox {\hpack\bgroup\dowithnextboxcs\syst_boxes_middlebox_finish \placedbox} +\permanent\protected\def\baselinemiddlebox{\hpack\bgroup\dowithnextboxcs\syst_boxes_baselinemiddlebox_finish\placedbox} +\permanent\protected\def\baselineleftbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_baselineleftbox_finish \placedbox} +\permanent\protected\def\baselinerightbox {\hpack\bgroup\dowithnextboxcs\syst_boxes_baselinerightbox_finish \placedbox} \def\syst_boxes_middlebox_finish {\global\boxhdisplacement-.5\wd\nextbox @@ -2281,7 +2289,7 @@ %D %D Experimental, not yet frozen: -\protected\def\lrtbbox#1#2#3#4% l r t b +\permanent\protected\def\lrtbbox#1#2#3#4% l r t b {\bgroup \dowithnextboxcontent {\advance\hsize-#1\advance\hsize-#2\relax @@ -2294,7 +2302,7 @@ %D %D See core-tbl.tex for an example of its usage: -\protected\def\toplinebox +\permanent\protected\def\toplinebox {\dowithnextboxcs\syst_boxes_toplinebox_finish\tbox} \def\syst_boxes_toplinebox_finish @@ -2333,20 +2341,20 @@ \installcorenamespace {stackbox} \installcorenamespace {stacklst} -\protected\def\setstackbox#1#2% +\permanent\protected\def\setstackbox#1#2% {\ifcsname\??stackbox#1:#2\endcsname\else \expandafter\newbox\csname\??stackbox#1:#2\endcsname \fi \global\setbox\csname\??stackbox#1:#2\endcsname\vbox} -\protected\def\initializeboxstack#1% +\permanent\protected\def\initializeboxstack#1% {\def\docommand##1{\setstackbox{#1}{##1}{}}% \ifcsname\??stacklst#1\endcsname \expandafter\processcommacommand\expandafter[\lastnamedcs]\docommand \fi \letgvalueempty{\??stacklst#1}} -\protected\def\savebox#1#2% stack name +\permanent\protected\def\savebox#1#2% stack name {% beware, \setxvalue defines the cs beforehand so we cannot use the % test inside the { } \ifcsname\??stacklst#1\endcsname @@ -2357,27 +2365,27 @@ \fi \setstackbox{#1}{#2}} -\protected\def\flushbox#1#2% unwrapped +\permanent\protected\def\flushbox#1#2% unwrapped {\ifcsname\??stackbox#1:#2\endcsname \box\lastnamedcs \else \emptybox \fi} -\protected\def\restorebox#1#2% unwrapped +\permanent\protected\def\restorebox#1#2% unwrapped {\ifcsname\??stackbox#1:#2\endcsname \copy\lastnamedcs \else \emptybox \fi} -\protected\def\foundbox#1#2% wrapped +\permanent\protected\def\foundbox#1#2% wrapped {\vpack {\ifcsname\??stackbox#1:#2\endcsname \copy\lastnamedcs \fi}} -\protected\def\doifelsebox#1#2% +\permanent\protected\def\doifelsebox#1#2% {\ifcsname\??stackbox#1:#2\endcsname \ifvoid\lastnamedcs \doubleexpandafter\secondoftwoarguments @@ -2395,7 +2403,8 @@ \installcorenamespace {boxstack} \newcount\c_syst_boxes_stack -\let \b_syst_boxes_stack\relax + +\mutable\let\b_syst_boxes_stack\relax \protected\def\syst_boxes_stack_allocate {\newbox\b_syst_boxes_stack @@ -2413,11 +2422,11 @@ {#1\setbox#2\box\csname\??boxstack\number\c_syst_boxes_stack\endcsname \global\advance\c_syst_boxes_stack\minusone} -\protected\def\localpushbox {\syst_boxes_push\relax} -\protected\def\localpopbox {\syst_boxes_pop \relax} +\permanent\protected\def\localpushbox {\syst_boxes_push\relax} +\permanent\protected\def\localpopbox {\syst_boxes_pop \relax} -\protected\def\globalpushbox{\syst_boxes_push\global} -\protected\def\globalpopbox {\syst_boxes_pop \global} +\permanent\protected\def\globalpushbox{\syst_boxes_push\global} +\permanent\protected\def\globalpopbox {\syst_boxes_pop \global} %D And here is a more modern one (not yet in i-*): %D @@ -2435,15 +2444,15 @@ %D \resetboxesincache{foo} %D \stoptyping -\protected\def\putboxincache #1#2#3{\clf_putboxincache {#1}{#2}#3\relax} -\protected\def\getboxfromcache #1#2#3{\clf_getboxfromcache {#1}{#2}#3\relax} -\protected\def\doifelseboxincache #1#2{\clf_doifelseboxincache {#1}{#2}} -\protected\def\copyboxfromcache #1#2#3{\clf_copyboxfromcache {#1}{#2}#3\relax} -\protected\def\directboxfromcache #1#2{\clf_directboxfromcache {#1}{#2}} -\protected\def\directcopyboxfromcache#1#2{\clf_directcopyboxfromcache{#1}{#2}} -\protected\def\resetboxesincache #1{\clf_resetboxesincache {#1}} +\permanent\protected\def\putboxincache #1#2#3{\clf_putboxincache {#1}{#2}#3\relax} +\permanent\protected\def\getboxfromcache #1#2#3{\clf_getboxfromcache {#1}{#2}#3\relax} +\permanent\protected\def\doifelseboxincache #1#2{\clf_doifelseboxincache {#1}{#2}} +\permanent\protected\def\copyboxfromcache #1#2#3{\clf_copyboxfromcache {#1}{#2}#3\relax} +\permanent\protected\def\directboxfromcache #1#2{\clf_directboxfromcache {#1}{#2}} +\permanent\protected\def\directcopyboxfromcache#1#2{\clf_directcopyboxfromcache{#1}{#2}} +\permanent\protected\def\resetboxesincache #1{\clf_resetboxesincache {#1}} -\protected\def\putnextboxincache#1#2% +\permanent\protected\def\putnextboxincache#1#2% {\dowithnextbox{\putboxincache{#1}{#2}\nextbox}} %D \macros @@ -2452,21 +2461,21 @@ %D While \type {\removedepth} removes the preceding depth, \type {\obeydepth} makes %D sure we have depth. Both macros leave the \type {\prevdepth} untouched. -\protected\def\removedepth +\permanent\protected\def\removedepth {\ifvmode \ifdim\prevdepth>\zeropoint \kern-\prevdepth \fi \fi} -\protected\def\obeydepth +\permanent\protected\def\obeydepth {\par % watch out for changes in math formulas \ifvmode\ifdim\prevdepth<\zeropoint\orelse\ifdim\prevdepth<\strutdp \kern\dimexpr\strutdp-\prevdepth\relax \prevdepth\strutdp \fi\fi} -\protected\def\undepthed +\permanent\protected\def\undepthed {\dowithnextbox{\dp\nextbox\zeropoint\box\nextbox}\hbox} %D \macros @@ -2474,10 +2483,10 @@ %D %D A funny (but rather stupid) one, plus a redefinition. -\protected\def\removebottomthings +\permanent\protected\def\removebottomthings {\dorecurse\plusfive{\unskip\unkern\unpenalty}} -\protected\def\removelastskip % \ifvmode the plain tex one \fi +\permanent\protected\def\removelastskip % \ifvmode the plain tex one \fi, overloaded to \permanent in spac-ver {\ifvmode\ifzeropt\lastskip\else\vskip-\lastskip\fi\fi} %D \macros @@ -2486,7 +2495,7 @@ %D This macro sets the dimensions of a box to those of a strut. Sort of obsolete so %D it will go away. -\protected\def\makestrutofbox % not used +\permanent\protected\def\makestrutofbox % not used {\afterassignment\syst_boxes_makestrutofbox\c_boxes_register} \def\syst_boxes_makestrutofbox @@ -2505,8 +2514,8 @@ %D \hsmash{\raisebox{100pt}\hbox{test}} %D \stoptyping -\protected\def\raisebox#1{\bgroup\afterassignment\syst_boxes_raise_indeed\scratchdimen#1} % so both 10pt and {10pt} is accepted -\protected\def\lowerbox#1{\bgroup\afterassignment\syst_boxes_lower_indeed\scratchdimen#1} % so both 10pt and {10pt} is accepted +\permanent\protected\def\raisebox#1{\bgroup\afterassignment\syst_boxes_raise_indeed\scratchdimen#1} % so both 10pt and {10pt} is accepted +\permanent\protected\def\lowerbox#1{\bgroup\afterassignment\syst_boxes_lower_indeed\scratchdimen#1} % so both 10pt and {10pt} is accepted \def\syst_boxes_raise_indeed{\dowithnextboxcs\syst_boxes_raise_finish} \def\syst_boxes_lower_indeed{\dowithnextboxcs\syst_boxes_lower_finish} @@ -2527,7 +2536,7 @@ % vcenter in text, we kunnen vcenter overloaden -\protected\def\halfwaybox +\permanent\protected\def\halfwaybox {\hpack\bgroup \dowithnextboxcs\syst_boxes_halfwaybox_finish\hbox} @@ -2536,7 +2545,7 @@ \lower.5\ht\nextbox\box\nextbox \egroup} -\protected\def\depthonlybox +\permanent\protected\def\depthonlybox {\tpack\bgroup \dowithnextboxcs\syst_boxes_depthonlybox_finish\vbox} @@ -2547,8 +2556,8 @@ %D New: -\def\setdimentoatleast#1#2{\ifdim#1>\zeropoint\else#1=#2\fi} -\def\setdimentoatmost #1#2{\ifdim#1>#2\relax \else#1=#2\fi} +\permanent\def\setdimentoatleast#1#2{\ifdim#1>\zeropoint\else#1=#2\fi} +\permanent\def\setdimentoatmost #1#2{\ifdim#1>#2\relax \else#1=#2\fi} %D And even rawer: @@ -2561,7 +2570,7 @@ %D %D A not so well unhboxable box can be made with: -\protected\def\frozenhbox +\permanent\protected\def\frozenhbox {\hpack\bgroup \dowithnextboxcs\syst_boxes_frozenhbox_finish\hbox} @@ -2577,19 +2586,17 @@ \installcorenamespace {box_x} \installcorenamespace {box_y} -\protected\def\setboxllx #1#2{\expandafter\edef\csname\??box_x\number#1\endcsname{\the\dimexpr#2\relax}} -\protected\def\setboxlly #1#2{\expandafter\edef\csname\??box_y\number#1\endcsname{\the\dimexpr#2\relax}} +\permanent\protected\def\setboxllx #1#2{\expandafter\edef\csname\??box_x\number#1\endcsname{\the\dimexpr#2\relax}} +\permanent\protected\def\setboxlly #1#2{\expandafter\edef\csname\??box_y\number#1\endcsname{\the\dimexpr#2\relax}} -\protected\def\gsetboxllx#1#2{\expandafter\xdef\csname\??box_x\number#1\endcsname{\the\dimexpr#2\relax}} -\protected\def\gsetboxlly#1#2{\expandafter\xdef\csname\??box_y\number#1\endcsname{\the\dimexpr#2\relax}} +\permanent\protected\def\gsetboxllx#1#2{\expandafter\xdef\csname\??box_x\number#1\endcsname{\the\dimexpr#2\relax}} +\permanent\protected\def\gsetboxlly#1#2{\expandafter\xdef\csname\??box_y\number#1\endcsname{\the\dimexpr#2\relax}} -%def\getboxllx#1{\ifcsname\??box_x\number#1\endcsname\csname\??box_x\number#1\endcsname\else\zeropoint\fi} -%def\getboxlly#1{\ifcsname\??box_y\number#1\endcsname\csname\??box_y\number#1\endcsname\else\zeropoint\fi} -\def\getboxllx#1{\ifcsname\??box_x\number#1\endcsname\lastnamedcs\else\zeropoint\fi} -\def\getboxlly#1{\ifcsname\??box_y\number#1\endcsname\lastnamedcs\else\zeropoint\fi} +\permanent\def\getboxllx#1{\ifcsname\??box_x\number#1\endcsname\lastnamedcs\else\zeropoint\fi} +\permanent\def\getboxlly#1{\ifcsname\??box_y\number#1\endcsname\lastnamedcs\else\zeropoint\fi} -\def\directgetboxllx#1{\csname\??box_x\number#1\endcsname} % use when sure existence -\def\directgetboxlly#1{\csname\??box_y\number#1\endcsname} % use when sure existence +\permanent\def\directgetboxllx#1{\csname\??box_x\number#1\endcsname} % use when sure existence +\permanent\def\directgetboxlly#1{\csname\??box_y\number#1\endcsname} % use when sure existence %D \macros %D {shownextbox} @@ -2604,7 +2611,7 @@ %D \shownextbox\vbox{\setupwhitespace[big]test\endgraf\thinrule} %D \stoptyping -\protected\def\shownextbox % seldom used +\permanent\protected\def\shownextbox % seldom used {\dowithnextbox {\bgroup \showboxbreadth\maxdimen @@ -2616,7 +2623,7 @@ \interactionmode\scratchcounter \egroup}} -\protected\def\spreadhbox#1% rebuilds \hbox{} +\permanent\protected\def\spreadhbox#1% rebuilds \hbox{} {\bgroup \ifhbox#1\relax \setbox\scratchboxtwo\emptybox @@ -2648,7 +2655,7 @@ %D \minimalhbox 100pt {test} %D \stoptyping -\protected\def\minimalhbox#1#% +\permanent\protected\def\minimalhbox#1#% {\dowithnextbox {\bgroup \setbox\scratchbox\hpack#1{\hss}% @@ -2659,7 +2666,7 @@ %D A bit dirty: -\protected\def\nodestostring#1#2% more tolerant for #2=\cs +\permanent\protected\def\nodestostring#1#2% more tolerant for #2=\cs {\begingroup \setbox\nextbox\hbox{#2}% \normalexpanded{\endgroup\edef\noexpand#1{\clf_boxtostring\nextbox}}} @@ -2690,7 +2697,7 @@ \let\getnaturalwd\clf_getnaturalwd % no intermediate \let\setnaturalwd\clf_setnaturalwd % no intermediate -\protected\def\doifelserighttoleftinbox{\clf_doifelserighttoleftinbox} +\permanent\protected\def\doifelserighttoleftinbox{\clf_doifelserighttoleftinbox} \let\doifrighttoleftinboxelse\doifelserighttoleftinbox @@ -2698,24 +2705,23 @@ \definesystemattribute [runningtext] [public] -%unexpanded\def\runninghbox{\hbox attr \runningtextattribute \plusone} % not yet in i-* -\protected\def\runninghbox{\hbox attr \runningtextattribute \fontid\font} % not yet in i-* +\permanent\protected\def\runninghbox{\hbox attr \runningtextattribute \fontid\font} % not yet in i-* %D To complement lua (yet undocumented): -\protected\def\beginhbox{\hbox\bgroup} \let\endhbox\egroup -\protected\def\beginvbox{\vbox\bgroup} \let\endvbox\egroup -\protected\def\beginvtop{\vtop\bgroup} \let\endvtop\egroup +\permanent\protected\def\beginhbox{\hbox\bgroup} \let\endhbox\egroup +\permanent\protected\def\beginvbox{\vbox\bgroup} \let\endvbox\egroup +\permanent\protected\def\beginvtop{\vtop\bgroup} \let\endvtop\egroup -\protected\def\sethboxregister#1{\setbox#1\hbox} -\protected\def\setvboxregister#1{\setbox#1\vbox} -\protected\def\setvtopregister#1{\setbox#1\vtop} +\permanent\protected\def\sethboxregister#1{\setbox#1\hbox} +\permanent\protected\def\setvboxregister#1{\setbox#1\vbox} +\permanent\protected\def\setvtopregister#1{\setbox#1\vtop} -\protected\def\flushboxregister#1{\box\numexpr#1\relax} +\permanent\protected\def\flushboxregister#1{\box\numexpr#1\relax} -\protected\def\starthboxregister#1{\setbox#1\hbox\bgroup} \let\stophboxregister\egroup -\protected\def\startvboxregister#1{\setbox#1\vbox\bgroup} \let\stopvboxregister\egroup -\protected\def\startvtopregister#1{\setbox#1\vtop\bgroup} \let\stopvtopregister\egroup +\permanent\protected\def\starthboxregister#1{\setbox#1\hbox\bgroup} \let\stophboxregister\egroup +\permanent\protected\def\startvboxregister#1{\setbox#1\vbox\bgroup} \let\stopvboxregister\egroup +\permanent\protected\def\startvtopregister#1{\setbox#1\vtop\bgroup} \let\stopvtopregister\egroup %D For whatever third party package needs it: %D @@ -2731,7 +2737,7 @@ \installcorenamespace{localbox} -\protected\def\newlocalbox#1% +\permanent\protected\def\newlocalbox#1% {\expandafter\let\expandafter#1\csname\??localbox\string#1\endcsname \ifx#1\relax \syst_aux_new_localbox#1% @@ -2743,7 +2749,7 @@ %D Who knows when this comes in handy: -\protected\def\lastlinewidth{\dimexpr\clf_lastlinewidth\scaledpoint\relax} +\permanent\protected\def\lastlinewidth{\dimexpr\clf_lastlinewidth\scaledpoint\relax} %D Keep as reference: @@ -2753,11 +2759,11 @@ %D This one keeps dimensions and sets the shift field (and so it's more for testing %D than for real usage): -\protected\def\shiftbox {\clf_shiftbox} -\protected\def\vpackbox {\clf_vpackbox} -\protected\def\hpackbox {\clf_hpackbox} -\protected\def\vpackedbox{\clf_vpackedbox} -\protected\def\hpackedbox{\clf_hpackedbox} +\permanent\protected\def\shiftbox {\clf_shiftbox} +\permanent\protected\def\vpackbox {\clf_vpackbox} +\permanent\protected\def\hpackbox {\clf_hpackbox} +\permanent\protected\def\vpackedbox{\clf_vpackedbox} +\permanent\protected\def\hpackedbox{\clf_hpackedbox} %D This one has been moved from a 2 decade old file. It makes something boxed %D sit on the baseline. @@ -2772,7 +2778,6 @@ \egroup} \hbox} - %D \macros %D {widthuptohere} %D @@ -2784,9 +2789,9 @@ %D \stopbuffer %D %D \typebuffer \blank \getbuffer \blank - +%D %D Implemented elsewhere: - +%D %D \starttyping %D \boxlines %D \boxline @@ -2818,6 +2823,25 @@ % % \protected\def\namedbox#1{\csname\??namedboxes#1\endcsname} +%D Implemented elsewhere: +%D +%D \startbuffer +%D \setbox0\hbox{test \footnote{test}} (\prelistbox0) (\postlistbox0) +%D \setprelistbox0\hbox{BEFORE} \setpostlistbox0\hbox{AFTER} +%D \box0 +%D \stopbuffer +%D +%D \typebuffer \blank \getbuffer \blank +%D +%D \starttyping +%D \prelistbox +%D \postlistbox +%D \prelistcopy +%D \postlistcopy +%D \setprelistbox +%D \setpostlistbox +%D \stoptyping + \protect \endinput % a bit of test code: diff --git a/tex/context/base/mkiv/supp-ran.lua b/tex/context/base/mkiv/supp-ran.lua index 03da4262f..7946370d7 100644 --- a/tex/context/base/mkiv/supp-ran.lua +++ b/tex/context/base/mkiv/supp-ran.lua @@ -53,6 +53,9 @@ end math.setrandomseedi = setrandomseedi local function getrandomnumber(min,max) + if min > max then + min, max = max, min + end last = random(min,max) if trace_details then report_system("number %s",last) diff --git a/tex/context/base/mkiv/symb-imp-cc.mkiv b/tex/context/base/mkiv/symb-imp-cc.mkiv index e753d695f..d9f596b9c 100644 --- a/tex/context/base/mkiv/symb-imp-cc.mkiv +++ b/tex/context/base/mkiv/symb-imp-cc.mkiv @@ -69,8 +69,8 @@ \unexpanded\def\creativecommons#1% {\dontleavehmode\lower.15\exheight\hbox\bgroup - \let\inbetween\relax - \processseparatedlist[#1][-]{\inbetween\let\inbetween\enspace\directsymbol{cc}}% + \overloaded\let\inbetween\relax + \processseparatedlist[#1][-]{\inbetween\overloaded\let\inbetween\enspace\directsymbol{cc}}% \egroup} \definesymbol [cc-by-sa-nc] [\creativecommons{cc-by-sa-nc}] diff --git a/tex/context/base/mkiv/syst-aux.lmt b/tex/context/base/mkiv/syst-aux.lmt new file mode 100644 index 000000000..c0de8a953 --- /dev/null +++ b/tex/context/base/mkiv/syst-aux.lmt @@ -0,0 +1,747 @@ + if not modules then modules = { } end modules ['syst-aux'] = { + version = 1.001, + comment = "companion to syst-aux.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- slower than lpeg: +-- +-- utfmatch(str,"(.?)(.*)$") +-- utf.sub(str,1,1) + +local tonumber, next, type = tonumber, next, type +local utfsub = utf.sub +local P, S, R, C, Cc, Cs, Carg, lpegmatch = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.Cc, lpeg.Cs, lpeg.Carg, lpeg.match +local find, formatters = string.find, string.formatters + +local context = context +local implement = interfaces.implement +local setmacro = interfaces.setmacro +local setcatcode = tex.setcatcode +local texget = tex.get +local utf8character = lpeg.patterns.utf8character +local settings_to_array = utilities.parsers.settings_to_array +local settings_to_set = utilities.parsers.settings_to_set + +local pattern = C(utf8character^-1) * C(P(1)^0) + +implement { + name = "getfirstcharacter", + arguments = "string", + actions = function(str) + local first, rest = lpegmatch(pattern,str) + setmacro("firstcharacter",first) + setmacro("remainingcharacters",rest) + end +} + +implement { + name = "thefirstcharacter", + arguments = "string", + actions = function(str) + local first, rest = lpegmatch(pattern,str) + context(first) + end +} + +implement { + name = "theremainingcharacters", + arguments = "string", + actions = function(str) + local first, rest = lpegmatch(pattern,str) + context(rest) + end +} + +local pattern = C(utf8character^-1) +local ctx_doifelse = commands.doifelse + +implement { + name = "doifelsefirstchar", + arguments = "2 strings", + actions = function(str,chr) + ctx_doifelse(lpegmatch(pattern,str) == chr) + end +} + +implement { + name = "getsubstring", + arguments = "3 strings", + actions = function(str,first,last) + context(utfsub(str,tonumber(first),tonumber(last))) + end +} + +-- function commands.addtocommalist(list,item) +-- if list == "" then +-- context(item) +-- else +-- context("%s,%s",list,item) -- using tex.print is some 10% faster +-- end +-- end +-- +-- function commands.removefromcommalist(list,item) +-- if list == "" then +-- context(item) +-- else +-- -- okay, using a proper lpeg is probably faster +-- -- we could also check for #l = 1 +-- local l = settings_to_array(list) +-- local t, n = { } +-- for i=1,#l do +-- if l[i] ~= item then +-- n = n + 1 +-- t[n] = item +-- end +-- end +-- if n == 0 then +-- context(item) +-- else +-- context(concat(list,",")) +-- end +-- end +-- end + +local pattern = (C((1-P("%"))^1) * Carg(1)) / function(n,d) + return formatters["%.0fsp"](d * tonumber(n)/100) end * P("%") * P(-1) -- .0 ? + +-- percentageof("10%",65536*10) + +implement { + name = "percentageof", + arguments = { "string", "dimen" }, + actions = function(str,dim) + context(lpegmatch(pattern,str,1,dim) or str) + end +} + +-- \gdef\setpercentdimen#1#2% +-- {#1=\ctxcommand{percentageof("#2",\number#1)}\relax} + +local space = P(" ") / "" +local spaces = P(" ")^0 / "" +local nohash = 1 - P("#") +local digit = R("09") +local double = P("##") / "#" +local single = P("#") +local sentinel = spaces * (nohash^1 / "\\%0") +local whatever = S("+-/*_^=:") + digit +local sargument = (single * digit)^1 +local dargument = (double * digit)^1 +local swhatever = (single * whatever)^1 +local dwhatever = (double * whatever)^1 + +-- different ones: + +local space = P(" ") +local spaces = space^0 + +-- see syst-aux.lua for historic variants + +local global = nil +local protected = nil +local expanded = nil +local optional = nil +local tolerant = nil +local instance = nil +local frozen = nil +local csname = nil +local rest = nil + +local function catcodes_s() + setcatcode(32,10) -- space + setcatcode(13, 5) -- endofline +end + +local function catcodes_n() + setcatcode(32, 9) -- ignore + setcatcode(13, 9) -- ignore +end + +local function oldoption(s) + if optional > 1 then + optional = optional - 1 + return s .. "#*" + else + return s + end +end + +local option = ( + P("single") * Cc(1) + + P("double") * Cc(2) + + P("triple") * Cc(3) + + P("quadruple") * Cc(4) + + P("quintuple") * Cc(5) + + P("sixtuple") + ) * (P("empty") + P("argument")) + +local pattern = ( + ( + spaces * ( + ( P("spaces") * space / catcodes_s ) + + ( P("nospaces") * space / catcodes_n ) + + ( P("global") * space / function() global = true end) + + ( P("protected") * space / function() protected = true end) + + ( P("expanded") * space / function() expanded = true end) + + ( P("tolerant") * space / function() tolerant = true end) + + ( P("instance") * space / function() instance = true end) + + ( P("frozen") * space / function() frozen = true end) + + ( P("unexpanded") * space / function() protected = true end) + + ( option * space / function(s) tolerant = true + optional = s end) + ) + )^0 + * spaces * ( C((1-S(" #["))^1) ) + * spaces * Cs( + (Cs(P("[") * dargument * P("]")) / oldoption + dwhatever)^1 * sentinel^-1 * double^-1 + + (Cs(P("[") * sargument * P("]")) / oldoption + swhatever)^1 * sentinel^-1 * single^-1 + + sentinel^-1 * (double+single)^-1 + ) +) + +local ctx_dostarttexdefinition = context.dostarttexdefinition + +local function texdefinition_one(str) + global = false + protected = false + expanded = false + optional = 0 + tolerant = false + instance = false + frozen = false + csname, rest = lpegmatch(pattern,str) + ctx_dostarttexdefinition() +end + +local function texdefinition_two() + context ( + (tolerant and [[\tolerant]] or "") .. (frozen and [[\frozen]] or "") .. (protected and [[\protected]] or "") .. (instance and [[\instance]] or "") .. + [[\expandafter]] .. (global and (expanded and [[\xdef]] or [[\gdef]]) or (expanded and [[\edef]] or [[\def]])) .. + [[\csname ]] .. csname .. [[\endcsname ]] .. + rest + ) +end + +implement { name = "texdefinition_one", actions = texdefinition_one, scope = "private", arguments = "string" } +implement { name = "texdefinition_two", actions = texdefinition_two, scope = "private" } + +do + + -- Quite probably we don't yet have characters loaded so we delay some + -- aliases. + + local _lower_, _upper_, _strip_ + + _lower_ = function(s) + if characters and characters.lower then + _lower_ = characters.lower + return _lower_(s) + end + return string.lower(s) + end + + _upper_ = function(s) + if characters and characters.upper then + _upper_ = characters.upper + return _upper_(s) + end + return string.upper(s) + end + + _strip_ = function(s) + -- or utf.strip + if string.strip then + _strip_ = string.strip + return _strip_(s) + end + return s + end + + local function lower(s) context(_lower_(s)) end + local function upper(s) context(_upper_(s)) end + local function strip(s) context(_strip_(s)) end + + implement { name = "upper", arguments = "string", actions = upper } + implement { name = "lower", arguments = "string", actions = lower } + implement { name = "strip", arguments = "string", actions = strip } + +end + +implement { + name = "converteddimen", + arguments = { "dimen", "string" }, + actions = function(dimen,unit) + context(number.todimen(dimen,unit or "pt","%0.5f")) -- no unit appended (%F) + end +} + +-- where, not really the best spot for this: + +implement { + name = "immediatemessage", + arguments = { "'message'", "string" }, + actions = logs.status +} + +implement { + name = "resettimer", + actions = function() + statistics.resettiming("whatever") + statistics.starttiming("whatever") + end +} + +implement { + name = "benchmarktimer", + actions = function() + statistics.benchmarktimer("whatever") + end +} + +implement { + name = "elapsedtime", + actions = function() + statistics.stoptiming("whatever") + context(statistics.elapsedtime("whatever")) + end +} + +implement { + name = "elapsedsteptime", + arguments = "integer", + actions = function(n) + statistics.stoptiming("whatever") + local t = statistics.elapsed("whatever")/(n > 0 and n or 1) + if t > 0 then + context("%0.9f",t) + else + context(0) + end + end +} + +local accuracy = table.setmetatableindex(function(t,k) + local v = formatters["%0." ..k .. "f"] + t[k] = v + return v +end) + +implement { + name = "rounded", + arguments = "integer", + actions = function(n,m) context(accuracy[n](m)) end +} + +-- not faster but just less tracing: + +local ctx_protected_cs = context.protected.cs -- more efficient + +local ctx_firstoftwoarguments = ctx_protected_cs.firstoftwoarguments +local ctx_secondoftwoarguments = ctx_protected_cs.secondoftwoarguments +local ctx_firstofoneargument = ctx_protected_cs.firstofoneargument +local ctx_gobbleoneargument = ctx_protected_cs.gobbleoneargument + +context.firstoftwoarguments = ctx_firstoftwoarguments +context.secondoftwoarguments = ctx_secondoftwoarguments +context.firstofoneargument = ctx_firstofoneargument +context.gobbleoneargument = ctx_gobbleoneargument + +local ctx_iftrue = context.iftrue +local ctx_iffalse = context.iffalse + +local hash = utilities.parsers.hashes.settings_to_set + +local function doifelsecommon(a,b) + if a == b then + setmacro("commalistelement",a) + if a == "" then + ctx_secondoftwoarguments() + else + ctx_firstoftwoarguments() + end + return + end + local ba = find(a,",",1,true) + local bb = find(b,",",1,true) + if ba and bb then + local ha = hash[a] + local hb = hash[b] + -- local ha = settings_to_set(a) + -- local hb = settings_to_set(b) + for k in next, ha do + if hb[k] then + setmacro("commalistelement",k) + ctx_firstoftwoarguments() + return + end + end + elseif ba then + if hash[a][b] then + -- if settings_to_set(a)[b] then + setmacro("commalistelement",b) + ctx_firstoftwoarguments() + return + end + elseif bb then + if hash[b][a] then + -- if settings_to_set(b)[a] then + setmacro("commalistelement",a) + ctx_firstoftwoarguments() + return + end + end + setmacro("commalistelement","") + ctx_secondoftwoarguments() +end + +local function doifcommon(a,b) + if a == b then + setmacro("commalistelement",a) + if a == "" then + ctx_gobbleoneargument() + else + ctx_firstofoneargument() + end + return + end + local ba = find(a,",",1,true) + local bb = find(b,",",1,true) + if ba and bb then + local ha = hash[a] + local hb = hash[b] + -- local ha = settings_to_set(a) + -- local hb = settings_to_set(b) + for k in next, ha do + if hb[k] then + setmacro("commalistelement",k) + ctx_firstofoneargument() + return + end + end + elseif ba then + if hash[a][b] then + -- if settings_to_set(a)[b] then + setmacro("commalistelement",b) + ctx_firstofoneargument() + return + end + elseif bb then + if hash[b][a] then + -- if settings_to_set(b)[a] then + setmacro("commalistelement",a) + ctx_firstofoneargument() + return + end + end + setmacro("commalistelement","") + ctx_gobbleoneargument() +end + +local function doifnotcommon(a,b) + if a == b then + setmacro("commalistelement",a) + if a == "" then + ctx_firstofoneargument() + else + ctx_gobbleoneargument() + end + return + end + local ba = find(a,",",1,true) + local bb = find(b,",",1,true) + if ba and bb then + local ha = hash[a] + local hb = hash[b] + -- local ha = settings_to_set(a) + -- local hb = settings_to_set(b) + for k in next, ha do + if hb[k] then + setmacro("commalistelement",k) + ctx_gobbleoneargument() + return + end + end + elseif ba then + if hash[a][b] then + -- if settings_to_set(a)[b] then + setmacro("commalistelement",b) + ctx_gobbleoneargument() + return + end + elseif bb then + if hash[b][a] then + -- if settings_to_set(b)[a] then + setmacro("commalistelement",a) + ctx_gobbleoneargument() + return + end + end + setmacro("commalistelement","") + ctx_firstofoneargument() +end + +-- local function hascommonargumentcondition(a,b) +-- if a == b then +-- setmacro("commalistelement",a) +-- if a == "" then +-- ctx_iffalse() +-- else +-- ctx_iftrue() +-- end +-- return +-- end +-- local ba = find(a,",",1,true) +-- local bb = find(b,",",1,true) +-- if ba and bb then +-- local ha = hash[a] +-- local hb = hash[b] +-- for k in next, ha do +-- if hb[k] then +-- setmacro("commalistelement",k) +-- ctx_iftrue() +-- return +-- end +-- end +-- elseif ba then +-- if hash[a][b] then +-- setmacro("commalistelement",b) +-- ctx_iftrue() +-- return +-- end +-- elseif bb then +-- if hash[b][a] then +-- setmacro("commalistelement",a) +-- ctx_iftrue() +-- return +-- end +-- end +-- setmacro("commalistelement","") +-- ctx_iffalse() +-- end + +local function doifelseinset(a,b) + if a == b then + setmacro("commalistelement",a) + if a == "" then + ctx_secondoftwoarguments() + else + ctx_firstoftwoarguments() + end + return + end + local bb = find(b,",",1,true) + if bb then + if hash[b][a] then + -- if settings_to_set(b)[a] then + setmacro("commalistelement",a) + ctx_firstoftwoarguments() + return + end + end + setmacro("commalistelement","") + ctx_secondoftwoarguments() +end + +local function doifinset(a,b) + if a == b then + setmacro("commalistelement",a) + if a == "" then + ctx_gobbleoneargument() + else + ctx_firstofoneargument() + end + return + end + local bb = find(b,",",1,true) + if bb then + if hash[b][a] then + -- if settings_to_set(b)[a] then + setmacro("commalistelement",a) + ctx_firstofoneargument() + return + end + end + setmacro("commalistelement","") + ctx_gobbleoneargument() +end + +local function doifnotinset(a,b) + if a == b then + setmacro("commalistelement",a) + if a == "" then + ctx_firstofoneargument() + else + ctx_gobbleoneargument() + end + return + end + local bb = find(b,",",1,true) + if bb then + if hash[b][a] then + -- if settings_to_set(b)[a] then + setmacro("commalistelement",a) + ctx_gobbleoneargument() + return + end + end + setmacro("commalistelement","") + ctx_firstofoneargument() +end + +implement { + name = "doifelsecommon", + actions = doifelsecommon, + arguments = "2 strings", +} + +implement { + name = "doifcommon", + actions = doifcommon, + arguments = "2 strings", +} + +implement { + name = "doifnotcommon", + actions = doifnotcommon, + arguments = "2 strings", +} + +-- implement { +-- name = "hascommonargumentcondition", +-- actions = hascommonargumentcondition, +-- arguments = "2 strings", +-- arguments = { "argument", "argument" }, +-- } + +implement { + name = "doifelseinset", + actions = doifelseinset, + arguments = "2 strings", +-- arguments = { "argument", "argument" }, +} + +implement { + name = "doifinset", + actions = doifinset, + arguments = "2 strings", +} + +implement { + name = "doifnotinset", + actions = doifnotinset, + arguments = "2 strings", +} + +-- done elsewhere: +-- +-- local function firstinset(a) +-- local aa = hash[a] +-- context(aa and aa[1] or a) +-- end +-- +-- implement { +-- name = "firstinset", +-- actions = firstinset, +-- arguments = "string", +-- private = false, +-- } + +-- implement { +-- name = "stringcompare", +-- arguments = "2 strings", +-- actions = function(a,b) +-- context((a == b and 0) or (a > b and 1) or -1) +-- end +-- } +-- +-- implement { +-- name = "doifelsestringafter", +-- arguments = "2 strings", +-- actions = function(a,b) +-- ctx_doifelse((a == b and 0) or (a > b and 1) or -1) +-- end +-- } +-- +-- implement { +-- name = "doifelsestringbefore", +-- arguments = "2 strings", +-- actions = function(a,b) +-- ctx_doifelse((a == b and 0) or (a < b and -1) or 1) +-- end +-- } + +-- implement { -- not faster than addtocommalist +-- name = "additemtolist", -- unique +-- arguments = "2 strings", +-- actions = function(l,s) +-- if l == "" or s == l then +-- -- s = s +-- elseif find("," .. l .. ",","," .. s .. ",") then +-- s = l +-- else +-- s = l .. "," .. s +-- end +-- context(s) +-- end +-- } + +local bp = number.dimenfactors.bp + +implement { + name = "tobigpoints", + actions = function(d) context("%.5F",bp * d) end, + arguments = "dimension", +} + +implement { + name = "towholebigpoints", + actions = function(d) context("%r",bp * d) end, + arguments = "dimension", +} + +-- for now here: + +local function getshape(s) + local t = texget(s) + local n = t and #t or 0 + context(n) + if n > 0 then + for i=1,n do + local ti = t[i] + if type(ti) == "table" then + context(" %isp %isp",ti[1],ti[2]) + else + context(" %i",ti) + end + end + end +end + +implement { + name = "getparshape", + public = true, + actions = function() getshape("parshape") end, +} +implement { + name = "getclubpenalties", + public = true, + actions = function() getshape("clubpenalties") end, +} +implement { + name = "getinterlinepenalties", + public = true, + actions = function() getshape("interlinepenalties") end, + } +implement { + name = "getdisplaywidowpenalties", + public = true, + actions = function() getshape("displaywidowpenalties") end, +} +implement { + name = "getwidowpenalties", + public = true, + actions = function() getshape("widowpenalties") end, +} diff --git a/tex/context/base/mkiv/syst-aux.lua b/tex/context/base/mkiv/syst-aux.lua index 05a070d30..859e40ead 100644 --- a/tex/context/base/mkiv/syst-aux.lua +++ b/tex/context/base/mkiv/syst-aux.lua @@ -1,4 +1,4 @@ -if not modules then modules = { } end modules ['syst-aux'] = { + if not modules then modules = { } end modules ['syst-aux'] = { version = 1.001, comment = "companion to syst-aux.mkiv", author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", @@ -233,12 +233,12 @@ local dargument = (double * digit)^1 -- third variant: -local global = nil -local unexpanded = nil -local expanded = nil -local optional = nil -local csname = nil -local rest = nil +local global = nil +local unexpanded = nil +local expanded = nil +local optional = nil +local csname = nil +local rest = nil local function catcodes_s() setcatcode(32,10) -- space @@ -262,13 +262,40 @@ local option = ( + P("sixtuple") ) * (P("empty") + P("argument")) +-- local pattern = ( +-- ( P("spaces") * space / catcodes_s )^0 +-- * spaces * ( P("nospaces") * space / catcodes_n )^0 +-- * spaces * ( P("global") * space * Cc(true) + Cc(false) ) +-- * spaces * ( P("unexpanded") * space * Cc(true) + Cc(false) ) +-- * spaces * ( P("expanded") * space * Cc(true) + Cc(false) ) +-- * spaces * ( C(option) * space + Cc(false) ) +-- * spaces * ( C((1-S(" #["))^1) ) +-- * spaces * Cs( +-- ( P("[") * dargument * P("]") + dargument)^1 * sentinel^-1 * double^-1 +-- + ( P("[") * sargument * P("]") + sargument)^1 * sentinel^-1 * single^-1 +-- + sentinel^-1 * (double+single)^-1 +-- ) +-- ) +-- +-- local ctx_dostarttexdefinition = context.dostarttexdefinition +-- +-- local function texdefinition_one(str) +-- global, unexpanded, expanded, optional, csname, rest = lpegmatch(pattern,str) +-- ctx_dostarttexdefinition() +-- end + local pattern = ( - ( P("spaces") * space / catcodes_s )^0 - * spaces * ( P("nospaces") * space / catcodes_n )^0 - * spaces * ( P("global") * space * Cc(true) + Cc(false) ) - * spaces * ( P("unexpanded") * space * Cc(true) + Cc(false) ) - * spaces * ( P("expanded") * space * Cc(true) + Cc(false) ) - * spaces * ( C(option) * space + Cc(false) ) + ( + spaces * ( + ( P("spaces") * space / catcodes_s ) + + ( P("nospaces") * space / catcodes_n ) + + ( P("global") * space / function() global = true end ) + + ( P("unexpanded") * space / function() unexpanded = true end ) + + ( P("protected") * space / function() unexpanded = true end ) + + ( P("expanded") * space / function() expanded = true end ) + + ( C(option) * space / function(s) optional = s end ) + ) + )^0 * spaces * ( C((1-S(" #["))^1) ) * spaces * Cs( ( P("[") * dargument * P("]") + dargument)^1 * sentinel^-1 * double^-1 @@ -280,40 +307,29 @@ local pattern = ( local ctx_dostarttexdefinition = context.dostarttexdefinition local function texdefinition_one(str) - global, unexpanded, expanded, optional, csname, rest = lpegmatch(pattern,str) + global = false + unexpanded = false + expanded = false + optional = false + csname, rest = lpegmatch(pattern,str) ctx_dostarttexdefinition() end local function texdefinition_two() if optional then context ( - [[\unexpanded\expandafter]] .. - (global and [[\xdef]] or [[\edef]]) .. - [[\csname ]] .. - csname .. - [[\endcsname{\expandafter\noexpand\expandafter\do]] .. - optional .. - [[\csname _do_]] .. - csname .. - -- [[_\endcsname}\unexpanded\expandafter]] .. - [[_\endcsname}\expandafter]] .. - (global and [[\gdef]] or [[\edef]]) .. - [[\csname _do_]] .. - csname .. - [[_\endcsname ]] .. + (unexpanded and [[\unexpanded]] or "") .. + [[\expandafter]] .. (global and [[\xdef]] or [[\edef]]) .. + [[\csname ]] .. csname .. [[\endcsname{\expandafter\noexpand\expandafter\do]] .. optional .. + [[\csname _do_]] .. csname .. [[_\endcsname}\expandafter]] .. (global and [[\gdef]] or [[\edef]]) .. + [[\csname _do_]] .. csname .. [[_\endcsname ]] .. rest ) else context ( - [[\unexpanded\expandafter]] .. - ( global and ( - expanded and [[\xdef]] or [[\gdef]] - ) or ( - expanded and [[\edef]] or [[\def]] - ) ) .. - [[\csname ]] .. - csname .. - [[\endcsname ]] .. + (unexpanded and [[\unexpanded]] or "") .. + [[\expandafter]] .. (global and (expanded and [[\xdef]] or [[\gdef]]) or (expanded and [[\edef]] or [[\def]])) .. + [[\csname ]] .. csname .. [[\endcsname ]] .. rest ) end diff --git a/tex/context/base/mkiv/syst-aux.mkiv b/tex/context/base/mkiv/syst-aux.mkiv index 2d1ae17be..29f05c9b8 100644 --- a/tex/context/base/mkiv/syst-aux.mkiv +++ b/tex/context/base/mkiv/syst-aux.mkiv @@ -56,21 +56,10 @@ \let\unexpanded\normalprotected -\ifcase\contextlmtxmode - - \def\startlmtxmode#1\stoplmtxmode{} - \let\stoplmtxmode \relax - \let\startmkivmode\relax - \let\stopmkivmode \relax - -\else - - \let\startlmtxmode\relax - \let\stoplmtxmode \relax - \def\startmkivmode#1\stopmkivmode{} - \let\stopmkivmode \relax - -\fi +\def\startlmtxmode#1\stoplmtxmode{} +\let\stoplmtxmode \relax +\let\startmkivmode\relax +\let\stopmkivmode \relax %D As we don't have namespace definers yet, we use a special one: diff --git a/tex/context/base/mkiv/syst-aux.mkxl b/tex/context/base/mkiv/syst-aux.mkxl index 95a1079e8..4f3b65ad8 100644 --- a/tex/context/base/mkiv/syst-aux.mkxl +++ b/tex/context/base/mkiv/syst-aux.mkxl @@ -11,7 +11,10 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\registerctxluafile{syst-aux}{} +%D In the process of being adapted to \LMTX\ flags so a bit of a mess now. Also +%D our playground. + +\registerctxluafile{syst-aux}{autosuffix} \registerctxluafile{syst-mac}{autosuffix} %D This file is a follow up in \type {syst-aux.mkii} and \type {syst-aux.mkiv} where @@ -46,14 +49,18 @@ %D keep the same name for a similar mechanism. So, effectively we have two ways to %D protect a macro. -\let\unexpanded\normalprotected +\pushoverloadmode + +\aliased\let\unexpanded\normalprotected + +\popoverloadmode %D We're definitely in \LMTX\ mode here. -\let\startlmtxmode\relax -\let\stoplmtxmode \relax -\def\startmkivmode#-\stopmkivmode{} -\let\stopmkivmode \relax +\aliased \let\startlmtxmode\relax +\aliased \let\stoplmtxmode \relax +\permanent\def\startmkivmode#-\stopmkivmode{} +\aliased \let\stopmkivmode \relax %D As we don't have namespace definers yet, we use a special one. Later we will %D do a better job. @@ -71,7 +78,7 @@ \fi -\protected\def\installsystemnamespace#1% maybe move this to syst-ini +\permanent\protected\def\installsystemnamespace#1% maybe move this to syst-ini {\ifcsname ??#1\endcsname \writestatus\m!system{duplicate system namespace '#1'}\wait \else @@ -144,24 +151,25 @@ %D that's the price to pay. More are defined elsewhere. Of course we later pay a %D price when they need to be expanded. -\def\v!prefix! {v!} -\def\c!prefix! {c!} -\def\s!prefix! {s!} - -\def\s!next {next} -\def\s!default {default} -\def\s!dummy {dummy} -\def\s!unknown {unknown} - -\def\s!do {do} -\def\s!dodo {dodo} - -\def\s!complex {complex} -\def\s!start {start} -\def\s!simple {simple} -\def\s!stop {stop} +% \def\v!prefix! {v!} +% \def\c!prefix! {c!} +% \def\s!prefix! {s!} +% +% \def\s!next {next} +% \def\s!default {default} +% \def\s!dummy {dummy} +% \def\s!unknown {unknown} +% +% \def\s!do {do} +% \def\s!dodo {dodo} +% +% \def\s!complex {complex} +% \def\s!simple {simple} +% +% \def\s!start{start} +% \def\s!stop {stop} -\def\s!empty {empty} +% \immutable\def\s!empty {empty} %D Sometimes we pass macros as arguments to commands that don't expand them before %D interpretation. Such commands can be enclosed with \type {\expanded}, like: @@ -178,13 +186,17 @@ \let\m_syst_helpers_expanded\empty -\protected\def\expanded#1% +\pushoverloadmode + +\permanent\protected\def\expanded#1% {\xdef\m_syst_helpers_expanded{\noexpand#1}\m_syst_helpers_expanded} -\protected\def\startexpanded#1\stopexpanded +\popoverloadmode + +\permanent\protected\def\startexpanded#1\stopexpanded {\xdef\m_syst_helpers_expanded{#1}\m_syst_helpers_expanded} -\let\stopexpanded\relax +\aliased\let\stopexpanded\relax %D Recent \TEX\ engines have a primitive \type {\expanded} and we will use that when %D possible. After all, we can make not expandable macros now. The name clash is an @@ -207,21 +219,21 @@ %D is more efficient but it probably won't be noticed. It's anyway cheaper on memory %D access. We use versions that don't even store the arguments. -\def\gobbleoneargument #-{} -\def\gobbletwoarguments #-#-{} -\def\gobblethreearguments #-#-#-{} -\def\gobblefourarguments #-#-#-#-{} -\def\gobblefivearguments #-#-#-#-{} -\def\gobblesixarguments #-#-#-#-{} -\def\gobblesevenarguments #-#-#-#-#-{} -\def\gobbleeightarguments #-#-#-#-#-#-{} -\def\gobbleninearguments #-#-#-#-#-#-#-{} - -\def\gobbleoneoptional [#-]{} -\def\gobbletwooptionals [#-][#-]{} -\def\gobblethreeoptionals[#-][#-][#-]{} -\def\gobblefouroptionals [#-][#-][#-][#-]{} -\def\gobblefiveoptionals [#-][#-][#-][#-][#-]{} +%def\gobbleoneargument #-{} +\permanent\def\gobbletwoarguments #-#-{} +\permanent\def\gobblethreearguments #-#-#-{} +\permanent\def\gobblefourarguments #-#-#-#-{} +\permanent\def\gobblefivearguments #-#-#-#-{} +\permanent\def\gobblesixarguments #-#-#-#-{} +\permanent\def\gobblesevenarguments #-#-#-#-#-{} +\permanent\def\gobbleeightarguments #-#-#-#-#-#-{} +\permanent\def\gobbleninearguments #-#-#-#-#-#-#-{} + +\permanent\def\gobbleoneoptional [#-]{} +\permanent\def\gobbletwooptionals [#-][#-]{} +\permanent\def\gobblethreeoptionals[#-][#-][#-]{} +\permanent\def\gobblefouroptionals [#-][#-][#-][#-]{} +\permanent\def\gobblefiveoptionals [#-][#-][#-][#-][#-]{} %D Reserved macros for tests: @@ -242,10 +254,10 @@ %D blank spaces but in the meantime we can use some \LUATEX\ trickery. Older versions %D use more code and can be find in the \MKIV\ and \MKII\ files. -\let\next \relax -\let\nextnext \relax % kind of obsolete -\let\nextnextnext \relax % kind of obsolete -\let\nexttoken \relax +% \mutable\let\next \relax +% \mutable\let\nextnext \relax % kind of obsolete +% \mutable\let\nextnextnext \relax % kind of obsolete +% \mutable\let\nexttoken \relax \let\m_syst_action_yes\relax \let\m_syst_action_nop\relax @@ -383,21 +395,37 @@ %D As we will see, \CONTEXT\ uses these commands many times, which is mainly due to %D its object oriented and parameter driven character. -\def\setvalue #1{\expandafter\def \csname#1\endcsname} -\def\setgvalue #1{\expandafter\gdef\csname#1\endcsname} -\def\setevalue #1{\expandafter\edef\csname#1\endcsname} -\def\setxvalue #1{\expandafter\xdef\csname#1\endcsname} +% \def\setvalue #1{\expandafter\def \csname#1\endcsname} +% \def\setgvalue #1{\expandafter\gdef\csname#1\endcsname} +% \def\setevalue #1{\expandafter\edef\csname#1\endcsname} +% \def\setxvalue #1{\expandafter\xdef\csname#1\endcsname} +% \def\getvalue #1{\csname#1\endcsname} % maybe: \begincsname#1\endcsname +% \def\letvalue #1{\expandafter\let \csname#1\endcsname} +% \def\letgvalue #1{\expandafter\glet\csname#1\endcsname} +% \def\resetvalue #1{\expandafter\let \csname#1\endcsname\empty} +% \def\undefinevalue#1{\expandafter\let \csname#1\endcsname\undefined} +% \def\ignorevalue#1#2{\expandafter\let \csname#1\endcsname\empty} + +\def\setvalue #1{\expandafter\defcsname#1\endcsname} +\def\setgvalue #1{\global\defcsname#1\endcsname} +\def\setevalue #1{\edefcsname#1\endcsname} +\def\setxvalue #1{\global\edefcsname#1\endcsname} \def\getvalue #1{\csname#1\endcsname} % maybe: \begincsname#1\endcsname -\def\letvalue #1{\expandafter\let \csname#1\endcsname} -\def\letgvalue #1{\expandafter\glet\csname#1\endcsname} -\def\resetvalue #1{\expandafter\let \csname#1\endcsname\empty} -\def\undefinevalue#1{\expandafter\let \csname#1\endcsname\undefined} -\def\ignorevalue#1#2{\expandafter\let \csname#1\endcsname\empty} - -\def\setuvalue #1{\protected\expandafter \def\csname#1\endcsname} -\def\setuevalue #1{\protected\expandafter\edef\csname#1\endcsname} -\def\setugvalue #1{\protected\expandafter\gdef\csname#1\endcsname} -\def\setuxvalue #1{\protected\expandafter\xdef\csname#1\endcsname} +\def\letvalue #1{\letcsname#1\endcsname} +\def\letgvalue #1{\global\letcsname#1\endcsname} +\def\resetvalue #1{\letcsname#1\endcsname\empty} +\def\undefinevalue#1{\letcsname#1\endcsname\undefined} +\def\ignorevalue#1#2{\letcsname#1\endcsname\empty} + +% \def\setuvalue #1{\protected\expandafter \def\csname#1\endcsname} +% \def\setuevalue #1{\protected\expandafter\edef\csname#1\endcsname} +% \def\setugvalue #1{\protected\expandafter\gdef\csname#1\endcsname} +% \def\setuxvalue #1{\protected\expandafter\xdef\csname#1\endcsname} + +\def\setuvalue #1{\protected\defcsname#1\endcsname} +\def\setuevalue #1{\protected\edefcsname#1\endcsname} +\def\setugvalue #1{\protected\global\defcsname#1\endcsname} +\def\setuxvalue #1{\protected\global\edefcsname#1\endcsname} \protected\def\getuvalue#1{\csname#1\endcsname} @@ -798,24 +826,40 @@ %D arguments state. Again it permits leaner and meaner macro definitions with a bit %D less clutter in tracing. -\protected\def\syst_helpers_process_comma_item#1,% +\let\commalistcommand\empty + +\protected\def\syst_helpers_process_comma_item#+,% {\ifarguments \expandafter\syst_helpers_process_comma_item_gobble - \or + \orelse\ifparameter#1\or \commalistcommand{#1}% \expandafter\syst_helpers_process_comma_item_next + \else + \expandafter\syst_helpers_process_comma_item_gobble \fi} \def\syst_helpers_process_comma_item_next {\expandafterspaces\syst_helpers_process_comma_item} -\protected\def\processcommalist[#1]#2% +% \protected\def\processcommalist[#1]#2% +% {\pushmacro\commalistcommand +% \def\commalistcommand{#2}% +% \expandafterspaces\syst_helpers_process_comma_item#1,\ignorearguments\ignorearguments\ignorearguments +% \popmacro\commalistcommand} + +% \protected\def\processcommacommand[#1]#2% +% {\pushmacro\commalistcommand +% \def\commalistcommand{#2}% +% \normalexpanded{\noexpand\expandafterspaces\syst_helpers_process_comma_item#1,}\ignorearguments\ignorearguments\ignorearguments +% \popmacro\commalistcommand} + +\protected\def\processcommalist[#*#+]#2% {\pushmacro\commalistcommand \def\commalistcommand{#2}% \expandafterspaces\syst_helpers_process_comma_item#1,\ignorearguments\ignorearguments\ignorearguments \popmacro\commalistcommand} -\protected\def\processcommacommand[#1]#2% +\protected\def\processcommacommand[#*#+]#2% {\pushmacro\commalistcommand \def\commalistcommand{#2}% \normalexpanded{\noexpand\expandafterspaces\syst_helpers_process_comma_item#1,}\ignorearguments\ignorearguments\ignorearguments @@ -964,7 +1008,7 @@ \let\syst_helpers_do_compare_process_action\syst_helpers_do_compare_process_action_b \fi \edef\syst_helpers_do_process_action##1{\syst_helpers_do_compare_process_action[##1][#1]}% expands #1 - \processnextcommalist\relax\relax\syst_helpers_do_process_action[} + \processnextcommalist\syst_helpers_do_process_action[} \protected\def\syst_helpers_do_compare_process_action_c[#1=>#2][#3]% {\edef\m_syst_string_one{#1}% @@ -990,10 +1034,10 @@ \fi [#1]} -\protected\def\syst_helpers_process_first_action_in_set_indeed[#1]#2[#3]% +\tolerant\protected\def\syst_helpers_process_first_action_in_set_indeed[#1]#*[#2]% {\def\syst_helpers_do_process_action##1% {\def\syst_helpers_do_do_process_action####1{\syst_helpers_do_compare_process_action_c[####1][##1]}% - \processcommalist[#3]\syst_helpers_do_do_process_action}% + \processcommalist[#2]\syst_helpers_do_do_process_action}% \normalexpanded{\processcommalist[#1]}\syst_helpers_do_process_action} \protected\def\syst_helpers_do_compare_process_action_d[#1=>#2][#3]% @@ -1011,12 +1055,12 @@ \fi \fi} -\protected\def\syst_helpers_process_all_actions_in_set_indeed[#1]#2[#3]% +\tolerant\protected\def\syst_helpers_process_all_actions_in_set_indeed[#1]#*[#2]% {\globalpushmacro\syst_process_action_in_set_all \def\syst_process_action_in_set##1% {\def\syst_process_action_in_set_one####1{\syst_helpers_do_compare_process_action_d[####1][##1]}% - \processcommalist[#3]\syst_process_action_in_set_one}% - \processcommacommand[#1]\syst_process_action_in_set + \processcommalist[#2]\syst_process_action_in_set_one}% + \processcommacommand[#1]\syst_process_action_in_set \globalpopmacro\syst_process_action_in_set_all} \protected\def\processallactionsinset[#1]% @@ -1025,18 +1069,21 @@ \expandafter\processaction \else \expandafter\syst_helpers_process_all_actions_in_set_indeed - \fi - [#1]} + \fi[#1]} %D These macros use: -\protected\def\processnextcommalist#1#2#3[#4#5]% - {#1\relax - \pushmacro\commalistcommand - \def\commalistcommand{#3}% - \expandafterspaces\syst_helpers_process_comma_item#4#5\ignorearguments\ignorearguments\ignorearguments - \popmacro\commalistcommand - #2\relax} +% \protected\def\processnextcommalist#1[#2#3]% +% {\pushmacro\commalistcommand +% \def\commalistcommand{#1}% +% \expandafterspaces\syst_helpers_process_comma_item#2#3\ignorearguments\ignorearguments\ignorearguments +% \popmacro\commalistcommand} + +\protected\def\processnextcommalist#1[#2#3]% + {\pushmacro\commalistcommand + \def\commalistcommand{#1}% + \expandafterspaces\syst_helpers_process_comma_item#2#3\ignorearguments\ignorearguments\ignorearguments + \popmacro\commalistcommand} %D \macros %D {getfirstcharacter, firstcharacter, remainingcharacters, doiffirstcharacter} @@ -1281,10 +1328,12 @@ \processcommalist[#1]\syst_helpers_do_make_raw_comma_list \edef#2{\the\scratchtoks}} -\let\rawprocesscommalist \processcommalist -\let\rawprocesscommacommand\processcommacommand +% beware: in mkiv { } were lost so it was not compatible with the non raw -%D Here is one without nesting: +\let\rawprocesscommalist \processcommalist % can go +\let\rawprocesscommacommand\processcommacommand % can go + +%D Here is one without nesting .. still needed? \protected\def\syst_helpers_process_fast_comma_item#1,% {\ifarguments @@ -1410,20 +1459,6 @@ \def\doignorevalue#1#2#3{\expandafter\let \csname#1#2\endcsname\empty} \def\docopyvalue #1#2#3{\expandafter\def \csname#1#3\endcsname{\csname#2#3\endcsname}} -%D Experiment -%D -%D \starttyping -%D \protected\def\fooA{A} \aliasmacro\FooA\fooA -%D \def\fooB{B} \aliasmacro\FooB\fooB -%D -%D \meaning\fooA\crlf \meaning\FooA\crlf -%D \meaning\fooB\crlf \meaning\FooB\crlf -%D \stoptyping - -\protected\def\aliasmacro#1#2% - {\ifprotected#2\protected\protected\fi - \def#1{#2}} - %D \macros %D {doassign,undoassign,doassignempty} %D @@ -1559,12 +1594,11 @@ \def\syst_helpers_grab_parameter_next {\expandafterspaces\syst_helpers_grab_parameter} -\protected\def\dogetparameters#1[#2]#-[#3]% +\protected\def\dogetparameters#1[#2]#*[#3]% {\def\m_syst_parameter_n{#2}% \let\m_syst_parameter_s#1% \expandafterspaces\syst_helpers_grab_parameter#3\ignorearguments\ignorearguments} - %D \macros %D {getemptyparameters} %D @@ -1575,9 +1609,9 @@ %D \getemptyparameters [label] [...=...,...=...] %D \stoptyping -\protected\def\getemptyparameters[#1]#2[#3]% +\protected\def\getemptyparameters[#1]#*[#2]% {\def\syst_helpers_get_empty_parameters##1{\doassignempty[#1][##1]}% - \processcommalist[#3]\syst_helpers_get_empty_parameters} + \processcommalist[#2]\syst_helpers_get_empty_parameters} %D We now just alias these as there is no need for a speedup. These have not been used %D for a long time in core code. @@ -1658,7 +1692,7 @@ %D By using \type {\docopyvalue} we've prepared this command for use in a %D multi||lingual environment. -\protected\def\copyparameters[#1]#-[#2]#-[#3]% +\protected\def\copyparameters[#1]#*[#2]#*[#3]% {\doifnot{#1}{#2} {\def\syst_helpers_copy_parameter{\docopyvalue{#1}{#2}}% ##1 \processcommalist[#3]\syst_helpers_copy_parameter}} @@ -1753,9 +1787,9 @@ \def\syst_helpers_get_from_comma_list_next {\expandafterspaces\syst_helpers_get_from_comma_list} -\protected\def\getfromcommalist[#1]#2[#3]% +\protected\def\getfromcommalist[#1]#*[#2]% {\let\commalistelement\empty - \commalistcounter#3\relax + \commalistcounter#2\relax \expandafterspaces\syst_helpers_get_from_comma_list#1\ignorearguments\ignorearguments} \protected\def\getfromcommacommand[#1]% @@ -1860,6 +1894,8 @@ %D We use some signals for telling the calling macros if all wanted arguments are %D indeed supplied by the user. +\newcount\nofarguments + \newif\iffirstargument \newif\ifsecondargument \newif\ifthirdargument @@ -1902,328 +1938,420 @@ \newtoks\t_syst_aux -\def\syst_helpers_single_empty_one_yes {\firstargumenttrue \the\t_syst_aux} -\def\syst_helpers_double_empty_two_yes {\secondargumenttrue \the\t_syst_aux} -\def\syst_helpers_triple_empty_three_yes {\thirdargumenttrue \the\t_syst_aux} -\def\syst_helpers_quadruple_empty_four_yes {\fourthargumenttrue \the\t_syst_aux} -\def\syst_helpers_quintuple_empty_five_yes {\fifthargumenttrue \the\t_syst_aux} -\def\syst_helpers_sixtuple_empty_six_yes {\sixthargumenttrue \the\t_syst_aux} -\def\syst_helpers_seventuple_empty_seven_yes{\seventhargumenttrue\the\t_syst_aux} - -%D Single: - -\protected\def\dosingleempty#1% - {\t_syst_aux{#1}% - \futureexpand[\syst_helpers_single_empty_one_yes\syst_helpers_single_empty_one_nop} - -\def\syst_helpers_single_empty_one_nop - {\firstargumentfalse - \the\t_syst_aux[]} - -%D Double - -\protected\def\dodoubleempty#1% - {\t_syst_aux{#1}% - \futureexpand[\syst_helpers_double_empty_one_yes\syst_helpers_double_empty_one_nop} - -\def\syst_helpers_double_empty_one_yes[#1]% - {\firstargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_double_empty_two_yes\syst_helpers_double_empty_two_nop} - -\def\syst_helpers_double_empty_one_nop - {\firstargumentfalse - \secondargumentfalse - \the\t_syst_aux[][]} - -\def\syst_helpers_double_empty_two_nop - {\secondargumentfalse - \the\t_syst_aux[]} - -% Triple - -\protected\def\dotripleempty#1% - {\t_syst_aux{#1}% - \futureexpand[\syst_helpers_triple_empty_one_yes\syst_helpers_triple_empty_one_nop} - -\def\syst_helpers_triple_empty_one_yes[#1]% - {\firstargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_triple_empty_two_yes\syst_helpers_triple_empty_two_nop} - -\def\syst_helpers_triple_empty_two_yes[#1]% - {\secondargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_triple_empty_three_yes\syst_helpers_triple_empty_three_nop} - -\def\syst_helpers_triple_empty_one_nop - {\firstargumentfalse - \secondargumentfalse - \thirdargumentfalse - \the\t_syst_aux[][][]} - -\def\syst_helpers_triple_empty_two_nop - {\secondargumentfalse - \thirdargumentfalse - \the\t_syst_aux[][]} - -\def\syst_helpers_triple_empty_three_nop - {\thirdargumentfalse - \the\t_syst_aux[]} - -%D Quadruple: - -\protected\def\doquadrupleempty#1% - {\t_syst_aux{#1}% - \futureexpand[\syst_helpers_quadruple_empty_one_yes\syst_helpers_quadruple_empty_one_nop} - -\def\syst_helpers_quadruple_empty_one_yes[#1]% - {\firstargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_quadruple_empty_two_yes\syst_helpers_quadruple_empty_two_nop} - -\def\syst_helpers_quadruple_empty_two_yes[#1]% - {\secondargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_quadruple_empty_three_yes\syst_helpers_quadruple_empty_three_nop} - -\def\syst_helpers_quadruple_empty_three_yes[#1]% - {\thirdargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_quadruple_empty_four_yes\syst_helpers_quadruple_empty_four_nop} - -\def\syst_helpers_quadruple_empty_one_nop - {\firstargumentfalse - \secondargumentfalse - \thirdargumentfalse - \fourthargumentfalse - \the\t_syst_aux[][][][]} - -\def\syst_helpers_quadruple_empty_two_nop - {\secondargumentfalse - \thirdargumentfalse - \fourthargumentfalse - \the\t_syst_aux[][][]} - -\def\syst_helpers_quadruple_empty_three_nop - {\thirdargumentfalse - \fourthargumentfalse - \the\t_syst_aux[][]} - -\def\syst_helpers_quadruple_empty_four_nop - {\fourthargumentfalse - \the\t_syst_aux[]} - -%D Quintuple: - -\protected\def\doquintupleempty#1% - {\t_syst_aux{#1}% - \futureexpand[\syst_helpers_quintuple_empty_one_yes\syst_helpers_quintuple_empty_one_nop} - -\def\syst_helpers_quintuple_empty_one_yes[#1]% - {\firstargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_quintuple_empty_two_yes\syst_helpers_quintuple_empty_two_nop} - -\def\syst_helpers_quintuple_empty_two_yes[#1]% - {\secondargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_quintuple_empty_three_yes\syst_helpers_quintuple_empty_three_nop} - -\def\syst_helpers_quintuple_empty_three_yes[#1]% - {\thirdargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_quintuple_empty_four_yes\syst_helpers_quintuple_empty_four_nop} - -\def\syst_helpers_quintuple_empty_four_yes[#1]% - {\fourthargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_quintuple_empty_five_yes\syst_helpers_quintuple_empty_five_nop} - -\def\syst_helpers_quintuple_empty_one_nop - {\firstargumentfalse - \secondargumentfalse - \thirdargumentfalse - \fourthargumentfalse - \fifthargumentfalse - \the\t_syst_aux[][][][][]} - -\def\syst_helpers_quintuple_empty_two_nop - {\secondargumentfalse - \thirdargumentfalse - \fourthargumentfalse - \fifthargumentfalse - \the\t_syst_aux[][][][]} - -\def\syst_helpers_quintuple_empty_three_nop - {\thirdargumentfalse - \fourthargumentfalse - \fifthargumentfalse - \the\t_syst_aux[][][]} - -\def\syst_helpers_quintuple_empty_four_nop - {\fourthargumentfalse - \fifthargumentfalse - \the\t_syst_aux[][]} - -\def\syst_helpers_quintuple_empty_five_nop - {\fifthargumentfalse - \the\t_syst_aux[]} - -%D Sixtuple: - -\protected\def\dosixtupleempty#1% - {\t_syst_aux{#1}% - \futureexpand[\syst_helpers_sixtuple_empty_one_yes\syst_helpers_sixtuple_empty_one_nop} - -\def\syst_helpers_sixtuple_empty_one_yes[#1]% - {\firstargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_sixtuple_empty_two_yes\syst_helpers_sixtuple_empty_two_nop} - -\def\syst_helpers_sixtuple_empty_two_yes[#1]% - {\secondargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_sixtuple_empty_three_yes\syst_helpers_sixtuple_empty_three_nop} - -\def\syst_helpers_sixtuple_empty_three_yes[#1]% - {\thirdargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_sixtuple_empty_four_yes\syst_helpers_sixtuple_empty_four_nop} - -\def\syst_helpers_sixtuple_empty_four_yes[#1]% - {\fourthargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_sixtuple_empty_five_yes\syst_helpers_sixtuple_empty_five_nop} - -\def\syst_helpers_sixtuple_empty_five_yes[#1]% - {\fifthargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_sixtuple_empty_six_yes\syst_helpers_sixtuple_empty_six_nop} - -\def\syst_helpers_sixtuple_empty_one_nop - {\firstargumentfalse - \secondargumentfalse - \thirdargumentfalse - \fourthargumentfalse - \fifthargumentfalse - \sixthargumentfalse - \the\t_syst_aux[][][][][][]} - -\def\syst_helpers_sixtuple_empty_two_nop - {\secondargumentfalse - \thirdargumentfalse - \fourthargumentfalse - \fifthargumentfalse - \sixthargumentfalse - \the\t_syst_aux[][][][][]} - -\def\syst_helpers_sixtuple_empty_three_nop - {\thirdargumentfalse - \fourthargumentfalse - \fifthargumentfalse - \sixthargumentfalse - \the\t_syst_aux[][][][]} - -\def\syst_helpers_sixtuple_empty_four_nop - {\fourthargumentfalse - \fifthargumentfalse - \sixthargumentfalse - \the\t_syst_aux[][][]} - -\def\syst_helpers_sixtuple_empty_five_nop - {\fifthargumentfalse - \sixthargumentfalse - \the\t_syst_aux[][]} - -\def\syst_helpers_sixtuple_empty_six_nop - {\sixthargumentfalse - \the\t_syst_aux[]} - -%D Seventuple: - -\protected\def\doseventupleempty#1% - {\t_syst_aux{#1}% - \futureexpand[\syst_helpers_seventuple_empty_one_yes\syst_helpers_seventuple_empty_one_nop} - -\def\syst_helpers_seventuple_empty_one_yes[#1]% - {\firstargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_seventuple_empty_two_yes\syst_helpers_seventuple_empty_two_nop} - -\def\syst_helpers_seventuple_empty_two_yes[#1]% - {\secondargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_seventuple_empty_three_yes\syst_helpers_seventuple_empty_three_nop} - -\def\syst_helpers_seventuple_empty_three_yes[#1]% - {\thirdargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_seventuple_empty_four_yes\syst_helpers_seventuple_empty_four_nop} - -\def\syst_helpers_seventuple_empty_four_yes[#1]% - {\fourthargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_seventuple_empty_five_yes\syst_helpers_seventuple_empty_five_nop} - -\def\syst_helpers_seventuple_empty_five_yes[#1]% - {\fifthargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_seventuple_empty_six_yes\syst_helpers_seventuple_empty_six_nop} - -\def\syst_helpers_seventuple_empty_six_yes[#1]% - {\sixthargumenttrue - \toksapp\t_syst_aux{[{#1}]}% - \futureexpand[\syst_helpers_seventuple_empty_seven_yes\syst_helpers_seventuple_empty_seven_nop} - -\def\syst_helpers_seventuple_empty_one_nop - {\firstargumentfalse - \secondargumentfalse - \thirdargumentfalse - \fourthargumentfalse - \fifthargumentfalse - \sixthargumentfalse - \seventhargumentfalse - \the\t_syst_aux[][][][][][][]} - -\def\syst_helpers_seventuple_empty_two_nop - {\secondargumentfalse - \thirdargumentfalse - \fourthargumentfalse - \fifthargumentfalse - \sixthargumentfalse - \seventhargumentfalse - \the\t_syst_aux[][][][][][]} - -\def\syst_helpers_seventuple_empty_three_nop - {\thirdargumentfalse - \fourthargumentfalse - \fifthargumentfalse - \sixthargumentfalse - \seventhargumentfalse - \the\t_syst_aux[][][][][]} - -\def\syst_helpers_seventuple_empty_four_nop - {\fourthargumentfalse - \fifthargumentfalse - \sixthargumentfalse - \seventhargumentfalse - \the\t_syst_aux[][][][]} - -\def\syst_helpers_seventuple_empty_five_nop - {\fifthargumentfalse - \sixthargumentfalse - \seventhargumentfalse - \the\t_syst_aux[][][]} - -\def\syst_helpers_seventuple_empty_six_nop - {\sixthargumentfalse - \seventhargumentfalse - \the\t_syst_aux[][]} - -\def\syst_helpers_seventuple_empty_seven_nop - {\seventhargumentfalse - \the\t_syst_aux[]} +% \def\syst_helpers_single_empty_one_yes {\firstargumenttrue \the\t_syst_aux} +% \def\syst_helpers_double_empty_two_yes {\secondargumenttrue \the\t_syst_aux} +% \def\syst_helpers_triple_empty_three_yes {\thirdargumenttrue \the\t_syst_aux} +% \def\syst_helpers_quadruple_empty_four_yes {\fourthargumenttrue \the\t_syst_aux} +% \def\syst_helpers_quintuple_empty_five_yes {\fifthargumenttrue \the\t_syst_aux} +% \def\syst_helpers_sixtuple_empty_six_yes {\sixthargumenttrue \the\t_syst_aux} +% \def\syst_helpers_seventuple_empty_seven_yes{\seventhargumenttrue\the\t_syst_aux} +% +% %D Single: +% +% \protected\def\dosingleempty#1% +% {\t_syst_aux{#1}% +% \futureexpand[\syst_helpers_single_empty_one_yes\syst_helpers_single_empty_one_nop} +% +% \def\syst_helpers_single_empty_one_nop +% {\firstargumentfalse +% \the\t_syst_aux[]} +% +% %D Double +% +% \protected\def\dodoubleempty#1% +% {\t_syst_aux{#1}% +% \futureexpand[\syst_helpers_double_empty_one_yes\syst_helpers_double_empty_one_nop} +% +% % \def\syst_helpers_double_empty_one_yes[#1]% +% % {\firstargumenttrue +% % \toksapp\t_syst_aux{[{#1}]}% +% % \futureexpand[\syst_helpers_double_empty_two_yes\syst_helpers_double_empty_two_nop} +% % +% % nicer is: +% +% \def\syst_helpers_double_empty_one_yes[#+]% +% {\firstargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_double_empty_two_yes\syst_helpers_double_empty_two_nop} +% +% \def\syst_helpers_double_empty_one_nop +% {\firstargumentfalse +% \secondargumentfalse +% \the\t_syst_aux[][]} +% +% \def\syst_helpers_double_empty_two_nop +% {\secondargumentfalse +% \the\t_syst_aux[]} +% +% % Triple +% +% \protected\def\dotripleempty#1% +% {\t_syst_aux{#1}% +% \futureexpand[\syst_helpers_triple_empty_one_yes\syst_helpers_triple_empty_one_nop} +% +% \def\syst_helpers_triple_empty_one_yes[#+]% +% {\firstargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_triple_empty_two_yes\syst_helpers_triple_empty_two_nop} +% +% \def\syst_helpers_triple_empty_two_yes[#+]% +% {\secondargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_triple_empty_three_yes\syst_helpers_triple_empty_three_nop} +% +% \def\syst_helpers_triple_empty_one_nop +% {\firstargumentfalse +% \secondargumentfalse +% \thirdargumentfalse +% \the\t_syst_aux[][][]} +% +% \def\syst_helpers_triple_empty_two_nop +% {\secondargumentfalse +% \thirdargumentfalse +% \the\t_syst_aux[][]} +% +% \def\syst_helpers_triple_empty_three_nop +% {\thirdargumentfalse +% \the\t_syst_aux[]} +% +% %D Quadruple: +% +% \protected\def\doquadrupleempty#1% +% {\t_syst_aux{#1}% +% \futureexpand[\syst_helpers_quadruple_empty_one_yes\syst_helpers_quadruple_empty_one_nop} +% +% \def\syst_helpers_quadruple_empty_one_yes[#+]% +% {\firstargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_quadruple_empty_two_yes\syst_helpers_quadruple_empty_two_nop} +% +% \def\syst_helpers_quadruple_empty_two_yes[#+]% +% {\secondargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_quadruple_empty_three_yes\syst_helpers_quadruple_empty_three_nop} +% +% \def\syst_helpers_quadruple_empty_three_yes[#+]% +% {\thirdargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_quadruple_empty_four_yes\syst_helpers_quadruple_empty_four_nop} +% +% \def\syst_helpers_quadruple_empty_one_nop +% {\firstargumentfalse +% \secondargumentfalse +% \thirdargumentfalse +% \fourthargumentfalse +% \the\t_syst_aux[][][][]} +% +% \def\syst_helpers_quadruple_empty_two_nop +% {\secondargumentfalse +% \thirdargumentfalse +% \fourthargumentfalse +% \the\t_syst_aux[][][]} +% +% \def\syst_helpers_quadruple_empty_three_nop +% {\thirdargumentfalse +% \fourthargumentfalse +% \the\t_syst_aux[][]} +% +% \def\syst_helpers_quadruple_empty_four_nop +% {\fourthargumentfalse +% \the\t_syst_aux[]} +% +% %D Quintuple: +% +% \protected\def\doquintupleempty#1% +% {\t_syst_aux{#1}% +% \futureexpand[\syst_helpers_quintuple_empty_one_yes\syst_helpers_quintuple_empty_one_nop} +% +% \def\syst_helpers_quintuple_empty_one_yes[#+]% +% {\firstargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_quintuple_empty_two_yes\syst_helpers_quintuple_empty_two_nop} +% +% \def\syst_helpers_quintuple_empty_two_yes[#+]% +% {\secondargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_quintuple_empty_three_yes\syst_helpers_quintuple_empty_three_nop} +% +% \def\syst_helpers_quintuple_empty_three_yes[#+]% +% {\thirdargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_quintuple_empty_four_yes\syst_helpers_quintuple_empty_four_nop} +% +% \def\syst_helpers_quintuple_empty_four_yes[#+]% +% {\fourthargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_quintuple_empty_five_yes\syst_helpers_quintuple_empty_five_nop} +% +% \def\syst_helpers_quintuple_empty_one_nop +% {\firstargumentfalse +% \secondargumentfalse +% \thirdargumentfalse +% \fourthargumentfalse +% \fifthargumentfalse +% \the\t_syst_aux[][][][][]} +% +% \def\syst_helpers_quintuple_empty_two_nop +% {\secondargumentfalse +% \thirdargumentfalse +% \fourthargumentfalse +% \fifthargumentfalse +% \the\t_syst_aux[][][][]} +% +% \def\syst_helpers_quintuple_empty_three_nop +% {\thirdargumentfalse +% \fourthargumentfalse +% \fifthargumentfalse +% \the\t_syst_aux[][][]} +% +% \def\syst_helpers_quintuple_empty_four_nop +% {\fourthargumentfalse +% \fifthargumentfalse +% \the\t_syst_aux[][]} +% +% \def\syst_helpers_quintuple_empty_five_nop +% {\fifthargumentfalse +% \the\t_syst_aux[]} +% +% %D Sixtuple: +% +% \protected\def\dosixtupleempty#1% +% {\t_syst_aux{#1}% +% \futureexpand[\syst_helpers_sixtuple_empty_one_yes\syst_helpers_sixtuple_empty_one_nop} +% +% \def\syst_helpers_sixtuple_empty_one_yes[#+]% +% {\firstargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_sixtuple_empty_two_yes\syst_helpers_sixtuple_empty_two_nop} +% +% \def\syst_helpers_sixtuple_empty_two_yes[#+]% +% {\secondargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_sixtuple_empty_three_yes\syst_helpers_sixtuple_empty_three_nop} +% +% \def\syst_helpers_sixtuple_empty_three_yes[#+]% +% {\thirdargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_sixtuple_empty_four_yes\syst_helpers_sixtuple_empty_four_nop} +% +% \def\syst_helpers_sixtuple_empty_four_yes[#+]% +% {\fourthargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_sixtuple_empty_five_yes\syst_helpers_sixtuple_empty_five_nop} +% +% \def\syst_helpers_sixtuple_empty_five_yes[#+]% +% {\fifthargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_sixtuple_empty_six_yes\syst_helpers_sixtuple_empty_six_nop} +% +% \def\syst_helpers_sixtuple_empty_one_nop +% {\firstargumentfalse +% \secondargumentfalse +% \thirdargumentfalse +% \fourthargumentfalse +% \fifthargumentfalse +% \sixthargumentfalse +% \the\t_syst_aux[][][][][][]} +% +% \def\syst_helpers_sixtuple_empty_two_nop +% {\secondargumentfalse +% \thirdargumentfalse +% \fourthargumentfalse +% \fifthargumentfalse +% \sixthargumentfalse +% \the\t_syst_aux[][][][][]} +% +% \def\syst_helpers_sixtuple_empty_three_nop +% {\thirdargumentfalse +% \fourthargumentfalse +% \fifthargumentfalse +% \sixthargumentfalse +% \the\t_syst_aux[][][][]} +% +% \def\syst_helpers_sixtuple_empty_four_nop +% {\fourthargumentfalse +% \fifthargumentfalse +% \sixthargumentfalse +% \the\t_syst_aux[][][]} +% +% \def\syst_helpers_sixtuple_empty_five_nop +% {\fifthargumentfalse +% \sixthargumentfalse +% \the\t_syst_aux[][]} +% +% \def\syst_helpers_sixtuple_empty_six_nop +% {\sixthargumentfalse +% \the\t_syst_aux[]} +% +% %D Seventuple: +% +% \protected\def\doseventupleempty#1% +% {\t_syst_aux{#1}% +% \futureexpand[\syst_helpers_seventuple_empty_one_yes\syst_helpers_seventuple_empty_one_nop} +% +% \def\syst_helpers_seventuple_empty_one_yes[#+]% +% {\firstargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_seventuple_empty_two_yes\syst_helpers_seventuple_empty_two_nop} +% +% \def\syst_helpers_seventuple_empty_two_yes[#+]% +% {\secondargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_seventuple_empty_three_yes\syst_helpers_seventuple_empty_three_nop} +% +% \def\syst_helpers_seventuple_empty_three_yes[#+]% +% {\thirdargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_seventuple_empty_four_yes\syst_helpers_seventuple_empty_four_nop} +% +% \def\syst_helpers_seventuple_empty_four_yes[#+]% +% {\fourthargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_seventuple_empty_five_yes\syst_helpers_seventuple_empty_five_nop} +% +% \def\syst_helpers_seventuple_empty_five_yes[#+]% +% {\fifthargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_seventuple_empty_six_yes\syst_helpers_seventuple_empty_six_nop} +% +% \def\syst_helpers_seventuple_empty_six_yes[#+]% +% {\sixthargumenttrue +% \toksapp\t_syst_aux{[#1]}% +% \futureexpand[\syst_helpers_seventuple_empty_seven_yes\syst_helpers_seventuple_empty_seven_nop} +% +% \def\syst_helpers_seventuple_empty_one_nop +% {\firstargumentfalse +% \secondargumentfalse +% \thirdargumentfalse +% \fourthargumentfalse +% \fifthargumentfalse +% \sixthargumentfalse +% \seventhargumentfalse +% \the\t_syst_aux[][][][][][][]} +% +% \def\syst_helpers_seventuple_empty_two_nop +% {\secondargumentfalse +% \thirdargumentfalse +% \fourthargumentfalse +% \fifthargumentfalse +% \sixthargumentfalse +% \seventhargumentfalse +% \the\t_syst_aux[][][][][][]} +% +% \def\syst_helpers_seventuple_empty_three_nop +% {\thirdargumentfalse +% \fourthargumentfalse +% \fifthargumentfalse +% \sixthargumentfalse +% \seventhargumentfalse +% \the\t_syst_aux[][][][][]} +% +% \def\syst_helpers_seventuple_empty_four_nop +% {\fourthargumentfalse +% \fifthargumentfalse +% \sixthargumentfalse +% \seventhargumentfalse +% \the\t_syst_aux[][][][]} +% +% \def\syst_helpers_seventuple_empty_five_nop +% {\fifthargumentfalse +% \sixthargumentfalse +% \seventhargumentfalse +% \the\t_syst_aux[][][]} +% +% \def\syst_helpers_seventuple_empty_six_nop +% {\sixthargumentfalse +% \seventhargumentfalse +% \the\t_syst_aux[][]} +% +% \def\syst_helpers_seventuple_empty_seven_nop +% {\seventhargumentfalse +% \the\t_syst_aux[]} + +%tolerant\def\syst_single_empty#1\relax[#+]% +\tolerant\def\syst_single_empty#1\relax[#2]% + {\ifarguments + \or\firstargumentfalse + \or\firstargumenttrue + \fi + #1[#2]} + +%tolerant\def\syst_double_empty#1\relax[#2]#*[#3]% +\tolerant\def\syst_double_empty#1\relax[#+]#*[#+]% + {\ifarguments + \or\firstargumentfalse\secondargumentfalse + \or\firstargumenttrue \secondargumentfalse + \or\firstargumenttrue \secondargumenttrue + \fi + #1[#2][#3]} + +%tolerant\def\syst_triple_empty#1\relax[#2]#*[#3]#*[#4]% +\tolerant\def\syst_triple_empty#1\relax[#+]#*[#+]#*[#+]% + {\ifarguments + \or\firstargumentfalse\secondargumentfalse\thirdargumentfalse + \or\firstargumenttrue \secondargumentfalse\thirdargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue + \fi + #1[#2][#3][#4]} + +%tolerant\def\syst_quadruple_empty#1\relax[#2]#*[#3]#*[#4]#*[#5]% +\tolerant\def\syst_quadruple_empty#1\relax[#+]#*[#+]#*[#+]#*[#+]% + {\ifarguments + \or\firstargumentfalse\secondargumentfalse\thirdargumentfalse\fourthargumentfalse + \or\firstargumenttrue \secondargumentfalse\thirdargumentfalse\fourthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumentfalse\fourthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumenttrue + \fi + #1[#2][#3][#4][#5]} + +%\tolerant\def\syst_quintuple_empty#1\relax[#2]#*[#3]#*[#4]#*[#5]#*[#6]% +\tolerant\def\syst_quintuple_empty#1\relax[#+]#*[#+]#*[#+]#*[#+]#*[#+]% + {\ifarguments + \or\firstargumentfalse\secondargumentfalse\thirdargumentfalse\fourthargumentfalse\fifthargumentfalse + \or\firstargumenttrue \secondargumentfalse\thirdargumentfalse\fourthargumentfalse\fifthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumentfalse\fourthargumentfalse\fifthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumentfalse\fifthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumenttrue \fifthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumenttrue \fifthargumenttrue + \fi + #1[#2][#3][#4][#5][#6]} + +%tolerant\def\syst_sixtuple_empty#1\relax[#2]#*[#3]#*[#4]#*[#5]#*[#6]#*[#7]% +\tolerant\def\syst_sixtuple_empty#1\relax[#+]#*[#+]#*[#+]#*[#+]#*[#+]#*[#+]% + {\ifarguments + \or\firstargumentfalse\secondargumentfalse\thirdargumentfalse\fourthargumentfalse\fifthargumentfalse\sixthargumentfalse + \or\firstargumenttrue \secondargumentfalse\thirdargumentfalse\fourthargumentfalse\fifthargumentfalse\sixthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumentfalse\fourthargumentfalse\fifthargumentfalse\sixthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumentfalse\fifthargumentfalse\sixthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumenttrue \fifthargumentfalse\sixthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumenttrue \fifthargumenttrue \sixthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumenttrue \fifthargumenttrue \sixthargumenttrue + \fi + #1[#2][#3][#4][#5][#6][#7]} + +%tolerant\def\syst_seventuple_empty#1\relax[#2]#*[#3]#*[#4]#*[#5]#*[#6]#*[#7]#*[#8]% +\tolerant\def\syst_seventuple_empty#1\relax[#+]#*[#+]#*[#+]#*[#+]#*[#+]#*[#+]#*[#+]% + {\ifarguments + \or\firstargumentfalse\secondargumentfalse\thirdargumentfalse\fourthargumentfalse\fifthargumentfalse\sixthargumentfalse\seventhargumentfalse + \or\firstargumenttrue \secondargumentfalse\thirdargumentfalse\fourthargumentfalse\fifthargumentfalse\sixthargumentfalse\seventhargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumentfalse\fourthargumentfalse\fifthargumentfalse\sixthargumentfalse\seventhargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumentfalse\fifthargumentfalse\sixthargumentfalse\seventhargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumenttrue \fifthargumentfalse\sixthargumentfalse\seventhargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumenttrue \fifthargumenttrue \sixthargumentfalse\seventhargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumenttrue \fifthargumenttrue \sixthargumenttrue \seventhargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumenttrue \fifthargumenttrue \sixthargumenttrue \seventhargumenttrue + \fi + #1[#2][#3][#4][#5][#6][#7][#8]} + +\permanent\protected\def\dosingleempty #1{\syst_single_empty #1\relax} +\permanent\protected\def\dodoubleempty #1{\syst_double_empty #1\relax} +\permanent\protected\def\dotripleempty #1{\syst_triple_empty #1\relax} +\permanent\protected\def\doquadrupleempty #1{\syst_quadruple_empty #1\relax} +\permanent\protected\def\doquintupleempty #1{\syst_quintuple_empty #1\relax} +\permanent\protected\def\dosixtupleempty #1{\syst_sixtuple_empty #1\relax} +\permanent\protected\def\doseventupleempty#1{\syst_seventuple_empty#1\relax} %D Aliases: @@ -2363,157 +2491,213 @@ %D \type {conditional} token. Okay, these macros are not called that often but it %D saves crap when tracing. -%D NB: experimental code in cont-exp.mkiv - -\protected\def\dosinglegroupempty#1% - {\t_syst_aux{#1}% - \futureexpand\bgroup\syst_helpers_single_empty_one_yes\syst_helpers_single_group_empty_one_nop} - -\def\syst_helpers_single_group_empty_one_nop - {\firstargumentfalse - \the\t_syst_aux{}} - -\protected\def\dodoublegroupempty#1% - {\t_syst_aux{#1}% - \futureexpand\bgroup\syst_helpers_group_double_empty_one_yes\syst_helpers_group_double_empty_one_nop} - -\def\syst_helpers_group_double_empty_one_yes#1% - {\firstargumenttrue - \toksapp\t_syst_aux{{#1}}% - \futureexpand\bgroup\syst_helpers_double_empty_two_yes\syst_helpers_group_double_empty_two_nop} - -\def\syst_helpers_group_double_empty_one_nop - {\firstargumentfalse - \secondargumentfalse - \the\t_syst_aux{}{}} - -\def\syst_helpers_group_double_empty_two_nop - {\secondargumentfalse - \the\t_syst_aux{}} - -\protected\def\dotriplegroupempty#1% - {\t_syst_aux{#1}% - \futureexpand\bgroup\syst_helpers_group_triple_empty_one_yes\syst_helpers_group_triple_empty_one_nop} - -\def\syst_helpers_group_triple_empty_one_yes#1% - {\firstargumenttrue - \toksapp\t_syst_aux{{#1}}% - \futureexpand\bgroup\syst_helpers_group_triple_empty_two_yes\syst_helpers_group_triple_empty_two_nop} - -\def\syst_helpers_group_triple_empty_two_yes#1% - {\secondargumenttrue - \toksapp\t_syst_aux{{#1}}% - \futureexpand\bgroup\syst_helpers_triple_empty_three_yes\syst_helpers_group_triple_empty_three_nop} - -\def\syst_helpers_group_triple_empty_one_nop - {\firstargumentfalse - \secondargumentfalse - \thirdargumentfalse - \the\t_syst_aux{}{}{}} - -\def\syst_helpers_group_triple_empty_two_nop - {\secondargumentfalse - \thirdargumentfalse - \the\t_syst_aux{}{}} - -\def\syst_helpers_group_triple_empty_three_nop - {\thirdargumentfalse - \the\t_syst_aux{}} - -\protected\def\doquadruplegroupempty#1% - {\t_syst_aux{#1}% - \futureexpand\bgroup\syst_helpers_group_quadruple_empty_one_yes\syst_helpers_group_quadruple_empty_one_nop} - -\def\syst_helpers_group_quadruple_empty_one_yes#1% - {\firstargumenttrue - \toksapp\t_syst_aux{{#1}}% - \futureexpand\bgroup\syst_helpers_group_quadruple_empty_two_yes\syst_helpers_group_quadruple_empty_two_nop} - -\def\syst_helpers_group_quadruple_empty_two_yes#1% - {\secondargumenttrue - \toksapp\t_syst_aux{{#1}}% - \futureexpand\bgroup\syst_helpers_group_quadruple_empty_three_yes\syst_helpers_group_quadruple_empty_three_nop} - -\def\syst_helpers_group_quadruple_empty_three_yes#1% - {\thirdargumenttrue - \toksapp\t_syst_aux{{#1}}% - \futureexpand\bgroup\syst_helpers_quadruple_empty_four_yes\syst_helpers_group_quadruple_empty_four_nop} - -\def\syst_helpers_group_quadruple_empty_one_nop - {\firstargumentfalse - \secondargumentfalse - \thirdargumentfalse - \fourthargumentfalse - \the\t_syst_aux{}{}{}{}} - -\def\syst_helpers_group_quadruple_empty_two_nop - {\secondargumentfalse - \thirdargumentfalse - \fourthargumentfalse - \the\t_syst_aux{}{}{}} - -\def\syst_helpers_group_quadruple_empty_three_nop - {\thirdargumentfalse - \fourthargumentfalse - \the\t_syst_aux{}{}} - -\def\syst_helpers_group_quadruple_empty_four_nop - {\fourthargumentfalse - \the\t_syst_aux{}} - -\protected\def\doquintuplegroupempty#1% - {\t_syst_aux{#1}% - \futureexpand\bgroup\syst_helpers_group_quintuple_empty_one_yes\syst_helpers_group_quintuple_empty_one_nop} - -\def\syst_helpers_group_quintuple_empty_one_yes#1% - {\firstargumenttrue - \toksapp\t_syst_aux{{#1}}% - \futureexpand\bgroup\syst_helpers_group_quintuple_empty_two_yes\syst_helpers_group_quintuple_empty_two_nop} - -\def\syst_helpers_group_quintuple_empty_two_yes#1% - {\secondargumenttrue - \toksapp\t_syst_aux{{#1}}% - \futureexpand\bgroup\syst_helpers_group_quintuple_empty_three_yes\syst_helpers_group_quintuple_empty_three_nop} - -\def\syst_helpers_group_quintuple_empty_three_yes#1% - {\thirdargumenttrue - \toksapp\t_syst_aux{{#1}}% - \futureexpand\bgroup\syst_helpers_group_quintuple_empty_four_yes\syst_helpers_group_quintuple_empty_four_nop} - -\def\syst_helpers_group_quintuple_empty_four_yes#1% - {\fourthargumenttrue - \toksapp\t_syst_aux{{#1}}% - \futureexpand\bgroup\syst_helpers_quintuple_empty_five_yes\syst_helpers_group_quintuple_empty_five_nop} - -\def\syst_helpers_group_quintuple_empty_one_nop - {\firstargumentfalse - \secondargumentfalse - \thirdargumentfalse - \fourthargumentfalse - \fifthargumentfalse - \the\t_syst_aux{}{}{}{}{}} - -\def\syst_helpers_group_quintuple_empty_two_nop - {\secondargumentfalse - \thirdargumentfalse - \fourthargumentfalse - \fifthargumentfalse - \the\t_syst_aux{}{}{}{}} - -\def\syst_helpers_group_quintuple_empty_three_nop - {\thirdargumentfalse - \fourthargumentfalse - \fifthargumentfalse - \the\t_syst_aux{}{}{}} - -\def\syst_helpers_group_quintuple_empty_four_nop - {\fourthargumentfalse - \fifthargumentfalse - \the\t_syst_aux{}{}} - -\def\syst_helpers_group_quintuple_empty_five_nop - {\fifthargumentfalse - \the\t_syst_aux{}} +% \protected\def\dosinglegroupempty#1% +% {\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_single_empty_one_yes\syst_helpers_single_group_empty_one_nop} +% +% \def\syst_helpers_single_group_empty_one_nop +% {\firstargumentfalse +% \the\t_syst_aux{}} +% +% \protected\def\dodoublegroupempty#1% +% {\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_group_double_empty_one_yes\syst_helpers_group_double_empty_one_nop} +% +% % \def\syst_helpers_group_double_empty_one_yes#1% +% % {\firstargumenttrue +% % \toksapp\t_syst_aux{{#1}}% +% % \futureexpand\bgroup\syst_helpers_double_empty_two_yes\syst_helpers_group_double_empty_two_nop} +% % +% % nicer is: +% +% \def\syst_helpers_group_double_empty_one_yes#+% +% {\firstargumenttrue +% \toksapp\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_double_empty_two_yes\syst_helpers_group_double_empty_two_nop} +% +% \def\syst_helpers_group_double_empty_one_nop +% {\firstargumentfalse +% \secondargumentfalse +% \the\t_syst_aux{}{}} +% +% \def\syst_helpers_group_double_empty_two_nop +% {\secondargumentfalse +% \the\t_syst_aux{}} +% +% \protected\def\dotriplegroupempty#1% +% {\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_group_triple_empty_one_yes\syst_helpers_group_triple_empty_one_nop} +% +% \def\syst_helpers_group_triple_empty_one_yes#+% +% {\firstargumenttrue +% \toksapp\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_group_triple_empty_two_yes\syst_helpers_group_triple_empty_two_nop} +% +% \def\syst_helpers_group_triple_empty_two_yes#+% +% {\secondargumenttrue +% \toksapp\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_triple_empty_three_yes\syst_helpers_group_triple_empty_three_nop} +% +% \def\syst_helpers_group_triple_empty_one_nop +% {\firstargumentfalse +% \secondargumentfalse +% \thirdargumentfalse +% \the\t_syst_aux{}{}{}} +% +% \def\syst_helpers_group_triple_empty_two_nop +% {\secondargumentfalse +% \thirdargumentfalse +% \the\t_syst_aux{}{}} +% +% \def\syst_helpers_group_triple_empty_three_nop +% {\thirdargumentfalse +% \the\t_syst_aux{}} +% +% \protected\def\doquadruplegroupempty#1% +% {\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_group_quadruple_empty_one_yes\syst_helpers_group_quadruple_empty_one_nop} +% +% \def\syst_helpers_group_quadruple_empty_one_yes#+% +% {\firstargumenttrue +% \toksapp\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_group_quadruple_empty_two_yes\syst_helpers_group_quadruple_empty_two_nop} +% +% \def\syst_helpers_group_quadruple_empty_two_yes#+% +% {\secondargumenttrue +% \toksapp\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_group_quadruple_empty_three_yes\syst_helpers_group_quadruple_empty_three_nop} +% +% \def\syst_helpers_group_quadruple_empty_three_yes#+% +% {\thirdargumenttrue +% \toksapp\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_quadruple_empty_four_yes\syst_helpers_group_quadruple_empty_four_nop} +% +% \def\syst_helpers_group_quadruple_empty_one_nop +% {\firstargumentfalse +% \secondargumentfalse +% \thirdargumentfalse +% \fourthargumentfalse +% \the\t_syst_aux{}{}{}{}} +% +% \def\syst_helpers_group_quadruple_empty_two_nop +% {\secondargumentfalse +% \thirdargumentfalse +% \fourthargumentfalse +% \the\t_syst_aux{}{}{}} +% +% \def\syst_helpers_group_quadruple_empty_three_nop +% {\thirdargumentfalse +% \fourthargumentfalse +% \the\t_syst_aux{}{}} +% +% \def\syst_helpers_group_quadruple_empty_four_nop +% {\fourthargumentfalse +% \the\t_syst_aux{}} +% +% \protected\def\doquintuplegroupempty#1% +% {\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_group_quintuple_empty_one_yes\syst_helpers_group_quintuple_empty_one_nop} +% +% \def\syst_helpers_group_quintuple_empty_one_yes#+% +% {\firstargumenttrue +% \toksapp\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_group_quintuple_empty_two_yes\syst_helpers_group_quintuple_empty_two_nop} +% +% \def\syst_helpers_group_quintuple_empty_two_yes#+% +% {\secondargumenttrue +% \toksapp\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_group_quintuple_empty_three_yes\syst_helpers_group_quintuple_empty_three_nop} +% +% \def\syst_helpers_group_quintuple_empty_three_yes#+% +% {\thirdargumenttrue +% \toksapp\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_group_quintuple_empty_four_yes\syst_helpers_group_quintuple_empty_four_nop} +% +% \def\syst_helpers_group_quintuple_empty_four_yes#+% +% {\fourthargumenttrue +% \toksapp\t_syst_aux{#1}% +% \futureexpand\bgroup\syst_helpers_quintuple_empty_five_yes\syst_helpers_group_quintuple_empty_five_nop} +% +% \def\syst_helpers_group_quintuple_empty_one_nop +% {\firstargumentfalse +% \secondargumentfalse +% \thirdargumentfalse +% \fourthargumentfalse +% \fifthargumentfalse +% \the\t_syst_aux{}{}{}{}{}} +% +% \def\syst_helpers_group_quintuple_empty_two_nop +% {\secondargumentfalse +% \thirdargumentfalse +% \fourthargumentfalse +% \fifthargumentfalse +% \the\t_syst_aux{}{}{}{}} +% +% \def\syst_helpers_group_quintuple_empty_three_nop +% {\thirdargumentfalse +% \fourthargumentfalse +% \fifthargumentfalse +% \the\t_syst_aux{}{}{}} +% +% \def\syst_helpers_group_quintuple_empty_four_nop +% {\fourthargumentfalse +% \fifthargumentfalse +% \the\t_syst_aux{}{}} +% +% \def\syst_helpers_group_quintuple_empty_five_nop +% {\fifthargumentfalse +% \the\t_syst_aux{}} + +\tolerant\def\syst_single_group_empty#1\relax#_% + {\ifarguments + \or\firstargumentfalse + \or\firstargumenttrue + \fi + #1#2} + +\tolerant\def\syst_double_group_empty#1\relax#_#*#_% + {\ifarguments + \or\firstargumentfalse\secondargumentfalse + \or\firstargumenttrue \secondargumentfalse + \or\firstargumenttrue \secondargumenttrue + \fi + #1#2#3} + +\tolerant\def\syst_triple_group_empty#1\relax#_#*#_#*#_% + {\ifarguments + \or\firstargumentfalse\secondargumentfalse\thirdargumentfalse + \or\firstargumenttrue \secondargumentfalse\thirdargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue + \fi + #1#2#3#4} + +\tolerant\def\syst_quadruple_group_empty#1\relax#_#*#_#*#_#*#_% + {\ifarguments + \or\firstargumentfalse\secondargumentfalse\thirdargumentfalse\fourthargumentfalse + \or\firstargumenttrue \secondargumentfalse\thirdargumentfalse\fourthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumentfalse\fourthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumenttrue + \fi + #1#2#3#4#5} + +\tolerant\def\syst_quintuple_group_empty#1\relax#_#*#_#*#_#*#_#*#_% + {\ifarguments + \or\firstargumentfalse\secondargumentfalse\thirdargumentfalse\fourthargumentfalse\fifthargumentfalse + \or\firstargumenttrue \secondargumentfalse\thirdargumentfalse\fourthargumentfalse\fifthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumentfalse\fourthargumentfalse\fifthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumentfalse\fifthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumenttrue \fifthargumentfalse + \or\firstargumenttrue \secondargumenttrue \thirdargumenttrue \fourthargumenttrue \fifthargumenttrue + \fi + #1#2#3#4#5#6} + +\permanent\protected\def\dosinglegroupempty #1{\syst_single_group_empty #1\relax} +\permanent\protected\def\dodoublegroupempty #1{\syst_double_group_empty #1\relax} +\permanent\protected\def\dotriplegroupempty #1{\syst_triple_group_empty #1\relax} +\permanent\protected\def\doquadruplegroupempty #1{\syst_quadruple_group_empty #1\relax} +\permanent\protected\def\doquintuplegroupempty #1{\syst_quintuple_group_empty #1\relax} %D These macros can explictly take care of spaces, which means that the next %D definition and calls are valid: @@ -2542,41 +2726,41 @@ %D The next six macros (dedicated to Taco) can conveniently used to select %D arguments. Their names explain their functionality. -\def\firstofoneargument #1{#1} +\permanent\def\firstofoneargument #1{#1} -\def\firstoftwoarguments #1#-{#1} -\def\secondoftwoarguments #-#1{#1} +\permanent\def\firstoftwoarguments #1#-{#1} +\permanent\def\secondoftwoarguments #-#1{#1} -\def\firstofthreearguments #1#-#-{#1} -\def\secondofthreearguments #-#1#-{#1} -\def\thirdofthreearguments #-#-#1{#1} +\permanent\def\firstofthreearguments #1#-#-{#1} +\permanent\def\secondofthreearguments #-#1#-{#1} +\permanent\def\thirdofthreearguments #-#-#1{#1} -\def\firstoffourarguments #1#-#-#-{#1} -\def\secondoffourarguments #-#1#-#-{#1} -\def\thirdoffourarguments #-#-#1#-{#1} -\def\fourthoffourarguments #-#-#-#1{#1} +\permanent\def\firstoffourarguments #1#-#-#-{#1} +\permanent\def\secondoffourarguments #-#1#-#-{#1} +\permanent\def\thirdoffourarguments #-#-#1#-{#1} +\permanent\def\fourthoffourarguments #-#-#-#1{#1} -\def\firstoffivearguments #1#-#-#-#-{#1} -\def\secondoffivearguments #-#1#-#-#-{#1} -\def\thirdoffivearguments #-#-#1#-#-{#1} -\def\fourthoffivearguments #-#-#-#1#-{#1} -\def\fifthoffivearguments #-#-#-#-#1{#1} +\permanent\def\firstoffivearguments #1#-#-#-#-{#1} +\permanent\def\secondoffivearguments #-#1#-#-#-{#1} +\permanent\def\thirdoffivearguments #-#-#1#-#-{#1} +\permanent\def\fourthoffivearguments #-#-#-#1#-{#1} +\permanent\def\fifthoffivearguments #-#-#-#-#1{#1} -\def\firstofsixarguments #1#-#-#-#-#-{#1} -\def\secondofsixarguments#-#1#-#-#-#-{#1} -\def\thirdofsixarguments #-#-#1#-#-#-{#1} -\def\fourthofsixarguments#-#-#-#1#-#-{#1} -\def\fifthofsixarguments #-#-#-#-#1#-{#1} -\def\sixthofsixarguments #-#-#-#-#-#1{#1} +\permanent\def\firstofsixarguments #1#-#-#-#-#-{#1} +\permanent\def\secondofsixarguments#-#1#-#-#-#-{#1} +\permanent\def\thirdofsixarguments #-#-#1#-#-#-{#1} +\permanent\def\fourthofsixarguments#-#-#-#1#-#-{#1} +\permanent\def\fifthofsixarguments #-#-#-#-#1#-{#1} +\permanent\def\sixthofsixarguments #-#-#-#-#-#1{#1} -\protected\def\firstofoneunexpanded #1{#1} +\permanent\protected\def\firstofoneunexpanded #1{#1} -\protected\def\firstoftwounexpanded #1#-{#1} -\protected\def\secondoftwounexpanded #-#1{#1} +\permanent\protected\def\firstoftwounexpanded #1#-{#1} +\permanent\protected\def\secondoftwounexpanded #-#1{#1} -\protected\def\firstofthreeunexpanded #1#-#-{#1} -\protected\def\secondofthreeunexpanded#-#1#-{#1} -\protected\def\thirdofthreeunexpanded #-#-#1{#1} +\permanent\protected\def\firstofthreeunexpanded #1#-#-{#1} +\permanent\protected\def\secondofthreeunexpanded#-#1#-{#1} +\permanent\protected\def\thirdofthreeunexpanded #-#-#1{#1} %D \macros %D {globalletempty,letempty, @@ -2627,7 +2811,7 @@ %D string with the macro \type {\statuswidth}. \setnewconstant\statuswidth 15 -\setnewconstant\statuswrite 128 % \pluscxxviii +%setnewconstant\statuswrite 128 % \pluscxxviii \ifdefined\writestring \else @@ -2671,7 +2855,7 @@ \def\syst_helpers_grab_raw_parameter_next {\expandafterspaces\syst_helpers_grab_raw_parameter} -\protected\def\rawgetparameters#1[#2]#-[#3]% +\protected\def\rawgetparameters#1[#2]#*[#3]% {\def\m_syst_parameter_n{#2}% %\expandafterspaces\syst_helpers_grab_raw_parameter#3\ignorearguments\ignorearguments} \expandafter\expandafterspaces\expandafter\syst_helpers_grab_raw_parameter#3\ignorearguments\ignorearguments} @@ -2687,15 +2871,15 @@ %D can reset this mechanism with \type {\resetglobal}. \protected\def\resetglobal - {\let\redoglobal\relax - \let\dodoglobal\relax} + {\enforced\let\redoglobal\relax + \enforced\let\dodoglobal\relax} \resetglobal \protected\def\doglobal {\ifx\redoglobal\relax - \let\redoglobal\global - \let\dodoglobal\syst_helpers_dodo_global + \enforced\let\redoglobal\global + \enforced\let\dodoglobal\syst_helpers_dodo_global \fi} \def\syst_helpers_dodo_global @@ -2706,47 +2890,10 @@ \let\syst_helpers_redo_global\redoglobal} \def\restoreglobal - {\let\redoglobal\syst_helpers_redo_global - \let\dodoglobal\syst_helpers_dodo_global} + {\enforced\let\redoglobal\syst_helpers_redo_global + \enforced\let\dodoglobal\syst_helpers_dodo_global} -%D A very useful application of this macro is \type {\newif}, \TEX's fake boolean -%D type. Not being a primitive, \type {\global} hopelessly fails here. But a slight -%D adaption of Knuth's original macro permits: -%D -%D \starttyping -%D \doglobal\newif\iftest -%D \stoptyping -%D -%D Of course one can still say: -%D -%D \starttyping -%D \global\testtrue -%D \global\testfalse -%D \stoptyping -%D -%D Apart from the prefixes, a few more \type {\expandafters} are needed: - -% \protected\def\newif#1% uses the original plain \@if -% {\privatescratchcounter\escapechar -% \escapechar\minusone -% \expandafter\expandafter\expandafter -% \redoglobal\expandafter\expandafter\expandafter -% \edef\@if#1{true}{\let\noexpand#1\noexpand\iftrue}% -% \expandafter\expandafter\expandafter -% \redoglobal\expandafter\expandafter\expandafter -% \edef\@if#1{false}{\let\noexpand#1\noexpand\iffalse}% -% \dodoglobal\@if#1{false}% -% \escapechar\privatescratchcounter} - -\protected\def\newif#1% see syst-ini.mkiv - {\let\new_if_saved\newif - \let\newif\new_if_check - \expandafter\redoglobal\expandafter\def\csname\expandafter\newif\csstring#1true\endcsname {\let#1\iftrue }% - \expandafter\redoglobal\expandafter\def\csname\expandafter\newif\csstring#1false\endcsname{\let#1\iffalse}% - \dodoglobal\csname\expandafter\newif\csstring#1false\endcsname - \let\newif\new_if_saved} - -%D Also new: +%D Whatever: \protected\def\define#1% {\ifdefined#1% @@ -2792,13 +2939,9 @@ % % [\test] -\def\s!unexpanded{unexpanded} - \bgroup \obeylines -\glet\stoptexdefinition\relax - -\protected\gdef\starttexdefinition% +\permanent\protected\gdef\starttexdefinition% {\bgroup% \obeylines% \syst_helpers_start_tex_definition} @@ -2807,7 +2950,9 @@ {\catcode\endoflineasciicode\ignorecatcode% \clf_texdefinition_one{#1}} -\gdef\dostarttexdefinition#1\stoptexdefinition% +\aliased\glet\stoptexdefinition\relax + +\permanent\gdef\dostarttexdefinition#1\stoptexdefinition% {\egroup% \clf_texdefinition_two{#1}} @@ -2815,12 +2960,7 @@ % \protected\def\texdefinition#1{\csname\ifcsname#1\endcsname#1\else donothing\fi\endcsname} % todo: a nop cs: char 0 or some corenamespace -\protected\def\texdefinition#1{\begincsname#1\endcsname} - -% This is a first variant, more might be added: - -\protected\def\starttexcode{\unprotect} -\protected\def\stoptexcode {\protect} +\permanent\protected\def\texdefinition#1{\begincsname#1\endcsname} %D \macros %D {newcounter, @@ -3000,14 +3140,24 @@ \let\recurseaction\relax \let\recursestring\empty -\let\syst_helpers_stepwise_next\relax +% \let\syst_helpers_stepwise_next\relax + +% \protected\def\syst_helpers_stepwise_recurse#1#2#3% from to step +% {\ifnum#1>#2\relax +% \expandafter\syst_helpers_stepwise_recurse_nop +% \else +% \def\recurselevel{#1}% +% \doubleexpandafter\syst_helpers_stepwise_recurse_yes\expandafter +% \fi\expandafter{\the\numexpr\recurselevel+#3\relax}{#2}{#3}} \protected\def\syst_helpers_stepwise_recurse#1#2#3% from to step {\ifnum#1>#2\relax - \expandafter\syst_helpers_stepwise_recurse_nop + \expandafter\gobblefourarguments \else \def\recurselevel{#1}% - \doubleexpandafter\syst_helpers_stepwise_recurse_yes\expandafter +% \doubleexpandafter\syst_helpers_stepwise_recurse_yes\expandafter +% \fi\expandafter{\the\numexpr\recurselevel+#3\relax}{#2}{#3}} + \doubleexpandafter\syst_helpers_stepwise_recurse_yes \fi\expandafter{\the\numexpr\recurselevel+#3\relax}{#2}{#3}} \protected\def\syst_helpers_stepwise_recurse_yes @@ -3016,20 +3166,23 @@ \protected\def\syst_helpers_stepwise_reverse#1#2#3% from to step {\ifnum#1<#2\relax - \expandafter\syst_helpers_stepwise_recurse_nop +% \expandafter\syst_helpers_stepwise_recurse_nop + \expandafter\gobblefourarguments \else \def\recurselevel{#1}% \innerrecurse#1\relax \advance\innerrecurse#3\relax - \doubleexpandafter\syst_helpers_stepwise_reverse_yes\expandafter - \fi\expandafter{\the\innerrecurse}{#2}{#3}} +% \doubleexpandafter\syst_helpers_stepwise_reverse_yes\expandafter +% \fi\expandafter{\the\innerrecurse}{#2}{#3}} + \doubleexpandafter\syst_helpers_stepwise_reverse_yes + \fi\expandafter{\the\numexpr\recurselevel+#3\relax}{#2}{#3}} \protected\def\syst_helpers_stepwise_reverse_yes {\syst_helpers_recurse_content \syst_helpers_stepwise_reverse} -\protected\def\syst_helpers_stepwise_exit - {\syst_helpers_stepwise_recurse_nop\relax} +% \protected\def\syst_helpers_stepwise_exit +% {\syst_helpers_stepwise_recurse_nop\relax} \def\doexpandedrecurse#1#2% user macro (also was \doxprecurse) {\ifnum#1>\zerocount @@ -3112,8 +3265,8 @@ \protected\def\doloop#1% {\global\advance\outerrecurse \plusone - \globalpushmacro\recurselevel \globalpushmacro\recurseaction + \globalpushmacro\recurselevel \protected\gdef\recurseaction##1##2{#1}% \let\endofloop\syst_helpers_loop \syst_helpers_loop1}% no \plusone else \recurselevel wrong @@ -3197,32 +3350,54 @@ \globalpopmacro\recurseaction \global\advance\outerrecurse\minusone} -\protected\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4 +% \protected\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4 +% {\global\advance\outerrecurse \plusone +% \globalpushmacro\recurseaction +% \globalpushmacro\recurselevel +% \protected\gdef\recurseaction##1##2{#4}% +% \normalexpanded{\ifcmpnum#3\zerocount +% \ifnum#1<#2\relax\relax % so we catch \number\numexpr xx without \relax's +% \syst_helpers_stepwise_exit +% \else +% \syst_helpers_stepwise_reverse +% \fi +% \or +% \syst_helpers_stepwise_exit +% \or +% \ifnum#2<#1\relax\relax % so we catch \number\numexpr xx without \relax's +% \syst_helpers_stepwise_exit +% \else +% \syst_helpers_stepwise_recurse +% \fi +% \fi{\number#1}{\number#2}{\number#3}}% +% \globalpopmacro\recurselevel +% \globalpopmacro\recurseaction +% \global\advance\outerrecurse\minusone} + +\protected\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4 ... todo: remove unused helpers {\global\advance\outerrecurse \plusone - \globalpushmacro\recurselevel \globalpushmacro\recurseaction + \globalpushmacro\recurselevel \protected\gdef\recurseaction##1##2{#4}% \normalexpanded{\ifcmpnum#3\zerocount \ifnum#1<#2\relax\relax % so we catch \number\numexpr xx without \relax's - \syst_helpers_stepwise_exit + \doubleexpandafter\gobbletwoarguments \else - \syst_helpers_stepwise_reverse + \tripleexpandafter\syst_helpers_stepwise_reverse \fi \or - \syst_helpers_stepwise_exit - \or - \ifnum#2<#1\relax\relax % so we catch \number\numexpr xx without \relax's - \syst_helpers_stepwise_exit - \else - \syst_helpers_stepwise_recurse - \fi - \fi{\number#1}{\number#2}{\number#3}}% + \doubleexpandafter\gobbletwoarguments + \orelse\ifnum#2<#1\relax\relax % so we catch \number\numexpr xx without \relax's + \doubleexpandafter\gobbletwoarguments + \else + \doubleexpandafter\syst_helpers_stepwise_recurse + \fi\normalexpanded{{\number#1}{\number#2}{\number#3}}}% \globalpopmacro\recurselevel \globalpopmacro\recurseaction \global\advance\outerrecurse\minusone} -\protected\def\syst_helpers_stepwise_recurse_nop#0#0#0#0% - {} +% \protected\def\syst_helpers_stepwise_recurse_nop#0#0#0#0% +% {} \newcount\fastloopindex \newcount\fastloopfinal @@ -3502,7 +3677,7 @@ \fi} \protected\def\validassignment #1{\ifhastok={#1}} % can become: {\ifhastok=} as we enforce {} -\protected\def\novalidassignment#1{\ifnum\ifhastok={#1}\zerocount\else\plusone\fi=\plusone} +\protected\def\novalidassignment#1{\ifnum\ifhastok={#1}\zerocount\else\plusone\fi=\plusone} % or use unless %D In \ETEX\ we can use \type {\detokenize} and gain some speed, but in general far %D less that 1\% for \type {\convertargument} and nil for \type {\convertcommand}. @@ -4257,34 +4432,44 @@ \expandafter\gtokspre \fi#2{#1}} -\def\syst_helpers_append_toks_indeed - {\ifx\dodoglobal\relax - \expandafter\toksapp - \else - \resetglobal - \expandafter\gtoksapp - \fi\m_syst_helpers_scratch\t_syst_helpers_scratch} - -\def\syst_helpers_prepend_toks_indeed - {\ifx\dodoglobal\relax - \expandafter\tokspre - \else - \resetglobal - \expandafter\gtokspre - \fi\m_syst_helpers_scratch\t_syst_helpers_scratch} +% \def\syst_helpers_append_toks_indeed +% {\ifx\dodoglobal\relax +% \expandafter\toksapp +% \else +% \resetglobal +% \expandafter\gtoksapp +% \fi\m_syst_helpers_scratch\t_syst_helpers_scratch} +% +% \def\syst_helpers_prepend_toks_indeed +% {\ifx\dodoglobal\relax +% \expandafter\tokspre +% \else +% \resetglobal +% \expandafter\gtokspre +% \fi\m_syst_helpers_scratch\t_syst_helpers_scratch} +% +% \protected\def\appendtoksonce#1\to#2% +% {\let\m_syst_helpers_scratch#2% +% \t_syst_helpers_scratch{#1}% +% \ifhasxtoks\t_syst_helpers_scratch\m_syst_helpers_scratch\else +% \syst_helpers_append_toks_indeed +% \fi} +% +% \protected\def\prependtoksonce#1\to#2% +% {\let\m_syst_helpers_scratch#2% +% \t_syst_helpers_scratch{#1}% +% \ifhasxtoks\t_syst_helpers_scratch\m_syst_helpers_scratch\else +% \syst_helpers_prepend_toks_indeed +% \fi} \protected\def\appendtoksonce#1\to#2% - {\let\m_syst_helpers_scratch#2% - \t_syst_helpers_scratch{#1}% - \ifhasxtoks\t_syst_helpers_scratch\m_syst_helpers_scratch\else - \syst_helpers_append_toks_indeed + {\ifhasxtoks{#1}#2\else + \appendtoks#1\to#2% \fi} \protected\def\prependtoksonce#1\to#2% - {\let\m_syst_helpers_scratch#2% - \t_syst_helpers_scratch{#1}% - \ifhasxtoks\t_syst_helpers_scratch\m_syst_helpers_scratch\else - \syst_helpers_prepend_toks_indeed + {\ifhasxtoks{#1}{#2}\m_syst_helpers_scratch\else + \prependtoks#1\to#2% \fi} %D The test macro: @@ -4681,7 +4866,7 @@ \let\newcommalistelement\empty -\def\syst_helpers_replace_in_comma_list_step#1% +\def\syst_helpers_replace_in_comma_list_step#1% we can use #+ here too {\ifnum\commalistcounter=\c_syst_helpers_comma_list_index\relax \ifempty\newcommalistelement\else \ifempty\m_syst_helpers_comma_list_target @@ -4803,16 +4988,26 @@ \newcount\c_syst_helpers_swapped \let \m_syst_helpers_swapped\relax -\protected\def\swapdimens#1#2{\d_syst_helpers_swapped#1#1#2#2\d_syst_helpers_swapped} -\protected\def\swapskips #1#2{\s_syst_helpers_swapped#1#1#2#2\s_syst_helpers_swapped} -\protected\def\swapcounts#1#2{\c_syst_helpers_swapped#1#1#2#2\c_syst_helpers_swapped} -\protected\def\swapmacros#1#2{\let\m_syst_helpers_swapped#1\let#1#2\let#2\m_syst_helpers_swapped} +% \protected\def\swapdimens#1#2{\d_syst_helpers_swapped#1#1#2#2\d_syst_helpers_swapped} +% \protected\def\swapskips #1#2{\s_syst_helpers_swapped#1#1#2#2\s_syst_helpers_swapped} +% \protected\def\swapcounts#1#2{\c_syst_helpers_swapped#1#1#2#2\c_syst_helpers_swapped} +% \protected\def\swapmacros#1#2{\let\m_syst_helpers_swapped#1\let#1#2\let#2\m_syst_helpers_swapped} + +\aliased\let\swapdimens\swapcsvalues +\aliased\let\swapskips \swapcsvalues +\aliased\let\swapcounts\swapcsvalues +\aliased\let\swapmacros\swapcsvalues \protected\def\globalswapdimens#1#2{\d_syst_helpers_swapped#1\global#1#2\global#2\d_syst_helpers_swapped} \protected\def\globalswapskips #1#2{\s_syst_helpers_swapped#1\global#1#2\global#2\s_syst_helpers_swapped} \protected\def\globalswapcounts#1#2{\c_syst_helpers_swapped#1\global#1#2\global#2\c_syst_helpers_swapped} \protected\def\globalswapmacros#1#2{\let\m_syst_helpers_swapped#1\glet#1#2\glet#2\m_syst_helpers_swapped} +\protected\def\globalswapdimens{\global\swapcsvalues} +\protected\def\globalswapskips {\global\swapcsvalues} +\protected\def\globalswapcounts{\global\swapcsvalues} +\protected\def\globalswapmacros{\global\swapcsvalues} + %D \macros %D {pushmacro,popmacro} %D @@ -5084,24 +5279,39 @@ %D \definesomething[alfa,beta,...][variable=...,...] %D \stoptyping -\let\m_syst_helpers_with_set_command\empty -\let\syst_helpers_with_set_step \relax - -\def\syst_helpers_with_set_double[#1][#2]% - {\doifsomething{#1}% - {\def\syst_helpers_with_set_step##1{\m_syst_helpers_with_set_command[##1][#2]}% +%% \let\syst_helpers_with_set_step\relax +%% \let\m_syst_helpers_with_set_command\empty +%% +%% \def\syst_helpers_with_set_double[#1][#2]% +%% {\doifsomething{#1}% +%% {\def\syst_helpers_with_set_step##1{\m_syst_helpers_with_set_command[##1][#2]}% +%% \processcommalist[#1]\syst_helpers_with_set_step}} +%% +%% \def\syst_helpers_with_set_triple[#1][#2][#3]% +%% {\doifsomething{#1}% +%% {\def\syst_helpers_with_set_step##1{\m_syst_helpers_with_set_command[##1][#2][#3]}% +%% \processcommalist[#1]\syst_helpers_with_set_step}} +%% +%% \def\dodoubleemptywithset #1{\let\m_syst_helpers_with_set_command#1\dodoubleempty \syst_helpers_with_set_double} % \command +%% \def\dodoubleargumentwithset#1{\let\m_syst_helpers_with_set_command#1\dodoubleargument\syst_helpers_with_set_double} % \command +%% +%% \def\dotripleemptywithset #1{\let\m_syst_helpers_with_set_command#1\dotripleempty \syst_helpers_with_set_triple} % \command +%% \def\dotripleargumentwithset#1{\let\m_syst_helpers_with_set_command#1\dotripleargument\syst_helpers_with_set_triple} % \command + +\let\syst_helpers_with_set_step\relax % maybe push pop + +\permanent\tolerant\protected\def\dodoubleemptywithset#1#*[#2]#*[#3]% + {\doifsomething{#2}% + {\def\syst_helpers_with_set_step##1{#1[##1][#3]}% \processcommalist[#1]\syst_helpers_with_set_step}} -\def\syst_helpers_with_set_triple[#1][#2][#3]% - {\doifsomething{#1}% - {\def\syst_helpers_with_set_step##1{\m_syst_helpers_with_set_command[##1][#2][#3]}% +\permanent\tolerant\protected\def\dotripleemptywithset#1#*[#2]#*[#3]#*[#4]% + {\doifsomething{#2}% + {\def\syst_helpers_with_set_step##1{#1[##1][#3][#4]}% \processcommalist[#1]\syst_helpers_with_set_step}} -\def\dodoubleemptywithset #1{\let\m_syst_helpers_with_set_command#1\dodoubleempty \syst_helpers_with_set_double} % \command -\def\dodoubleargumentwithset#1{\let\m_syst_helpers_with_set_command#1\dodoubleargument\syst_helpers_with_set_double} % \command - -\def\dotripleemptywithset #1{\let\m_syst_helpers_with_set_command#1\dotripleempty \syst_helpers_with_set_triple} % \command -\def\dotripleargumentwithset#1{\let\m_syst_helpers_with_set_command#1\dotripleargument\syst_helpers_with_set_triple} % \command +\let\dodoubleargumentwithset\dodoubleemptywithset +\let\dotripleargumentwithset\dotripleemptywithset %D \macros %D {stripcharacters,stripspaces} @@ -5243,20 +5453,35 @@ \let\syst_helpers_process_separated_list_step\relax -\def\syst_helpers_process_separated_list#1]#2[#3]#4% - {\def\syst_helpers_process_separated_list_step##1##2#3% +% \def\syst_helpers_process_separated_list#1]#*[#2]#3% +% {\def\syst_helpers_process_separated_list_step##1##2#2% +% {\def\m_syst_string_one{##2}% suggested by VZ +% \if]##1% +% \let\syst_helpers_process_separated_list_step\relax +% \orelse\ifx\blankspace\m_syst_string_one +% #3{##1}% +% \orelse\if]##2% +% \let\syst_helpers_process_separated_list_step\relax +% \else +% #3{##1##2}% +% \fi +% \syst_helpers_process_separated_list_step}% +% \expandafter\syst_helpers_process_separated_list_step\gobbleoneargument#1#2]#2} + +\def\syst_helpers_process_separated_list#1]#*[#2]#3% + {\def\syst_helpers_process_separated_list_step##1##2#2% {\def\m_syst_string_one{##2}% suggested by VZ \if]##1% - \let\syst_helpers_process_separated_list_step\relax \orelse\ifx\blankspace\m_syst_string_one - #4{##1}% + #3{##1}% + \expandafter\syst_helpers_process_separated_list_step \orelse\if]##2% - \let\syst_helpers_process_separated_list_step\relax \else - #4{##1##2}% + #3{##1##2}% + \expandafter\syst_helpers_process_separated_list_step \fi - \syst_helpers_process_separated_list_step}% - \expandafter\syst_helpers_process_separated_list_step\gobbleoneargument#1#3]#3} + }% + \expandafter\syst_helpers_process_separated_list_step\gobbleoneargument#1#2]#2} \protected\def\processseparatedlist[% {\syst_helpers_process_separated_list\relax} @@ -5655,11 +5880,8 @@ %D %D These two macros savely grab and dispose two arguments. -\def\dogobblesingleempty{\dosingleempty\syst_helpers_gobble_single_empty} -\def\dogobbledoubleempty{\dodoubleempty\syst_helpers_gobble_double_empty} - -\def\syst_helpers_gobble_single_empty [#1]{} -\def\syst_helpers_gobble_double_empty[#1][#2]{} +\tolerant\protected\def\dogobblesingleempty [#-]{} +\tolerant\protected\def\dogobbledoubleempty[#-]#*[#-]{} \let\gobblesingleempty\dogobblesingleempty % also used \let\gobbledoubleempty\dogobbledoubleempty % also used @@ -5872,29 +6094,16 @@ \installsystemnamespace{measure} -\protected\def\definemeasure - {\dodoubleargument\syst_helpers_define_measure} - -\def\syst_helpers_define_measure[#1][#2]% - {\expandafter\def\csname\??measure#1\endcsname{#2}} - -\protected\def\freezemeasure - {\dodoubleargument\syst_helpers_freeze_measure} - -\def\syst_helpers_freeze_measure[#1][#2]% - {\expandafter\edef\csname\??measure#1\endcsname{\the\dimexpr#2}} +\permanent\tolerant\protected\def\definemeasure[#1]#*[#2]{\expandafter \def\csname\??measure#1\endcsname{#2}} +\permanent\tolerant\protected\def\freezemeasure[#1]#*[#2]{\expandafter\edef\csname\??measure#1\endcsname{\the\dimexpr#2}} -\protected\def\setmeasure #1#2{\expandafter\def \csname\??measure#1\endcsname{#2}} % quick way -\protected\def\setgmeasure#1#2{\expandafter\gdef\csname\??measure#1\endcsname{#2}} % quick way -\protected\def\setemeasure#1#2{\expandafter\edef\csname\??measure#1\endcsname{\the\dimexpr#2}} % quick way -\protected\def\setxmeasure#1#2{\expandafter\xdef\csname\??measure#1\endcsname{\the\dimexpr#2}} % quick way +\permanent\protected\def\setmeasure #1#2{\expandafter\def \csname\??measure#1\endcsname{#2}} % quick way +\permanent\protected\def\setgmeasure#1#2{\expandafter\gdef\csname\??measure#1\endcsname{#2}} % quick way +\permanent\protected\def\setemeasure#1#2{\expandafter\edef\csname\??measure#1\endcsname{\the\dimexpr#2}} % quick way +\permanent\protected\def\setxmeasure#1#2{\expandafter\xdef\csname\??measure#1\endcsname{\the\dimexpr#2}} % quick way -\def\measure - {\the\measured} - -\def\measured#1% - %{\dimexpr\ifcsname\??measure#1\endcsname\csname\??measure#1\endcsname\else\zeropoint\fi\relax} - {\dimexpr\ifcsname\??measure#1\endcsname\lastnamedcs\else\zeropoint\fi\relax} +\permanent\def\measure {\the\measured} +\permanent\def\measured#1{\dimexpr\ifcsname\??measure#1\endcsname\lastnamedcs\else\zeropoint\fi\relax} % #2 could be omitted, but we want to support spaces % @@ -5909,31 +6118,17 @@ \installsystemnamespace{quantity} -\protected\def\definequantity - {\dodoubleargument\syst_helpers_define_quantity} - -\def\syst_helpers_define_quantity[#1][#2]% - {\expandafter\def\csname\??quantity#1\endcsname{#2}} - -\protected\def\freezequantity - {\dodoubleargument\syst_helpers_freeze_quantity} - -\def\syst_helpers_freeze_quantity[#1][#2]% - {\expandafter\edef\csname\??quantity#1\endcsname{\the\numexpr#2}} +\permanent\tolerant\protected\def\definequantity[#1]#*[#2]{\expandafter\def \csname\??quantity#1\endcsname{#2}} +\permanent\tolerant\protected\def\freezequantity[#1]#*[#2]{\expandafter\edef\csname\??quantity#1\endcsname{\the\numexpr#2}} -\protected\def\setquantity #1#2{\expandafter\def \csname\??quantity#1\endcsname{#2}} % quick way -\protected\def\setgquantity#1#2{\expandafter\gdef\csname\??quantity#1\endcsname{#2}} % quick way -\protected\def\setequantity#1#2{\expandafter\edef\csname\??quantity#1\endcsname{\the\numexpr#2}} % quick way -\protected\def\setxquantity#1#2{\expandafter\xdef\csname\??quantity#1\endcsname{\the\numexpr#2}} % quick way +\permanent\protected\def\setquantity #1#2{\expandafter\def \csname\??quantity#1\endcsname{#2}} % quick way +\permanent\protected\def\setgquantity#1#2{\expandafter\gdef\csname\??quantity#1\endcsname{#2}} % quick way +\permanent\protected\def\setequantity#1#2{\expandafter\edef\csname\??quantity#1\endcsname{\the\numexpr#2}} % quick way +\permanent\protected\def\setxquantity#1#2{\expandafter\xdef\csname\??quantity#1\endcsname{\the\numexpr#2}} % quick way -\def\quantity - {\the\quantitied} - -\def\quantitied#1% - {\numexpr\ifcsname\??quantity#1\endcsname\lastnamedcs\else\zeropoint\fi\relax} - -\def\directquantity#1% - {\the\numexpr#1\relax} +\permanent\def\quantity {\the\quantitied} +\permanent\def\quantitied #1{\numexpr\ifcsname\??quantity#1\endcsname\lastnamedcs\else\zeropoint\fi\relax} +\permanent\def\directquantity#1{\the\numexpr#1\relax} % let\quantified\quantitied @@ -5946,7 +6141,7 @@ %D \definemeasure[columnwidth][\dividedsize\textwidth{1em}{3}] %D \stoptyping -\def\dividedsize#1#2#3% size gap n +\permanent\def\dividedsize#1#2#3% size gap n {\dimexpr \ifnum\dimexpr#1\relax>\plusone (\dimexpr#1\relax-\numexpr#3-\plusone\relax\dimexpr#2\relax)/#3\else#1% @@ -5958,14 +6153,14 @@ %D %D This is a dirty one: we simply append a unit and discard it when needed. -\def\doifelsedimension#1% +\permanent\def\doifelsedimension#1% {\ifchkdim#1\or \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} -\let\doifdimensionelse\doifelsedimension +\aliased\let\doifdimensionelse\doifelsedimension %D Ok, here's another one, slower but seldom used. This one scans the text. %D @@ -5984,18 +6179,18 @@ %D \NC 1 \NC \doifdimenstringelse {1}{yes}{no} \NC \NR %D \stoptabulate -\let\doifelsedimenstring\doifelsedimension -\let\doifdimenstringelse\doifelsedimenstring +\aliased\let\doifelsedimenstring\doifelsedimension +\aliased\let\doifdimenstringelse\doifelsedimenstring %D \macros %D {comparedimension,comparedimensioneps} %D -%D This is a dirty one: we simply append a unit and discard it when needed. +%D We no longer use the \MKIV\ dirty trick. These are obsolete anyway. \newdimen \roundingeps \roundingeps=10sp \newconstant\compresult -\def\comparedimension#1#2% +\permanent\def\comparedimension#1#2% {\compresult \ifdim#1<#2% \zerocount @@ -6005,7 +6200,7 @@ \plustwo \fi} -\def\comparedimensioneps#1#2% todo: use eps feature +\permanent\def\comparedimensioneps#1#2% todo: use eps feature {\compresult \ifdim\dimexpr#1-#2\relax<\roudingeps \zerocount @@ -6021,62 +6216,52 @@ % \copycsname xxx\endcsname\csname ..\endcsname -\protected\def\copycsname{\expandafter\expandafter\expandafter\let\expandafter\expandafter\csname} +\permanent\protected\def\copycsname{\expandafter\expandafter\expandafter\let\expandafter\expandafter\csname} % \letcscsname \crap \csname ..\endcsname % \letcsnamecs \csname ..\endcsname\crap % \letcsnamecsname\csname ..\endcsname\csname ..\endcsname -\protected\def\letcscsname {\expandafter\let\expandafter} -\protected\def\letcsnamecs {\expandafter\let} -\protected\def\letcsnamecsname{\expandafter\expandafter\expandafter\let\expandafter\expandafter} +\permanent\protected\def\letcscsname {\expandafter\let\expandafter} +\permanent\protected\def\letcsnamecs {\expandafter\let} +\permanent\protected\def\letcsnamecsname{\expandafter\expandafter\expandafter\let\expandafter\expandafter} % another one, add an item to a commalist -\protected\def\addvalue#1#2% cs item +\permanent\protected\def\addvalue#1#2% cs item {\ifcsname#1\endcsname\else\expandafter\let\csname#1\endcsname\empty\fi \normalexpanded{\addtocommalist{#2}\expandafter\noexpand\csname#1\endcsname}} -\def\unspaced#1% - {\syst_helpers_unspaced#1\end} - -\def\syst_helpers_unspaced#1% - {\ifx#1\end - \expandafter\gobbleoneargument - \orelse\ifx#1\blankspace - % go on - \else - #1% - \fi - \syst_helpers_unspaced} - -\protected\def\unspaceargument#1\to#2% - {\privatescratchcounter\catcode\spaceasciicode - \catcode\spaceasciicode\ignorecatcode - \scantextokens{\edef#2{#1}}% - \catcode\spaceasciicode\privatescratchcounter} +%D Are these ever used? Anyway, these variants are somewhat more efficient than +%D the \MKIV variants for larger strings. -\protected\def\unspaceafter#1#2% - {\unspaceargument#2\to\ascii - \expandafter#1\expandafter{\ascii}} +% A variant: +% +% \permanent\def\unspaced#1% +% {\localcontrolled{\begingroup\catcode\spaceasciicode\ignorecatcode}% +% \tokenized{#1}% +% \localcontrolled{\endgroup}} +% +% but we can also do this: -% sometimes handy: +\permanent\def\unspaced#1% + {\tokenized \s!catcodetable \ctdcatcodes {#1}} -\protected\def\doifelsehasspace#1% - {\edef\m_syst_string_one{#1}% - \normalexpanded{\syst_helpers_if_has_space_else#1\space}\empty\relax} +\permanent\protected\def\unspaceargument#1\to#2% + {\edef#2{\tokenized \s!catcodetable \ctdcatcodes {#1}}} -\let\doifhasspaceelse\doifelsehasspace +\protected\def\unspaceafter#1#2% + {\expandafter#1\expandafter{\tokenized \s!catcodetable \ctdcatcodes {#2}}} -\protected\def\syst_helpers_if_has_space_else#1 #2#3\relax % \space\empty\relax - {\ifx\m_syst_string_one\space +\permanent\protected\def\doifelsehasspace#1% + {\expandafter\ifhastok\space{#1}% \expandafter\firstoftwoarguments - \orelse\ifempty#2% - \expandafter\secondoftwoarguments \else - \expandafter\firstoftwoarguments + \expandafter\secondoftwoarguments \fi} +\aliased\let\doifhasspaceelse\doifelsehasspace + % this will replace loadfile once and alike !!! todo \installsystemnamespace{flag} @@ -6544,4 +6729,24 @@ {\edef\m_syst_string_one{#1}% \ifempty\m_syst_string_one} +%D New (also serves as an example): +%D +%D \starttyping +%D \commandflags\defineframed +%D \stoptyping + +\permanent\def\commandflags#1% + {\beginlocalcontrol\begingroup\scratchtoks\emptytoks\donefalse + \ifflags#1= \frozenflagcode\etoksapp\scratchtoks{\ifdone \space\fi frozen}\donetrue\fi + \ifflags#1=\permanentflagcode\etoksapp\scratchtoks{\ifdone \space\fi permanent}\donetrue\fi + \ifflags#1=\immutableflagcode\etoksapp\scratchtoks{\ifdone \space\fi immutable}\donetrue\fi + \ifflags#1=\primitiveflagcode\etoksapp\scratchtoks{\ifdone \space\fi primitive}\donetrue\fi + \ifflags#1= \mutableflagcode\etoksapp\scratchtoks{\ifdone \space\fi mutable}\donetrue\fi + \ifflags#1=\noalignedflagcode\etoksapp\scratchtoks{\ifdone \space\fi noaligned}\donetrue\fi + \ifflags#1= \instanceflagcode\etoksapp\scratchtoks{\ifdone \space\fi instance}\donetrue\fi + %\ifflags#1= \reservedflagcode\etoksapp\scratchtoks{\ifdone \space\fi reserved}\donetrue\fi + \ifflags#1= \tolerantflagcode\etoksapp\scratchtoks{\ifdone \space\fi tolerant}\donetrue\fi + \ifflags#1=\protectedflagcode\etoksapp\scratchtoks{\ifdone \space\fi protected}\donetrue\fi + \expandafter\endgroup\expandafter\endlocalcontrol\the\scratchtoks} + \protect \endinput diff --git a/tex/context/base/mkiv/syst-con.mkxl b/tex/context/base/mkiv/syst-con.mkxl index ffff5aab7..ed4a4f3c5 100644 --- a/tex/context/base/mkiv/syst-con.mkxl +++ b/tex/context/base/mkiv/syst-con.mkxl @@ -20,40 +20,40 @@ %D In addition to the uppercase hex conversion, as needed in math families, we %D occasionally need a lowercase one. -\def\lchexnumber #1{\clf_lchexnumber \numexpr#1\relax} -\def\uchexnumber #1{\clf_uchexnumber \numexpr#1\relax} -\def\lchexnumbers#1{\clf_lchexnumbers\numexpr#1\relax} -\def\uchexnumbers#1{\clf_uchexnumbers\numexpr#1\relax} +\permanent\def\lchexnumber #1{\clf_lchexnumber \numexpr#1\relax} +\permanent\def\uchexnumber #1{\clf_uchexnumber \numexpr#1\relax} +\permanent\def\lchexnumbers#1{\clf_lchexnumbers\numexpr#1\relax} +\permanent\def\uchexnumbers#1{\clf_uchexnumbers\numexpr#1\relax} -\let\hexnumber\uchexnumber +\aliased\let\hexnumber\uchexnumber %D \macros{octnumber} %D %D For \UNICODE\ remapping purposes, we need octal numbers. -\def\octnumber#1{\clf_octnumber\numexpr#1\relax} +\permanent\def\octnumber#1{\clf_octnumber\numexpr#1\relax} %D \macros{hexstringtonumber,octstringtonumber} %D %D This macro converts a two character hexadecimal number into a decimal number, %D thereby taking care of lowercase characters as well. -\def\hexstringtonumber#1{\clf_hexstringtonumber\numexpr#1\relax} -\def\octstringtonumber#1{\clf_octstringtonumber\numexpr#1\relax} +\permanent\def\hexstringtonumber#1{\clf_hexstringtonumber\numexpr#1\relax} +\permanent\def\octstringtonumber#1{\clf_octstringtonumber\numexpr#1\relax} %D \macros{rawcharacter} %D %D This macro can be used to produce proper 8 bit characters that we sometimes need %D in backends and round||trips. -\def\rawcharacter#1{\clf_rawcharacter\numexpr#1\relax} +\permanent\def\rawcharacter#1{\clf_rawcharacter\numexpr#1\relax} %D \macros{twodigits, threedigits} %D %D These macros provides two or three digits always: -\def\twodigits #1{\ifnum #1<10 0\fi\number#1} -\def\threedigits#1{\ifnum#1<100 \ifnum#1<10 0\fi0\fi\number#1} +\permanent\def\twodigits #1{\ifnum #1<10 0\fi\number#1} +\permanent\def\threedigits#1{\ifnum#1<100 \ifnum#1<10 0\fi0\fi\number#1} %D \macros{modulonumber} %D @@ -68,25 +68,20 @@ %D have behaved like \TEX's normal\type {\divide}, then the expression could have %D been somewhat simpler, like \type {#2-(#2/#1)*#1}. This works just as well, but a %D bit more complex. -%D -%D \starttyping -%D \def\modulonumber#1#2{\the\numexpr#2-((((#2+(#1/2))/#1)-1)*#1)\relax} -%D \stoptyping -%D -%D But \unknown\ now we can also do this: -\def\modulonumber#1#2{\the\numexpr#2-(#2:#1)*#1\relax} +%permanent\def\modulonumber#1#2{\the\numexpr#2-((((#2+(#1/2))/#1)-1)*#1)\relax} +%permanent\def\modulonumber#1#2{\the\numexpr#2-(#2:#1)*#1\relax} %D \macros{setcalculatedsin,setcalculatedcos,setcalculatedtan} -\protected\def\setcalculatedsin#1#2{\edef#1{\clf_sind#2}} -\protected\def\setcalculatedcos#1#2{\edef#1{\clf_cosd#2}} -\protected\def\setcalculatedtan#1#2{\edef#1{\clf_tand#2}} +\permanent\protected\def\setcalculatedsin#1#2{\edef#1{\clf_sind#2}} +\permanent\protected\def\setcalculatedcos#1#2{\edef#1{\clf_cosd#2}} +\permanent\protected\def\setcalculatedtan#1#2{\edef#1{\clf_tand#2}} %D \macros{formatted,format} - \def\formatted#1{\ctxcommand{format(#1)}} % not clf -\protected\def\format #1{\ctxcommand{format(#1)}} % not clf +\permanent \def\formatted#1{\ctxcommand{format(#1)}} % not clf +\permanent\protected\def\format #1{\ctxcommand{format(#1)}} % not clf %D The \type {\modulatednumber} and \type {\realnumber} macros have been removed. diff --git a/tex/context/base/mkiv/syst-ini.mkiv b/tex/context/base/mkiv/syst-ini.mkiv index 70a467ec5..b1ba9e0f3 100644 --- a/tex/context/base/mkiv/syst-ini.mkiv +++ b/tex/context/base/mkiv/syst-ini.mkiv @@ -444,6 +444,8 @@ \chardef \pluseight 8 \chardef \plusnine 9 \chardef \plusten 10 +\chardef \pluseleven 11 +\chardef \plustwelve 12 \chardef \plussixteen 16 \chardef \plusfifty 50 \chardef \plushundred 100 @@ -1137,9 +1139,31 @@ \matheqnogapstep\zerocount % for now -%D Experiment: - -\ifdefined\frozen \else \def\frozen{} \let\normalfrozen\frozen \fi +%D For as long as we share code between \MKIV\ and \LMTX\ we need these: + +\ifdefined\overloadmode \else + \newcount\overloadmode + % + \let\frozen \empty + \let\tolerant \empty + \let\overloaded\empty + \let\aliased \empty + \let\permanent \empty + \let\immutable \empty + \let\mutable \empty + \let\instance \empty + \let\noaligned \empty + \let\enforced \empty + % + \let\unletfrozen\gobbleoneargument + \let\letfrozen \gobbleoneargument + \def\letcsname {\expandafter\let \csname} + \def\defcsname {\expandafter\def \csname} + \def\edefcsname {\expandafter\edef\csname} + % + \let\pushoverloadmode\relax + \let\popoverloadmode\relax +\fi %D Now we define a few helpers that we need in a very early stage. We have no %D message system yet but redundant definitions are fatal anyway. @@ -1198,4 +1222,8 @@ \let\unvpack\unvbox \fi +%D Needed: + +\let\nexttoken\relax + \protect \endinput diff --git a/tex/context/base/mkiv/syst-ini.mkxl b/tex/context/base/mkiv/syst-ini.mkxl index 4a6352566..fbce9d780 100644 --- a/tex/context/base/mkiv/syst-ini.mkxl +++ b/tex/context/base/mkiv/syst-ini.mkxl @@ -24,57 +24,57 @@ %D but we're prestine and have no macros defined yet. Abstraction also makes it %D possible to avoid the \type {^^} in the input. -\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 % finally obsolete: \let\other \othercatcode -\chardef\activecatcode 13 % finally obsolete: \let\active\activecatcode -\chardef\commentcatcode 14 -\chardef\invalidcatcode 15 +\immutable\integerdef\escapecatcode 0 +\immutable\integerdef\begingroupcatcode 1 +\immutable\integerdef\endgroupcatcode 2 +\immutable\integerdef\mathshiftcatcode 3 +\immutable\integerdef\alignmentcatcode 4 +\immutable\integerdef\endoflinecatcode 5 +\immutable\integerdef\parametercatcode 6 +\immutable\integerdef\superscriptcatcode 7 +\immutable\integerdef\subscriptcatcode 8 +\immutable\integerdef\ignorecatcode 9 +\immutable\integerdef\spacecatcode 10 +\immutable\integerdef\lettercatcode 11 +\immutable\integerdef\othercatcode 12 % finally obsolete: \let\other \othercatcode +\immutable\integerdef\activecatcode 13 % finally obsolete: \let\active\activecatcode +\immutable\integerdef\commentcatcode 14 +\immutable\integerdef\invalidcatcode 15 %chardef\zeroasciicode 0 -\chardef\tabasciicode 9 -\chardef\newlineasciicode 10 % don't confuse this one with \endoflineasciicode -\chardef\formfeedasciicode 12 -\chardef\endoflineasciicode 13 % somewhat messy but this can be the active \par -\chardef\endoffileasciicode 26 -\chardef\spaceasciicode 32 -\chardef\exclamationmarkasciicode 33 % ! used in namespace protection -\chardef\doublequoteasciicode 34 % " -\chardef\hashasciicode 35 -\chardef\dollarasciicode 36 -\chardef\commentasciicode 37 -\chardef\ampersandasciicode 38 -\chardef\singlequoteasciicode 39 % ' -\chardef\primeasciicode 39 % ' -\chardef\leftparentasciicode 40 -\chardef\rightparentasciicode 41 -\chardef\commaasciicode 44 -\chardef\hyphenasciicode 45 -\chardef\periodasciicode 46 -\chardef\forwardslashasciicode 47 % / -\chardef\colonasciicode 58 -\chardef\lessthanasciicode 60 % < used as alternative verbatim { -\chardef\morethanasciicode 62 % > used as alternative verbatim } -\chardef\questionmarkasciicode 63 % ? used in namespace protection -\chardef\atsignasciicode 64 % @ used in namespace protection -\chardef\backslashasciicode 92 % `\\ -\chardef\circumflexasciicode 94 -\chardef\underscoreasciicode 95 -\chardef\leftbraceasciicode 123 % `\{ -\chardef\barasciicode 124 % `\| -\chardef\rightbraceasciicode 125 % `\} -\chardef\tildeasciicode 126 % `\~ -\chardef\delasciicode 127 +\immutable\integerdef\tabasciicode 9 +\immutable\integerdef\newlineasciicode 10 % don't confuse this one with \endoflineasciicode +\immutable\integerdef\formfeedasciicode 12 +\immutable\integerdef\endoflineasciicode 13 % somewhat messy but this can be the active \par +\immutable\integerdef\endoffileasciicode 26 +\immutable\integerdef\spaceasciicode 32 +\immutable\integerdef\exclamationmarkasciicode 33 % ! used in namespace protection +\immutable\integerdef\doublequoteasciicode 34 % " +\immutable\integerdef\hashasciicode 35 +\immutable\integerdef\dollarasciicode 36 +\immutable\integerdef\commentasciicode 37 +\immutable\integerdef\ampersandasciicode 38 +\immutable\integerdef\singlequoteasciicode 39 % ' +\immutable\integerdef\primeasciicode 39 % ' +\immutable\integerdef\leftparentasciicode 40 +\immutable\integerdef\rightparentasciicode 41 +\immutable\integerdef\commaasciicode 44 +\immutable\integerdef\hyphenasciicode 45 +\immutable\integerdef\periodasciicode 46 +\immutable\integerdef\forwardslashasciicode 47 % / +\immutable\integerdef\colonasciicode 58 +\immutable\integerdef\lessthanasciicode 60 % < used as alternative verbatim { +\immutable\integerdef\morethanasciicode 62 % > used as alternative verbatim } +\immutable\integerdef\questionmarkasciicode 63 % ? used in namespace protection +\immutable\integerdef\atsignasciicode 64 % @ used in namespace protection +\immutable\integerdef\backslashasciicode 92 % `\\ +\immutable\integerdef\circumflexasciicode 94 +\immutable\integerdef\underscoreasciicode 95 +\immutable\integerdef\leftbraceasciicode 123 % `\{ +\immutable\integerdef\barasciicode 124 % `\| +\immutable\integerdef\rightbraceasciicode 125 % `\} +\immutable\integerdef\tildeasciicode 126 % `\~ +\immutable\integerdef\delasciicode 127 %catcode\zeroasciicode \ignorecatcode % `\^^@ ascii null is ignored \catcode\tabasciicode \spacecatcode % `\^^I ascii tab is a blank space @@ -94,7 +94,7 @@ \catcode\tildeasciicode \activecatcode % `\~ tilde is active %catcode\delasciicode \invalidcatcode % `\^^? ascii delete is invalid -\chardef\statuswrite 128 +\chardef\statuswrite 128 % we need to get rid of this one %D First we need to initialization the primitives. Because \CONTEXT\ is already a %D pretty old macro package, we have a couple of issues with respect to primitives. @@ -140,20 +140,20 @@ function tex.enableprimitives() end % so we kind of protect what's there } -\def\space{ } -\def\empty{} +\permanent\def\space{ } +\permanent\def\empty{} -\letcharcode \formfeedasciicode \par % \def ^^L{\par} formfeed -\letcharcode \tildeasciicode \ % tilde -\letcharcode \spaceasciicode \space % space +\permanent\letcharcode \formfeedasciicode \par % \def ^^L{\par} formfeed +\permanent\letcharcode \tildeasciicode \ % tilde +\permanent\letcharcode \spaceasciicode \space % space -\expandafter\def\csname\Uchar\tabasciicode \endcsname {\ } % \def\^^I{\ } tab -\expandafter\def\csname\Uchar\formfeedasciicode \endcsname {\par} % \def\^^L{\par} formfeed -\expandafter\def\csname\Uchar\endoflineasciicode\endcsname {\ } % \def\^^M{\ } return +\permanent\expandafter\def\csname\Uchar\tabasciicode \endcsname {\ } % \def\^^I{\ } tab +\permanent\expandafter\def\csname\Uchar\formfeedasciicode \endcsname {\par} % \def\^^L{\par} formfeed +\permanent\expandafter\def\csname\Uchar\endoflineasciicode\endcsname {\ } % \def\^^M{\ } return %D For now: -\def\gobbleoneargument#1{} % will be defined later on anyway +\permanent\def\gobbleoneargument#-{} % will be defined later on anyway %D First we define a simplified version of the \CONTEXT\ protection mechanism. %D Later we will implement a better variant. @@ -176,8 +176,8 @@ %D Some pretty important definitions: -\let\bgroup={ -\let\egroup=} +\immutable\let\bgroup={ +\immutable\let\egroup=} %D \macros %D {normalbgroup,normalgroup} @@ -207,52 +207,42 @@ % % will be blocked: \newfamily \newlanguage -\countdef \c_syst_min_allocated_register = 52 \c_syst_min_allocated_register = 256 % can change -\countdef \c_syst_max_allocated_register = 53 \c_syst_max_allocated_register = 65535 -\countdef \c_syst_min_allocated_read = 54 \c_syst_min_allocated_read = 0 -\countdef \c_syst_max_allocated_read = 55 \c_syst_max_allocated_read = 1023 -\countdef \c_syst_min_allocated_language = 56 \c_syst_min_allocated_language = 0 -\countdef \c_syst_max_allocated_language = 57 \c_syst_max_allocated_language = 8191 -\countdef \c_syst_min_allocated_insert = 58 \c_syst_min_allocated_insert = 128 -\countdef \c_syst_max_allocated_insert = 59 \c_syst_max_allocated_insert = 254 -\countdef \c_syst_min_allocated_family = 60 \c_syst_min_allocated_family = 128 -\countdef \c_syst_max_allocated_family = 61 \c_syst_max_allocated_family = 255 -\countdef \c_syst_min_allocated_attribute = 62 \c_syst_min_allocated_attribute = 1024 % 0-1023 : private -\countdef \c_syst_min_allocated_write = 63 \c_syst_min_allocated_write = 0 -\countdef \c_syst_max_allocated_write = 64 \c_syst_max_allocated_write = 1023 - -\countdef \c_syst_last_allocated_count = 32 \c_syst_last_allocated_count = \c_syst_min_allocated_register -\countdef \c_syst_last_allocated_dimen = 33 \c_syst_last_allocated_dimen = \c_syst_min_allocated_register -\countdef \c_syst_last_allocated_skip = 34 \c_syst_last_allocated_skip = \c_syst_min_allocated_register -\countdef \c_syst_last_allocated_muskip = 35 \c_syst_last_allocated_muskip = \c_syst_min_allocated_register -\countdef \c_syst_last_allocated_box = 36 \c_syst_last_allocated_box = \c_syst_min_allocated_register -\countdef \c_syst_last_allocated_toks = 37 \c_syst_last_allocated_toks = \c_syst_min_allocated_register -\countdef \c_syst_last_allocated_read = 38 \c_syst_last_allocated_read = \c_syst_min_allocated_read -\countdef \c_syst_last_allocated_write = 39 \c_syst_last_allocated_write = \c_syst_min_allocated_write -\countdef \c_syst_last_allocated_marks = 40 \c_syst_last_allocated_marks = \c_syst_min_allocated_register -\countdef \c_syst_last_allocated_language = 41 \c_syst_last_allocated_language = \c_syst_min_allocated_language % not used in context -\countdef \c_syst_last_allocated_insertion = 42 \c_syst_last_allocated_insertion = \c_syst_min_allocated_insert -\countdef \c_syst_last_allocated_family = 43 \c_syst_last_allocated_family = \c_syst_min_allocated_family % not used in context -\countdef \c_syst_last_allocated_attribute = 44 \c_syst_last_allocated_attribute = \c_syst_min_allocated_attribute % not used in context - -\countdef \c_syst_min_counter_value = 125 \c_syst_min_counter_value = -"7FFFFFFF % beware, we use index 125 at the lua end -\countdef \c_syst_max_counter_value = 126 \c_syst_max_counter_value = "7FFFFFFF % beware, we use index 126 at the lua end - -\countdef \zerocount = 120 \zerocount = 0 -\countdef \plusone = 121 \plusone = 1 -\countdef \minusone = 122 \minusone = -1 - -\countdef \normalpagebox = 127 \normalpagebox = 255 % hardcoded in pdftex/xetex - -% Only to be used by developers in very special cases! - -% \def\lastallocatedcount {\the\c_syst_last_allocated_count} -% \def\lastallocateddimen {\the\c_syst_last_allocated_dimen} -% \def\lastallocatedskip {\the\c_syst_last_allocated_skip} -% \def\lastallocatedmuskip {\the\c_syst_last_allocated_muskip} -% \def\lastallocatedbox {\the\c_syst_last_allocated_dimen} -% \def\lastallocatedtoks {\the\c_syst_last_allocated_toks} -% \def\lastallocatedattribute{\the\c_syst_last_allocated_attribute} +\permanent\countdef \c_syst_min_allocated_register = 52 \c_syst_min_allocated_register = 256 % can change +\permanent\countdef \c_syst_max_allocated_register = 53 \c_syst_max_allocated_register = 65535 +\permanent\countdef \c_syst_min_allocated_read = 54 \c_syst_min_allocated_read = 0 +\permanent\countdef \c_syst_max_allocated_read = 55 \c_syst_max_allocated_read = 1023 +\permanent\countdef \c_syst_min_allocated_language = 56 \c_syst_min_allocated_language = 0 +\permanent\countdef \c_syst_max_allocated_language = 57 \c_syst_max_allocated_language = 8191 +\permanent\countdef \c_syst_min_allocated_insert = 58 \c_syst_min_allocated_insert = 128 +\permanent\countdef \c_syst_max_allocated_insert = 59 \c_syst_max_allocated_insert = 254 +\permanent\countdef \c_syst_min_allocated_family = 60 \c_syst_min_allocated_family = 128 +\permanent\countdef \c_syst_max_allocated_family = 61 \c_syst_max_allocated_family = 255 +\permanent\countdef \c_syst_min_allocated_attribute = 62 \c_syst_min_allocated_attribute = 1024 % 0-1023 : private +\permanent\countdef \c_syst_min_allocated_write = 63 \c_syst_min_allocated_write = 0 +\permanent\countdef \c_syst_max_allocated_write = 64 \c_syst_max_allocated_write = 1023 + +\permanent\countdef \c_syst_last_allocated_count = 32 \c_syst_last_allocated_count = \c_syst_min_allocated_register +\permanent\countdef \c_syst_last_allocated_dimen = 33 \c_syst_last_allocated_dimen = \c_syst_min_allocated_register +\permanent\countdef \c_syst_last_allocated_skip = 34 \c_syst_last_allocated_skip = \c_syst_min_allocated_register +\permanent\countdef \c_syst_last_allocated_muskip = 35 \c_syst_last_allocated_muskip = \c_syst_min_allocated_register +\permanent\countdef \c_syst_last_allocated_box = 36 \c_syst_last_allocated_box = \c_syst_min_allocated_register +\permanent\countdef \c_syst_last_allocated_toks = 37 \c_syst_last_allocated_toks = \c_syst_min_allocated_register +\permanent\countdef \c_syst_last_allocated_read = 38 \c_syst_last_allocated_read = \c_syst_min_allocated_read +\permanent\countdef \c_syst_last_allocated_write = 39 \c_syst_last_allocated_write = \c_syst_min_allocated_write +\permanent\countdef \c_syst_last_allocated_marks = 40 \c_syst_last_allocated_marks = \c_syst_min_allocated_register +\permanent\countdef \c_syst_last_allocated_language = 41 \c_syst_last_allocated_language = \c_syst_min_allocated_language % not used in context +\permanent\countdef \c_syst_last_allocated_insertion = 42 \c_syst_last_allocated_insertion = \c_syst_min_allocated_insert +\permanent\countdef \c_syst_last_allocated_family = 43 \c_syst_last_allocated_family = \c_syst_min_allocated_family % not used in context +\permanent\countdef \c_syst_last_allocated_attribute = 44 \c_syst_last_allocated_attribute = \c_syst_min_allocated_attribute % not used in context + +\permanent\countdef \c_syst_min_counter_value = 125 \c_syst_min_counter_value = -"7FFFFFFF % beware, we use index 125 at the lua end +\permanent\countdef \c_syst_max_counter_value = 126 \c_syst_max_counter_value = "7FFFFFFF % beware, we use index 126 at the lua end + +\immutable\integerdef\zerocount = 0 +\immutable\integerdef\plusone = 1 +\immutable\integerdef\minusone = -1 + +\immutable\integerdef\normalpagebox = 255 % hardcoded in pdftex/xetex % A few traditional allocations (these might go): @@ -270,35 +260,41 @@ %D The allocators share a common helper macro. -\protected\def\newcount {\syst_basics_allocate\c_syst_last_allocated_count \count \countdef \c_syst_max_allocated_register} -\protected\def\newdimen {\syst_basics_allocate\c_syst_last_allocated_dimen \dimen \dimendef \c_syst_max_allocated_register} -\protected\def\newskip {\syst_basics_allocate\c_syst_last_allocated_skip \skip \skipdef \c_syst_max_allocated_register} -\protected\def\newmuskip {\syst_basics_allocate\c_syst_last_allocated_muskip \muskip \muskipdef \c_syst_max_allocated_register} -\protected\def\newbox {\syst_basics_allocate\c_syst_last_allocated_box \box \mathchardef\c_syst_max_allocated_register} -\protected\def\newtoks {\syst_basics_allocate\c_syst_last_allocated_toks \toks \toksdef \c_syst_max_allocated_register} -\protected\def\newread {\syst_basics_allocate\c_syst_last_allocated_read \read \chardef \c_syst_max_allocated_read} -\protected\def\newwrite {\syst_basics_allocate\c_syst_last_allocated_write \write \chardef \c_syst_max_allocated_write} -\protected\def\newmarks {\syst_basics_allocate\c_syst_last_allocated_marks \marks \mathchardef\c_syst_max_allocated_register} -\protected\def\newinsert {\syst_basics_allocate\c_syst_last_allocated_insertion\insert \chardef \c_syst_max_allocated_insert} +\protected\permanent\def\newcount {\syst_basics_allocate\c_syst_last_allocated_count \count \countdef \c_syst_max_allocated_register} +\protected\permanent\def\newdimen {\syst_basics_allocate\c_syst_last_allocated_dimen \dimen \dimendef \c_syst_max_allocated_register} +\protected\permanent\def\newskip {\syst_basics_allocate\c_syst_last_allocated_skip \skip \skipdef \c_syst_max_allocated_register} +\protected\permanent\def\newmuskip {\syst_basics_allocate\c_syst_last_allocated_muskip \muskip \muskipdef \c_syst_max_allocated_register} +\protected\permanent\def\newbox {\syst_basics_allocate\c_syst_last_allocated_box \box \integerdef\c_syst_max_allocated_register} +\protected\permanent\def\newtoks {\syst_basics_allocate\c_syst_last_allocated_toks \toks \toksdef \c_syst_max_allocated_register} +\protected\permanent\def\newread {\syst_basics_allocate\c_syst_last_allocated_read \read \integerdef\c_syst_max_allocated_read} +\protected\permanent\def\newwrite {\syst_basics_allocate\c_syst_last_allocated_write \write \integerdef\c_syst_max_allocated_write} +\protected\permanent\def\newmarks {\syst_basics_allocate\c_syst_last_allocated_marks \marks \integerdef\c_syst_max_allocated_register} +\protected\permanent\def\newinsert {\syst_basics_allocate\c_syst_last_allocated_insertion\insert \chardef \c_syst_max_allocated_insert} +\protected\permanent\def\newlanguage{\syst_basics_allocate\c_syst_last_allocated_language \language\integerdef\c_syst_max_allocated_language} % not needed in context +\protected\permanent\def\newfamily {\syst_basics_allocate\c_syst_last_allocated_family \fam \integerdef\c_syst_max_allocated_family} % not needed in context -%D We don't need these in \CONTEXT: +\aliased\let\newfam\newfamily -\protected\def\newlanguage{\syst_basics_allocate\c_syst_last_allocated_language \language\chardef \c_syst_max_allocated_language} -\protected\def\newfamily {\syst_basics_allocate\c_syst_last_allocated_family \fam \chardef \c_syst_max_allocated_family} - -\let\newfam\newfamily - -\firstvalidlanguage \plusone % so zero is ignored in hyphenation, this might becoem the default +\firstvalidlanguage \plusone % so zero is ignored in hyphenation, this might become the default % Watch out, for the moment we disable the check for already being defined % later we will revert this but first all chardefs must be replaced. -\protected\def\newconstant #1{\ifdefined#1\let#1\undefined\fi\newcount#1} -\protected\def\setnewconstant #1{\ifdefined#1\let#1\undefined\fi\newcount#1#1} % just a number -\protected\def\setconstant {} % dummy, no checking, so it warns +\protected\def\setconstant {} \protected\def\setconstantvalue#1#2{\csname#1\endcsname\numexpr#2\relax} -% maybe setconstant with check +\protected\def\newconstant#1% + {\ifx#1\relax + %\writestatus{!!!!!!!!!!}{\string #1 => RELAX}% + \unletfrozen#1% + \newcount#1% + \orelse\ifdefined#1% + %\writestatus{!!!!!!!!!!}{\string #1 => DEFINED}% + \else + \newcount#1% + \fi} + +\protected\def\setnewconstant#1{\newconstant#1#1} % %D The next definitions are really needed (in \CONTEXT): @@ -312,13 +308,13 @@ \ifdefined\writestatus \else %\protected\def\writestatus#1#2{\immediate\write\statuswrite{#1: #2}} - \protected\def\writestatus#1#2{\message{#1: #2}} + \frozen\protected\def\writestatus#1#2{\message{#1: #2}} \fi \def\syst_basics_allocate_yes#1#2#3#4#5% last class method max name {\ifnum#1<#4\relax \global\advance#1\plusone - \global#3#5=#1\relax + \permanent\global#3#5=#1\relax \else \writestatus{warning}{no room for \string#2\space \string#5\space (max: \number#4)}% \fi} @@ -339,24 +335,23 @@ %D Since the number of chars exceed 256 now, we can use \type {\chardef} instead of %D the more limited \type {\mathchardef}. -\protected\def\newbox {\syst_basics_allocate\c_syst_last_allocated_box \box \chardef\c_syst_max_allocated_register} -\protected\def\newmarks{\syst_basics_allocate\c_syst_last_allocated_marks\marks\chardef\c_syst_max_allocated_register} +% \protected\def\newbox {\syst_basics_allocate\c_syst_last_allocated_box \box \chardef\c_syst_max_allocated_register} +% \protected\def\newmarks{\syst_basics_allocate\c_syst_last_allocated_marks\marks\chardef\c_syst_max_allocated_register} %D Attributes are something very \LUATEX. In \CONTEXT\ you are not supposed to use %D the attributes directly but always allocate then first. For instance attribute~0 %D is reserved for special purposes (this might change). Attributes in the range %D 128-1023 are private and should not be touched. -\let\attributeunsetvalue\c_syst_min_counter_value % used to be \minusone +\permanent\integerdef\attributeunsetvalue\c_syst_min_counter_value % used to be \minusone -\protected\def\newattribute{\syst_basics_allocate\c_syst_last_allocated_attribute\attribute\attributedef\c_syst_max_allocated_register} +% \permanent\protected\def\newattribute{\syst_basics_allocate\c_syst_last_allocated_attribute\attribute\attributedef\c_syst_max_allocated_register} %D Not used by \CONTEXT\ but for instance \PICTEX\ needs it. It's a trick to force %D strings instead of tokens that take more memory. It's a trick to trick to force %D strings. This macro is never used in \CONTEXT. -%protected\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}} -\protected\def\newhelp#1#2{\newtoks#1#1\expandafter{\detokenize{#2}}} +\permanent\protected\def\newhelp#1#2{\newtoks#1#1\expandafter{\detokenize{#2}}} %D \macros %D {scratchcounter, @@ -445,78 +440,79 @@ %D More allocations: -\newskip \zeroskip \zeroskip 0pt plus 0pt minus 0pt -\newdimen \zeropoint \zeropoint 0pt -\newdimen \onepoint \onepoint 1pt -\newdimen \halfapoint \halfapoint 0.5pt -\newdimen \maxdimen \maxdimen 16383.99999pt % 1073741823sp -\newcount \maxcount \maxcount 2147483647 -\newdimen \onebasepoint \onebasepoint 1bp -\newdimen \scaledpoint \scaledpoint 1sp -\newdimen \thousandpoint \thousandpoint 1000pt -\newmuskip\zeromuskip \zeromuskip 0mu -\newmuskip\onemuskip \onemuskip 1mu +\newskip \zeroskip \immutable\zeroskip 0pt plus 0pt minus 0pt +\newdimen \zeropoint \immutable\zeropoint 0pt +\newdimen \onepoint \immutable\onepoint 1pt +\newdimen \halfapoint \immutable\halfapoint 0.5pt +\newdimen \maxdimen \immutable\maxdimen 16383.99999pt % 1073741823sp +\newcount \maxcount \immutable\maxcount 2147483647 +\newdimen \onebasepoint \immutable\onebasepoint 1bp +\newdimen \scaledpoint \immutable\scaledpoint 1sp +\newdimen \thousandpoint \immutable\thousandpoint 1000pt +\newmuskip\zeromuskip \immutable\zeromuskip 0mu +\newmuskip\onemuskip \immutable\onemuskip 1mu -\newmuskip\muquad \muquad 18mu +\newmuskip\muquad \immutable\muquad 18mu -\let\points \onepoint -\let\halfpoint\halfapoint +\aliased\let\points \onepoint +\aliased\let\halfpoint\halfapoint \newtoks \emptytoks -%D And even more: (todo: countdefs 60+) - -%newcount\minusone \minusone -1 -\newcount\minustwo \minustwo -2 -%chardef \zerocount 0 -%chardef \plusone 1 -\chardef \plustwo 2 -\chardef \plusthree 3 -\chardef \plusfour 4 -\chardef \plusfive 5 -\chardef \plussix 6 -\chardef \plusseven 7 -\chardef \pluseight 8 -\chardef \plusnine 9 -\chardef \plusten 10 -\chardef \plussixteen 16 -\chardef \plusfifty 50 -\chardef \plushundred 100 -\chardef \plusonehundred 100 -\chardef \plustwohundred 200 -\chardef \plusfivehundred 500 -\chardef \pluscxxvii 127 -\chardef \pluscxxviii 128 -\chardef \pluscclv 255 -\chardef \pluscclvi 256 -\chardef \plusthousand 1000 -\chardef \plustenthousand 10000 -\chardef \plustwentythousand 20000 -\chardef \medcard 32768 -\chardef \maxcard 65536 % pdftex has less mathchars -\chardef \maxcardminusone 65535 +%D And even more: (todo: countdefs 60+). Watch out, we need a count for a negative constant +%D but can use chardefs for positive ones. Actually, because we have plenty of counters we +%D can also use counts for those. + +%permanent\integerdef\minusone -1 +\permanent\integerdef\minustwo -2 +%permanent\integerdef\zerocount 0 +%permanent\integerdef\plusone 1 +\permanent\integerdef\plustwo 2 +\permanent\integerdef\plusthree 3 +\permanent\integerdef\plusfour 4 +\permanent\integerdef\plusfive 5 +\permanent\integerdef\plussix 6 +\permanent\integerdef\plusseven 7 +\permanent\integerdef\pluseight 8 +\permanent\integerdef\plusnine 9 +\permanent\integerdef\plusten 10 +\permanent\integerdef\pluseleven 11 +\permanent\integerdef\plustwelve 12 +\permanent\integerdef\plussixteen 16 +\permanent\integerdef\plusfifty 50 +\permanent\integerdef\plushundred 100 +\permanent\integerdef\plusonehundred 100 +\permanent\integerdef\plustwohundred 200 +\permanent\integerdef\plusfivehundred 500 +\permanent\integerdef\pluscxxvii 127 +\permanent\integerdef\pluscxxviii 128 +\permanent\integerdef\pluscclv 255 +\permanent\integerdef\pluscclvi 256 +\permanent\integerdef\plusthousand 1000 +\permanent\integerdef\plustenthousand 10000 +\permanent\integerdef\plustwentythousand 20000 +\permanent\integerdef\medcard 32768 +\permanent\integerdef\maxcard 65536 % pdftex has less mathchars +\permanent\integerdef\maxcardminusone 65535 %D \macros %D {doubleexpandafter,tripleexpandafter,expanded,startexpanded} %D %D A few handy shortcuts -\let\singleexpandafter \expandafter -\def\doubleexpandafter{\expandafter\expandafter\expandafter} -\def\tripleexpandafter{\expandafter\doubleexpandafter\expandafter} +\permanent\let\singleexpandafter \expandafter +\permanent\def\doubleexpandafter{\expandafter\expandafter\expandafter} +\permanent\def\tripleexpandafter{\expandafter\doubleexpandafter\expandafter} %D We prefer the more readable variant than in plain \TEX. User should only %D use \type {\emptybox}: \newbox\voidbox % public -\let\normalhbox\hbox -\let\normalvbox\vbox - -\def\unvoidbox{\unhbox\voidbox} -\def\emptybox {\box \voidbox} % used in initializations so no attributes -\def\emptyvbox{\normalvpack{}} % no copy as we need to set attributes -\def\emptyhbox{\normalhpack{}} % no copy as we need to set attributes +\permanent\def\unvoidbox{\unhbox\voidbox} +\permanent\def\emptybox {\box \voidbox} % used in initializations so no attributes +\permanent\def\emptyvbox{\normalvpack{}} % no copy as we need to set attributes +\permanent\def\emptyhbox{\normalhpack{}} % no copy as we need to set attributes \let\leavevmode\unvoidbox % we prefer to use \dontleavehmode @@ -525,7 +521,7 @@ %D %D We need this one soon: -\protected\def\dontcomplain +\permanent\protected\def\dontcomplain {\hbadness\plustenthousand \vbadness\plustenthousand \hfuzz \maxdimen @@ -534,20 +530,21 @@ %D Some expected plain variants follow. We don't reuse registers because we %D don't want clashes. -\let \p@ \onepoint -\let \m@ne \minusone -\let \z@ \zeropoint -\let \@ne \plusone -\let \tw@ \plustwo -\let \thr@@ \plusthree -\let \sixt@@n \plussixteen -\let \@cclv \pluscclv -\let \@cclvi \pluscclvi -\let \voidb@x \voidbox -\newtoks \toks@ % \scratchtoks - -%D We define \type {\newif} a la plain \TEX, but will redefine it later. As -%D Knuth says: +\aliased\let\p@ \onepoint +\aliased\let\m@ne \minusone +\aliased\let\z@ \zeropoint +\aliased\let\@ne \plusone +\aliased\let\tw@ \plustwo +\aliased\let\thr@@ \plusthree +\aliased\let\sixt@@n\plussixteen +\aliased\let\@cclv \pluscclv +\aliased\let\@cclvi \pluscclvi +\aliased\let\voidb@x\voidbox + +\newtoks \toks@ %scratchtoks + +%D We define \type {\newif} a la plain \TEX, but will redefine it later. As Knuth +%D says: %D %D \startnarrower %D And here's a different sort of allocation: for example, @@ -588,19 +585,14 @@ % \protected\def\new_if_cs#1#2% % {\csname\expandafter\newif\csstring#1#2\endcsname} % -% We wrap all into one macro: +% We wrap all into one macro (the frozen stuff adds 10% runtime): -\protected\def\newif#1% - {\let\new_if_saved\newif - \let\newif\new_if_check - \expandafter\def\csname\expandafter\newif\csstring#1true\endcsname {\let#1\iftrue }% - \expandafter\def\csname\expandafter\newif\csstring#1false\endcsname{\let#1\iffalse}% - \csname\expandafter\newif\csstring#1false\endcsname - \let\newif\new_if_saved} +\permanent\protected\def\newif#1% + {\permanent\protected\expandafter\gdef\csname\expandafter\new_if_check\csstring#1true\endcsname {\overloaded\frozen\let#1\iftrue }% + \permanent\protected\expandafter\gdef\csname\expandafter\new_if_check\csstring#1false\endcsname{\overloaded\frozen\let#1\iffalse}% + \csname\expandafter\new_if_check\csstring#1false\endcsname} -\bgroup - \normalexpanded{\gdef\noexpand\new_if_check\string i\string f{}} -\egroup +\normalexpanded{\gdef\noexpand\new_if_check\string i\string f{}} %D Let's test this one: @@ -611,22 +603,22 @@ %D A few shortcuts: -\protected\def\udef {\protected\def } -\protected\def\ugdef{\protected\gdef} -\protected\def\uedef{\protected\edef} -\protected\def\uxdef{\protected\xdef} +\permanent\protected\def\udef {\protected\def } +\permanent\protected\def\ugdef{\protected\gdef} +\permanent\protected\def\uedef{\protected\edef} +\permanent\protected\def\uxdef{\protected\xdef} %D For a while we keep the following, as systems like tikz need it. Best %D not use that one \CONTEXT. -\let\active\activecatcode +\aliased\let\active\activecatcode %D Constants to be used with \type {\interactionmode}. -\chardef\batchmodecode \zerocount -\chardef\nonstopmodecode \plusone -\chardef\scrollmodecode \plustwo -\chardef\errorstopmodecode \plusthree +\permanent\integerdef\batchmodecode \zerocount +\permanent\integerdef\nonstopmodecode \plusone +\permanent\integerdef\scrollmodecode \plustwo +\permanent\integerdef\errorstopmodecode \plusthree %D Of course we want even bigger log files, so we copied this from the \ETEX\ %D source files. @@ -646,7 +638,7 @@ % no longer \errorstopmode cf. plain tex 3.141592653 -\protected\def\tracingall +\permanent\protected\def\tracingall {\tracingonline \plusone \tracingcommands \plusthree \tracingmacros \plustwo @@ -659,16 +651,18 @@ \tracingnesting \plustwo \tracingassigns \plustwo \tracingmath \plusone + \tracingalignments\plusone \showboxbreadth \maxcount \showboxdepth \maxcount} -\protected\def\loggingall +\permanent\protected\def\loggingall {\tracingall \tracingonline \zerocount} -\protected\def\tracingnone +\permanent\protected\def\tracingnone {\showboxdepth \plusthree \showboxbreadth \plusfive + \tracingalignments\zerocount \tracingmath \zerocount \tracingassigns \zerocount \tracingnesting \zerocount @@ -691,31 +685,31 @@ \tracingstats\plusone -%D Here we also save \type {\input}, more will be saved later. - -\ifdefined\normalinput \else \let\normalinput\input \fi - -%D We don't like outer commands, and we always want access to the original -%D \type {\input} primitive. - -\let\normalouter\outer \def\outer{} % no longer \relax +%D This is only used when we load \CONTEXT: -%D To circumvent dependencies, we can postpone certain initializations to -%D dumping time, by appending them to the \type {\everydump} token register. - -\ifdefined\normaldump \else \let\normaldump\dump \fi +\permanent\def\pushoverloadmode + {\edef\popoverloadmode{\overloadmode\the\overloadmode}% + \overloadmode\zerocount} \newtoks\everydump -\def\dump{\the\everydump\global\everydump\emptytoks\glet\dump\relax\normaldump} - -%D The same applies for the startup actions. +\pushoverloadmode -\ifdefined\normaleveryjob \else \let\normaleveryjob\everyjob \fi +\protected\def\dump + {\the\everydump + \global\everydump\emptytoks + \pushoverloadmode + \glet\dump\relax + \popoverloadmode + %let\pushoverloadmode\relax + %let\popoverloadmode\relax +% \tracingall + \normaldump} -\let\everyjob\relax \newtoks\everyjob +\permanent\protected\def\input + {\normalinput} -\normaleveryjob{\the\everyjob} +\popoverloadmode %D \macros %D {newconditional, @@ -754,27 +748,27 @@ %D Such an implementation gives problems with nested conditionals. The next %D implementation is about as fast and just as straightforward: -\let\conditionalfalse\plusone % maybe we will have a dedicated count/chardef -\let\conditionaltrue \zerocount % maybe we will have a dedicated count/chardef +\aliased\let\conditionalfalse\plusone % maybe we will have a dedicated count/chardef +\aliased\let\conditionaltrue \zerocount % maybe we will have a dedicated count/chardef -\protected\def\settrue #1{\let#1\conditionaltrue } -\protected\def\setfalse#1{\let#1\conditionalfalse} +\permanent\protected\def\settrue #1{\integerdef#1\conditionaltrue } +\permanent\protected\def\setfalse#1{\integerdef#1\conditionalfalse} -\protected\def\settruevalue #1{\expandafter\let\csname#1\endcsname\conditionaltrue } -\protected\def\setfalsevalue#1{\expandafter\let\csname#1\endcsname\conditionalfalse} +\permanent\protected\def\settruevalue #1{\expandafter\integerdef\csname#1\endcsname\conditionaltrue } +\permanent\protected\def\setfalsevalue#1{\expandafter\integerdef\csname#1\endcsname\conditionalfalse} -\let\newconditional\setfalse -\let\ifconditional \ifcase +\aliased\let\newconditional\setfalse +\aliased\let\ifconditional \ifcase -\let\then\relax % so that we can say: \ifnum1>2\then -) +\aliased\let\then\relax % so that we can say: \ifnum1>2\then -) -\def\truecondition {\iftrue} -\def\falsecondition{\iffalse} +\permanent\def\truecondition {\iftrue} +\permanent\def\falsecondition{\iffalse} % This one has to be unprotected otherwise we get a files-ends-to-soon but it's ok % as conditions expand anyway. -\def\quitcondition{\orelse\iffalse} +\permanent\def\quitcondition{\orelse\iffalse} %D \macros %D {newmacro,setnewmacro,newfraction} @@ -782,13 +776,13 @@ %D Let's be complete and also introduce some definers. These are not mandate %D but handy for grepping. -\protected\def\newmacro #1{\let#1\empty} -\protected\def\setnewmacro#1{\let#1} +\permanent\protected\def\newmacro #1{\let#1\empty} +\permanent\protected\def\setnewmacro#1{\let#1} -\def\!!zerocount{0} -\def\!!plusone {1} +\permanent\protected\def\newfraction#1{\let#1\!!plusone} -\protected\def\newfraction#1{\let#1\!!plusone} +\def\!!zerocount{0} % later redefined +\def\!!plusone {1} % later redefined %D It would be handy to have a primitive \type {\unless\ifcase} because then we %D could use nicer values. Anyhow, this conditional code used to be in the \type @@ -804,7 +798,7 @@ %D \ifzeropt \somedimen ... \else ... \fi %D \stoptyping -\let\ifzeropt\ifcase +\aliased\let\ifzeropt\ifcase % these token list helpers might move to syst-aux.mkiv % @@ -815,14 +809,14 @@ \newtoks\t_syst_toks_temp \let\m_syst_toks_temp\t_syst_toks_temp -\protected\def\appendtotoks #1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_append_l \t_syst_toks_temp=} -\protected\def\prependtotoks#1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_prepend_l\t_syst_toks_temp=} +\permanent\protected\def\appendtotoks #1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_append_l \t_syst_toks_temp=} +\permanent\protected\def\prependtotoks#1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_prepend_l\t_syst_toks_temp=} % \def\syst_toks_append {\m_syst_toks_temp\expandafter\expandafter\expandafter{\expandafter\the\expandafter\m_syst_toks_temp\the\t_syst_toks_temp}}} % \def\syst_toks_prepend{\m_syst_toks_temp\expandafter\expandafter\expandafter{\expandafter\the\expandafter\t_syst_toks_temp\the\m_syst_toks_temp}}} -\protected\def\globalappendtotoks #1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_append_g \t_syst_toks_temp=} -\protected\def\globalprependtotoks#1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_prepend_g\t_syst_toks_temp=} +\permanent\protected\def\globalappendtotoks #1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_append_g \t_syst_toks_temp=} +\permanent\protected\def\globalprependtotoks#1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_prepend_g\t_syst_toks_temp=} \def\syst_toks_append_l {\normalexpanded{\m_syst_toks_temp{\the\m_syst_toks_temp\the\t_syst_toks_temp}}} \def\syst_toks_prepend_l{\normalexpanded{\m_syst_toks_temp{\the\t_syst_toks_temp\the\m_syst_toks_temp}}} @@ -830,14 +824,14 @@ \def\syst_toks_append_g {\global\syst_toks_append_l } \def\syst_toks_prepend_g{\global\syst_toks_prepend_l} -\protected\def\addtotoks #1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_add_l\let\next} -\protected\def\globaladdtotoks#1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_add_g\let\next} +\permanent\protected\def\addtotoks #1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_add_l\let\next} +\permanent\protected\def\globaladdtotoks#1{\let\m_syst_toks_temp#1\afterassignment\syst_toks_add_g\let\next} \def\syst_toks_add_l{\m_syst_toks_temp\expandafter\bgroup\the\m_syst_toks_temp} \def\syst_toks_add_g{\global\syst_toks_add_l} -\protected\def\addtotokscs #1#2{#1{\the#1#2}} % saves a few bytes -\protected\def\globaladdtotokscs#1#2{\global#1{\the#1#2}} % saves a few bytes +\permanent\protected\def\addtotokscs #1#2{#1{\the#1#2}} % saves a few bytes +\permanent\protected\def\globaladdtotokscs#1#2{\global#1{\the#1#2}} % saves a few bytes %D \macros %D {begcsname} @@ -846,7 +840,7 @@ % \def\begcsname#1\endcsname{\ifcsname#1\endcsname\csname#1\endcsname\fi} -\let\begcsname\begincsname +\aliased\let\begcsname\begincsname %D Now come a few macros that might be needed in successive loading. We redefine the %D \type {\par} primitive pretty soon so that we get the equivalents right. @@ -863,13 +857,13 @@ % {\everypar \emptytoks % \everyendpar\emptytoks} -\protected\def\reseteverypar +\permanent\protected\def\reseteverypar {\everypar\emptytoks} -\let\endgraf\par -\let\endline\cr +\aliased\let\endgraf\par % plain, a kind of funny name +%aliased\let\endline\cr % plain, not needed and probably also confusing -\protected\def\null{\hpack{}} +\permanent\protected\def\null{\hpack{}} %D The following two might be overloaded later on but some modules need then %D earlier. These functionality is reflected in the name and will not change. @@ -885,8 +879,8 @@ % \obeyspaces\glet =\space% % \egroup -\def\obeylines {\catcode\endoflineasciicode\activecatcode\letcharcode\endoflineasciicode\par} -\def\obeyspaces{\catcode\spaceasciicode \activecatcode\letcharcode\spaceasciicode \space} +\def\obeylines {\catcode\endoflineasciicode\activecatcode\letcharcode\endoflineasciicode\par } % check if these can be \permanent +\def\obeyspaces{\catcode\spaceasciicode \activecatcode\letcharcode\spaceasciicode \space} % check if these can be \permanent % %D A constant: % @@ -897,12 +891,12 @@ %D get. Beware: this macro does not support nested loops. We use a namespace %D prefix \type {@@pln}. -\def\loop#1\repeat{\def\@@plnbody{#1}\@@plniterate} % might go +\permanent\def\loop#1\repeat{\def\@@plnbody{#1}\@@plniterate} % might go %D The following makes \type {\loop} \unknown\ \type {\if} \unknown\ \type %D {\repeat} skippable (clever trick): -\let\repeat\fi % so both \loop and \repeat are reserved words! +\permanent\let\repeat\fi % so both \loop and \repeat are reserved words! %D The original (no \type {@@pln} there): %D @@ -927,12 +921,12 @@ %D Although we don't add pagenumbers yet we alias the default register used %D for counting pages: -\countdef\pageno\zerocount \pageno\plusone % first page is number 1 +\permanent\countdef\pageno\zerocount \pageno\plusone % first page is number 1 %D Beside the raw counter \type {\pageno} the \type {\folio} macro provides %D the value. -\def\folio{\the\pageno} % kind of expected and therefore reserved +\permanent\def\folio{\the\pageno} % kind of expected and therefore reserved %D The following registers are kind of standard and (for the moment) we define %D them here. This might change. @@ -948,11 +942,11 @@ %D Sometimes kerns make more sense than glue but we need to be in the %D right mode: -\protected\def\vkern {\ifhmode\par \fi\kern} -\protected\def\hkern {\ifvmode\dontleavehmode\fi\kern} +\permanent\protected\def\vkern {\ifhmode\par \fi\kern} +\permanent\protected\def\hkern {\ifvmode\dontleavehmode\fi\kern} -\protected\def\vpenalty{\ifhmode\par \fi\penalty} -\protected\def\hpenalty{\ifvmode\dontleavehmode\fi\penalty} +\permanent\protected\def\vpenalty{\ifhmode\par \fi\penalty} +\permanent\protected\def\hpenalty{\ifvmode\dontleavehmode\fi\penalty} %D Again a few kind-of-extensions the core. These come from plain \TEX\ but %D are probably not used in \CONTEXT. @@ -960,19 +954,19 @@ \newskip \hideskip \hideskip = -1000pt plus 1fill \newskip \centering \centering = 0pt plus 1000pt minus 1000pt -\def\hidewidth % for alignment entries that can stick out +\permanent\def\hidewidth % for alignment entries that can stick out {\hskip\hideskip} -\def\ialign % initialized \halign +\permanent\def\ialign % initialized \halign {\everycr\emptytoks \tabskip\zeroskip \halign} \newcount \mscount -\def\spanomit{\span\omit} % bypass error message +\permanent\def\spanomit{\span\omit} % bypass error message -\def\multispan#1% +\permanent\def\multispan#1% {\omit \mscount#1\relax \loop @@ -980,30 +974,31 @@ \spanomit \advance\mscount\minusone \repeat} -\let\nopdfcompression \relax -\let\onlypdfobjectcompression\relax -\let\maximumpdfcompression \relax -\let\normalpdfcompression \relax +\let\nopdfcompression \relax % later +\let\onlypdfobjectcompression\relax % later +\let\maximumpdfcompression \relax % later +\let\normalpdfcompression \relax % later %D Basic status stuff. -\newif\ifproductionrun +% \newif\ifproductionrun % already defined %D For those who expect this \unknown -\ifx\fmtname \undefined \def\fmtname {ConTeXt Initial TeX} \fi -\ifx\fmtversion\undefined \def\fmtversion{3.1415926} \fi +\ifx\fmtname \undefined \immutable\def\fmtname {ConTeXt Initial TeX} \fi +\ifx\fmtversion\undefined \immutable\def\fmtversion{3.1415926} \fi %D A few bonus macros: -\def\modulonumber#1#2{\the\numexpr#2-((((#2+(#1/2))/#1)-1)*#1)\relax} -\def\dividenumber#1#2{\the\numexpr(#2-(#1/2))/#1\relax} +%permanent\def\modulonumber#1#2{\the\numexpr#2-((((#2+(#1/2))/#1)-1)*#1)\relax} +\permanent\def\modulonumber#1#2{\the\numexpr#2-(#2:#1)*#1\relax} +\permanent\def\dividenumber#1#2{\the\numexpr(#2-(#1/2))/#1\relax} %D These could be set at the \LUA\ end instead: -\edef\texenginename {\directlua{tex.print(LUATEXENGINE)}} -\edef\texengineversion {\directlua{tex.print(LUATEXVERSION)}} -\edef\texenginefunctionality{\directlua{tex.print(LUATEXFUNCTIONALITY)}} +\immutable\edef\texenginename {\directlua{tex.print(LUATEXENGINE)}} +\immutable\edef\texengineversion {\directlua{tex.print(LUATEXVERSION)}} +\immutable\edef\texenginefunctionality{\directlua{tex.print(LUATEXFUNCTIONALITY)}} %D We have no reason not to enable this: @@ -1012,12 +1007,12 @@ %D We only can set this one via directives (system.synctex) and we only support %D the context variant. This will go away completely. -\newcount\synctex \let\normalsynctex\synctex +\newcount\synctex % \let\normalsynctex\synctex %D We get rid of the funny \TEX\ offset defaults of one inch by setting them to zero. -\voffset\zeropoint \let\voffset\relax \newdimen\voffset \let\normalvoffset\voffset -\hoffset\zeropoint \let\hoffset\relax \newdimen\hoffset \let\normalhoffset\hoffset +% \voffset\zeropoint \overloaded\let\voffset\relax \newdimen\voffset \let\normalvoffset\voffset +% \hoffset\zeropoint \overloaded\let\hoffset\relax \newdimen\hoffset \let\normalhoffset\hoffset \matheqnogapstep\zerocount % for now @@ -1029,37 +1024,54 @@ \def\v_interfaces_prefix_template_system{\number \c_syst_helpers_n_of_namespaces>>} %def\v_interfaces_prefix_template_system{\characters\c_syst_helpers_n_of_namespaces>>} % no \characters yet -\protected\def\installsystemnamespace#1% +\protected\def\installsystemnamespace#1% will be redefined {\ifcsname ??#1\endcsname \immediate\write\statuswrite{fatal error: duplicate system namespace '#1'}% - \expandafter\normalend \else \global\advance\c_syst_helpers_n_of_namespaces\plusone - \expandafter\edef\csname ??#1\endcsname{\v_interfaces_prefix_template_system}% + \immutable\expandafter\edef\csname ??#1\endcsname{\v_interfaces_prefix_template_system}% \fi} %D It makes more sense to have these here: -\let\normalsuperscript \Usuperscript -\let\normalsubscript \Usubscript -\let\normalnosuperscript\Unosuperscript -\let\normalnosubscript \Unosubscript -\let\normalstartimath \Ustartmath -\let\normalstopimath \Ustopmath -\let\normalstartdmath \Ustartdisplaymath -\let\normalstopdmath \Ustopdisplaymath +\aliased\let\normalsuperscript \Usuperscript +\aliased\let\normalsubscript \Usubscript +\aliased\let\normalnosuperscript\Unosuperscript +\aliased\let\normalnosubscript \Unosubscript +\aliased\let\normalstartimath \Ustartmath +\aliased\let\normalstopimath \Ustopmath +\aliased\let\normalstartdmath \Ustartdisplaymath +\aliased\let\normalstopdmath \Ustopdisplaymath %D Also better here: -\def\wildcardsymbol{*} +\immutable\def\wildcardsymbol{*} %D For a while we will keep these useless numbers as for instance tikz checks for them: -\frozen\chardef\eTeXversion 2 -\frozen\def \eTeXrevision {2} +\immutable\integerdef\eTeXversion 2 +\immutable\def \eTeXrevision {2} %D Experiment: \glyphdimensionsmode\plusone +%D Just in case users use this: + +\aliased\let\immediateassign \immediate +\aliased\let\immediateassigned\localcontrolled + +%D Needed: + +\mutable\let\nexttoken \relax +\mutable\let\next \relax +\mutable\let\nextnext \relax +\mutable\let\nextnextnext\relax + +%D For now here: will get a proper solution + +\pushoverloadmode +\mutable\let\par\par +\popoverloadmode + \protect \endinput diff --git a/tex/context/base/mkiv/syst-lua.lmt b/tex/context/base/mkiv/syst-lua.lmt index b1735d44e..673c99ae3 100644 --- a/tex/context/base/mkiv/syst-lua.lmt +++ b/tex/context/base/mkiv/syst-lua.lmt @@ -41,10 +41,6 @@ local char_given_code = cmd.char_given local math_given_code = cmd.math_given local xmath_given_code = cmd.xmath_given local some_item_code = cmd.some_item ------ call_code = cmd.call ------ the_code = cmd.the ------ convert_code = cmd.convert ------ lua_expandable_call_code = cmd.lua_expandable_call local getdimen = tex.getdimen local getglue = tex.getglue @@ -410,13 +406,28 @@ do end, } + local boolean_value = tokens.values.boolean + implement { name = "ifeof", public = true, usage = "condition", - actions = function(prefix) + actions = function() local n = scaninteger() - return tokens.values.boolean, not channels[n] + return boolean_value, not channels[n] + end, + } + + -- for the moment here: + + local getnest = tex.getnest + + implement { + name = "ifmvl", + public = true, + usage = "condition", + actions = function() + return boolean_value, getnest("ptr") == 0 end, } diff --git a/tex/context/base/mkiv/syst-lua.mkiv b/tex/context/base/mkiv/syst-lua.mkiv index 6ad8f5a99..f0902eaf5 100644 --- a/tex/context/base/mkiv/syst-lua.mkiv +++ b/tex/context/base/mkiv/syst-lua.mkiv @@ -57,8 +57,8 @@ \def\expdoifelsecommon#1#2{\clf_doifelsecommon{#1}{#2}} \def\expdoifelseinset #1#2{\clf_doifelseinset {#1}{#2}} -\def\expdoifcommonelse\expdoifelsecommon -\def\expdoifinsetelse \expdoifelseinset +\let\expdoifcommonelse\expdoifelsecommon +\let\expdoifinsetelse \expdoifelseinset %D We define these here, just in case. This permits \typefile {self} otherwise %D nested b|/|e sep problems. diff --git a/tex/context/base/mkiv/syst-lua.mkxl b/tex/context/base/mkiv/syst-lua.mkxl index d04e78392..615562200 100644 --- a/tex/context/base/mkiv/syst-lua.mkxl +++ b/tex/context/base/mkiv/syst-lua.mkxl @@ -15,48 +15,48 @@ \unprotect -\def\expdoifelse#1#2{\clf_doifelsesame{#1}{#2}} -\def\expdoif #1#2{\clf_doifsame {#1}{#2}} -\def\expdoifnot #1#2{\clf_doifnotsame {#1}{#2}} +\permanent\def\expdoifelse#1#2{\clf_doifelsesame{#1}{#2}} +\permanent\def\expdoif #1#2{\clf_doifsame {#1}{#2}} +\permanent\def\expdoifnot #1#2{\clf_doifnotsame {#1}{#2}} %D Here is variant using a brainwave of the 12\high{+} hour \quotation {Long Road %D Out of Eden}\footnote {Eden being Backo\TeX\ 2018, where the virtues of the \type %D {\expanded} primitive were mentioned in talks.} trip. For now I don't really see %D other useful applications. -\def\expandeddoifelse#1#2{\iftok{#1}{#2}\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi} -\def\expandeddoif #1#2{\iftok{#1}{#2}\expandafter\firstofoneargument \else\expandafter\gobbleoneargument \fi} -\def\expandeddoifnot #1#2{\iftok{#1}{#2}\expandafter\gobbleoneargument \else\expandafter\firstofoneargument \fi} +\permanent\def\expandeddoifelse#1#2{\iftok{#1}{#2}\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi} +\permanent\def\expandeddoif #1#2{\iftok{#1}{#2}\expandafter\firstofoneargument \else\expandafter\gobbleoneargument \fi} +\permanent\def\expandeddoifnot #1#2{\iftok{#1}{#2}\expandafter\gobbleoneargument \else\expandafter\firstofoneargument \fi} % \testfeatureonce{100000}{\doifelse{hello world}{here i am}{}} % 0.3 % \testfeatureonce{100000}{\expandabledoifelse{hello world}{here i am}{}} % 1.5 -\def\expdoifelsecommon#1#2{\clf_doifelsecommon{#1}{#2}} -\def\expdoifelseinset #1#2{\clf_doifelseinset {#1}{#2}} +\permanent\def\expdoifelsecommon#1#2{\clf_doifelsecommon{#1}{#2}} +\permanent\def\expdoifelseinset #1#2{\clf_doifelseinset {#1}{#2}} -\def\expdoifcommonelse\expdoifelsecommon -\def\expdoifinsetelse \expdoifelseinset +\aliased\let\expdoifcommonelse\expdoifelsecommon +\aliased\let\expdoifinsetelse \expdoifelseinset %D We define these here, just in case. This permits \typefile {self} otherwise %D nested b|/|e sep problems. -\def\luastringsep{===} +\immutable\def\luastringsep{===} -\edef\!!bs{[\luastringsep[} -\edef\!!es{]\luastringsep]} +\immutable\edef\!!bs{[\luastringsep[} +\immutable\edef\!!es{]\luastringsep]} -\protected\def\writestatus#1#2{\clf_writestatus{#1}{#2}} +\permanent\overloaded\protected\def\writestatus#1#2{\clf_writestatus{#1}{#2}} %D We can omit the tex.ctxcatcodes here as nowadays we seldom change the regime at %D the \TEX\ end: %def\luaexpr#1{\ctxlua{context (tostring(#1))}} % more efficient: -\def\luaexpr#1{\ctxlua{tex.print(tostring(#1))}} % no use is shortcutting has to be compiled +\permanent\def\luaexpr#1{\ctxlua{tex.print(tostring(#1))}} % no use is shortcutting has to be compiled %D But as we only use write 16 we could as well do all in \LUA\ and ignore the rest. %D Okay, we still can do writes here but only when not blocked. -\let\syst_write_execute\clf_execute % always {...} +\aliased\let\syst_write_execute\clf_execute % always {...} %D There is a probably rather useless \type {\expression} command that can mix \LUA\ numeric %D expressions with \TEX\ commands (for as far that makes sense) that works like this: diff --git a/tex/context/base/mkiv/syst-mac.lmt b/tex/context/base/mkiv/syst-mac.lmt index 6fc8df2a4..410a49f8b 100644 --- a/tex/context/base/mkiv/syst-mac.lmt +++ b/tex/context/base/mkiv/syst-mac.lmt @@ -35,7 +35,7 @@ local function pushmacro(name,global) if s then insert(stack[name],s) else - report("no macro %a",name) + report("no macro %a to push",name) insert(stack[name],false) end end @@ -45,7 +45,7 @@ local function popmacro(name) if s then pop_macro(s) else - -- error + report("no macro %a to pop",name) end end diff --git a/tex/context/base/mkiv/syst-mes.mkiv b/tex/context/base/mkiv/syst-mes.mkiv index cf9da21de..ff7ab1ce3 100644 --- a/tex/context/base/mkiv/syst-mes.mkiv +++ b/tex/context/base/mkiv/syst-mes.mkiv @@ -11,8 +11,8 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\protected\def\writestring {\immediate\write\statuswrite} -\protected\def\writeline {\writestring{}} - \let\message \normalmessage +\protected\def\writestring{\immediate\write\statuswrite} +\protected\def\writeline {\writestring{}} +% \let\message \normalmessage \endinput diff --git a/tex/context/base/mkiv/tabl-com.mkxl b/tex/context/base/mkiv/tabl-com.mkxl new file mode 100644 index 000000000..c6a0c14bc --- /dev/null +++ b/tex/context/base/mkiv/tabl-com.mkxl @@ -0,0 +1,69 @@ +%D \module +%D [ file=tabl-com, +%D version=2009.08.22, +%D title=\CONTEXT\ Table Macros, +%D subtitle=Common Code, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA 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 Table Macros / Common Code} + +\unprotect + +\pushoverloadmode + +\permanent\let\AR\relax +\permanent\let\BA\relax +\permanent\let\BC\relax +\permanent\let\BL\relax +\permanent\let\CC\relax +\permanent\let\CL\relax +\permanent\let\CM\relax +\permanent\let\CR\relax +\permanent\let\DB\relax +\permanent\let\EQ\relax +\permanent\let\FB\relax +\permanent\let\FL\relax +\permanent\let\FR\relax +\permanent\let\HC\relax +\permanent\let\HL\relax +\permanent\let\HQ\relax +\permanent\let\HR\relax +\permanent\let\LB\relax +\permanent\let\LL\relax +\permanent\let\LR\relax +\permanent\let\ML\relax +\permanent\let\MR\relax +\permanent\let\NA\relax +\permanent\let\NB\relax +\permanent\let\NC\relax +\permanent\let\ND\relax +\permanent\let\NF\relax +\permanent\let\NG\relax +\permanent\let\NI\relax +\permanent\let\NL\relax +\permanent\let\NN\relax +\permanent\let\NP\relax +\permanent\let\NR\relax +\permanent\let\PB\relax +\permanent\let\RC\relax +\permanent\let\RQ\relax +\permanent\let\SR\relax +\permanent\let\TL\relax +\permanent\let\VL\relax + +\popoverloadmode + +\installmacrostack\BC +\installmacrostack\EC +\installmacrostack\EQ +\installmacrostack\NC +\installmacrostack\NN +\installmacrostack\NR + +\protect \endinput diff --git a/tex/context/base/mkiv/tabl-frm.mkxl b/tex/context/base/mkiv/tabl-frm.mkxl new file mode 100644 index 000000000..5cafec76a --- /dev/null +++ b/tex/context/base/mkiv/tabl-frm.mkxl @@ -0,0 +1,261 @@ +%D \module +%D [ file=tabl-frm, +%D version=2017.04.11, +%D title=\CONTEXT\ Table Macros, +%D subtitle=Framed 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 For Thomas Schmitz who needed 3000 pages long tables. + +\unprotect + +\writestatus{loading}{ConTeXt Table Macros / Framed Tables} + +\installcorenamespace{framedtable} +\installcorenamespace{framedtablerow} +\installcorenamespace{framedtablecolumn} + +\newcount\c_tabl_framed_c +\newcount\c_tabl_framed_r +\newdimen\d_tabl_framed_h +\newdimen\d_tabl_framed_d +\newdimen\b_tabl_framed + +\initializeboxstack\??framedtable + +\defineframed[\??framedtable] +\defineframed[\??framedtablerow][\??framedtable] +\defineframed[\??framedtablecolumn][\??framedtable] + +\setupframed + [\??framedtable] + [\c!distance=\zeropoint, + \c!before=, + \c!after=, + \c!inbetween=] + +\setupframed + [\??framedtablerow] + [\c!strut=\v!no, + \c!offset=\v!overlay] + +% \defineframedtable[foo] +% \defineframedtable[bar][foo] + +\permanent\tolerant\protected\def\defineframedtable[#1]#*[#2]% + {\ifarguments\or + \defineframed[\??framedtable#1][\??framedtable]% + \or + \defineframed[\??framedtable#1][\??framedtable#2]% + \fi} + +% \setupframedtable[foo][...] + +\permanent\tolerant\protected\def\setupframedtable[#1]#*[#2]% + {\ifarguments\or + \setupframed[\??framedtable][#1]% + \or + \ifcsname\??framed:\??framedtable#1\endcsname \else + \defineframed[\??framedtable#1][\??framedtable]% + \fi + \setupframed[\??framedtable#1][#2]% + \fi} + +% \setupframedtable[1][...] +% \setupframedtable[foo][1][...] + +\permanent\tolerant\protected\def\setupframedtablerow[#1]#*[#2]#*[#3]% + {\ifarguments\or\or + \ifcsname\??framed:\??framedtablerow:#1\endcsname \else + \defineframed[\??framedtablerow:#1][\??framedtable]% + \fi + \setupframed[\??framedtablerow:#1][#2]% + \or + \ifcsname\??framed:\??framedtable#1\endcsname \else + \defineframed[\??framedtable#1][\??framedtable]% + \fi + \ifcsname\??framed:\??framedtablerow#1:#2\endcsname \else + \defineframed[\??framedtablerow#1:#2][\??framedtable#1]% + \fi + \setupframed[\??framedtablerow#1:#2][#3]% + \fi} + +\permanent\tolerant\protected\def\setupframedtablecolumn[#1]#*[#2]#*[#3]% + {\ifarguments\or\or + \ifcsname\??framed:\??framedtablecolumn:#1\endcsname \else + \defineframed[\??framedtablecolumn:#1][\??framedtable]% + \fi + \setupframed[\??framedtablecolumn:#1][#2]% + \or + \ifcsname\??framed:\??framedtable#1\endcsname \else + \defineframed[\??framedtable#1][\??framedtable]% + \fi + \ifcsname\??framed:\??framedtablecolumn#1:#2\endcsname \else + \defineframed[\??framedtablecolumn#1:#2][\??framedtable#1]% + \fi + \setupframed[\??framedtablecolumn#1:#2][#3]% + \fi} + +\permanent\tolerant\protected\def\startframedtable[#1]#*[#2]% + {\begingroup + \forgetall + \ifhastok={#1}% + \let\currentframedtable\empty + \setupframed[\??framedtable][#1]% + \else + \edef\currentframedtable{#1}% + \setupframed[\??framedtable][#2]% + \fi + \edef\currentframed{\??framedtable\currentframedtable}% + \c_tabl_framed_r\zerocount + \d_tabl_framed_d\framedparameter\c!distance + \framedparameter\c!before} + +\permanent\protected\def\stopframedtable + {\framedparameter\c!after + \endgroup} + +% a two pass variant that deals with the height .. so no catcode changes here + +\tolerant\protected\def\pack_framed_start_framed_whatever[#1]% + {\pack_framed_initialize + \bgroup + \setupcurrentframed[#1]% here ! + \pack_framed_process_indeed + \bgroup + \ignorespaces} + +% \permanent\protected\def\startframedrow +% {\advance\c_tabl_framed_r\plusone +% \c_tabl_framed_c\zerocount +% \d_tabl_framed_h\zeropoint +% \bgroup +% \edef\currentframed{\number\c_tabl_framed_r}% +% \edef\currentframed +% {\??framedtablerow\currentframedtable +% \ifcsname\??framedtablerow\currentframedtable:\currentframed\endcsname +% :\currentframed +% \else\ifcsname\??framedtablerow\currentframedtable:\v!each\endcsname +% :\v!each +% \fi\fi}% +% \pack_framed_start_framed_whatever} +% +% \permanent\protected\def\stopframedrow +% {\dofastloopcs\c_tabl_framed_c\tabl_framed_flush_row +% \stopframed +% \nointerlineskip +% \vskip\zeropoint\relax +% \framedparameter\c!inbetween} + +\protected\def\tabl_framed_flush_row + {\vpack to \d_tabl_framed_h{\flushbox\??framedtable{\number\fastloopindex}\vfill}% + \ifzeropt\d_tabl_framed_d\else\kern\d_tabl_framed_d\fi} + +\newcount\c_tabl_framed_pass + +\permanent\let\stopframedrow\relax + +\permanent\protected\def\startframedrow#1\stopframedrow + {\advance\c_tabl_framed_r\plusone + \startframedrow_one#1\stopframedrow_one + \startframedrow_two#1\stopframedrow_two} + +\tolerant\def\startframedrow_one[#-]% + {\bgroup + \c_tabl_framed_pass\plusone + \c_tabl_framed_c\zerocount + \d_tabl_framed_h\zeropoint + \settrialtypesetting} + +\protected\def\stopframedrow_one + {\normalexpanded{\egroup\d_tabl_framed_h\the\d_tabl_framed_h\relax}} + +\def\startframedrow_two + {\bgroup + \c_tabl_framed_c\zerocount + \c_tabl_framed_pass\plustwo + \edef\currentframed{\number\c_tabl_framed_r}% + \edef\currentframed + {\??framedtablerow\currentframedtable + \ifcsname\??framedtablerow\currentframedtable:\currentframed\endcsname + :\currentframed + \else\ifcsname\??framedtablerow\currentframedtable:\v!each\endcsname + :\v!each + \fi\fi}% + \pack_framed_start_framed_whatever} + +\protected\def\stopframedrow_two + {\dofastloopcs\c_tabl_framed_c\tabl_framed_flush_row + \stopframed + \nointerlineskip + \vskip\zeropoint\relax + \framedparameter\c!inbetween} + +\protected\def\tabl_framed_flush_row_two + {\vpack to \d_tabl_framed_h{\flushbox\??framedtable{\number\fastloopindex}\vfill}% + \ifzeropt\d_tabl_framed_d\else\kern\d_tabl_framed_d\fi} + +\permanent\protected\def\startframedcell + {\advance\c_tabl_framed_c\plusone + \setbox\b_tabl_framed\hpack\bgroup + %\bgroup + \edef\currentframed{\number\c_tabl_framed_c}% + \edef\currentframed + {\??framedtablecolumn\currentframedtable + \ifcsname\??framedtablecolumn\currentframedtable:\currentframed\endcsname + :\currentframed + \else\ifcsname\??framedtablecolumn\currentframedtable:\v!each\endcsname + :\v!each + \fi\fi}% + \ifcase\c_tabl_framed_pass + \or + \letframedparameter\c!background\empty + \letframedparameter\c!frame\v!off + \or + \letframedparameter\c!height\d_tabl_framed_h + \fi + \pack_framed_start_framed_whatever} + +\permanent\protected\def\stopframedcell + {\stopframed + %\egroup + \ifcase\c_tabl_framed_pass + \or + \ifdim\ht\b_tabl_framed>\d_tabl_framed_h + \d_tabl_framed_h\ht\b_tabl_framed + \fi + \else + \savebox\??framedtable{\number\c_tabl_framed_c}{\box\b_tabl_framed}% + \fi} + +\protect \endinput + +\starttext + +\setupframedtablecolumn [1] [width=3cm,background=color,backgroundcolor=red] +\setupframedtablecolumn [2] [width=4cm,background=color,backgroundcolor=green,align=normal] +% \setupframedtablerow [each] [background=color,backgroundcolor=blue,strut=no] +% \setupframedtablerow [each] [strut=no,offset=overlay] + +\startframedtable[inbetween=\kern-0.4pt,distance=-0.4pt] + +\testfeatureonce{10000}{ +% \testfeatureonce{10}{ + \startframedrow + \startframedcell%[backgroundcolor=yellow] + test + \stopframedcell + \startframedcell + test \par test + \stopframedcell + \stopframedrow +} +\stopframedtable + +\stoptext diff --git a/tex/context/base/mkiv/tabl-ltb.mkxl b/tex/context/base/mkiv/tabl-ltb.mkxl new file mode 100644 index 000000000..b72c5c7d6 --- /dev/null +++ b/tex/context/base/mkiv/tabl-ltb.mkxl @@ -0,0 +1,813 @@ +%D \module +%D [ file=tabl-ltb, +%D version=2002.10.31, % updated 2016.01.08 +%D title=\CONTEXT\ Table Macros, +%D subtitle=Line 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 was made for some special project where we needed to typeset tables +%D spanning spanning many pages horizontally and vertically, with repeated header +%D lines and (entry) columns, tab tracking, color, etc. We do two passes over a +%D table, which is why the table can go into a buffer or file. As said, tables can +%D be real huge but performance is still quite okay (there is room for some speed +%D up). The code has been adapted to \MKIV\ but the functionality is the same as in +%D \MKII. + +% \BH \BC .. \EC \BC .. \EC \EH % append +% \BR \BC .. \EC \BC .. \EC \ER +% +% or +% +% \NC .. \NC .. \NC \NR (todo: optional last \NC) + +% alternative: +% +% (1) direct run, save content in macro, but only if needed +% +% todo +% +% (2) buffered table content +% +% \startbuffer +% \startlinetablehead +% \stoplinetablehead +% \startlinetablebody +% \stoplinetablebody +% \stopbuffer +% +% \processlinetablebuffer[buffer] +% +% in buffer : head and body +% +% (3) unbuffered run, multipass +% +% - run with starting width zero / prev run +% - clip on prev run +% - flush real widths + +\writestatus{loading}{ConTeXt Table Macros / Line Tables} + +\unprotect + +\installcorenamespace{linetable} +\installcorenamespace{linetablepart} +\installcorenamespace{linetablewidth} +\installcorenamespace{linetableheight} +\installcorenamespace{linetabledepth} + +\newconditional \c_tabl_lines_preroll +\newconditional \c_tabl_lines_in_table + +\newdimen \d_tabl_lines_width +\newdimen \d_tabl_lines_height +%newdimen \d_tabl_lines_depth + +\newbox \b_tabl_lines_cell + +\newcount \c_tabl_lines_n_of_columns +\newcount \c_tabl_lines_n_of_rows +\newcount \c_tabl_lines_n_of_lines +\newcount \c_tabl_lines_n_of_parts +\newcount \c_tabl_lines_part \c_tabl_lines_part\plusone +\newcount \c_tabl_lines_step \c_tabl_lines_step\plusone +\newcount \c_tabl_lines_line +\newcount \c_tabl_lines_row +\newcount \c_tabl_lines_rows +\newcount \c_tabl_lines_column +\newcount \c_tabl_lines_subcol + +\newconstant \c_tabl_lines_hmode +\newconstant \c_tabl_lines_page +\newconstant \c_tabl_lines_repeat +\newconstant \c_tabl_lines_split_state +\newconstant \c_tabl_lines_head_state +\newconstant \c_tabl_lines_mode + +\newtoks \t_tabl_lines_head + +\newconditional \linetableautoheight \settrue\linetableautoheight + +\initializetablebox\zerocount % holds repeater + +\pushoverloadmode + +\permanent\tolerant\protected\def\setuplinetable[#1]#*[#2]#*[#3]% + {\ifarguments\or + \getparameters[\??linetable][#1]% + \or + \getparameters[\??linetable#1:][#2]% + \or + \getparameters[\??linetable#1:#2][#3]% + \fi} + +\permanent\def\linetableparameter#1% + {\begincsname\??linetable#1\endcsname} + +\permanent\protected\def\doifelselinetablecparameter#1% + {\ifcsname\??linetable c:\number\c_tabl_lines_column#1\endcsname + \expandafter\firstoftwoarguments + \else\ifcsname\??linetable c:#1\endcsname + \doubleexpandafter\firstoftwoarguments + \else + \doubleexpandafter\secondoftwoarguments + \fi\fi} + +\aliased\let\doiflinetablecparameterelse\doifelselinetablecparameter + +\permanent\def\linetablecparameter#1% + {\begincsname + \??linetable + \ifcsname\??linetable c:\number\c_tabl_lines_column#1\endcsname + c:\number\c_tabl_lines_column + \else\ifcsname\??linetable c:#1\endcsname + c:% + \fi\fi + #1% + \endcsname} + +\permanent\def\linetablerparameter#1% faster, leaner and meaner + {\begincsname + \??linetable + \ifnum\c_tabl_lines_row=\zerocount % geen ifcase + \ifcsname\??linetable r:\v!header#1\endcsname + r:\v!header + \else\ifcsname\??linetable r:0#1\endcsname + r:0% + \fi\fi + \else + \ifcsname\??linetable r:\number\c_tabl_lines_row#1\endcsname + r:\number\c_tabl_lines_row + \else\ifcsname\??linetable r:\v!oddeven\c_tabl_lines_row#1\endcsname + r:\v!oddeven\c_tabl_lines_row + \fi\fi + \fi + #1% + \endcsname} + +\protected\def\tabl_lines_set + {\edef\p_lines{\linetableparameter\c!lines}% + \ifx\p_lines\v!fit + \tabl_lines_set_indeed + \else + \global\c_tabl_lines_n_of_lines\p_lines + \fi} + +\protected\def\tabl_lines_set_indeed + {% whitespace already added by vertical strut + %\triggerpagebuilder + \scratchdimen + \ifdim\pagegoal<\maxdimen + \dimexpr\pagegoal-\pagetotal\relax + \else + \textheight + \fi + \getrawnoflines\scratchdimen + \global\c_tabl_lines_n_of_lines\noflines + \ifconditional\c_tabl_lines_preroll \else \ifnum\c_tabl_lines_n_of_lines<\plustwo + \page + \tabl_lines_set + \fi \fi} + +\def\tabl_lines_step_cell + {\advance\scratchdimen\linetablecparameter\c!width + \global\advance \c_tabl_lines_column\plusone + \advance\scratchskip \linetablecparameter\c!distance} + +\permanent\tolerant\protected\def\startlinetablecell[#1]% + {\global\setbox\b_tabl_lines_cell\hbox\bgroup + \ifparameter#1\or + \getparameters[\??linetable c:\number\c_tabl_lines_column][#1]% + \fi + \global\c_tabl_lines_step\linetablecparameter\c!nx\relax + \ifcase\c_tabl_lines_step\or + \scratchdimen\linetablecparameter\c!width + \scratchskip \linetablecparameter\c!distance + \else + \scratchdimen \zeropoint + \scratchskip \zeropoint + \scratchcounter\c_tabl_lines_column + \dorecurse\c_tabl_lines_step\tabl_lines_step_cell + \global\c_tabl_lines_column\scratchcounter + \fi + \c_tabl_lines_mode + \ifconditional\c_tabl_lines_preroll + \ifdim\scratchdimen>\zeropoint \zerocount \else \plustwo \fi + \else + \zerocount + \fi + \ifcase\c_tabl_lines_mode + \ifcase\c_tabl_lines_hmode + % nothing + \or + % fit, keep it simple + \or + \c_tabl_lines_mode\plusone % line + \else + % some already calculated height + \fi + \fi + \setbox\scratchbox\hbox + \bgroup + \dontcomplain + \hskip\linetablecparameter\c!leftoffset\relax + % 0 = width, unknown height + % 1 = width, fixed height + % 2 = no width, auto hsize + \ifnum\c_tabl_lines_mode<\plustwo + \advance\scratchdimen-\linetablecparameter\c!leftoffset + \advance\scratchdimen-\linetablecparameter\c!rightoffset + \fi + \ifcase\c_tabl_lines_mode + \dosetraggedcommand{\linetablecparameter\c!align}% + \vtop \ifdim\d_tabl_lines_height>\zeropoint to\d_tabl_lines_height \fi \bgroup + \hsize\scratchdimen + \raggedcommand + \else + \setalignmentswitch{\linetablecparameter\c!align}% + \hbox \ifcase\c_tabl_lines_mode \or to\scratchdimen \fi \bgroup + \ifcase\alignmentswitch\hss\or\hss\fi + \fi + \dousestyleparameter{\linetablecparameter\c!style}% + \dousecolorparameter{\linetablecparameter\c!color}% + \begstrut \ignorespaces} + +\permanent\protected\def\stoplinetablecell + {\unskip \endstrut + \ifcase\c_tabl_lines_mode + \endgraf + \else + \ifcase\alignmentswitch\else\hss\fi + \fi + \egroup + \hskip\linetablecparameter\c!rightoffset + \egroup + \ifconditional\c_tabl_lines_preroll + \box\scratchbox + \else + \tabl_lines_wrap_up + \fi + \egroup} + +\def\tabl_lines_wrap_up + {\edef\p_background{\linetablecparameter\c!background}% + \ifx\p_background\v!color + \ifconditional\linetableautoheight + \tabl_lines_wrap_up_auto + \else + \tabl_lines_wrap_up_line + \fi + \else + \box\scratchbox + \fi} + +% \startuseMPgraphic{one} +% path p, q ; +% numeric r ; +% r := RuleThickness ; +% p := unitsquare xysized(RuleWidth,RuleHeight+RuleDepth) ; +% q := p topenlarged -r bottomenlarged -r ; +% draw q ; +% setbounds currentpicture to p; +% \stopuseMPgraphic +% +% \setuplinetable[r][odd] [type=mp,mp=one,backgroundcolor=gray,rulethickness=1pt] +% \setuplinetable[r][even][type=mp,mp=one,backgroundcolor=green,rulethickness=1pt] +% +% \startlinetable +% \dorecurse{10}{\NC aaa \NC bb \NC c \NC ddddd \NC eeee \NC ff \NC \NR} +% \stoplinetable + +\def\tabl_lines_wrap_up_auto + {\edef\p_height{\linetablerparameter{x\c!height}}% + \edef\p_depth {\linetablerparameter{x\c!depth }}% + \hpack + {\blackrule + [ \c!color=\linetablecparameter\c!backgroundcolor, + \c!type=\linetablecparameter\c!type, + \c!mp=\linetablecparameter\c!mp, + \c!rulethickness=\linetablecparameter\c!rulethickness, + \c!height=\ifx\p_height\empty\ht\scratchbox\else\p_height\fi, + \c!depth=\ifx\p_depth \empty\dp\scratchbox\else\p_depth \fi, + \c!width=\wd\scratchbox]% + \hskip-\wd\scratchbox\box\scratchbox}} + +\def\tabl_lines_wrap_up_auto_r + {\hpack + {\blackrule + [ \c!color=\linetablerparameter\c!backgroundcolor, + \c!type=\linetablerparameter\c!type, + \c!mp=\linetablerparameter\c!mp, + \c!rulethickness=\linetablerparameter\c!rulethickness, + \c!height=\ht\scratchbox, + \c!depth=\dp\scratchbox, + \c!width=\wd\scratchbox]% + \hskip-\wd\scratchbox\box\scratchbox}} + +\def\tabl_lines_wrap_up_line + {\backgroundline[\linetablecparameter\c!backgroundcolor]{\box\scratchbox}} + +\def\tabl_lines_save_part + {\global\setbox\tablebox\c_tabl_lines_part + \ifcase\c_tabl_lines_part\relax + \box\scratchbox % just storing + \else + \vbox + {\ifvoid\tablebox\c_tabl_lines_part\else\unvbox\tablebox\c_tabl_lines_part\fi + \edef\p_background{\linetablerparameter\c!background}% + \ifx\p_background\v!color + \backgroundline[\linetablerparameter\c!backgroundcolor]{\box\scratchbox}% + \else + \edef\p_type{\linetablerparameter\c!type}% + \ifx\p_type\empty + \box\scratchbox + \else + \tabl_lines_wrap_up_auto_r + \fi + \fi + \endgraf + \linetablerparameter\c!after}% + \fi} + +\def\tabl_lines_flush_parts + {\global\advance\c_tabl_lines_line\plusone + \ifnum\c_tabl_lines_line<\c_tabl_lines_n_of_lines + % keep collecting + \else + \ifconditional\c_tabl_lines_preroll + % forget about them + \else + \dorecurse\c_tabl_lines_n_of_parts + {\c_tabl_lines_part\recurselevel + \dp\tablebox\c_tabl_lines_part\strutdepth + % noindent en endgraf needed else whitespace mess-up! + \whitespace % here not after verticalstrut + \ifdim\topskipgap=\zeropoint\else + \verticalstrut + \nobreak + \kern-\struttotal + \kern-\parskip + \nobreak + \nointerlineskip % fix topskip + \fi + \noindent\strut + \hpack to \hsize{\box\tablebox\c_tabl_lines_part\hss}% + \endgraf + \ifnum\c_tabl_lines_part<\c_tabl_lines_n_of_parts\relax + \linetableparameter\c!inbetween + \fi}% + \ifnum\c_tabl_lines_rows<\c_tabl_lines_n_of_rows + \linetableparameter\c!inbetween + \else + % after, later + \fi + \c_tabl_lines_head_state\plusthree + \global\setbox\tablebox\zerocount\emptybox % here + \fi + % reset \c_tabl_lines_row will be an option, currently + % starts at zero after split + \global\c_tabl_lines_row\zerocount + \global\c_tabl_lines_line\zerocount + \global\c_tabl_lines_page\zerocount + \global\d_tabl_lines_width\zeropoint + \tabl_lines_set + \fi} + +\def\tabl_lines_start_part + {\global\c_tabl_lines_subcol\zerocount + \setbox\scratchbox\hbox\bgroup + \dousestyleparameter{\linetablerparameter\c!style}% + \dousecolorparameter{\linetablerparameter\c!color}% + \ignorespaces} + +\def\tabl_lines_stop_part + {\ifnum\c_tabl_lines_part>\zerocount + \unskip \unskip % remove last intercolumn skip (distance+fill) + \fi + \egroup + \ifconditional\c_tabl_lines_preroll \else + \ifcase\c_tabl_lines_part + % we're collecting the repeater + \else + \ifdim\dimexpr\hsize-\wd\scratchbox\relax>\linetableparameter\c!stretch\else + \setbox\scratchbox\hpack to \hsize{\unhbox\scratchbox}% + \fi + \fi + \fi} + +\def\tabl_lines_check_part + {\global\advance\d_tabl_lines_width\wd\b_tabl_lines_cell + \global\advance\c_tabl_lines_column\c_tabl_lines_step + \global\advance\c_tabl_lines_subcol\c_tabl_lines_step + \relax + %\message{\the\c_tabl_lines_column,\the\c_tabl_lines_subcol}\wait + % from now on the column counter is already incremented + \ifcase\c_tabl_lines_split_state + \ifconditional\c_tabl_lines_preroll \else + \box\b_tabl_lines_cell + % the columncounter is one ahead ! + \hskip\scratchskip + \fi + %%% + \donefalse + \ifcase\c_tabl_lines_repeat\else + % calculate ahead + \ifnum\c_tabl_lines_repeat=\numexpr\c_tabl_lines_column-\plustwo\relax + \donetrue % collecting repeater + \fi + \fi + %%%% + \ifdone + % collecting repeater + \else + \ifnum\c_tabl_lines_column>\csname\??linetablepart\number\c_tabl_lines_part\endcsname\relax + \donetrue + \fi + \fi + \ifdone + \tabl_lines_stop_part + \ifconditional\c_tabl_lines_preroll \else + \tabl_lines_save_part + \fi + \ifcase\c_tabl_lines_page \or + \global\c_tabl_lines_page \plustwo + \else + \global\c_tabl_lines_page \plusone + \fi + \global\advance\c_tabl_lines_part\plusone + \global\d_tabl_lines_width\wd\tablebox\zerocount + \tabl_lines_start_part + \fi + \else + \donefalse + \!!doneafalse + \ifcase\c_tabl_lines_repeat\else + % calculate ahead + \ifnum\c_tabl_lines_repeat=\numexpr\c_tabl_lines_column-\plustwo\relax + \donetrue % collecting repeater + \fi + \fi + \ifdone + \!!doneatrue + % collecting repeater + \orelse\ifdim\d_tabl_lines_width>\hsize + \donetrue + \else + \global\advance\d_tabl_lines_width\scratchskip + \ifdim\d_tabl_lines_width>\hsize % ? + \donetrue + \fi + \fi + \ifdone + \tabl_lines_stop_part + \tabl_lines_save_part + \ifcase\c_tabl_lines_page \or + \global\c_tabl_lines_page \plustwo + \else + \global\c_tabl_lines_page \plusone + \fi + \global\advance\c_tabl_lines_part\plusone + \ifnum\c_tabl_lines_part>\c_tabl_lines_n_of_parts + \global\c_tabl_lines_n_of_parts\c_tabl_lines_part + \initializetablebox\c_tabl_lines_part + \fi + \global\d_tabl_lines_width\wd\b_tabl_lines_cell + \tabl_lines_start_part + \if!!doneb \else \ifcase\c_tabl_lines_repeat \else + % check for left/right page + \ifcase\c_tabl_lines_page\donetrue\or\donetrue\or\donefalse\fi\ifdone + % insert repeater + \global\advance\d_tabl_lines_width\wd\tablebox\zerocount + \ifconditional\c_tabl_lines_preroll\kern\wd\else\unhcopy\fi\tablebox\zerocount + \fi + \fi \fi + \fi + \ifconditional\c_tabl_lines_preroll \else + \box\b_tabl_lines_cell + % the columncounter is one ahead ! + %\dorecurse\c_tabl_lines_step{\strut\hfil}% + \strut + \hskip\scratchskip + \fi + \fi} + +\permanent\protected\def\startlinetablerun % to do: quit when nested + {\bgroup + \dontcomplain + \settrue\c_tabl_lines_in_table + % autowidth + \doif{\linetableparameter\c!maxwidth}\v!fit + {\setuplinetable[\c!maxwidth=\zeropoint]}% + \processaction + [\linetableparameter\c!stretch] + [ \v!no=>{\setuplinetable[\c!stretch=\maxdimen]},% no stretch + \v!yes=>{\setuplinetable[\c!stretch=\zeropoint]}]% max stretch + \c_tabl_lines_repeat\linetableparameter\c!nleft + \c_tabl_lines_split_state % = + \ifdim\linetableparameter\c!maxwidth>\zeropoint + \zerocount \else \plusone + \fi + % optional prevdepth correction + \ifconditional\c_tabl_lines_preroll + \global\c_tabl_lines_n_of_rows\zerocount + \else + \linetableparameter\c!before + \fi + \global\c_tabl_lines_rows\zerocount + \global\c_tabl_lines_n_of_columns\zerocount + \global\c_tabl_lines_n_of_parts\zerocount + \scratchcounter\zerocount + \def\docommand##1% + {\global\advance\c_tabl_lines_n_of_parts\plusone + \advance\scratchcounter##1% + \setxvalue{\??linetablepart\number\c_tabl_lines_n_of_parts}{\the\scratchcounter}}% + \processcommacommand[\linetableparameter\c!n]\docommand + \initializetableboxes\c_tabl_lines_n_of_parts + \global\c_tabl_lines_part\ifcase\c_tabl_lines_repeat\plusone\else\zerocount\fi % repeater + \global\c_tabl_lines_step\plusone + \global\c_tabl_lines_line\zerocount + \global\c_tabl_lines_row \zerocount + \global\c_tabl_lines_column\zerocount + \global\c_tabl_lines_subcol\zerocount + \global\d_tabl_lines_width\zeropoint + \ifconditional\c_tabl_lines_preroll \else \ifdim\pagetotal>\zeropoint + \verticalstrut\kern-\struttotal + \fi \fi + \tabl_lines_set + \tabl_lines_check_page + \enforced\let\BR\tabl_lines_BR + \enforced\let\ER\tabl_lines_ER + \enforced\let\BH\tabl_lines_BR + \enforced\let\EH\tabl_lines_ER + \enforced\let\BC\tabl_lines_BC + \enforced\let\EC\tabl_lines_EC + \enforced\let\NC\tabl_lines_NC + \enforced\let\NR\tabl_lines_NR + \tabl_lines_flush_head} + +\permanent\protected\def\stoplinetablerun + {\global\c_tabl_lines_line\maxcard + \c_tabl_lines_head_state\zerocount % blocked + \tabl_lines_flush_parts + \ifconditional\c_tabl_lines_preroll \else + \linetableparameter\c!after + \fi + \global\c_tabl_lines_part\zerocount + \global\c_tabl_lines_n_of_parts\zerocount + \egroup} + +\permanent\def\checklinecolumndimension#1#2#3% + {\expandafter\xdef\csname#1\number#3\endcsname + {\expandafter\ifx\csname#1\number#3\endcsname\relax + \the#2\b_tabl_lines_cell + \orelse\ifdim\csname#1\number#3\endcsname<#2\b_tabl_lines_cell + \the#2\b_tabl_lines_cell + \else + \csname#1\number#3\endcsname + \fi}} + +\def\tabl_lines_check_width {\checklinecolumndimension\??linetablewidth \wd\c_tabl_lines_column} +\def\tabl_lines_check_height{\checklinecolumndimension\??linetableheight\ht\c_tabl_lines_row} +\def\tabl_lines_check_depth {\checklinecolumndimension\??linetabledepth \dp\c_tabl_lines_row} + +\permanent\tolerant\protected\def\tabl_lines_BR[#1]% #1 not yet implemented + {\ifnum\c_tabl_lines_head_state=1\else + \global\advance\c_tabl_lines_row\plusone + \global\advance\c_tabl_lines_rows\plusone + \fi + \global\c_tabl_lines_column\plusone + \global\c_tabl_lines_subcol\plusone + \d_tabl_lines_height\zeropoint + \edef\p_height{\linetablerparameter\c!height}% + \ifx\p_height\empty + \c_tabl_lines_hmode \zerocount + \orelse\ifx\p_height\v!fit + \c_tabl_lines_hmode \plusone + \orelse\ifx\p_height\v!line + \c_tabl_lines_hmode \plustwo + \else + \d_tabl_lines_height\dimexpr\p_height-\strutdepth\relax + \fi + \tabl_lines_start_part} + +\permanent\protected\def\tabl_lines_BC + {\startlinetablecell} + +\permanent\protected\def\tabl_lines_EC + {\stoplinetablecell + \ifconditional\c_tabl_lines_preroll + \tabl_lines_check_width + \tabl_lines_check_height + \tabl_lines_check_depth + \fi + \tabl_lines_check_part} + +\permanent\protected\def\tabl_lines_ER + {% \stoplinetablecell + % no \box\b_tabl_lines_cell, i.e. dummy columnn, last \NC \NR + \tabl_lines_stop_part + \tabl_lines_save_part + \advance\c_tabl_lines_column \minusone + \ifnum\c_tabl_lines_column>\c_tabl_lines_n_of_columns + \global\c_tabl_lines_n_of_columns\c_tabl_lines_column + \fi + \tabl_lines_flush_parts + \global\c_tabl_lines_column\zerocount + \global\d_tabl_lines_width \zeropoint + \ifcase\c_tabl_lines_repeat + \global\c_tabl_lines_part\plusone + \else + \global\c_tabl_lines_part\zerocount % repeater + \fi + \tabl_lines_check_page + \tabl_lines_flush_head} + +\def\tabl_lines_check_page + {\global\c_tabl_lines_page\zerocount + \ifcase\c_tabl_lines_repeat \else \ifcase\c_tabl_lines_page + \doif{\linetableparameter\c!repeat}\v!no + {\global\c_tabl_lines_page\doifelseoddpage\plusone\plustwo}% + \fi \fi} + +\def\tabl_lines_flush_head + {\ifcase\c_tabl_lines_head_state + % 0 blocked + \or + % 1 doing head + \or + % 2 head done + \or + % 3 trigger flush + \c_tabl_lines_head_state\plusone + \the\t_tabl_lines_head\relax + \c_tabl_lines_head_state\plustwo + \fi} + +\permanent\protected\def\tabl_lines_NC % first time special treatment + {\relax + \ifcase\c_tabl_lines_column + \tabl_lines_BR + \else + \tabl_lines_EC + \fi + \tabl_lines_BC} % beware, this will result in BR BC EC BC NR + +\permanent\protected\def\tabl_lines_NR + {\stoplinetablecell % dummy + \tabl_lines_ER} + +\permanent\protected\def\startlinetable + {\startlinetablerun} + +\permanent\protected\def\stoplinetable + {\stoplinetablerun} + +\permanent\protected\def\startlinetableanalysis + {\bgroup + \settrue\c_tabl_lines_preroll + \settrialtypesetting + \startlinetablerun} + +% \protected\def\stoplinetableanalysis +% {\stoplinetablerun +% \egroup +% \global\c_tabl_lines_n_of_rows\c_tabl_lines_rows +% \dorecurse\c_tabl_lines_n_of_rows % global, from last run {\linetableparameter\c!n} +% {\setevalue{\??linetable r:\recurselevel x\c!height}{\getvalue{\??linetableheight\recurselevel}}% +% \setevalue{\??linetable r:\recurselevel x\c!depth }{\getvalue{\??linetabledepth \recurselevel}}% +% \letgvalue{\??linetableheight\recurselevel}\!!zeropoint +% \letgvalue{\??linetabledepth \recurselevel}\!!zeropoint} +% \dorecurse\c_tabl_lines_n_of_columns % global, from last run {\linetableparameter\c!n} +% {\setevalue{\??linetable c:\recurselevel\c!width}{\getvalue{\??linetablewidth\recurselevel}}% +% \letgvalue{\??linetablewidth\recurselevel}\!!zeropoint}} % init next table + +\permanent\protected\def\stoplinetableanalysis + {\stoplinetablerun + \egroup + \global\c_tabl_lines_n_of_rows\c_tabl_lines_rows + \dorecurse\c_tabl_lines_n_of_rows % global, from last run {\linetableparameter\c!n} + {\setevalue{\??linetable r:##1x\c!height}{\csname\??linetableheight##1\endcsname}% + \setevalue{\??linetable r:##1x\c!depth }{\csname\??linetabledepth ##1\endcsname}% + \letgvalue{\??linetableheight##1}\zeropoint + \letgvalue{\??linetabledepth ##1}\zeropoint} + \dorecurse\c_tabl_lines_n_of_columns % global, from last run {\linetableparameter\c!n} + {\setevalue{\??linetable c:##1\c!width}{\csname\??linetablewidth##1\endcsname}% + \letgvalue{\??linetablewidth##1}\zeropoint}} % init next table + +% todo: store in box instead of macro + +\aliased\let\stoplinetablehead\relax + +\permanent\protected\def\startlinetablehead#1\stoplinetablehead + {\ifconditional\c_tabl_lines_in_table + \t_tabl_lines_head\emptytoks + \fi + \c_tabl_lines_head_state\plusthree % full + \t_tabl_lines_head{#1}% + \ifconditional\c_tabl_lines_in_table + \tabl_lines_flush_head + \fi} + +\permanent\protected\def\tabl_lines_BH + {\ifx\EC\relax + % signal, grabbing lines + \else + \t_tabl_lines_head\emptytoks + \fi + \push_macro_BC + \push_macro_EC + \enforced\permanent\protected\def\BC##1\EC{\appendtoks##1\to\t_tabl_lines_head}% + \enforced\permanent \let\EC\relax} % signal + +\permanent\protected\def\tabl_lines_EH + {\pop_macro_EC + \pop_macro_BC + \expandafter\startlinetablehead\the\t_tabl_lines_head\stoplinetablehead} + +\permanent\let\startlinetablebody\relax +\permanent\let\stoplinetablebody \relax + +\protected\def\processlinetablebuffer + {\dosingleempty\tabl_lines_process_buffer} + +\def\tabl_lines_process_buffer[#1]% + {\bgroup + \enforced\let\startlinetable\relax + \enforced\let\stoplinetable \relax + \startlinetableanalysis\getbuffer[#1]\stoplinetableanalysis + \startlinetablerun \getbuffer[#1]\stoplinetablerun + \egroup} + +\permanent\tolerant\protected\def\processlinetablefile[#1]% maybe accept #1 as well as [#1] + {\bgroup + \enforced\let\startlinetable\relax + \enforced\let\stoplinetable \relax + \startlinetableanalysis\readfile{#1}\donothing\donothing\stoplinetableanalysis + \startlinetablerun \readfile{#1}\donothing\donothing\stoplinetablerun + \egroup} + +\popoverloadmode + +\setuplinetable + [\c!n=\maxcard, + \c!lines=\maxcard, + \c!nx=\plusone, + \c!nleft=\zerocount, + \c!repeat=\v!yes, % when nleft > 0, repeat on both pages + \c!before=, + \c!after=, + \c!inbetween=\page, + \c!distance=\zeropoint, + \c!stretch=\v!no, + \c!align=\c!right, + \c!leftoffset=.25\exheight, + \c!rightoffset=\linetableparameter\c!leftoffset, + \c!maxwidth=\zeropoint, + \c!width=5\emwidth, + \c!height=\v!fit, % \v!line = faster + \c!background=, + \c!backgroundcolor=, + \c!rulethickness=\linewidth] + +\protect + +\continueifinputfile{tabl-ltb.mkxl} + +\setuplinetable[n=6,m={2,2,2},lines=25] % m ? + +\setuplinetable[c][1] [width=2cm,background=color,backgroundcolor=red] +\setuplinetable[c][4] [width=3cm,background=color,backgroundcolor=yellow] +\setuplinetable[c][6] [width=3cm,background=color,backgroundcolor=magenta] +\setuplinetable[r][odd] [background=color,backgroundcolor=gray] +\setuplinetable[r][even][background=color,backgroundcolor=green] + +\starttext + +\showframe \showstruts + +\setuppagenumbering[alternative=doublesided]\page[left] + +\startlinetable +\NC aaa\crlf aaa \NC bb \NC c \NC ddddd \NC eeee \NC ff \NC \NR +\dorecurse{100}{\NC aaa \NC bb \NC c \NC ddddd \NC eeee \NC ff \NC \NR} +\stoplinetable + +\startlinetable +\NC[style=slanted,color=green,background=color,backgroundcolor=darkred,nx=2,uitlijnen=middle] xxx + \NC yy \NC ddddd \NC eeee \NC ff \NC \NR +\dorecurse{100}{\NC aaa \NC bb \NC c \NC ddddd \NC eeee \NC ff \NC \NR} +\stoplinetable + +% \startbuffer[lt] +% \NC aaa\crlf aaa \NC bb \NC c \NC ddddd \NC ee \NC ff \NC \NR +% \NC aaa\crlf aaa \NC b \NC cc \NC ddd \NC eeee \NC f \NC \NR +% \stopbuffer +% +% \processlinetablebuffer[lt] + +\stoptext diff --git a/tex/context/base/mkiv/tabl-mis.mkiv b/tex/context/base/mkiv/tabl-mis.mkiv index b2af1993e..d9022b06d 100644 --- a/tex/context/base/mkiv/tabl-mis.mkiv +++ b/tex/context/base/mkiv/tabl-mis.mkiv @@ -130,7 +130,7 @@ \let\typo_paragraphs_setup_saved\setupparagraphs -\unexpanded\def\setupparagraphs +\unexpanded\overloaded\def\setupparagraphs {\dotripleempty\typo_paragraphs_setup} \def\typo_paragraphs_setup[#1][#2][#3]% we are downward compatible with [each] and [1,3] @@ -193,7 +193,7 @@ \fi \parindent\zeropoint \c_typo_paragraphs_n\zerocount - \let\\=\typo_paragraphs_next % downward compatible + \enforced\let\\\typo_paragraphs_next % downward compatible \edef\p_offset{\paragraphsparameter\c!offset}% \doifelsedimension\p_offset {\scratchoffset\p_offset}% diff --git a/tex/context/base/mkiv/tabl-ntb.mkxl b/tex/context/base/mkiv/tabl-ntb.mkxl index 680429822..300821107 100644 --- a/tex/context/base/mkiv/tabl-ntb.mkxl +++ b/tex/context/base/mkiv/tabl-ntb.mkxl @@ -44,12 +44,12 @@ % \eTR % \eTABLE -% \unexpanded\def\startrow {\bTR} -% \unexpanded\def\stoprow {\eTR} -% \unexpanded\def\startcell#1\stopcell{\bTD#1\eTD} -% \let\stopcell \relax -% \let\startcelltable \bTABLE -% \let\stopcelltable \eTABLE +% \protected\def\startrow {\bTR} +% \protected\def\stoprow {\eTR} +% \protected\def\startcell#1\stopcell{\bTD#1\eTD} +% \let\stopcell \relax +% \let\startcelltable \bTABLE +% \let\stopcelltable \eTABLE % \starttext % \startcelltable @@ -100,7 +100,7 @@ % maybe: \the\neverypar \to \t_tabl_ntb_cell_start -\unexpanded\def\tabl_ntb_cell_start +\protected\def\tabl_ntb_cell_start {% \inhibitblank \dotagTABLEcell %\tabl_ntb_next_level @@ -109,7 +109,7 @@ \everypar\t_tabl_ntb_cell_start \font_styles_math_start} -\unexpanded\def\tabl_ntb_cell_stop +\protected\def\tabl_ntb_cell_stop {\font_styles_math_stop \ifhmode \the\t_tabl_ntb_cell_stop @@ -123,7 +123,7 @@ % maybe: % -% \unexpanded\def\tabl_ntb_cell_stop +% \protected\def\tabl_ntb_cell_stop % {\ifhmode % \the\t_tabl_ntb_cell_stop % \par % added 13/4/2006 @@ -213,7 +213,7 @@ \installglobalmacrostack\m_tabl_ntb_saved_row \installglobalmacrostack\m_tabl_ntb_saved_col -\unexpanded\def\tabl_ntb_table_push +\protected\def\tabl_ntb_table_push {\ifnum\m_tabl_tbl_level>\plusone \tabl_ntb_parameters_reset % we need a proper count push/pop @@ -223,7 +223,7 @@ \global\intabletrue \fi} -\unexpanded\def\tabl_ntb_table_pop +\protected\def\tabl_ntb_table_pop {\ifnum\m_tabl_tbl_level>\plusone \pop_macro_m_tabl_ntb_saved_row\global\c_tabl_ntb_row\m_tabl_ntb_saved_row \pop_macro_m_tabl_ntb_saved_col\global\c_tabl_ntb_col\m_tabl_ntb_saved_col @@ -231,11 +231,11 @@ \global\intablefalse \fi} -\unexpanded\def\tabl_ntb_next_level +\protected\def\tabl_ntb_next_level {\advance\c_tabl_level\plusone \edef\m_tabl_tbl_level{\the\c_tabl_level}} -\unexpanded\def\tabl_ntb_prev_level +\protected\def\tabl_ntb_prev_level {\advance\c_tabl_level\minusone \edef\m_tabl_tbl_level{\the\c_tabl_level}} @@ -247,8 +247,8 @@ \installdirectcommandhandler \??naturaltable {naturaltable} % \??naturaltable \installsimpleframedcommandhandler \??naturaltablelocal {naturaltablelocal} \??naturaltablelocal -\unexpanded\def\bTABLEnested{\tabl_ntb_next_level\bTABLE} -\unexpanded\def\eTABLEnested{\eTABLE\tabl_ntb_prev_level} +\permanent\protected\def\bTABLEnested{\tabl_ntb_next_level\bTABLE} +\permanent\protected\def\eTABLEnested{\eTABLE\tabl_ntb_prev_level} \installcorenamespace{naturaltabletal} \installcorenamespace{naturaltablegal} @@ -353,18 +353,6 @@ % \c_tabl_ntb_none % \fi} -% not used -% -% \def\tabl_ntb_tag_state#1#2{\ifcsname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname\zerocount\else\plusone\fi} -% \def\tabl_ntb_row_state#1#2{\ifcsname\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2\endcsname\zerocount\else\plusone\fi} -% \def\tabl_ntb_col_state#1#2{\ifcsname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname\zerocount\else\plusone\fi} - -%def\tabl_ntb_set_spn #1{\expandafter\let\csname\??naturaltablespn\m_tabl_tbl_level:\number#1\endcsname \!!plusone} -%def\tabl_ntb_spn_doifelse#1{\doifelse {\csname\??naturaltablespn\m_tabl_tbl_level:\number#1\endcsname}\!!plusone} - -%def\tabl_ntb_set_spn #1{\setvalue {\??naturaltablespn\m_tabl_tbl_level:\number#1}{1}} -%def\tabl_ntb_spn_doifelse#1{\doifelsevalue{\??naturaltablespn\m_tabl_tbl_level:\number#1}{1}} - \def\tabl_ntb_let_ref #1#2{\expandafter\glet\csname\??naturaltableref\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_set_ref #1#2{\expandafter\xdef\csname\??naturaltableref\m_tabl_tbl_level:\number#1:\number#2\endcsname} %def\tabl_ntb_get_ref #1#2{\ifcsname\??naturaltableref\m_tabl_tbl_level:\number#1:\number#2\endcsname\csname\??naturaltableref\m_tabl_tbl_level:\number#1:\number#2\endcsname\fi} @@ -379,11 +367,11 @@ % keep for a while: % -% \unexpanded\def\tabl_ntb_set_txt_process#1#2#3#4#5#6% nasty: we restore the level +% \protected\def\tabl_ntb_set_txt_process#1#2#3#4#5#6% nasty: we restore the level % {\expandafter\def\csname\??naturaltabletxt\m_tabl_tbl_level:\number#1:\number#2\expandafter\endcsname\expandafter % {\expandafter\def\expandafter\m_tabl_tbl_level\expandafter{\m_tabl_tbl_level}\tabl_ntb_cell_process{#3}{#4}[#5]{#6}}} -\unexpanded\def\tabl_ntb_set_txt_process#1#2#3#4#5#6% +\protected\def\tabl_ntb_set_txt_process#1#2#3#4#5#6% {\expandafter\def\csname\??naturaltabletxt\m_tabl_tbl_level:\number#1:\number#2\endcsname {\tabl_ntb_cell_process{#3}{#4}[#5]{\tabl_ntb_next_level#6\tabl_ntb_prev_level}}} @@ -414,25 +402,24 @@ % so far -\unexpanded\def\tabl_ntb_cell_process#1#2[#3]{} - -\unexpanded\def\bTC#1\eTC{\bTD#1\eTD} \let\eTC\relax -\unexpanded\def\bTX#1\eTX{\bTD#1\eTD} \let\eTX\relax -\unexpanded\def\bTY#1\eTY{\bTR#1\eTR} \let\eTY\relax +\protected\def\tabl_ntb_cell_process#1#2[#3]{} -\unexpanded\def\setupTABLE - {\dotripleempty\tabl_ntb_setup} +\permanent\protected\def\bTC#1\eTC{\bTD#1\eTD} \let\eTC\relax +\permanent\protected\def\bTX#1\eTX{\bTD#1\eTD} \let\eTX\relax +\permanent\protected\def\bTY#1\eTY{\bTR#1\eTR} \let\eTY\relax \let\tabl_ntb_parameters_get\setupcurrentnaturaltablelocal -\def\tabl_ntb_setup - {\ifthirdargument +\permanent\tolerant\protected\def\setupTABLE[#1]#*[#2]#*[#3]% + {\ifarguments + \expandafter\gobblethreeoptionals + \or + \expandafter\tabl_ntb_setup_one + \or + \expandafter\tabl_ntb_setup_two + \or \expandafter\tabl_ntb_setup_three - \orelse\ifsecondargument - \doubleexpandafter\tabl_ntb_setup_two - \else - \doubleexpandafter\tabl_ntb_setup_one - \fi} + \fi[#1][#2][#3]} \def\tabl_ntb_setup_one[#1][#2][#3]% {\setupcurrentnaturaltablelocal[#1]} @@ -457,9 +444,6 @@ \installcorenamespace{naturaltablesetupthree} \installcorenamespace{naturaltablesetuptwo} -%def\tabl_ntb_setup_three[#1]{\csname\??naturaltablesetupthree\ifcsname\??naturaltablesetupthree#1\endcsname#1\else\s!unknown\fi\endcsname[#1]} -%def\tabl_ntb_setup_two [#1]{\csname\??naturaltablesetuptwo \ifcsname\??naturaltablesetuptwo #1\endcsname#1\else\s!unknown\fi\endcsname[#1]} - \def\tabl_ntb_setup_three[#1]{\ifcsname\??naturaltablesetupthree#1\endcsname\expandafter\lastnamedcs\else\expandafter\tabl_ntb_setup_un\fi[#1]} \def\tabl_ntb_setup_two [#1]{\ifcsname\??naturaltablesetuptwo #1\endcsname\expandafter\lastnamedcs\else\expandafter\tabl_ntb_setup_ux\fi[#1]} @@ -492,7 +476,7 @@ \def\tabl_ntb_parameters_get[##1]% {\setvalue{\??naturaltableset\m_tabl_tbl_level:#1}{\tabl_ntb_parameters_get[##1,#2]}}% \csname\??naturaltableset\m_tabl_tbl_level:#1\endcsname - \let\tabl_ntb_parameters_get\setupcurrentnaturaltablelocal + \enforced\let\tabl_ntb_parameters_get\setupcurrentnaturaltablelocal \else \setvalue{\??naturaltableset\m_tabl_tbl_level:#1}{\tabl_ntb_parameters_get[#2]}% \fi @@ -562,7 +546,7 @@ \let\tabl_ntb_setup_section\relax -\unexpanded\def\tabl_ntb_setup_cell#1#2% cell over col over row +\protected\def\tabl_ntb_setup_cell#1#2% cell over col over row {\tabl_ntb_setup_section % already forgotten \edef\m_tabl_ntb_positive_row{\number#1}% \edef\m_tabl_ntb_positive_col{\number#2}% @@ -671,7 +655,7 @@ % \bTR \bTD left \eTD\bTD right \eTD\eTR % \eTABLE -\unexpanded\def\tabl_ntb_tr +\protected\def\tabl_ntb_tr {\c_tabl_ntb_running_col\zerocount \c_tabl_ntb_encountered_col\zerocount \advance\c_tabl_ntb_maximum_row\plusone @@ -687,7 +671,7 @@ \def\m_tabl_ntb_default_nr{\naturaltableparameter\c!nr} \def\m_tabl_ntb_default_nc{\naturaltableparameter\c!nc} -\unexpanded\def\tabl_ntb_td +\protected\def\tabl_ntb_td {\advance\c_tabl_ntb_encountered_col\plusone \iffirstargument \expandafter\tabl_ntb_td_yes @@ -912,18 +896,18 @@ % to be done: head foot, dus state var -\unexpanded\def\bTABLEhead{\dosingleempty\tabl_ntb_head} \let\eTABLEhead\relax -\unexpanded\def\bTABLEnext{\dosingleempty\tabl_ntb_next} \let\eTABLEnext\relax -\unexpanded\def\bTABLEbody{\dosingleempty\tabl_ntb_body} \let\eTABLEbody\relax -\unexpanded\def\bTABLEfoot{\dosingleempty\tabl_ntb_foot} \let\eTABLEfoot\relax +\let\eTABLEhead\relax +\let\eTABLEnext\relax +\let\eTABLEbody\relax +\let\eTABLEfoot\relax -\def\tabl_ntb_head[#1]#2\eTABLEhead{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_head} -\def\tabl_ntb_next[#1]#2\eTABLEnext{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_next} -\def\tabl_ntb_body[#1]#2\eTABLEbody{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_body} -\def\tabl_ntb_foot[#1]#2\eTABLEfoot{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_foot} +\permanent\tolerant\protected\def\bTABLEhead[#1]#2\eTABLEhead{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_head} +\permanent\tolerant\protected\def\bTABLEnext[#1]#2\eTABLEnext{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_next} +\permanent\tolerant\protected\def\bTABLEbody[#1]#2\eTABLEbody{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_body} +\permanent\tolerant\protected\def\bTABLEfoot[#1]#2\eTABLEfoot{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_foot} \def\tabl_ntb_section[#1]#2% also used in tabl-nte - {\unexpanded\def\tabl_ntb_setup_section{\setupcurrentnaturaltablelocal[#1]}% + {\protected\def\tabl_ntb_setup_section{\setupcurrentnaturaltablelocal[#1]}% #2% \let\tabl_ntb_setup_section\relax} @@ -932,10 +916,7 @@ \begincsname\??naturaltableset\m_tabl_tbl_level:\v!start\v!oddeven\m_tabl_tbl_level\endcsname \begincsname\??naturaltableset\m_tabl_tbl_level:\v!start\m_tabl_tbl_level\endcsname} -\unexpanded\def\bTABLE - {\dosingleempty\tabl_ntb_table} - -\def\tabl_ntb_table[#1]% +\permanent\tolerant\protected\def\bTABLE[#1]% {\tabl_ntb_table_push % box not here \bgroup @@ -984,10 +965,10 @@ \let\currentTABLEcolumn\tabl_ntb_current_column \let\nofTABLErows \tabl_ntb_n_of_rows \let\nofTABLEcolumns \tabl_ntb_n_of_columns - \let\bTR\dobTR - \let\bTD\dobTD - \let\bTH\dobTH - \let\bTN\dobTN} + \enforced\let\bTR\dobTR + \enforced\let\bTD\dobTD + \enforced\let\bTH\dobTH + \enforced\let\bTN\dobTN} \def\tabl_ntb_current_row {\m_tabl_ntb_positive_row} \def\tabl_ntb_current_column{\m_tabl_ntb_positive_col} @@ -1001,19 +982,21 @@ % there is no gain in a \doifelsenextoptionalcs variant -\unexpanded\def\dobTR{\dosingleempty\tabl_ntb_tr} % also used in tabl-nte -\unexpanded\def\dobTD{\dosingleempty\tabl_ntb_td} % also used in tabl-nte -\unexpanded\def\dobTH{\dosingleempty\tabl_ntb_th} % also used in tabl-nte -\unexpanded\def\dobTN{\dosingleempty\tabl_ntb_tn} % also used in tabl-nte +% todo with tolerant: + +\permanent\protected\def\dobTR{\dosingleempty\tabl_ntb_tr} % also used in tabl-nte +\permanent\protected\def\dobTD{\dosingleempty\tabl_ntb_td} % also used in tabl-nte +\permanent\protected\def\dobTH{\dosingleempty\tabl_ntb_th} % also used in tabl-nte +\permanent\protected\def\dobTN{\dosingleempty\tabl_ntb_tn} % also used in tabl-nte % permits \expanded{\bTD ... \eTD} -\let\bTR\relax \unexpanded\def\eTR{\ignorespaces} % handy in case we use a macro to generate rows -\let\bTD\relax \unexpanded\def\eTD{\ignorespaces} -\let\bTH\relax \unexpanded\def\eTH{\ignorespaces} -\let\bTN\relax \unexpanded\def\eTN{\ignorespaces} +\permanent\let\bTR\relax \permanent\protected\def\eTR{\ignorespaces} % handy in case we use a macro to generate rows +\permanent\let\bTD\relax \permanent\protected\def\eTD{\ignorespaces} +\permanent\let\bTH\relax \permanent\protected\def\eTH{\ignorespaces} +\permanent\let\bTN\relax \permanent\protected\def\eTN{\ignorespaces} -\unexpanded\def\eTABLE % beware, we need to get rid of spurious spaces when in hmode +\protected\def\eTABLE % beware, we need to get rid of spurious spaces when in hmode {% tricky and dirty order -) \setfalse\c_tabl_ntb_okay % head @@ -1214,12 +1197,12 @@ \the\t_tabl_ntb_row \tabl_ntb_row_align_stop}} -\unexpanded\def\tabl_ntb_row_align_set#1#2#3% +\protected\def\tabl_ntb_row_align_set#1#2#3% {\xdef\m_tabl_ntb_before_split{#1}% \xdef\m_tabl_ntb_after_split {#2}% \xdef\m_tabl_ntb_same_page {#3}} -\unexpanded\def\tabl_ntb_row_align_reset +\protected\def\tabl_ntb_row_align_reset {\glet\m_tabl_ntb_before_split\empty \glet\m_tabl_ntb_after_split \empty \glet\m_tabl_ntb_same_page \empty} @@ -1229,7 +1212,7 @@ % \prelocateTBLrows{1000} % may speed up large tables -\def\prelocateTBLrows#1% we start at zero so we have one to much, better play safe anyway +\permanent\protected\def\prelocateTBLrows#1% we start at zero so we have one to much, better play safe anyway {\dostepwiserecurse\c_tabl_prelocated_rows{#1}\plusone {\expandafter\newtoks\csname\??naturaltabletok\recurselevel\endcsname}% \def\tabl_ntb_row_start @@ -1296,7 +1279,7 @@ \fi \fi} -\unexpanded\def\tabl_ntb_row_align_start +\protected\def\tabl_ntb_row_align_start {\global\advance\c_tabl_ntb_row\plusone \global\c_tabl_ntb_col\plusone \global\c_tabl_ntb_spn\zerocount @@ -1307,7 +1290,7 @@ \hbox\bgroup \kern\dimexpr\d_tabl_ntb_leftmargindistance\relax} -\unexpanded\def\tabl_ntb_row_align_stop +\protected\def\tabl_ntb_row_align_stop {\kern\dimexpr\d_tabl_ntb_rightmargindistance-\d_tabl_ntb_columndistance\relax \egroup \ifconditional\c_strc_tags_enabled @@ -1315,7 +1298,7 @@ \fi \tabl_ntb_row_align_stop_inject} -\unexpanded\def\tabl_ntb_before_page +\protected\def\tabl_ntb_before_page {\ifx\m_tabl_ntb_same_page\v!before % \blank[\v!samepage,\v!strong]% \unpenalty @@ -1326,7 +1309,7 @@ \nobreak \fi} -\unexpanded\def\tabl_ntb_after_page +\protected\def\tabl_ntb_after_page {\ifnum\c_tabl_ntb_row>\c_tabl_ntb_n_of_head_lines \ifnum\tabl_ntb_get_nob\c_tabl_ntb_row=\zerocount \unpenalty @@ -1346,7 +1329,7 @@ \allowbreak % else no proper head split off \fi} -\unexpanded\def\tabl_ntb_inbetween +\protected\def\tabl_ntb_inbetween {\scratchcounter\numexpr\c_tabl_ntb_row+\plusone\relax \ifnum\scratchcounter>\c_tabl_ntb_n_of_hdnx_lines\relax \ifnum\scratchcounter<\c_tabl_ntb_maximum_row\relax @@ -1357,7 +1340,7 @@ \fi \fi} -\unexpanded\def\tabl_ntb_row_align_start_inject +\protected\def\tabl_ntb_row_align_start_inject {\bgroup % protect local vars \m_tabl_ntb_before_split \egroup @@ -1365,7 +1348,7 @@ \tabl_ntb_before_page \fi} -\unexpanded\def\tabl_ntb_row_align_stop_inject +\protected\def\tabl_ntb_row_align_stop_inject {\par \nointerlineskip \ifenableTBLbreak @@ -1389,16 +1372,16 @@ \the\t_tabl_ntb \dostoptagged} -\unexpanded\def\tabl_ntb_span#1% +\protected\def\tabl_ntb_span#1% {\hskip\tabl_ntb_get_dis\c_tabl_ntb_col \dorecurse{#1} {\hskip\tabl_ntb_get_wid\c_tabl_ntb_col\relax \global\advance\c_tabl_ntb_col\plusone}} -\unexpanded\def\tabl_ntb_skip#1% +\protected\def\tabl_ntb_skip#1% {\global\advance\c_tabl_ntb_col#1\relax} -\unexpanded\def\tabl_ntb_plus +\protected\def\tabl_ntb_plus {\global\advance\c_tabl_ntb_col\plusone \kern\d_tabl_ntb_columndistance} @@ -1421,10 +1404,10 @@ \fi}% \fi} -\unexpanded\def\tabl_ntb_cell#1#2% +\protected\def\tabl_ntb_cell#1#2% {\csname\??naturaltablecell\the\tabl_ntb_get_tag{#1}{#2}\endcsname{#1}{#2}} -\unexpanded\def\tabl_ntb_table_start +\protected\def\tabl_ntb_table_start {\global\c_tabl_ntb_spn\zerocount \global\c_tabl_ntb_row\zerocount \global\c_tabl_ntb_col\zerocount @@ -1522,13 +1505,6 @@ \fi \dostoptagged} % right spot -% \def\tabl_ntb_cell_finalize -% {\doifnotinset\localwidth{\v!fit,\v!broad}% user set -% {\scratchdimen\tabl_ntb_get_aut\c_tabl_ntb_col\relax -% \ifdim\localwidth>\scratchdimen -% \tabl_ntb_set_aut\c_tabl_ntb_col{\the\dimexpr\localwidth}% -% \fi}} - \def\tabl_ntb_cell_finalize {\ifx\localwidth\v!fit % nothing @@ -1643,11 +1619,11 @@ \c_tabl_tbl_pass\plusthree \let\tabl_ntb_pass\tabl_ntb_pass_three \ifnum\m_tabl_tbl_level>\plusone - \tabl_tbl_split_nop + \tabl_ntb_split_nop \orelse\ifenableTBLbreak - \tabl_tbl_split_yes + \tabl_ntb_split_yes \else - \tabl_tbl_split_nop + \tabl_ntb_split_nop \fi} \def\tabl_ntb_stretch_widths % more variants, e.g. a max to \dimend @@ -1677,7 +1653,7 @@ \fi \fi} -\def\tabl_tbl_split_nop +\def\tabl_ntb_split_nop {\setbox\b_tabl_ntb_final\vbox{\tabl_ntb_flush_content}% \postprocessTABLEbox\b_tabl_ntb_final \beforeTABLEbox @@ -1693,7 +1669,7 @@ \box\b_tabl_ntb_final \afterTABLEbox} -\def\tabl_tbl_split_yes +\def\tabl_ntb_split_yes {\ifinsidesplitfloat \donetrue \orelse\ifinsidefloat @@ -1704,7 +1680,7 @@ \ifdone \expandafter\tabl_ntb_split_box \else - \expandafter\tabl_tbl_split_nop + \expandafter\tabl_ntb_split_nop \fi} \newbox\TABLEsplitbox % public, don't change @@ -1897,14 +1873,14 @@ \typo_charalign_adapt_font \signalcharacteralign{#2}{#1}} -\unexpanded\def\tabl_ntb_cell_process_a_extra#1#2% +\protected\def\tabl_ntb_cell_process_a_extra#1#2% {\ifcase\tabl_ntb_get_tal{#2}\relax \expandafter\tabl_ntb_cell_process_x \else \expandafter\tabl_ntb_cell_process_a \fi{#1}{#2}} -\unexpanded\def\tabl_ntb_cell_process_x#1#2[#3]#4% +\protected\def\tabl_ntb_cell_process_x#1#2[#3]#4% {} % problem: when span doesn't break we can have a span that is the sum of cells but @@ -1933,7 +1909,7 @@ \tabl_ntb_set_wid\c_tabl_ntb_col{\the\wd\scratchbox}% \fi} -\unexpanded\def\tabl_ntb_cell_process_a#1#2[#3]#4% grouping added ! ! ! +\protected\def\tabl_ntb_cell_process_a#1#2[#3]#4% grouping added ! ! ! {\bgroup \letnaturaltablelocalparameter\c!option\empty \tabl_ntb_setup_cell{#1}{#2}% @@ -1993,7 +1969,7 @@ \box\scratchboxone \egroup} -\unexpanded\def\tabl_ntb_cell_process_b_c#1#2#3[#4]#5% +\protected\def\tabl_ntb_cell_process_b_c#1#2#3[#4]#5% {\setbox\scratchbox\hbox {\tabl_ntb_setup_cell{#2}{#3}% \setupcurrentnaturaltablelocal[#4,#1]% @@ -2017,7 +1993,7 @@ \fi \box2 } -\unexpanded\def\tabl_ntb_cell_process_b#1#2[#3]#4% +\protected\def\tabl_ntb_cell_process_b#1#2[#3]#4% {\scratchdimen\tabl_ntb_get_aut\c_tabl_ntb_col\relax \ifdim\scratchdimen>\zeropoint\relax \else @@ -2031,10 +2007,10 @@ \normalexpanded{\tabl_ntb_cell_process_b_c{\ifdim\scratchdimen>\zeropoint \c!width=\the\scratchdimen\fi}}% {#1}{#2}[#3]{\tabl_ntb_char_align{#1}{#2}#4}} -\unexpanded\def\tabl_ntb_cell_process_c +\protected\def\tabl_ntb_cell_process_c {\tabl_ntb_cell_process_b_c{}} -\unexpanded\def\tabl_ntb_cell_process_d#1#2[#3]#4% +\protected\def\tabl_ntb_cell_process_d#1#2[#3]#4% {\tabl_ntb_setup_cell{#1}{#2}% \bgroup \setupcurrentnaturaltablelocal[#3]% @@ -2044,7 +2020,7 @@ \inheritednaturaltablelocalframed{\tabl_ntb_cell_start\tabl_ntb_char_align{#1}{#2}#4\tabl_ntb_cell_stop}% \egroup} -\unexpanded\def\tabl_ntb_cell_process_e#1#2[#3]#4% +\protected\def\tabl_ntb_cell_process_e#1#2[#3]#4% {\tabl_ntb_setup_cell{#1}{#2}% \setupcurrentnaturaltablelocal[#3]% to get the color right, the way we \color % handle color here prevents interference due to whatsit nodes @@ -2185,19 +2161,16 @@ \installcorenamespace{naturaltablesetup} -\unexpanded\def\defineTABLEsetup - {\dodoubleargument\tabl_ntb_define_setup} - -\def\tabl_ntb_define_setup[#1][#2]% - {\setvalue{\??naturaltablesetup#1}{#2}} +\permanent\tolerant\protected\def\defineTABLEsetup[#1]#*[#2]% + {\ifarguments\else\setvalue{\??naturaltablesetup#1}{#2}\fi} -\let\eTDs\relax -\let\eTRs\relax +\permanent\let\eTDs\relax +\permanent\let\eTRs\relax -\unexpanded\def\bTDs[#1]#2\eTDs +\permanent\protected\def\bTDs[#1]#2\eTDs {\normalexpanded{\bTD[\begincsname\??naturaltablesetup#1\endcsname]}#2\eTD} -\unexpanded\def\bTRs[#1]#2\eTRs +\permanent\protected\def\bTRs[#1]#2\eTRs {\normalexpanded{\bTR[\begincsname\??naturaltablesetup#1\endcsname]}#2\eTR} \protect \endinput diff --git a/tex/context/base/mkiv/tabl-nte.mkiv b/tex/context/base/mkiv/tabl-nte.mkiv index af74a2abe..2a8c4c7dd 100644 --- a/tex/context/base/mkiv/tabl-nte.mkiv +++ b/tex/context/base/mkiv/tabl-nte.mkiv @@ -81,10 +81,10 @@ \setfalse\c_tabl_nte_in_nc} \unexpanded\def\tabl_nte_start_nc - {\futurelet\next\tabl_nte_start_nc_indeed} + {\futurelet\nexttoken\tabl_nte_start_nc_indeed} \def\tabl_nte_start_nc_indeed - {\ifx\next\tabl_nte_start_nr \else + {\ifx\nexttoken\tabl_nte_start_nr \else \expandafter\tabl_nte_start_nc_finish \fi} diff --git a/tex/context/base/mkiv/tabl-nte.mkxl b/tex/context/base/mkiv/tabl-nte.mkxl new file mode 100644 index 000000000..40213ad90 --- /dev/null +++ b/tex/context/base/mkiv/tabl-nte.mkxl @@ -0,0 +1,107 @@ +%D \module +%D [ file=core-nte, +%D version=2009.03.08, +%D title=\CONTEXT\ Table Macros, +%D subtitle=Natural Tables Extensions, +%D author=Hans Hagen \& Wolfgang Schuster, +%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 Table Module / Natural Tables Extensions} + +\unprotect + +%D This module is suggested by Wolfgang Schuster who also prototyped +%D it and came up with the rationale: +%D +%D This module provides an easy way to use natural in a similiar +%D way as the older table module (based on the \TABLE\ macros) and +%D the newer tabulate module. +%D +%D You can see the advantage in the following table, once created +%D with the new macros and once with the normal macros provided +%D with the natural table module. +%D +%D Let us start with the original macros: +%D +%D \startbuffer +%D \bTABLE +%D \bTR +%D \bTD Text 1 \eTD +%D \bTD Text 2 \eTD +%D \eTR +%D \bTR +%D \bTD Text 3 \eTD +%D \bTD Text 4 \eTD +%D \eTR +%D \eTABLE +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D Watch how the new macros use less code: +%D +%D \startbuffer +%D \startTABLE +%D \NC Text 1 \NC Text 2 \NC\NR +%D \NC Text 3 \NC Text 4 \NC\NR +%D \stopTABLE +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D The actual code differs from the prototype that it does not need +%D to collect whole rows and parse them but looks ahead instead. + +\newconditional\c_tabl_nte_in_nc + +\permanent\tolerant\protected\def\startTABLE[#1]% + {\bgroup + \bTABLE[#1]% + \enforced\let\NC\tabl_nte_start_nc + \enforced\let\NR\tabl_nte_start_nr + \enforced\let\bTR\relax + \enforced\let\bTD\relax + \enforced\let\bTH\relax + \enforced\let\bTN\relax} + +\permanent\protected\def\stopTABLE + {\eTABLE + \egroup} + +\permanent\protected\def\tabl_nte_start_nr + {\eTR + \setfalse\c_tabl_nte_in_nc} + +\permanent\protected\def\tabl_nte_start_nc + {\futurelet\nexttoken\tabl_nte_start_nc_indeed} + +\def\tabl_nte_start_nc_indeed + {\ifx\nexttoken\tabl_nte_start_nr \else + \expandafter\tabl_nte_start_nc_finish + \fi} + +\def\tabl_nte_start_nc_finish#1\NC + {\ifconditional\c_tabl_nte_in_nc \else + \settrue\c_tabl_nte_in_nc + \dobTR[]% + \fi + \dobTD#1\eTD\NC} + +%D The related structure commands are also available: + +\permanent\let\stopTABLEhead\relax +\permanent\let\stopTABLEnext\relax +\permanent\let\stopTABLEbody\relax +\permanent\let\stopTABLEfoot\relax + +\permanent\tolerant\protected\def\startTABLEhead[#1]#:#2\stopTABLEhead{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_head} +\permanent\tolerant\protected\def\startTABLEnext[#1]#:#2\stopTABLEnext{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_next} +\permanent\tolerant\protected\def\startTABLEbody[#1]#:#2\stopTABLEbody{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_body} +\permanent\tolerant\protected\def\startTABLEfoot[#1]#:#2\stopTABLEfoot{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_foot} + +\protect \endinput diff --git a/tex/context/base/mkiv/tabl-tab.mkiv b/tex/context/base/mkiv/tabl-tab.mkiv index 3799964c9..e646a1a18 100644 --- a/tex/context/base/mkiv/tabl-tab.mkiv +++ b/tex/context/base/mkiv/tabl-tab.mkiv @@ -1739,7 +1739,7 @@ %D elsewhere. Here we only check for inconsistent spacing. Due to the way \TEX\ %D handles alignments, we cannot automate spacing for colored rows and columns. -\setnewconstant\tablerowzero\zerocount +\tablerowzero\zerocount \appendtoks \let\SR\tabl_table_SR diff --git a/tex/context/base/mkiv/tabl-tab.mkxl b/tex/context/base/mkiv/tabl-tab.mkxl new file mode 100644 index 000000000..5fb7f928c --- /dev/null +++ b/tex/context/base/mkiv/tabl-tab.mkxl @@ -0,0 +1,2229 @@ +%D \module +%D [ file=core-tab, +%D version=1997.10.10, +%D title=\CONTEXT\ Table Macros, +%D subtitle=\TABLE\ Embedding, +%D author=Hans Hagen with copied and patched code from MJ Wichura, +%D date=\currentdate] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{ConTeXt Table Macros / TaBlE Embedding} + +% Todo: just for the fun of it ... use lmtx features. + +% Todo: a bitmore namespace protection ... although we want to keep some of the +% original flavour. +% +% In \MKIV\ the old table macros are sort of obsolete. The color extensions have +% been removed and some code is stripped. For practical reasons the \TABLE\ macros +% that are used are embedded in this file. +% +% The following code is based on TABLE 1.0 by Michael J. Wichura (August 1988. We +% used a patched version with many overloads and extensions. The documented (and +% larger) source can be found in \type {thrd-tab.tex}. +% +% Some code has been stripped. Some color has been added. Some macros have been +% renamed. Registers have been replaces. And probably much more can be cleaned up. +% We also need to use \tabl_tab_ prefixes here. + +\unprotect + +\newconditional\c_tabl_table_spacing_left +\newconditional\c_tabl_table_spacing_right + +\newdimen \d_tabl_table_line_thickness_unit +\newdimen \d_tabl_table_strut_unit +\newskip \s_tabl_table_inter_column_space_unit +\newdimen \d_tabl_table_column_width_unit +\newdimen \d_tabl_table_kern_unit + +\def\tablestrutheightfactor {8} +\def\tablestrutdepthfactor {3} +\def\tableintercolumnspacefactor {3} +\def\tablecolumnwidthfactor {10} +\def\tablevspacefactor {2} +\def\tablekernfactor {1} +\def\tablelinethicknessfactor {4} + +\newtoks\everytable +\newtoks\everytableparbox + +\protected\def\tabl_table_begin_par_box#1% + {\setbox\scratchbox\vtop\bgroup % \setbox added + \hsize#1\relax + \dontcomplain + \tabl_table_restore_lineskips + \normalbaselines + \enforced\let~\fixedspace + \inhibitblank % \blank[\v!disable]% % added + \the\everytableparbox} + +\protected\def\tabl_table_end_par_box + {\removelastskip % itemize or so + \endgraf + \ifnum\prevgraf>\zerocount % we want at least + \verticalstrut \nowhitespace \vskip-\struttotal % one line of text + \egroup + \ifdim\dp\scratchbox>\lineheight % see (*) for an + \getnoflines{\dp\scratchbox}% % example of where + \dp\scratchbox\zeropoint % saving can go + \setbox\scratchbox % terrible wrong + \vtop to \noflines\lineheight{\box\scratchbox}% + \fi % esp between rows + \else % of paragraphs + \egroup + \fi + \box\scratchbox} + +\appendtoks + \parindent\zeropoint + \raggedright + \rightskip\zeropoint \s!plus 4em \relax +\to \everytableparbox + +\newskip \tablelefttabskip +\newskip \tablerighttabskip + +\newcount\!taColumnNumber +\newcount\!taRecursionLevel % (Initially 0) + +\newdimen\!taDimenA % used by \Enlarge +\newdimen\!taDimenB % used by \Enlarge +\newdimen\!taDimenC % used by numeric.tex +\newdimen\!taMinimumColumnWidth + +\newtoks \!taTableSpread +\newtoks \!taPreamble +\newtoks \!taDataColumnTemplate +\newtoks \!taRuleColumnTemplate +\newtoks \!taOldRuleColumnTemplate +\newtoks \!taLeftGlue +\newtoks \!taRightGlue + +\newskip \!taLastRegularTabskip + +\newif \if!taBeginFormat +\newif \if!taOnceOnlyTabskip + +\def\!thToksEdef#1#2% + {\edef\tempstring{#2}% + #1\expandafter{\tempstring}% + \ignorespaces} + +\def\!thLoop#1\repeat + {\def\!thIterate{#1\expandafter\!thIterate\fi}% + \!thIterate + \let\!thIterate\relax} + +\def\tabl_table_begin_format + {\!taPreamble\emptytoks + \!taColumnNumber\zerocount + \scratchskip\s_tabl_table_inter_column_space_unit + \multiply\scratchskip\tableintercolumnspacefactor + \divide\scratchskip\plustwo + \!taRuleColumnTemplate\expandafter{\expandafter\tabskip\the\scratchskip}% + \!taLastRegularTabskip\scratchskip + \!taOnceOnlyTabskipfalse + \!taBeginFormattrue + \let\!tfRowOfWidths\empty + \doreadtableformatkeys} + +\def\!tfSetWidth + {\ifempty\!tfRowOfWidths % true if no prior "w" keys + \ifnum\!taColumnNumber>\zerocount % true if "w" key is to right of first "|" + \begingroup % RowOfWidths={\aligntab\omit || n copies of \aligntab\omit\aligntab#\omit}, where n = number of column to the left of this one + \scratchcounter\plusone + \aftergroup\edef + \aftergroup\!tfRowOfWidths + \aftergroup{% + \aftergroup\aligntab + \aftergroup\omit + \!thLoop + \ifnum \scratchcounter<\!taColumnNumber + \advance\scratchcounter\plusone + \aftergroup\!tfAOAO + \repeat + \aftergroup}% + \endgroup + \fi + \fi + \ifx[\tempstring % \!tgGetValue sets \tempstring = token after w + \expandafter\!tfSetWidthText + \else + \expandafter\!tfSetWidthValue + \fi} + +\def\!tfAOAO{\aligntab\omit\aligntab\omit} + +\def\!tfSetWidthText[#1]% + {\def\!tfWidthText{#1}% + \doreadtableformatkeys} + +\def\!tfSetWidthValue + {\!taMinimumColumnWidth + \ifnum\!tgCode=\plusone + \ifempty\!tgValue \tablecolumnwidthfactor \else \!tgValue \fi \d_tabl_table_column_width_unit + \else + \!tgValue + \fi + \let\!tfWidthText\empty % Override possible prior `w[sample entry]' + \doreadtableformatkeys} + +\def\!tfSetTabskip + {\ifnum\!tgCode=\plusone + \scratchskip\s_tabl_table_inter_column_space_unit + \multiply\scratchskip \ifempty\!tgValue\tableintercolumnspacefactor\else\!tgValue\fi + \else + \scratchskip\!tgValue + \fi + \divide\scratchskip\plustwo + \ifnum\!taColumnNumber=\zerocount + %\!thToksEdef\!taRuleColumnTemplate{\the\!taRuleColumnTemplate\tabskip\the\scratchskip}% + \normalexpanded{\!taRuleColumnTemplate{\the\!taRuleColumnTemplate\tabskip\the\scratchskip}}% + \else + %\!thToksEdef\!taDataColumnTemplate{\the\!taDataColumnTemplate\tabskip\the\scratchskip}% + \normalexpanded{\!taDataColumnTemplate{\the\!taDataColumnTemplate\tabskip\the\scratchskip}}% + \fi + \if!taOnceOnlyTabskip\else + \!taLastRegularTabskip\scratchskip % Remember this Tabskip, for possible + \fi % restoration after a subsequent"OnceOnly" + \doreadtableformatkeys} + +\def\!tfSetVrule + {\!thToksEdef\!taRuleColumnTemplate + {\hfil + \vrule + \noexpand\s!width + \ifnum\!tgCode=\plusone + \ifempty\!tgValue + \c_tabl_table_vrule_thickness_factor + \else + \!tgValue + \fi + \d_tabl_table_line_thickness_unit + \else + \!tgValue + \fi + \alignmark\alignmark\alignmark\alignmark + \hfil + \the\!taRuleColumnTemplate}% + \!tfAdjoinPriorColumn} + +\def\!tfSetAlternateVrule + {\afterassignment\!tfSetAlternateA\scratchtoks} + +\def\!tfSetAlternateA + {\!thToksEdef\!taRuleColumnTemplate{\the\scratchtoks\the\!taRuleColumnTemplate}% + \!tfAdjoinPriorColumn} + +\def\!tfAdjoinPriorColumn + {\ifnum\!taColumnNumber=\zerocount + \!taPreamble=\!taRuleColumnTemplate % New \tabskip may have been added + \else + \ifempty\!tfRowOfWidths\else % no "w" keys specified yet, not even this col + \!tfUpdateRowOfWidths + \fi + \!thToksEdef\!taDataColumnTemplate{\the\!taLeftGlue\the\!taDataColumnTemplate\the\!taRightGlue}% + \!thToksEdef\!taPreamble{\the\!taPreamble\aligntab\the\!taDataColumnTemplate\aligntab\the\!taRuleColumnTemplate}% + \fi + \advance\!taColumnNumber\plusone + \if!taOnceOnlyTabskip + \!thToksEdef\!taDataColumnTemplate{\alignmark\alignmark\alignmark\alignmark\tabskip\the\!taLastRegularTabskip}% + \else + \!taDataColumnTemplate{\alignmark\alignmark}% + \fi + \!taRuleColumnTemplate\emptytoks + \!taLeftGlue{\hfil}% + \!taRightGlue{\hfil}% + \!taMinimumColumnWidth\zeropoint + \let\!tfWidthText\empty + \!taOnceOnlyTabskipfalse + \doreadtableformatkeys} + +\def\!tfUpdateRowOfWidths + {\ifempty\!tfWidthText\else + \!tfComputeMinColWidth + \fi + \edef\!tfRowOfWidths + {\!tfRowOfWidths + \aligntab + \omit + \ifdim \!taMinimumColumnWidth>\zeropoint + \hskip \the\!taMinimumColumnWidth + \fi + \aligntab + \omit}} + +\def\!tfComputeMinColWidth + {\setbox\scratchbox\vbox + {\ialign{% Plain's initialized \halign; \tabskip=0pt \everycr={} + \span\the\!taDataColumnTemplate\cr + \!tfWidthText\cr}}% + \!taMinimumColumnWidth\wd\scratchbox} + +\def\!tfFinishFormat + {\!thToksEdef\!taPreamble{% + \alignmark\alignmark\alignmark\alignmark\tabskip\tablelefttabskip + \aligntab + \the\!taPreamble\tabskip\tablerighttabskip + \aligntab + \alignmark\alignmark\alignmark\alignmark\tabskip\zeropoint\cr} + \!taBeginFormatfalse + \!ttDoHalign} + +\def\tabl_table_reformat[#1]% will become local + {\omit + \!taDataColumnTemplate{\alignmark\alignmark}% + \!taLeftGlue\emptytoks + \!taRightGlue\emptytoks + \begingroup + \tabl_table_use_bar + \expanded{\endgroup\noexpand\doreadtableformatkeys#1]}}% appear in a \tabl_table_reformat cmd; this is here as a safeguard. + +\appendtoks + \enforced\let\ReFormat\tabl_table_reformat +\to \everytable + +\def\!tfEndReFormat + {\!tfReFormat} + +\appendtoks \tabl_table_paralignment \to \everytableparbox + +\def\!tfReFormat#1% + {\the \!taLeftGlue + \vbox{\forgetall\ialign{\span\the\!taDataColumnTemplate\cr#1\cr}}% + \the \!taRightGlue + \kern\zeropoint} % prevents \unskip / really needed + +\def\!tgGetValue#1% + {\def\!tgReturn{#1}% + \futurelet\tempstring\!tgCheckForParen} + +\def\!tgCheckForParen% + {\ifx\tempstring (% + \expandafter \!tgDoParen + \else + \expandafter \!tgCheckForSpace + \fi} + +\def\!tgDoParen(#1)% + {\def\!tgCode{2}% will be expanded + \def\!tgValue{#1}% + \!tgReturn} + +\def\!tgCheckForSpace + {\def\!tgCode{1}% + \let\!tgValue\empty + \ifx\tempstring\!thSpaceToken + \expandafter\!tgReturn + \else + \expandafter\!tgCheckForDigit + \fi} + +\def\!tgCheckForDigit % less tokens: (could be an ifcsname) + {\donetrue + \ifx 0\tempstring \orelse \ifx 1\tempstring \orelse + \ifx 2\tempstring \orelse \ifx 3\tempstring \orelse + \ifx 4\tempstring \orelse \ifx 5\tempstring \orelse + \ifx 6\tempstring \orelse \ifx 7\tempstring \orelse + \ifx 8\tempstring \orelse \ifx 9\tempstring \else + \donefalse + \fi + \ifdone + \expandafter\!tgGetNumber + \else + \expandafter\!tgReturn + \fi} + +% \def\!tgCheckForDigit % does not work +% {\relax\doifnumberelse\tempstring\!tgGetNumber\!tgReturn} + +\def\!tgGetNumber {\afterassignment\!tgGetNumberA\scratchcounter=} +\def\!tgGetNumberA{\edef\!tgValue{\the\scratchcounter}\!tgReturn} + +\def\!tgSetUpParBox + {\normalexpanded + {\noexpand \doreadtableformatkeys + b{\tabl_table_begin_par_box + {\ifnum\!tgCode=\plusone + \ifempty\!tgValue + \tablecolumnwidthfactor + \else + \!tgValue + \fi + \d_tabl_table_column_width_unit + \else + \!tgValue + \fi}}% + a{\tabl_table_end_par_box}}} + +\def\!tgInsertKern + {\edef\tempstring + {\kern + \ifnum\!tgCode=\plusone + \ifempty\!tgValue + \tablekernfactor + \else + \!tgValue + \fi + \d_tabl_table_kern_unit + \else + \!tgValue + \fi}% + \edef\tempstring + {\noexpand\doreadtableformatkeys + \ifconditional\c_tabl_table_spacing_left + b{\tempstring} + \fi + \ifconditional\c_tabl_table_spacing_right + a{\tempstring} + \fi}% + \tempstring} + +\def\newtableformatkey #1{\setvalue{!tk<\string#1>}} +\def\doreadtableformatkeys#1{\getvalue{!tk<\string#1>}} + +% Key "b": b{TOKENS} adds TOKENS to the left of (before) the template + +\newtableformatkey b#1% + {\expandafter\!tkJoin\expandafter{\the\!taDataColumnTemplate}{#1}% + \doreadtableformatkeys} + +\def\!tkJoin#1#2% + {\!taDataColumnTemplate{#2#1}}% + +% Key "a": a{TOKENS} adds TOKENS to the right of (after) the template + +\newtableformatkey a#1% + {\toksapp\!taDataColumnTemplate{#1}% + \doreadtableformatkeys} + +% Key "\{": Enclose template in braces. + +\newtableformatkey \{% + {\!taDataColumnTemplate=\expandafter{\expandafter{\the\!taDataColumnTemplate}}% + \doreadtableformatkeys} + +% Key "*": "*{N}{KEY LETTERS}" is equivalent to specifying +% N times. +% KEY LETTERS may contain further * specifications + +\newtableformatkey *#1#2% + {\scratchcounter=#1\relax + \scratchtoks\emptytoks + \!thLoop + \ifnum\scratchcounter>\zerocount + \toksapp\scratchtoks{#2}% + \advance\scratchcounter\minusone + \repeat + \expandafter\doreadtableformatkeys\the\scratchtoks} + +% Key "\LeftGlue": Specifies the glue (usually \hfil, or nothing) to be +% added to extreme left of the template to position a column + +\newtableformatkey \LeftGlue#1% + {\!taLeftGlue{#1}% + \doreadtableformatkeys} + +\newtableformatkey \RightGlue#1% + {\!taRightGlue{#1}% + \doreadtableformatkeys} + +\newtableformatkey c% + {\prependtoks\raggedcenter\to\!taDataColumnTemplate + \doreadtableformatkeys \LeftGlue\hfil \RightGlue\hfil} + +\newtableformatkey l% + {\prependtoks\raggedright\to\!taDataColumnTemplate + \doreadtableformatkeys \LeftGlue\empty \RightGlue\hfil} + +\newtableformatkey r% + {\prependtoks\raggedleft\to\!taDataColumnTemplate + \doreadtableformatkeys \LeftGlue\hfil \RightGlue\empty} + +\newtableformatkey x% + {\prependtoks\notragged\to\!taDataColumnTemplate + \doreadtableformatkeys \LeftGlue\hfil \RightGlue\empty} + +% Key "k": Adds kerns to left and right of "#" This key and the two below use Plain +% TeX's \if@h as if it were \if@left, and \if@v as if it were \if@right. Table +% making goes on in a group, so even in the unlikely circumstance that a \phantom +% is currently under construction, there's no problem. + +\newtableformatkey k% + {\settrue\c_tabl_table_spacing_left + \settrue\c_tabl_table_spacing_right + \!tgGetValue{\!tgInsertKern}} + +% Key "i": Adds a kern to the left of "#" + +\newtableformatkey i% + {\settrue\c_tabl_table_spacing_left + \setfalse\c_tabl_table_spacing_right + \!tgGetValue{\!tgInsertKern}} + +% Key "j": Adds a kern to the right of "#" + +\newtableformatkey j% + {\setfalse\c_tabl_table_spacing_left + \settrue\c_tabl_table_spacing_right + \!tgGetValue{\!tgInsertKern}} + +% Key "n": numeric item , non-math mode. + +\newtableformatkey n% + {\def\!tnStyle{}% + \futurelet\!tnext\!tnTestForBracket} + +% Key "N": numeric item, math mode. + +\newtableformatkey N% + {\def\!tnStyle{$}% + \futurelet\!tnext\!tnTestForBracket} + +% Key "m": Math mode. + +\newtableformatkey m% + {\doreadtableformatkeys b{\normalstartimath} a{\normalstopimath}} + +% Key "M": Displaymath mode. + +\newtableformatkey M% + {\doreadtableformatkeys \{ b{\normalstartimath\displaystyle} a{\normalstopimath}} + +% Key "\m": Template ${}#\hfil$ + +\newtableformatkey \m% + {\doreadtableformatkeys l b{{}} m} + +% Key "\M": Template $\displaystyle{{}#\hfil}$ + +\newtableformatkey \M% + {\doreadtableformatkeys l b{{}} M} + +% Key "f": Set font (E.g., f\it sets up italic font (assuming \it +% has its usual meaning) + +\newtableformatkey f#1% + {\doreadtableformatkeys b{#1}} + +\newtableformatkey B{\doreadtableformatkeys f\bf} % Key "B": abbreviation for f\bf +\newtableformatkey I{\doreadtableformatkeys f\it} % Key "I": abbreviation for f\it +\newtableformatkey S{\doreadtableformatkeys f\sl} % Key "S": abbreviation for f\sl +\newtableformatkey R{\doreadtableformatkeys f\rm} % Key "R": abbreviation for f\rm +\newtableformatkey T{\doreadtableformatkeys f\tt} % Key "T": abbreviation for f\tt + +% Key "p": ParBox + +\newtableformatkey p% + {\!tgGetValue{\!tgSetUpParBox}} + +% Key "w": minimum column width + +\newtableformatkey w% + {\!tkTestForBeginFormat w{\!tgGetValue{\!tfSetWidth}}} + +% Key "s": Set tabskip for the inter-column space to the right of the current +% column, and all subsequent spaces, until overriden by a new "s" or "o" key. + +\newtableformatkey s% + {\!taOnceOnlyTabskipfalse % in case same column has a prior "o" key + \!tkTestForBeginFormat t{\!tgGetValue{\!tfSetTabskip}}} + +% Key "o": Apply the \tabskip stated for this column ONLY to the inter-column space +% just to the right of this column; restore the the previous \tabskip for +% subsequent columns. + +\newtableformatkey o% + {\!taOnceOnlyTabskiptrue + \!tkTestForBeginFormat o{\!tgGetValue{\!tfSetTabskip}}} + +% Key "|": Standard rule column designator + +\newtableformatkey |% + {\!tkTestForBeginFormat |{\!tgGetValue{\!tfSetVrule}}} + +% Key "\|": Non-standard rule column designator + +\newtableformatkey \|% + {\!tkTestForBeginFormat \|{\!tfSetAlternateVrule}} + +% Key ".": PERIOD -- end of \tabl_table_begin_format section. + +\newtableformatkey .% + {\!tkTestForBeginFormat.{\!tfFinishFormat}} + +% Key "\doendtableformat": Equivalent to "." + +\newtableformatkey \doendtableformat + {\!tkTestForBeginFormat\doendtableformat{\!tfFinishFormat}} + +% Key "]": End of \tabl_table_reformat section + +\newtableformatkey ]% + {\!tkTestForReFormat ] \!tfEndReFormat} + +% TEST FOR BEGIN FORMAT{}{Intended Action}: This test is run on keys that can +% only be used by \tabl_table_begin_format --- "s", "o", "|", "\|", "w", ".", and +% "\doendtableformat". + +\def\!tkTestForBeginFormat#1#2% + {\if!taBeginFormat + \def\tempstring{#2}% + \expandafter\tempstring + \else + \toks0={#1}% + \toks2=\expandafter{\string\tabl_table_reformat}% + \expandafter\!tkImproperUse + \fi} + +% TEST FOR RE FORMAT{}{Intended Action}: This test is run on the key "]", +% which can only be used by \tabl_table_reformat. + +\def\!tkTestForReFormat#1#2% + {\if!taBeginFormat + \toks0={#1}% + \toks2=\expandafter{\string\tabl_table_begin_format}% + \expandafter\!tkImproperUse + \else + \def\tempstring{#2}% + \expandafter\tempstring + \fi} + +% NOTE: THE SPACE BETWEEN A NUMERIC ENTRY AND THE FOLLOWING '|', '"', OR '\|' IS +% MANDATORY. EMPTY NUMERIC ENTRIES ARE NOT ALLOWED: USE '{}' OR '\omit' INSTEAD. + +\def\!tnTestForBracket + {\ifx[\!tnext + \expandafter\!tnGetArgument + \else + \expandafter\!tnGetCode + \fi} + +% GET CODE: E.g. "4", or "4.0", "0.4", or "10.2" + +\def\!tnGetCode#1 % + {\!tnConvertCode #1..!} + +% CONVERT CODE: E.g. converts above to [0000], [0000.], [.0000], [0000000000.00] + +\def\!tnConvertCode #1.#2.#3!% + {\begingroup + \aftergroup\edef \aftergroup\tempstring \aftergroup{% + \aftergroup[% + \scratchcounter#1\relax + \!thLoop + \ifnum \scratchcounter>\zerocount + \advance\scratchcounter\minusone + \aftergroup0 + \repeat + \def\tempstring{#3}% + \ifempty\tempstring\else + \aftergroup. + \scratchcounter#2\relax + \!thLoop + \ifnum \scratchcounter>\zerocount + \advance\scratchcounter\minusone + \aftergroup0 + \repeat + \fi + \aftergroup]\aftergroup}% + \endgroup\relax + \expandafter\!tnGetArgument\tempstring} + +% GET ARGUMENT: [ > + +\def\!tnGetArgument[#1]% + {\!tnMakeNumericTemplate\!tnStyle#1..!} + +% MAKE NUMERIC TEMPLATE + +\def\!tnMakeNumericTemplate#1#2.#3.#4!% #1= or $ + {\def\tempstring{#4}% + \ifempty\tempstring + \!taDimenC\zeropoint + \else + \setbox\scratchbox\hbox{\mathsurround\zeropoint #1.#3#1}% + \!taDimenC\wd\scratchbox + \fi + \setbox\scratchbox\hbox{\mathsurround\zeropoint #1#2#1}% + \!thToksEdef\!taDataColumnTemplate + {\noexpand\!tnSetNumericItem{\the\wd\scratchbox}{\the\!taDimenC}{#1}% + \the\!taDataColumnTemplate}% Might have tabskip glue in here + \doreadtableformatkeys} + +% SET NUMERIC ITEM + +\def\!tnSetNumericItem #1#2#3#4 % + {\!tnSetNumericItemA {#1}{#2}{#3}#4..!} + +\def\!tnSetNumericItemA #1#2#3#4.#5.#6!% + {\def\tempstring{#6}% + \hbox to #1{\hss \mathsurround\zeropoint #3#4#3}% + \hbox to #2{\ifempty\tempstring\else\mathsurround\zeropoint #3.#5#3\fi\hss}} + +% extensions + +\newtableformatkey q% + {\let\!tqStyle\empty + \futurelet\!tnext\!tqTestForBracket} + +\newtableformatkey Q% + {\def\!tqStyle{$}% + \futurelet\!tnext\!tqTestForBracket} + +\def\!tqTestForBracket + {\ifx[\!tnext + \!thx\!tqGetArgument + \else + \!thx\!tqGetCode + \fi} + +\def\!tqGetCode#1 % note the blank + {\!tqConvertCode #1,,!} + +\def\!tqConvertCode #1,#2,#3!% + {\begingroup + \aftergroup\edef + \aftergroup\tempstring + \aftergroup{% + \aftergroup[% + \scratchcounter#1\relax + \!thLoop + \ifnum \scratchcounter>\zerocount + \advance\scratchcounter\minusone + \aftergroup0 + \repeat + \def\tempstring{#3}% + \ifempty\tempstring\else + \aftergroup, + \scratchcounter#2\relax + \!thLoop + \ifnum\scratchcounter>\zerocount + \advance\scratchcounter\minusone + \aftergroup0 + \repeat + \fi + \aftergroup]\aftergroup}% + \endgroup\relax + \!thx\!tqGetArgument\tempstring} + +\def\!tqGetArgument[#1]% + {\!tqMakeQuantityTemplate\!tqStyle#1,,!} + +\def\!tqMakeQuantityTemplate#1#2,#3,#4!% #1= or $ + {\def\tempstring{#4}% + \ifempty\tempstring + \!taDimenC\zeropoint + \else + \setbox\scratchbox\hbox{\mathsurround\zeropoint #1,#3#1}% + \!taDimenC\wd\scratchbox + \fi + \setbox\scratchbox\hbox{\mathsurround\zeropoint #1#2#1}% + \!thToksEdef\!taDataColumnTemplate + {\noexpand\!tqSetQuantityItem{\the\wd\scratchbox}{\the\!taDimenC}{#1}% + \the\!taDataColumnTemplate}% + \doreadtableformatkeys} + +\def\!tqSetQuantityItem #1#2#3#4 % + {\!tqSetQuantityItemA{#1}{#2}{#3}#4,,!} + +\def\!tqSetQuantityItemA #1#2#3#4,#5,#6!% + {\def\tempstring{#6}% + \hbox to #1{\hss\mathsurround\zeropoint#3#4#3}% + \hbox to #2{\ifempty\tempstring\else\mathsurround\zeropoint#3,#5#3\fi\hss}} + +% \Enlarge +% \enlarge + +\def\tabl_table_Enlarge#1#2% + {% 3rd argument is picked up later + % #1=extra height + % #2=extra depth + \!taDimenA=#1\relax + \!taDimenB=#2\relax + \let\!TsSpaceFactor\empty + \ifmmode + \expandafter\mathpalette + \expandafter\!TsEnlargeMath + \else + \expandafter\!TsEnlargeOther + \fi} + +\def\!TsEnlargeOther#1% + {\ifhmode + \setbox\scratchbox\hbox{#1\xdef\!TsSpaceFactor{\spacefactor\the\spacefactor}}% + \else + \setbox\scratchbox\hbox{#1}% + \fi + \!TsFinishEnlarge} + +\def\!TsEnlargeMath#1#2% + {\setbox\scratchbox\hbox{\normalstartimath\mathsurround\zeropoint#1{#2}\normalstopimath}% + \!TsFinishEnlarge} + +\def\!TsFinishEnlarge + {\ht\scratchbox\dimexpr\ht\scratchbox+\!taDimenA\relax + \dp\scratchbox\dimexpr\dp\scratchbox+\!taDimenB\relax + \box\scratchbox + \!TsSpaceFactor\relax} + +\def\tabl_table_enlarge#1#2% 3rd argument is picked up later + {\tabl_table_Enlarge{#1\d_tabl_table_strut_unit}{#2\d_tabl_table_strut_unit}} + +\appendtoks + \enforced\let\enlarge\tabl_table_enlarge + \enforced\let\Enlarge\tabl_table_Enlarge +\to \everytable + +% BEGIN TABLE + +\let\tabl_table_standard_end\relax + +\def\tabl_table_standard_begin[#1]% \!ttBeginTable (always argument) + {\if#1u% unboxed table + \ifmmode + \let\tabl_table_standard_end\relax % user had better be in display math mode and have only one table at the outer level + \else % user had better be in vertical mode + \bgroup + \let\tabl_table_standard_end\egroup + \fi + \else + \hbox\bgroup + \def\tabl_table_standard_end{\egroup\egroup}% + \if#1t% + \vtop + \orelse\if#1b% + \vbox + \else + \def\tabl_table_standard_end{\egroup\normalstopimath\egroup}% + \scratchtoks\everymath + \everymath\emptytoks + \normalstartimath + \everymath\scratchtoks + \vcenter + \fi + \bgroup % for the \vtop, \vbox, or \vcenter + \fi + \advance\!taRecursionLevel\plusone + \let\!ttRightGlue\relax + \everycr\emptytoks + \ifnum\!taRecursionLevel=\plusone + \the\everytable + \fi} + +\bgroup \catcode\tildeasciicode\activecatcode + + \appendtoks + \catcode\barasciicode\activecatcode + \enforced\protected\def ~{\kern.5em}% + \enforced\protected\def\\{\ifhmode\space\else\par\fi}% + \to \everytable + +\egroup + +\let\!ttRightGlue\relax % This may be changed, in a group, by \JustCenter, etc + +% DO HALIGN: Invoked by END FORMAT (or the key ".") + +\let\tabl_table_restore_lineskips\relax + +\def\!ttDoHalign + {\edef\tabl_table_restore_lineskips + {\baselineskip \the\baselineskip + \lineskiplimit\the\lineskiplimit + \lineskip \the\lineskip + \tabskip \the\tabskip + \relax}% + \baselineskip \zeropoint + \lineskiplimit\zeropoint + \lineskip \zeropoint + \tabskip \zeropoint + \edef\p_tabl_table_textwidth{\directtablesparameter\c!textwidth}% + % we are not in sync so: + \synchronizedisplaydirection + \synchronizeinlinedirection + \halign + \usedirectionparameterreverse\directtablesparameter + \ifempty\p_tabl_table_textwidth \else to \ifx\p_tabl_table_textwidth\v!max \hsize \else \p_tabl_table_textwidth \fi\fi + %\the\!taTableSpread + \bgroup + \span + \the\!taPreamble + \ifempty\!tfRowOfWidths\else + \!tfRowOfWidths\cr + \fi} + +% END TABLE + +\def\tabl_table_normal_end + {\egroup % finishes the \halign + \tabl_table_standard_end} % closes off the table envirnoment set up by \tablestandardbegin + +\def\tabl_table_normal_line_ending + {\cr} + +\def\tabl_table_normal_line_format#1#2% + {\vrule + \s!width \zeropoint + \s!height\dimexpr\tablestrutheightfactor\d_tabl_table_strut_unit+#1\d_tabl_table_strut_unit\relax + \s!depth \dimexpr\tablestrutdepthfactor \d_tabl_table_strut_unit+#2\d_tabl_table_strut_unit\relax + \relax + \cr} + +% INSERT VRULE + +\newcount\c_tabl_table_n_of_vrules \c_tabl_table_n_of_vrules\plusone + +\let\m_tabl_table_vrule_color\empty +\let\m_tabl_table_hrule_color\empty + +\def\do!ttInsertVrule + {\vrule\s!width + \ifnum\!tgCode=\plusone + \ifempty\!tgValue + \c_tabl_table_vrule_thickness_factor + \else + \!tgValue + \fi + \d_tabl_table_line_thickness_unit + \else + \!tgValue + \fi + \hskip.125\emwidth\relax} + +\def\tabl_table_normal_line_simple_bar + {\unskip\!ttRightGlue\aligntab\aligntab} + +\def\tabl_table_normal_line_complex_bar + {\unskip\!ttRightGlue\aligntab\omit + \hfil + \ifempty\m_tabl_table_vrule_color\else + \switchtocolor[\m_tabl_table_vrule_color]% + \fi + \ifcase\c_tabl_table_n_of_vrules\or + \do!ttInsertVrule + \unskip + \else + \dorecurse\c_tabl_table_n_of_vrules\do!ttInsertVrule + \global\c_tabl_table_n_of_vrules\plusone + \unskip + \fi + \glet\m_tabl_table_vrule_color\empty + \hfil + \aligntab} + +\def\tabl_table_normal_no_bar + {\unskip\!ttRightGlue\aligntab\omit\aligntab} + +\def\tabl_table_normal_single_rule + {\aligntab\tabl_table_normal_long_rule\aligntab} + +\def\tabl_table_normal_multi_rule + {\aligntab\tabl_table_use\c_tabl_table_drule_span\tabl_table_normal_long_rule\aligntab} + +% USE + +\def\tabl_table_use#1% + {\ifnum#1>\plusone + \omit + \global\setfalse\c_tabl_table_is_division % added + \scratchcounter\currenttablecolumn % added + \advance\scratchcounter #1% % added + \advance\scratchcounter \minusone % added + \def\next % added + {\global\advance\currenttablecolumn #1% % added + \global\advance\currenttablecolumn \minusone % added + \scratchcounter#1% + \advance\scratchcounter \minusone + \advance\scratchcounter \scratchcounter + \!thLoop + \ifnum\scratchcounter>\plusone + \spanomit \advance\scratchcounter\minusone + \repeat + \span}% + \else % added + \def\next % conflicts with possible next \omit % added + {\global\advance\currenttablecolumn \plusone}%% added + \fi + \next} % added + +\def\tabl_table_Use#1[% + {\tabl_table_use{#1}% + \tabl_table_reformat[} + +\appendtoks + \enforced\let\use\tabl_table_use + \enforced\let\Use\tabl_table_Use +\to \everytable + +% rules + +\def\tabl_table_normal_full_rule + {\noalign\bgroup + \!ttGetHalfRuleThickness + \scratchdistance\directtablesparameter\c!openup + \ifzeropt\scratchdistance\else\kern\scratchdistance\fi + \hrule\s!height\scratchdimen\s!depth\scratchdimen + \ifzeropt\scratchdistance\else\kern\scratchdistance\fi + \egroup} + +\def\tabl_table_normal_short_rule % was: \!ttShortHrule + {\omit + \!ttGetHalfRuleThickness + \ifempty\m_tabl_table_hrule_color\else + \switchtocolor[\m_tabl_table_hrule_color]% see *DL* + \fi + \leaders\hrule\s!height\scratchdimen\s!depth\scratchdimen\hfill + \emptyhbox + \ignorespaces} + +\def\tabl_table_normal_long_rule % was: \!ttLongHrule + {\omit\span + \omit\span + \tabl_table_normal_short_rule} + +\def\!ttGetHalfRuleThickness + {\scratchdimen\dimexpr + \ifnum\!tgCode=\plusone + \ifempty\!tgValue + \c_tabl_table_hrule_thickness_factor + \else + \!tgValue % user-specified integer + \fi + \d_tabl_table_line_thickness_unit + \else + \!tgValue % user-specified dimension + \fi + \divide\scratchdimen\plustwo} + +% \emptyhbox prevents \unskip + +\def\tabl_table_Left #1{#1\hfill\emptyhbox} +\def\tabl_table_Center#1{\hfill#1\hfill\emptyhbox} +\def\tabl_table_Right #1{\hfill#1} + +\def\tabl_table_OpenUp#1#2% + {\edef\tablestrutheightfactor{\withoutpt\the\dimexpr\tablestrutheightfactor\points+#1\points}% + \edef\tablestrutdepthfactor {\withoutpt\the\dimexpr\tablestrutdepthfactor \points+#2\points}} + +% SetTableToWidth -> textwidth=dimension [to dimension] +% Expand -> textwidth=max [to \hsize] +% WidenTableBy -> [spread #1] +% \tablelefttabskip\zeropoint\s!plus1\s!fill +% \tablerighttabskip\tablelefttabskip +% LongLines -> [spread \hsize] + +\def\tabl_table_JustLeft {\omit\let\!ttRightGlue\hfill} +\def\tabl_table_JustCenter{\omit\hfill\emptyhbox\let\!ttRightGlue\hfill} +\def\tabl_table_JustRight {\omit\hfill\emptyhbox} + +\def\tabl_table_Smash + {\relax + \ifmmode + \expandafter\mathpalette + \expandafter\!thDoMathVCS + \else + \expandafter\!thDoVCS + \fi} + +\def\!thDoVCS#1% + {\setbox\zerocount\hbox{#1}% + \!thFinishVCS} + +\def\!thDoMathVCS#1#2% + {\setbox\zerocount\hbox{\normalstartimath\mathsurround\zeropoint#1{#2}\normalstopimath}% + \!thFinishVCS} + +\def\!thFinishVCS + {\vpack to\zeropoint{\vss\box\zerocount\vss}} + +\def\tabl_table_Raise + {\def\!thSign{+}% + \!tgGetValue\!thSetDimen} + +\def\tabl_table_Lower + {\def\!thSign{-}% + \!tgGetValue\!thSetDimen} + +\def\!thSetDimen + {\ifnum\!tgCode=\plusone + \ifempty\!tgValue + \!taDimenA\tablestrutheightfactor\d_tabl_table_strut_unit + \advance\!taDimenA\tablestrutdepthfactor\d_tabl_table_strut_unit + \divide\!taDimenA\plustwo + \else + \!taDimenA\!tgValue\d_tabl_table_strut_unit + \fi + \else + \!taDimenA\!tgValue + \fi + \!taDimenA\!thSign\!taDimenA\relax + \ifmmode + \expandafter\mathpalette + \expandafter\!thDoMathRaise + \else + \expandafter\!thDoSimpleRaise + \fi} + +\def\!thDoSimpleRaise#1% + {\setbox\zerocount\hbox{\raise \!taDimenA\hbox{#1}}% + \!thFinishRaise} % From Plain TeX: \ht0=0pt \dp0=0pt \box0 + +\def\!thDoMathRaise#1#2% + {\setbox\zerocount\hbox{\raise \!taDimenA\hbox{\normalstartimath\mathsurround\zeropoint#1{#2}\normalstopimath}}% + \!thFinishRaise} + +\def\!thFinishRaise + {\ht\zerocount\zeropoint + \dp\zerocount\zeropoint + \box\zerocount} + +\def\tabl_table_BackSpace + {\!tgGetValue\!thKernBack} + +\def\!thKernBack + {\kern - + \ifnum\!tgCode=\plusone + \ifempty\!tgValue + \tablekernfactor + \else + \!tgValue % user-specified integer + \fi + \d_tabl_table_kern_unit + \else + \!tgValue % user-specified dimension + \fi + \ignorespaces} + +\def\tabl_table_Vspace + {\noalign + \bgroup + \!tgGetValue\!thVspace} + +\def\!thVspace + {\vskip + \ifnum\!tgCode=\plusone + \ifempty\!tgValue + \tablevspacefactor + \else + \!tgValue % user-specified integer + \fi + \d_tabl_table_strut_unit + \else + \!tgValue % user-specified skip + \fi + \egroup} % Ends the \noalign + +\appendtoks + \enforced\let\JustLeft \tabl_table_JustLeft + \enforced\let\JustCenter \tabl_table_JustCenter + \enforced\let\JustRight \tabl_table_JustRight + \enforced\let\Smash \tabl_table_Smash + \enforced\let\Raise \tabl_table_Raise + \enforced\let\Lower \tabl_table_Lower + \enforced\let\BackSpace \tabl_table_BackSpace + \enforced\let\Vspace \tabl_table_Vspace + \enforced\let\OpenUp \tabl_table_OpenUp + \enforced\let\TableLeft \tabl_table_Left + \enforced\let\TableCenter\tabl_table_Center + \enforced\let\TableRight \tabl_table_Right +\to \everytable + +%D \macros +%D {inintable, ifsplittables} +%D +%D First we declare some variables. These show a bit what we are dealing with. First +%D we introdoce some booleans that enable us, inside as well as outside this module, +%D to determine in what mode we are. + +\newif\ifintable +\newif\ifsplittables + +%D We show this feature in an example that also shows some of the basic table +%D typesetting commands. +%D +%D \startbuffer +%D \starttable[|||] +%D \HL +%D \VL first \VL second \VL\AR +%D \HL +%D \VL alfa \VL 1 \VL\AR +%D \VL beta \VL 2 \VL\AR +%D \VL gamma \VL 3 \VL\AR +%D \HL +%D \stoptable +%D \stopbuffer +%D +%D \startlinecorrection +%D \getbuffer +%D \stoplinecorrection +%D +%D This table is specified as: +%D +%D \typebuffer +%D +%D This examples shows about the minimum of commands needed to typeset such a table. +%D In this table, the \type {\AR} is automatically translated into the more +%D primitive (but more verbose) commands \type {\SR}, \type {\FR}, \type {\MR} and +%D \type {\LR} commands. +%D +%D \startbuffer +%D \starttables[|||] +%D \HL +%D \VL first \VL second \VL\AR +%D \HL +%D \VL alfa \VL 1 \VL\AR +%D \VL beta \VL 2 \VL\AR +%D \VL gamma \VL 3 \VL\AR +%D \HL +%D \stoptables +%D \stopbuffer +%D +%D \getbuffer +%D +%D Some simple color support is provided: +%D +%D \startbuffer +%D \starttable[|c|c|] +%D \HL +%D \VL test \VL test \VL \SR +%D \HL[green,5] +%D \VL[red] test \VL test \VL \FR +%D \VL test \VL[10,red] test \VL \MR +%D \VL test \VL test \VL[10] \LR +%D \HL +%D \stoptable +%D \stopbuffer +%D +%D \typebuffer \getbuffer + +\installcorenamespace{tabletemplate} + +\immutable\def\m!TABLE{TABLE} + +%D We already saw that the table macros report errors and provide automatic spacing. +%D These features can only be implemented by keeping track of the state, often the +%D last command on a row. + +\newconstant\tableforcestate +\newconstant\tableactionstate + +\setnewconstant\tableunknownstate 0 + +\setnewconstant\tableseparaterowstate 1 +\setnewconstant\tablefirstrowstate 2 +\setnewconstant\tablemidrowstate 3 +\setnewconstant\tablelastrowstate 4 +\setnewconstant\tablerulestate 5 +%setnewconstant\tableskipstate 6 +%setnewconstant\tableautorowstate 7 + +\setnewconstant\tableforcefirstrowstate 1 +\setnewconstant\tableforcelastrowstate 2 + +\newconstant\tablerowfactor +\newconstant\TABLEendofrowdepth +\newconstant\TABLEendofrowheight +\newconstant\TABLEcr +\newconstant\tablerowzero +\newconstant\TABLEn + +%D We store these states using \type {constants}'s and like most variables, these +%D are global ones. When needed, especially when we flush the backgrounds, we can +%D temporary disable the assignment. + +\newconditional\tableactionstatepermitted + +\def\tabl_table_set_action#1{\ifconditional\tableactionstatepermitted\global\tableactionstate#1\fi} +\def\tabl_table_set_force #1{\ifconditional\tableactionstatepermitted\global\tableforcestate #1\fi} + +%D To give an impression of what the (well documented) source of \TABLE\ looks like, +%D we first implement an alternative for the numeric keys. The quantity keys +%D (\type{q} and \type{Q}) support the more european way of writing numbers: +%D +%D \startnarrower +%D 100.000.000,00 instead of 100,000,000.00 +%D \stopnarrower +%D +%D The next table shows how to use these keys. We use braces instead of brackets because +%D we need brackets to specify the format. +%D +%D \starttyping +%D \starttable{|q[00,000]|Q[00,00]|} +%D \HL +%D \VL -1,2 \VL 12,35 \VL\FR +%D \VL 11,203 \VL 2,4 \VL\LR +%D \HL +%D \stoptable +%D \stoptyping +%D +%D Although a more efficient implementation is possible |<|we can for instance share +%D common macros|>| we just adapt a copy of the numeric ones. To permit double +%D loading of this module, we check for the existence of one of the macros. +%D +%D To be compatible with the tabulate environment, we also support the \type {l}, +%D \type {c} and \type {r} keys for paragraph entries. +%D +%D All commands that are executed between rows are to be put in \type {\noalign}. We +%D can however not verify if we (that is \TABLE) does or did not enter this mode. A +%D moderate dirty but useful trick is using our own alternative:\footnote{Once one +%D has entered the stage of redefining \TEX\ primitives, such hacks become a second +%D nature. However, redefining \type {\omit} and \type{\span} is not that easy.} + +%D We no longer need this in \LUAMETATEX: +%D +%D \starttyping +%D \aliased\let\tablenoalign \noalign +%D \def\starttablenoalign{\noalign\bgroup} +%D \let\stoptablenoalign \egroup +%D \stoptyping + +%D \macros +%D {starttable} +%D +%D The rest of this module is not easy to comprehend, mainly because we have to take +%D care of: +%D +%D \startitemize[packed] +%D \item \type{\startitemize[template]} +%D \item \type{\startitemize{template}} +%D \item \type{\startitemize[predefined]} +%D \stopitemize +%D +%D as well as: +%D +%D \startitemize[continue] +%D \item restart after table break +%D \stopitemize +%D +%D The official specification of the start command is: +%D +%D \showsetup{starttable} + +\newconditional\c_tabl_table_repeat_head +\newconditional\c_tabl_table_repeat_tail + +\permanent\tolerant\protected\def\starttable[#1]#*[#2]% preamble optional-settings + {\bgroup + \ifarguments\or\or + \setupcurrenttables[#2]% + \fi + \edef\p_tabl_table_split{\directtablesparameter\c!split}% + \edef\p_tabl_table_frame{\directtablesparameter\c!frame}% + \ifx\p_tabl_table_split\v!auto + \ifinsidesplitfloat + \let\p_tabl_table_split\v!yes + \lettablesparameter\c!split\v!yes % might be used later, best make a proper mode + \fi + \fi + \ifx\p_tabl_table_split\v!yes + \enforced\let\stoptable\table_table_stop_g % not \protected as we look ahead + \expandafter\starttables + \orelse\ifx\p_tabl_table_split\v!repeat + \enforced\let\stoptable\table_table_stop_g % not \protected as we look ahead + \expandafter\starttables + \else + \enforced\let\stoptable\table_table_stop + \ifempty\p_tabl_table_frame + \ifinsidefloat\else\startbaselinecorrection\fi + \else + \startframedcontent[\p_tabl_table_frame]% + \fi + \postponenotes + \expandafter\tabl_table_first_stage + \fi[#1]} + +% We cannot define the stopper as \type {\protected} because lookahead in +% alignments fail then, so we relax it and define it locally. + +\permanent\let\stoptable\relax + +\permanent\def\table_table_stop + {\tabl_tables_chuck_auto_row % before the tail, else noalign problem + \tabl_table_insert_tail + \noalign\bgroup + \glet\tabl_table_head\empty + \glet\tabl_table_tail\empty + \egroup + \tabl_table_finish + \ifempty\p_tabl_table_frame + \ifinsidefloat\else + \stopbaselinecorrection + \goodbreak % compensates all the nobreaks + \fi + \else + \stopframedcontent + \fi + \egroup} + +\permanent\def\table_table_stop_g + {\table_table_stop_s\egroup} + +%D Before we can grab the argument, we have to make sure that the \CATCODES\ are +%D set. The first stage takes care of that. + +\def\tabl_table_first_stage + {\bgroup + \global\intabletrue + \tabl_table_second_stage} + +%D \macros +%D {definetabletemplate} +%D +%D The complex (and main) start macro first takes care of the predefined case. Such +%D a predefined setup looks like: +%D +%D \starttyping +%D \definetabletemplate[test][|||] +%D +%D \starttable[test] +%D \VL test \VL test \VL\AR +%D \VL test \VL test \VL\AR +%D \VL test \VL test \VL\AR +%D \stoptable +%D \stoptyping +%D +%D The implementation of the definition macro is not that complicated: + +\installcorenamespace{tablehead} +\installcorenamespace{tabletail} + +\permanent\protected\def\definetabletemplate % to be redone + {\bgroup + \catcode\barasciicode\othercatcode + \tabl_table_define_template} + +\tolerant\def\tabl_table_define_template[#1]#*[#2]#*[#3]#*[#4]% + {\ifarguments\or\else + \setgvalue{\??tabletemplate#1}{\tabl_table_use_template{#2}{#3}{#4}}% + \fi + \egroup} + +\def\tabl_table_use_template#1#2#3% + {\gdef\tabl_table_head{\begincsname\??tablehead#2\endcsname}% + \gdef\tabl_table_tail{\begincsname\??tabletail#3\endcsname}% + \tabl_table_second_stage[#1]} + +%D The optional third and fourth arguments define which table head and tail to use. +%D +%D \starttyping +%D \definetabletemplate[test][|||][before][after] +%D \stoptyping +%D +%D This also means that one can define table heads and tails by name! +%D +%D \starttyping +%D \starttablehead[before] +%D \HL \VL first \VL second \VL \SR \HL +%D \stoptablehead +%D \stoptyping +%D +%D Templates defined this way get protected names, that cannot conflict with +%D existing commands. +%D +%D \showsetup{definetabletemplate} +%D +%D The second half of the next macro prepares table +%D splitting. + +\def\tabl_table_insert_head + {\noalign{\global\settrue\preventtablebreak\global\setfalse\hassometablehead}% + \tabl_table_head + \noalign{\global\setfalse\preventtablebreak}} + +\def\tabl_table_insert_tail + {\noalign{\global\settrue\preventtablebreak\global\setfalse\hassometabletail}% + \tabl_table_tail + \noalign{\global\setfalse\preventtablebreak}} + +% \def\doverysimpletableHL % todo +% {\noalign{\normalexpanded{\noexpand\tabl_table_normal_full_rule\m_tabl_table_HLheight}} + +\def\tabl_table_restart_indeed#1% + {\gdef\tabl_table_restart{#1}% + \tabl_table_restart +% \noalign{\globalpushmacro\simpletableHL\glet\simpletableHL\doverysimpletableHL}% + \tabl_table_insert_head + \ifsplittables \ifconditional \c_tabl_table_repeat_tail + \noalign{\goodbreak}% + \tabl_table_insert_tail + \noalign{\goodbreak}% + \fi \fi +% \noalign{\globalpopmacro\simpletableHL}% + } + +\bgroup \catcode\barasciicode\othercatcode + +\gdef\tabl_table_second_stage[#1]% brr nested mess + {\bgroup + \tabl_table_use_bar + \global\setfalse\tableactionstatepermitted + \global\setfalse\hassometablehead + \global\setfalse\hassometabletail + \expanded{\doifelseinstring{|}{#1}} + {\xdef\tabl_table_restart{\noexpand\tabl_table_restart_indeed{\noexpand\tabl_table_third_stage{#1}}}} + {\doifelsedefined{\??tabletemplate#1} + {\gdef\tabl_table_restart{\getvalue{\??tabletemplate#1}}} + {\gdef\tabl_table_restart{\tabl_table_restart_indeed{\getvalue{#1}}}}}% + \egroup + \tabl_table_restart} + +\egroup + +%D The third stage involves a lot of (re)sets, which we will explain later. + +\appendtoks + \fixedspaces + \enforced\let\_\normalunderscore +\to \everytable + +%D Now we can start the table. + +\newtoks\localtabledefinitions + +\def\tabl_table_third_stage#1% + {\global\settrue\tableactionstatepermitted + \tabl_table_set_action\tableunknownstate + \tabl_table_set_force\tableunknownstate + \tabl_table_resetVLvalues + \appendtoks\tabl_table_local_setups\to\everytable + \tabl_table_standard_begin[\ifsplittables u\else b\fi]% + \the\localtabledefinitions + \forgetall % added + \edef\currenttableformat{#1}% + \doifsomething\currenttableformat + {\dogettablenofcolumns\currenttableformat + % more modern is to use catcode tables + \expandafter\tabl_table_begin_format\currenttableformat\doendtableformat}} + +\def\tabl_table_finish + {\tabl_tables_chuck_auto_row + \unskip\crcr + \tabl_table_normal_end + \global\intablefalse + \egroup} + +%D \macros +%D {starttables} +%D +%D Split tables are specified using the plural form of the start and stop commands. +%D +%D \showsetup{starttables} +%D +%D For example: +%D +%D \starttyping +%D \starttables[|||] +%D \HL +%D \VL element \VL atom weight \VL\AR +%D \HL +%D \VL ....... \VL ........... \VL\AR +%D \VL ....... \VL ........... \VL\AR +%D \HL +%D \stoptables +%D \stoptyping + +\newbox\tablecontentbox + +\permanent\protected\def\starttables + {\bgroup + \enforced\let\stoptables\table_table_stop_s + \splittablestrue + \edef\p_tabl_table_split{\directtablesparameter\c!split}% + \ifx\p_tabl_table_split\v!repeat + \settrue\c_tabl_table_repeat_head + \settrue\c_tabl_table_repeat_tail + \else + \setfalse\c_tabl_table_repeat_head + \setfalse\c_tabl_table_repeat_tail + \fi + \flushnotes + \setbox\tablecontentbox\vbox\bgroup + \forgetall + \tabl_table_first_stage} + +\permanent\let\stoptables\relax % needed for \noalign + +\def\table_table_stop_s % not \protected as we need the lookahead (brrr) + {\tabl_tables_chuck_auto_row % AM: before the tail, else noalign problem + \ifconditional\c_tabl_table_repeat_tail\else\tabl_table_insert_tail\fi + \tabl_table_finish + \egroup + \dontcomplain + \tabl_table_split_box\tablecontentbox + \glet\tabl_table_head\empty % new here + \glet\tabl_table_tail\empty % new here + \flushnotes + \egroup} + +\def\tabl_table_split_box#1% + {\resettsplit + \def\tsplitminimumfreelines{2}% + \def\tsplitminimumfreespace{\zeropoint}% + \setbox\tsplitcontent\box#1% + \ifconditional\c_tabl_table_repeat_head \ifconditional\hassometablehead + \setbox\tsplithead\vsplit\tsplitcontent to \lineheight + \setbox\tsplithead\vbox{\unvbox\tsplithead}% \vpack ? + \fi \fi + \ifconditional\c_tabl_table_repeat_tail \ifconditional\hassometabletail + \setbox\tsplittail\vsplit\tsplitcontent to \lineheight + \setbox\tsplittail\vbox{\unvbox\tsplittail}% \vpack ? + \fi \fi + \ifinsidefloat\else + \def\tsplitbeforeresult{\startbaselinecorrection}% + \def\tsplitafterresult {\stopbaselinecorrection}% + \fi + \handletsplit} + +%D When the table in the previous example is split across pages, only the first gets +%D a head. We could have said something like: +%D +%D \starttyping +%D \starttablehead +%D \HL +%D \VL element \VL atom weight \VL\AR +%D \HL +%D \stoptablehead +%D +%D \starttabletail +%D \HL +%D \stoptabletail +%D +%D \starttables[|||] +%D \VL ....... \VL ........... \VL\AR +%D \VL ....... \VL ........... \VL\AR +%D \stoptables +%D \stoptyping +%D +%D This time each split table gets a head line and ends with a rule. Keep in mind +%D that such heads also apply to the unbroken ones and should be defined local +%D (grouped) if needed. The rather complicated definition below is due to the fact +%D that the stopcondition is interface language dependant. + +\let\tabl_table_head\empty % needs checking +\let\tabl_table_tail\empty % needs checking + +\letvalue{\e!start\v!tablehead}\relax % todo: frozen, but we use a grabber +\letvalue{\e!stop \v!tablehead}\relax % todo: frozen, but we use a grabber +\letvalue{\e!start\v!tabletail}\relax % todo: frozen, but we use a grabber +\letvalue{\e!stop \v!tabletail}\relax % todo: frozen, but we use a grabber + +%D The second argument is a dummy one, by scanning for it, we get rid of +%D interfering spaces. + +\newconditional\preventtablebreak +\newconditional\hassometablehead +\newconditional\hassometabletail + +% \def\tabl_table_set_head[#1][#2]#3\end{\setvalue{\??tablehead#1}{\noalign{\global\settrue\hassometablehead}#3}} +% \def\tabl_table_set_tail[#1][#2]#3\end{\setvalue{\??tabletail#1}{\noalign{\global\settrue\hassometabletail}#3}} + +\permanent\protected\def\settablehead{\dodoubleempty\tabl_table_set_head} % todo: use pickup +\permanent\protected\def\settabletail{\dodoubleempty\tabl_table_set_tail} % todo: use pickup + +\def\tabl_table_set_head[#1][#2]#3\end + {\gdef\tabl_table_head{\begincsname\??tablehead#1\endcsname}% new + \setvalue{\??tablehead#1}{\noalign{\global\settrue\hassometablehead}#3}} + +\def\tabl_table_set_tail[#1][#2]#3\end + {\gdef\tabl_table_tail{\begincsname\??tabletail#1\endcsname}% new + \setvalue{\??tabletail#1}{\noalign{\global\settrue\hassometabletail}#3}} + +\normalexpanded + {\def\csname\e!start\v!tablehead\endcsname#1\csname\e!stop\v!tablehead\endcsname% + {\settablehead#1\noexpand\end}} + +\normalexpanded + {\def\csname\e!start\v!tabletail\endcsname#1\csname\e!stop\v!tabletail\endcsname% + {\settabletail#1\noexpand\end}} + +%D Redundant \type{\HL}'s are removed automatically, so mid||lines can be used +%D without problems. +%D +%D The order of the next macros is more or less random. First we implement error +%D recovery. Errors are reported to the screen and log file as well as visualized in +%D the table in teletype. + +\def\tabl_table_finish_row + {\crcr + \noalign\bgroup + \nobreak + \tabl_table_set_action\tableunknownstate + \glet\tabl_tables_check_auto_row\empty + \glet\tabl_tables_chuck_auto_row\empty + \global\currenttablecolumn\zerocount + \egroup} + +%D Next we enter the more complicated area of column and row switching. I won't go +%D into much detail from now on, but just mention the general principles. +%D +%D \startitemize[3*ruim] +%D \sym{\type{\SR}} end a separate row (between rules) +%D \sym{\type{\FR}} end a first row (after a rule) +%D \sym{\type{\MR}} end a mid row (between text lines) +%D \sym{\type{\LR}} end a last row (before a rule) +%D \stopitemize +%D +%D and best of all: +%D +%D \startitemize[continue] +%D \sym{\type{\AR}} end a row with automatic spacing +%D \stopitemize +%D +%D As far as possible, we report confusing situations. In most cases one can use +%D \type{\AR}, which transfigurates itself into one of the other types. +%D +%D \starttyping +%D \starttable[||] +%D \HL +%D \VL a separate row \VL\SR +%D \HL +%D \VL a first row \VL\FR +%D \VL a mid row \VL\MR +%D \VL a last row \VL\LR +%D \HL +%D \stoptable +%D \stoptyping +%D +%D In this example we could have used \type{\AR} without problems. +%D +%D Color or gray scale backgrounds precede the content. They are passed over +%D horizontal (division) lines when needed. Errors in the color template are traced +%D elsewhere. Here we only check for inconsistent spacing. Due to the way \TEX\ +%D handles alignments, we cannot automate spacing for colored rows and columns. + +\tablerowzero\zerocount + +\appendtoks + \enforced\let\SR\tabl_table_SR + \enforced\let\FR\tabl_table_FR + \enforced\let\MR\tabl_table_MR + \enforced\let\LR\tabl_table_LR + \enforced\let\AR\tabl_table_AR +\to \localtabledefinitions + +\protected\def\tabl_table_SR + {\ifnum\tableactionstate=\tablefirstrowstate + \writestatus\m!TABLE{change \string\SR\space into \string\MR/\string\LR}% + \orelse\ifnum\tableactionstate=\tablemidrowstate + \writestatus\m!TABLE{change \string\SR\space into \string\MR/\string\LR}% + \orelse\ifnum\tableactionstate=\tablemidrowstate + \writestatus\m!TABLE{change \string\SR\space into \string\MR/\string\LR}% + \fi + \tabl_table_end_row_indeed\tableseparaterowstate\tablerowfactor\tablerowfactor} + +\protected\def\tabl_table_FR + {\ifnum\tableactionstate=\tablemidrowstate + \writestatus\m!TABLE{change \string\FR\space into \string\MR/\string\LR}% + \orelse\ifnum\tableactionstate=\tablelastrowstate + \writestatus\m!TABLE{change \string\FR\space into \string\MR/\string\LR}% + \fi + \tabl_table_end_row_indeed\tablefirstrowstate\tablerowfactor\tablerowzero} + +\protected\def\tabl_table_MR + {\ifnum\tableactionstate=\tablerulestate + \writestatus\m!TABLE{change \string\MR\space into \string\FR/\string\SR}% + \orelse\ifnum\tableactionstate=\tablelastrowstate + \writestatus\m!TABLE{change \string\MR\space into \string\FR}% + \fi + \tabl_table_end_row_indeed\tablemidrowstate00} + +\protected\def\tabl_table_LR + {\ifnum\tableactionstate=\tablerulestate + \writestatus\m!TABLE{change \string\LR\space into \string\FR/\string\SR}% + \fi + \tabl_table_end_row_indeed\tablelastrowstate\tablerowzero\tablerowfactor} + +%D \macros +%D {ifcheckTABLEcolums} +%D +%D The next macros handle the actual row ending. This macro also take care of space +%D corrections due to table splitting when \type{\MR} and collegues are used. When +%D tracing is enabled, the corrections as well as the values used to determine the +%D available space are shown (in color). By default checking is off. + +\def\tabl_table_end_row_indeed#1#2#3% + {\tabl_table_set_action#1% + \ifcase#1\relax + % unknown + \or + \tabl_tables_end_line\SR\SR\tablerowfactor\tablerowfactor + \or + \tabl_tables_end_line\FR\FR\tablerowfactor\tablerowzero + \or + \ifnum\tableforcestate=\tableforcelastrowstate + \tabl_tables_end_line\MR\LR\tablerowzero\tablerowfactor + \orelse\ifnum\tableforcestate=\tableforcefirstrowstate + \tabl_tables_end_line\MR\FR\tablerowfactor\tablerowzero + \else + \tabl_tables_end_line\MR\MR\tablerowzero\tablerowzero + \fi + \or + \tabl_tables_end_line\LR\LR\tablerowzero\tablerowfactor + \fi + \noalign\bgroup + \tabl_table_set_force\tableunknownstate + \global\currenttablecolumn\zerocount + \ifconditional\preventtablebreak + \nobreak + \else + \goodbreak + \fi + \egroup} + +%D Handling \type{\AR} is postponed till the next row. The check takes care of +%D the first and mid rows, the chuck macro |<|how about that name|>| handles +%D the last row. + +\protected\def\tabl_table_AR + {\glet\tabl_tables_check_auto_row\tabl_tables_check_auto_row_indeed + \glet\tabl_tables_chuck_auto_row\tabl_tables_chuck_auto_row_indeed} + +\let\tabl_tables_check_auto_row\empty +\let\tabl_tables_chuck_auto_row\empty + +\def\tabl_tables_check_auto_row_indeed + {\glet\tabl_tables_check_auto_row\empty + \ifnum\tableactionstate=\tablerulestate \FR\orelse + \ifnum\tableactionstate=\tableunknownstate\FR\else + \MR\fi} + +\def\tabl_tables_chuck_auto_row_indeed + {\glet\tabl_tables_check_auto_row\empty + \glet\tabl_tables_chuck_auto_row\empty + \ifnum\tableactionstate=\tablerulestate \SR\orelse + \ifnum\tableactionstate=\tableunknownstate\SR\else + \LR\fi} + +%D When a table is split, we also add a tail and when present we repeat the table +%D head. If a gets split indeed, the spacing before and after a horizontal rule is +%D corrected according to what we expect. + +\def\tabl_tables_end_line#1#2#3#4% + {\ifx#1#2\else + \writestatus\m!TABLE{\string#1\space changed into \string#2}% + \fi + \expandafter\tabl_table_normal_line_format#3#4\crcr % \crcr nodig ? + \noalign{\nobreak\global\settrue\tableactionstatepermitted}} + +%D In order to prevent (as good as possible) alignment overflow and therefore \TEX\ +%D error messages, we check the maximum number of columns. We keep track of the +%D current column and maximum column by means of two \COUNTERS. Keep in mind that +%D the number of \type{|}'s and \type{\VL}'s or alike is always one more than the +%D number of columns. + +\newcount\currenttablecolumn + +% DWhile defining this macro we change the \CATCODE\ of \type{|}. When counting the +% Dbars, we use a non active representation of the bar, simply because we cannot be +% Dsure if the bar is active or not.\footnote{Normally it is, but \TABLE\ changes +% Dthe catcode when needed.} + +\bgroup + \catcode\barasciicode\othercatcode \permanent\gdef\tabl_table_bar{|} + \catcode\barasciicode\activecatcode\gdef\tabl_table_use_bar{\enforced\let|\tabl_table_bar} +\egroup + +\bgroup \catcode\barasciicode\othercatcode + +\gdef\dogettablenofcolumns#1% todo: also divert this to lua as with tabulate + {\bgroup + \cleanupfeatures % needed ! + \tabl_table_use_bar + \egroup} + +\egroup + +%D \startitemize[3*ruim] +%D \sym{\type{\VL}} a vertical line +%D \sym{\type{\VC}} a vertical colored line +%D \sym{\type{\HL}} a horizontal line +%D \sym{\type{\HC}} a horizontal colored line +%D \stopitemize + +\newcount\c_tabl_table_vrule_thickness_factor +\newcount\c_tabl_table_hrule_thickness_factor +\newcount\c_tabl_table_drule_span + +\let\m_tabl_table_vrule_color\empty +\let\m_tabl_table_hrule_color\empty + +\appendtoks + \enforced\let\VL\tabl_table_VL + \enforced\let\VC\tabl_table_VC + \enforced\let\HL\tabl_table_HL + \enforced\let\HC\tabl_table_HC + \enforced\let\VS\tabl_table_VS + \enforced\let\VD\tabl_table_VD + \enforced\let\VT\tabl_table_VT + \enforced\let\VN\tabl_table_VN +\to \localtabledefinitions + +\def\tabl_table_resetVLvalues + {\global\currenttablecolumn\zerocount} + +\def\tabl_table_vrulecommand#1% global assignments + {\doifelsenumber{#1} + {\global\c_tabl_table_vrule_thickness_factor#1\relax + \global\multiply\c_tabl_table_vrule_thickness_factor\m_tabl_table_VLwidth\relax} + {\xdef\m_tabl_table_vrule_color{#1}}} + +\permanent\tolerant\protected\def\tabl_table_VL[#1]% + {\tabl_tables_check_auto_row + \global\advance\currenttablecolumn\plusone + \glet\m_tabl_table_vrule_color\empty + \global\c_tabl_table_vrule_thickness_factor\m_tabl_table_VLwidth\relax + \iftok{#1}\emptytoks\else + \rawprocesscommalist[#1]\tabl_table_vrulecommand + \fi + \tabl_table_normal_line_complex_bar}% \relax breaks \use + +\permanent\let\tabl_table_VC\tabl_table_VL % for mojca + +% \starttable[|||] +% \HL +% \VL test \VS test \VL \FR +% \VL test \VD test \VL \MR +% \VL test \VT test \VL \LR +% \HL +% \stoptable + +\permanent\protected\def\tabl_table_VS {\VN1} +\permanent\protected\def\tabl_table_VD {\VN2} +\permanent\protected\def\tabl_table_VT {\VN3} +\permanent\protected\def\tabl_table_VN#1{\global\c_tabl_table_n_of_vrules#1\relax\VL} + +\def\tabl_table_hrulecommand#1% global assignments + {\doifelsenumber{#1} + {\global\c_tabl_table_hrule_thickness_factor#1\relax + \global\multiply\c_tabl_table_hrule_thickness_factor\m_tabl_table_HLheight\relax} + {\xdef\m_tabl_table_hrule_color{#1}}} + +\permanent\tolerant\protected\def\tabl_table_HL[#1]% + {\tabl_tables_chuck_auto_row + \tabl_table_finish_row + \noalign\bgroup + \nobreak + \ifnum\tableactionstate=\tablerulestate + \writestatus\m!TABLE{skipping \string\HL}% \statusmessage + \else + \ifnum\tableactionstate=\tablemidrowstate + \writestatus\m!TABLE{change \string\MR\space into \string\LR/\string\SR}% + \orelse\ifnum\tableactionstate=\tablefirstrowstate + \writestatus\m!TABLE{change \string\MR\space into \string\SR}% + \fi + \bgroup + \global\c_tabl_table_hrule_thickness_factor\m_tabl_table_HLheight\relax + \iffirstargument + \glet\m_tabl_table_hrule_color\empty + \rawprocesscommalist[#1]\tabl_table_hrulecommand + \ifempty\m_tabl_table_hrule_color\else + \switchtocolor[\m_tabl_table_hrule_color]% + \fi + \fi + \tabl_table_normal_full_rule + \egroup + \tabl_table_account_width + \fi + \tabl_table_set_action\tablerulestate + \nobreak + \egroup} + +\aliased\let\tabl_table_HC\tabl_table_HL % for mojca + +%D \startitemize[3*ruim] +%D \sym{\type{\NL}} a vertical skip +%D \sym{\type{\NR}} goto the next row +%D \sym{\type{\NC}} goto the next column +%D \sym{\type{\FC}} a first column +%D \sym{\type{\MC}} a mid column +%D \sym{\type{\LC}} a last column +%D \stopitemize + +% \starttable[|||] +% \VL text \VL text \VL \AR +% \TB[small] +% \VL text \VL text \VL \AR +% \TB[4*big] +% \VL text \VL text \VL \AR +% \stoptable + +% n+1 uitleggen + +\appendtoks + \enforced\let\TB\tabl_table_TB + \enforced\let\NL\tabl_table_NL % old + \enforced\let\NR\tabl_table_NR + \enforced\let\NC\tabl_table_NC + \enforced\let\FC\tabl_table_NC + \enforced\let\MC\tabl_table_NC + \enforced\let\LC\tabl_table_NC +\to \localtabledefinitions + +\permanent\tolerant\protected\def\tabl_table_TB[#1]% + {\tabl_tables_chuck_auto_row + \tabl_table_finish_row + \noalign\bgroup + \blank[\iftok{#1}\emptytoks\c!NL\else#1\fi]% + \nobreak + \egroup} + +\aliased\let\tabl_table_NL\tabl_table_TB + +\protected\def\tabl_table_NR + {\global\currenttablecolumn\zerocount + \tabl_table_normal_line_ending + \noalign\bgroup + \nobreak + \tabl_table_set_action\tableunknownstate + \egroup} + +\protected\def\tabl_table_NC + {\tabl_tables_check_auto_row + \global\advance\currenttablecolumn \plusone + \tabl_table_normal_no_bar} + +%D \startitemize[3*broad] +%D \sym{\type{\DL}} +%D \sym{\type{\DV}} (\type{\VD}) +%D \sym{\type{\DC}} +%D \sym{\type{\DR}} +%D \stopitemize + +\newconditional\c_tabl_table_is_division + +\appendtoks + \global\setfalse\c_tabl_table_is_division + \enforced\let\DL\tabl_table_DL + \enforced\let\DC\tabl_table_DC + \enforced\let\DV\tabl_table_DV + \enforced\let\DR\tabl_table_DR +\to \localtabledefinitions + +\def\tabl_table_check_division + {\ifconditional\c_tabl_table_is_division\else + \tabl_tables_chuck_auto_row + \global\currenttablecolumn\zerocount + \global\settrue\c_tabl_table_is_division + \fi} + +\def\tabl_table_drulecommand#1% global assignments + {\doifelsenumber{#1} + {\ifcase\c_tabl_table_drule_span + \global\c_tabl_table_drule_span#1\relax + \else + \global\c_tabl_table_hrule_thickness_factor#1\relax + \global\multiply\c_tabl_table_hrule_thickness_factor\m_tabl_table_VLwidth\relax + \fi} + {\xdef\m_tabl_table_hrule_color{#1}}} + +\permanent\tolerant\protected\def\tabl_table_DL[#1]% + {\tabl_table_check_division + \ifnum\tableactionstate=\tablerulestate + \writestatus\m!TABLE{skipping \string\DL}% + \else + \ifnum\tableactionstate=\tablemidrowstate + \writestatus\m!TABLE{change \string\MR\space into \string\LR/\string\SR}% + \orelse\ifnum\tableactionstate=\tablefirstrowstate + \writestatus\m!TABLE{change \string\MR\space into \string\SR}% + \fi + \tabl_table_set_action\tableunknownstate + \global\c_tabl_table_hrule_thickness_factor\m_tabl_table_HLheight\relax + \global\c_tabl_table_drule_span\zerocount + \iftok{#1}\emptytoks\else + \glet\m_tabl_table_hrule_color\empty + \rawprocesscommalist[#1]\tabl_table_drulecommand + % \ifempty\m_tabl_table_hrule_color\else + % \switchtocolor[\m_tabl_table_hrule_color]% see *DL* + % \fi + \fi + \ifcase\c_tabl_table_drule_span + \global\advance\currenttablecolumn \plusone + \tabl_table_normal_single_rule + \or + \global\advance\currenttablecolumn \plustwo + \tabl_table_normal_single_rule + \else + \global\advance\currenttablecolumn \plusone + \tabl_table_normal_multi_rule + \fi + \fi} + +\permanent\protected\def\tabl_table_DV + {\tabl_table_DCV\tabl_table_normal_line_simple_bar} + +\permanent\protected\def\tabl_table_DC + {\tabl_table_DCV\tabl_table_normal_no_bar} + +\permanent\protected\def\tabl_table_DCV#1% + {\tabl_table_check_division + \tabl_tables_check_auto_row + \global\advance\currenttablecolumn \plusone + #1} + +\permanent\protected\def\tabl_table_DR + {\global\currenttablecolumn\zerocount % nog check + \tabl_table_normal_line_ending + \noalign\bgroup + \nobreak + \global\setfalse\c_tabl_table_is_division + \tabl_table_account_width % temporary solution + \tabl_table_set_action\tablerulestate + \egroup} + +\def\tabl_table_account_width + {\scratchdimen\d_tabl_table_line_thickness_unit} + +\permanent\def\tabl_table_TWO {\use\plustwo} +\permanent\def\tabl_table_THREE{\use\plusthree} +\permanent\def\tabl_table_FOUR {\use\plusfour} +\permanent\def\tabl_table_FIVE {\use\plusfive} +\permanent\def\tabl_table_SIX {\use\plussix} + +\appendtoks + \enforced\let\TWO \tabl_table_TWO + \enforced\let\THREE\tabl_table_THREE + \enforced\let\FOUR \tabl_table_FOUR + \enforced\let\FIVE \tabl_table_FIVE + \enforced\let\SIX \tabl_table_SIX + \enforced\let\SPAN \use + \enforced\let\REF \tabl_table_reformat +\to \localtabledefinitions + +\installcorenamespace{tables} +\installcorenamespace{tabledistance} +\installcorenamespace{tablealign} + +\installsetuponlycommandhandler \??tables {tables} % some day we can have named tables + +\setvalue{\??tabledistance\v!none }{\tabl_table_OpenUp00\def\LOW{\Lower6 }} +\setvalue{\??tabledistance\v!small }{\tabl_table_OpenUp00\def\LOW{\Lower6 }} % == baseline +\setvalue{\??tabledistance\v!medium}{\tabl_table_OpenUp11\def\LOW{\Lower7 }} +\setvalue{\??tabledistance\v!big }{\tabl_table_OpenUp22\def\LOW{\Lower8 }} + +\appendtoks + \expandnamespaceparameter\??tabledistance\directtablesparameter\c!distance\v!medium +\to \localtabledefinitions + +\setvalue{\??tablealign\v!right }{\def\tabl_table_paralignment{\raggedright}} +\setvalue{\??tablealign\v!left }{\def\tabl_table_paralignment{\raggedleft}} +\setvalue{\??tablealign\v!middle }{\def\tabl_table_paralignment{\raggedcenter}} +\setvalue{\??tablealign\s!unknown}{\def\tabl_table_paralignment{\notragged}} + +\appendtoks + \doifelse{\directtablesparameter\c!distance}\v!none + {\tablerowfactor\zerocount} + {\tablerowfactor\plustwo }% +\to \localtabledefinitions + +\def\dohandlebar % here ? + {\ifmmode + \expandafter\domathmodebar + \orelse\ifintable + \expandafter\domathmodebar + \else + \expandafter\dotextmodebar + \fi} + +\appendtoks + \expandnamespaceparameter\??tablealign\directtablesparameter\c!align\s!unknown + \assignalfadimension{\directtablesparameter\c!VL}\m_tabl_table_VLwidth 246% + \assignalfadimension{\directtablesparameter\c!HL}\m_tabl_table_HLheight246% +\to \everysetuptables + +\def\tabl_table_local_setups + {\directtablesparameter\c!commands\relax + \usebodyfontparameter\directtablesparameter + \d_tabl_table_line_thickness_unit\dimexpr\directtablesparameter\c!rulethickness/\tablelinethicknessfactor\relax + \edef\p_tabl_table_height{\directtablesparameter\c!height}% + \edef\p_tabl_table_depth{\directtablesparameter\c!depth}% + \ifx\p_tabl_table_height\v!strut + \let\tablestrutheightfactor\tablestrutheightfactor + \else + \let\tablestrutheightfactor\p_tabl_table_height + \fi + \ifx\p_tabl_table_depth\v!strut + \let\tablestrutdepthfactor\tablestrutdepthfactor + \else + \let\tablestrutdepthfactor\p_tabl_table_depth + \fi + \edef\tablestrutheightfactor{\withoutpt\the\dimexpr10\dimexpr\tablestrutheightfactor\points}% + \edef\tablestrutdepthfactor {\withoutpt\the\dimexpr10\dimexpr\tablestrutdepthfactor \points}% + \d_tabl_table_strut_unit \dimexpr\normalbaselineskip/12\relax % 12 is default bodyfont + \d_tabl_table_kern_unit .5em\relax + \s_tabl_table_inter_column_space_unit.5em plus 1fil minus .25em\relax + \d_tabl_table_column_width_unit \d_tabl_table_kern_unit + \d_tabl_table_kern_unit \d_tabl_table_kern_unit} + +%D As one can see, we didn't only add color, but also more control over spacing. +%D +%D \startbuffer[a] +%D \starttable[|c|] +%D \HL +%D \VL \strut test \VL \FR +%D \VL \strut test \VL \MR +%D \VL \strut test \VL \MR +%D \VL \strut test \VL \LR +%D \HL +%D \stoptable +%D \stopbuffer +%D +%D \startbuffer[b] +%D \starttabulate[|c|] +%D \HL +%D \NC test \NC \NR +%D \NC test \NC \NR +%D \NC test \NC \NR +%D \NC test \NC \NR +%D \HL +%D \stoptabulate +%D \stopbuffer +%D +%D In the next example, the first table is defined as: +%D +%D \typebuffer[a] +%D +%D and the second one as: +%D +%D \typebuffer[b] +%D +%D The first table is typeset using the default height and depth factors .8 and .4. +%D The second table has both factors set to \type {strut}, and the third table shows +%D what happens when we set the values to zero. The rightmost table is typeset using +%D the tabulate environment. +%D +%D \startcombination[4*1] +%D {$\vcenter{\getbuffer[a]}$} +%D {\hbox{h=.8 d=.4}} +%D {\setuptables[height=strut,depth=strut]$\vcenter{\getbuffer[a]}$} +%D {\hbox{h=d=\type{strut}}} +%D {\setuptables[height=0,depth=0]$\vcenter{\getbuffer[a]}$} +%D {\hbox{h=d=0}} +%D {$\vcenter{\getbuffer[b]}$} +%D {\hbox{tabulate}} +%D \stopcombination + +\setuptables + [\c!HL=\v!medium, + \c!VL=\v!medium, + \c!NL=\v!small, + \c!frame=, + \c!align=\v!right, + \c!depth=.40, % \v!strut + \c!height=.80, % \v!strut + \c!textwidth=, + \c!rulethickness=\linewidth, + \c!rulecolor=, + \c!distance=\v!medium, + \c!bodyfont=, + \c!commands=, + \c!background=, + \c!backgroundcolor=, + \c!split=\v!auto, + \c!openup=\zeropoint] + +\protect \endinput diff --git a/tex/context/base/mkiv/tabl-tbl.lua b/tex/context/base/mkiv/tabl-tbl.lua index 13d899de6..aa4d5051f 100644 --- a/tex/context/base/mkiv/tabl-tbl.lua +++ b/tex/context/base/mkiv/tabl-tbl.lua @@ -18,13 +18,16 @@ local commands = commands local texsetcount = tex.setcount -local separator = P("|") -local nested = lpeg.patterns.nested -local pattern = Ct((separator * (C(nested) + Cc("")) * C((1-separator)^0))^0) +local separator = P("|") -- keep { } +----- nested = C(lpeg.patterns.nested) -- remove { } +local nested = lpeg.patterns.argument +local pattern = Ct((separator * (nested + Cc("")) * C((1-separator)^0))^0) local ctx_settabulatelastentry = context.settabulatelastentry local ctx_settabulateentry = context.settabulateentry +-- the lmtx raw processor handles {} like the normal one so we need to prune + local function presettabulate(preamble) preamble = gsub(preamble,"~","d") -- let's get rid of ~ mess here if find(preamble,"*",1,true) then diff --git a/tex/context/base/mkiv/tabl-tbl.mkxl b/tex/context/base/mkiv/tabl-tbl.mkxl index 4b2f31721..e9d45e0e8 100644 --- a/tex/context/base/mkiv/tabl-tbl.mkxl +++ b/tex/context/base/mkiv/tabl-tbl.mkxl @@ -231,8 +231,8 @@ \newtoks \everytabulatepar % where used ? \newtoks \everytabulate % public ? -\unexpanded\def\tolerantTABLEbreaktrue {\settrue \c_tabl_tabulate_tolerant_break} % used in styles ! -\unexpanded\def\handletabulatepbreakfalse{\setfalse\c_tabl_tabulate_handlepbreak } % depricated +\protected\def\tolerantTABLEbreaktrue {\settrue \c_tabl_tabulate_tolerant_break} % used in styles ! +\protected\def\handletabulatepbreakfalse{\setfalse\c_tabl_tabulate_handlepbreak } % depricated \def\noftabulaterows{\number\c_tabl_tabulate_noflines} % handy for testing if a table is empty @@ -297,22 +297,6 @@ % 1 = RC column raw RQ equal column raw % 2 = HC column hook HQ equal column hook -% handy helper (problem: we have an extra group when we nest; playing with en engine -% solution turned out to be too messy due to states; an ignoreendgroup trick also is -% messy and interferes). - -\def\tabulatenoalign % public ? - {\noalign - \bgroup - \let\noalign\relax - \let\tabulatenoalign\relax - \let\next=} - -\def\starttabulatenoalign % public ? - {\tabulatenoalign\bgroup} - -\let\stoptabulatenoalign\egroup - % [|lg{.}|] => \NG 12.34 \NC \def\tabl_tabulate_nobreak_inject_tracer @@ -334,22 +318,22 @@ \tabl_tabulate_break_no_tracer} \def\tabl_tabulate_nobreak_inject - {\tabulatenoalign{\tabl_tabulate_nobreak_inject_indeed}} + {\noalign{\tabl_tabulate_nobreak_inject_indeed}} -\unexpanded\def\tabl_tabulate_hook_check +\protected\def\tabl_tabulate_hook_check {\ifnum\c_tabl_tabulate_type<\plustwo \glet\tabl_tabulate_hook\tabl_tabulate_hook_nop \else \glet\tabl_tabulate_hook\tabl_tabulate_hook_yes \fi} -\unexpanded\def\tabl_tabulate_setups_check +\protected\def\tabl_tabulate_setups_check {\begincsname\??tabulatesetup\the\c_tabl_tabulate_column\endcsname} -\unexpanded\def\tabl_tabulate_entry_before{\ignorespaces\tabl_tabulate_hook} -\unexpanded\def\tabl_tabulate_entry_after {\unskip\unskip\ifmmode\else\endgraf\fi} +\protected\def\tabl_tabulate_entry_before{\ignorespaces\tabl_tabulate_hook} +\protected\def\tabl_tabulate_entry_after {\unskip\unskip\ifmmode\else\endgraf\fi} -\unexpanded\def\tabl_tabulate_shaped_par_begin +\protected\def\tabl_tabulate_shaped_par_begin {\dowithnextboxcs\tabl_tabulate_shaped_par_finish\vbox\bgroup} \def\tabl_tabulate_shaped_par_finish @@ -361,10 +345,10 @@ \ifdefined\dotagtabulatecell \else \let\dotagtabulatecell \relax \fi \ifdefined\dotagtabulatesignal \else \let\dotagtabulatesignal\relax \fi -\unexpanded\def\tabl_tabulate_check_local_color_first#1#2% +\protected\def\tabl_tabulate_check_local_color_first#1#2% {\relax} -\unexpanded\def\tabl_tabulate_check_local_color_second#1#2% +\protected\def\tabl_tabulate_check_local_color_second#1#2% {\relax \ifempty\m_tabl_tabulate_color_local \xdef\m_tabl_tabulate_color{#1}% @@ -379,7 +363,7 @@ \global\c_tabl_tabulate_localcolorspan\zerocount \fi} -\unexpanded\def\tabl_tabulate_check_local_vrule_thickness#1% +\protected\def\tabl_tabulate_check_local_vrule_thickness#1% {\relax \ifcase\d_tabl_tabulate_vrulethickness_local \global\d_tabl_tabulate_vrulethickness#1\relax @@ -388,10 +372,10 @@ \global\d_tabl_tabulate_vrulethickness_local\zeropoint \fi} -\unexpanded\def\tabl_tabulate_check_local_vrule_color_first#1% +\protected\def\tabl_tabulate_check_local_vrule_color_first#1% {\relax} -\unexpanded\def\tabl_tabulate_check_local_vrule_color_second#1% +\protected\def\tabl_tabulate_check_local_vrule_color_second#1% {\relax \ifempty\m_tabl_tabulate_vrule_color_local \xdef\m_tabl_tabulate_vrule_color{#1}% @@ -413,7 +397,7 @@ \let\tabl_tabulate_check_local_vrule_color\tabl_tabulate_check_local_vrule_color_second \to \t_tabl_tabulate_initializers_second -% \unexpanded % we can expand this one +% \protected % we can expand this one \def\tabl_tabulate_inject_pre_skip#1% {\ifdim#1>\zeropoint \kern#1\relax % was \hskip @@ -425,7 +409,7 @@ \fi \fi} -% \unexpanded % we can expand this one +% \protected % we can expand this one \def\tabl_tabulate_inject_post_skip#1% {\ifdim#1>\zeropoint \kern#1\relax % was \hskip @@ -531,7 +515,7 @@ %\let\gettabulateexit\dogettabulateexit % still needed ? \d_tabl_tabulate_width\zeropoint} -\unexpanded\def\installtabulatepreambleoption#1#2% +\protected\def\installtabulatepreambleoption#1#2% {\setvalue{\??tabulatepreamble\string#1}{#2}}% \installtabulatepreambleoption{x}{\c_tabl_tabulate_align\zerocount @@ -824,6 +808,7 @@ \global\d_tabl_tabulate_vrulethickness\zeropoint \else \global\d_tabl_tabulate_vrulethickness\d_tabl_tabulate_vrulethickness_default + % the lmtx raw processor handles {} like the normal one so we need to prune \rawprocesscommalist[#1]\tabl_tabulate_set_vrule_command \fi \tabl_tabulate_set_preamble#2\relax\relax % permits i without n @@ -906,7 +891,7 @@ \tabl_tabulate_check_linenumbers \box\b_tabl_tabulate} -\unexpanded\def\tabl_tabulate_hook_nop +\protected\def\tabl_tabulate_hook_nop {} \let\tabl_tabulate_hook\tabl_tabulate_hook_nop @@ -945,12 +930,12 @@ \fi} \def\tabl_tabulate_pbreak_check - {\starttabulatenoalign + {\noalign\bgroup \tabl_tabulate_pbreak_inject \ifconditional\c_tabl_tabulate_splitoff_whitespace \tabl_tabulate_whitespace \fi - \stoptabulatenoalign} + \egroup} %D \startbuffer %D \starttabulate[|c|p|p|] @@ -1040,44 +1025,42 @@ %\c!title=, \c!indenting=\v!no] -\unexpanded\def\definetabulate - {\dotripleempty\tabl_tabulate_define} - -\def\tabl_tabulate_define[#1][#2][#3]% - {\ifthirdargument +\permanent\tolerant\protected\def\definetabulate[#1]#*[#2]#*[#3]% + {\ifarguments + % ignore + \or + % [tag] + \definetabulation[#1][\c!format={|l|p|},\s!check=]% + \or + % [tag] [template] + \definetabulation[#1][\c!format={#2},\s!check=]% + \or % [tag] [sub] [template] \ifcsname\namedtabulationhash{#1}\s!check\endcsname \else \definetabulation[#1][\c!format={#3},\s!check=]% \fi \definetabulation[#1:#2][#1][\c!format={#3},\s!check=]% - \orelse\ifsecondargument - % [tag] [template] - \definetabulation[#1][\c!format={#2},\s!check=]% - \else - % [tag] - \definetabulation[#1][\c!format={|l|p|},\s!check=]% \fi} -\unexpanded\def\setuptabulate - {\dotripleempty\tabl_tabulate_setup} - -\def\tabl_tabulate_setup[#1][#2][#3]% - {\ifthirdargument - % [tag] [sub] [settings] - \setuptabulation[#1:#2][#3]% - \orelse\ifsecondargument - % [tag] [settings] - \setuptabulation[#1][#2]% - \else +\permanent\tolerant\protected\def\setuptabulate[#1]#*[#2]#*[#3]% + {\ifarguments + % ignore + \or % [tag] \setuptabulation[#1]% + \or + % [tag] [settings] + \setuptabulation[#1][#2]% + \or + % [tag] [sub] [settings] + \setuptabulation[#1:#2][#3]% \fi} \appendtoks - \setuevalue{\e!start\currenttabulation}{\tabl_start_defined[\currenttabulation]}% - \letvalue{\e!stop\currenttabulation}\relax - \letvalue{\??tabulatehead\currenttabulation}\empty - \letvalue{\??tabulatefoot\currenttabulation}\empty + \enforced\expandafter\edef\csname\e!start \currenttabulation\endcsname{\tabl_start_defined[\currenttabulation]}% + \enforced\expandafter\let \csname\e!stop \currenttabulation\endcsname\relax + \enforced\expandafter\let \csname\??tabulatehead\currenttabulation\endcsname\empty + \enforced\expandafter\let \csname\??tabulatefoot\currenttabulation\endcsname\empty \to \everydefinetabulation \let\tabulateparameter\tabulationparameter % will stay for a while @@ -1090,14 +1073,14 @@ \let\tabl_tabulate_insert_foot\empty \def\tabl_tabulate_insert_head_content - {\tabulatenoalign{\global\settrue\c_tabl_tabulate_someamble}% + {\noalign{\global\settrue\c_tabl_tabulate_someamble}% \begincsname\??tabulatehead\currenttabulation\endcsname - \tabulatenoalign{\global\setfalse\c_tabl_tabulate_someamble}}% + \noalign{\global\setfalse\c_tabl_tabulate_someamble}}% \def\tabl_tabulate_insert_foot_content - {\tabulatenoalign{\global\settrue\c_tabl_tabulate_someamble}% + {\noalign{\global\settrue\c_tabl_tabulate_someamble}% \begincsname\??tabulatefoot\currenttabulation\endcsname - \tabulatenoalign{\global\setfalse\c_tabl_tabulate_someamble}}% + \noalign{\global\setfalse\c_tabl_tabulate_someamble}}% \def\tabl_tabulate_check_full_content % - needed, else confusion with \c!header {\ifcsname\??tabulatehead\currenttabulation\endcsname @@ -1124,7 +1107,7 @@ \def\tabl_tabulate_insert_content {\tabl_tabulate_insert_head \ifcase\c_tabl_tabulate_repeathead \else - \tabulatenoalign{\penalty\zerocount}% added 7/5/2014 WS mail + \noalign{\penalty\zerocount}% added 7/5/2014 WS mail \fi \tabl_tabulate_insert_body \tabl_tabulate_insert_foot @@ -1133,7 +1116,7 @@ \def\tabl_tabulate_remove_funny_line {\ifhmode \strut\crcr - \tabulatenoalign{\kern-\lineheight}% + \noalign{\kern-\lineheight}% \fi} % todo: make footer synonym to tail @@ -1152,95 +1135,70 @@ \def\tabl_tabulate_start_head_nop{\tabl_tabulate_start_head_yes[\v!tabulate]} \def\tabl_tabulate_start_foot_nop{\tabl_tabulate_start_foot_yes[\v!tabulate]} -\unexpanded\def\tabl_start_defined[#1]% +\protected\def\tabl_start_defined[#1]% {\bgroup \edef\currenttabulationparent{#1}% \let\currenttabulation\currenttabulationparent - \edef\p_format{\tabulationparameter\c!format}% - \ifx\p_format\v!none + \iftok{\tabulationparameter\c!format}{\v!none}% % this is special case: we need to define the generic english % \starttabulate in other interfaces as well - \expandafter\dodoubleempty \expandafter\tabl_start_regular + \lettabulationparameter\c!format\tabl_default_format + \expandafter\tabl_start_regular \else - \expandafter\dodoubleargument\expandafter\tabl_start_defined_indeed + \expandafter\tabl_start_defined_indeed \fi} -\def\tabl_start_defined_indeed - {\iffirstargument - \ifsecondargument - \doubleexpandafter\tabl_start_defined_two +\tolerant\def\tabl_start_defined_indeed[#1]#*[#2]% + {\ifarguments\or + \ifhastok={#1}% + \setuptabulation[\currenttabulation][#1]% \else - \doubleexpandafter\tabl_start_defined_one + \edef\currenttabulation{\currenttabulation:#1}% \fi - \else - \singleexpandafter\tabl_start_defined_zero - \fi} - -\def\tabl_start_defined_one[#1][#2]% - {\ifcondition\validassignment{#1}% - \setuptabulation[\currenttabulation][#1]% \else \edef\currenttabulation{\currenttabulation:#1}% + \setuptabulation[\currenttabulation][#2]% \fi \tabl_tabulate_start_building} -\def\tabl_start_defined_two[#1][#2]% - {\edef\currenttabulation{\currenttabulation:#1}% - \setuptabulation[\currenttabulation][#2]% - \tabl_tabulate_start_building} - -\def\tabl_start_defined_zero[#1][#2]% - {\tabl_tabulate_start_building} - % \definetabulate[\v!tabulate][|l|p|] % we need to get rid of this one -\unexpanded\setuvalue{\e!start\v!tabulate}% +\def\tabl_default_format{|l|p|} % actually format is always set + +\permanent\protected\setuvalue{\e!start\v!tabulate}% {\bgroup % whole thing \let\currenttabulationparent\empty - \dodoubleempty\tabl_start_regular} + \tabl_start_regular} -\def\tabl_start_regular +\tolerant\protected\def\tabl_start_regular[#1]#*[#2]% [format] | [settings] | [format] [settings] | [settings] [format] {\let\currenttabulation\currenttabulationparent - \ifsecondargument - \expandafter\tabl_start_regular_two - \else - \expandafter\tabl_start_regular_one - \fi} - -\def\tabl_default_format{|l|p|} - -\def\tabl_start_regular_one[#1][#2]% - {\ifcondition\validassignment{#1}% - \lettabulationparameter\c!format\tabl_default_format + \iftok{#1}\emptytoks + \ifhastok={#2}\relax + \setupcurrenttabulation[#2]% + \fi + \orelse\ifhastok={#1} + \ifhastok{#2}\relax + \settabulationparameter\c!format{#2}% + \fi \setupcurrenttabulation[#1]% \else - \def\p_format{#1}% - \ifempty\p_format - \def\p_format{|l|p|}% + \settabulationparameter\c!format{#1}% + \ifhastok={#2}\relax + \setupcurrenttabulation[#2]% \fi - \lettabulationparameter\c!format\p_format - \fi - \tabl_tabulate_start_building} - -\def\tabl_start_regular_two[#1][#2]% - {\def\p_format{#1}% - \ifempty\p_format - \let\p_format\tabl_default_format \fi - \lettabulationparameter\c!format\p_format - \setupcurrenttabulation[#2]% \tabl_tabulate_start_building} \letvalue{\e!stop\v!tabulate }\relax \letvalue{\e!stop\v!tabulatehead}\relax \letvalue{\e!stop\v!tabulatetail}\relax -\unexpanded\def\tabl_tabulate_start_ignore +\permanent\protected\def\tabl_tabulate_start_ignore % todo when we go frozen {\em Nested tabulate is not (yet) supported.\relax \expandafter\gobbleuntil\csname\ifconditional\c_tabl_generic stoptabulate\else\e!stop\v!tabulate\fi\endcsname} \appendtoks - \letvalue{\e!start\v!tabulate}\tabl_tabulate_start_ignore % only the main one + \enforced\letvalue{\e!start\v!tabulate}\tabl_tabulate_start_ignore % only the main one \to \everytabulate \setvalue{\??tabulatesplit\v!yes }{\settrue\c_tabl_tabulate_split} @@ -1283,7 +1241,7 @@ \let\tabl_tabulate_inside_inbetween \relax \let\tabl_tabulate_outside_inbetween\relax -\unexpanded\def\tabl_tabulate_inside_before +\protected\def\tabl_tabulate_inside_before {\ifhmode\par\fi \ifhmode \ifinsidesplitfloat @@ -1296,7 +1254,7 @@ \let\tabl_tabulate_inside_after\relax \fi} -\unexpanded\def\tabl_tabulate_outside_before +\protected\def\tabl_tabulate_outside_before {\ifhmode\par\fi \ifhmode \vbox\bgroup @@ -1328,7 +1286,7 @@ \verticalstrut \vskip-\struttotal}} -\unexpanded\def\tabl_tabulate_start_building +\protected\def\tabl_tabulate_start_building {\ifinsidefloat \tabl_tabulate_inside_before \else @@ -1380,7 +1338,7 @@ \tabulationparameter\c!inner \d_tabl_tabulate_indent\dimexpr\leftskip+\hangindent\ifx\p_indenting\v!yes+\parindent\fi\relax \global\c_tabl_tabulate_column\zerocount - \processcontent + \processcontent % stoptabulate needs to match the frozen one {\ifconditional\c_tabl_generic stoptabulate\else\e!stop\ifempty\currenttabulationparent\v!tabulate\else\currenttabulationparent\fi\fi} \tabl_tabulate_insert_body \tabl_tabulate_process} @@ -1422,13 +1380,13 @@ \global \d_tabl_tabulate_vrulethickness_local\zeropoint \to \t_tabl_tabulate_every_row -\unexpanded\def\tabl_tabulate_color_side_right_second +\protected\def\tabl_tabulate_color_side_right_second {\ifempty\m_tabl_tabulate_color_previous \else \tabl_tabulate_color_set\m_tabl_tabulate_color_previous \glet\m_tabl_tabulate_color_previous\empty \fi} -\unexpanded\def\tabl_tabulate_color_side_left_second +\protected\def\tabl_tabulate_color_side_left_second {\ifempty\m_tabl_tabulate_color \else \ifcase\c_tabl_tabulate_colorspan \or @@ -1438,7 +1396,7 @@ \fi \fi} -\unexpanded\def\tabl_tabulate_color_side_both_second +\protected\def\tabl_tabulate_color_side_both_second {\ifempty\m_tabl_tabulate_color \else \tabl_tabulate_color_set\m_tabl_tabulate_color \ifcase\c_tabl_tabulate_colorspan @@ -1462,7 +1420,7 @@ \let\tabl_tabulate_color_side_both \tabl_tabulate_color_side_both_second \to \t_tabl_tabulate_initializers_second -\def\tabl_tabulate_set_color_column#1% overloaded +\def\tabl_tabulate_set_color_column#1% overloaded / todo {\unskip \doifelsefastoptionalcheck{\tabl_tabulate_set_color_column_yes#1}{\tabl_tabulate_set_color_column_nop#1}} @@ -1566,13 +1524,13 @@ {\dousecolorparameter\m_tabl_tabulate_vrule_color \vrule\s!width\d_tabl_tabulate_vrulethickness\relax} -\unexpanded\def\tabl_tabulate_column_vrule_inject_first +\protected\def\tabl_tabulate_column_vrule_inject_first {\ifcase\d_tabl_tabulate_vrulethickness\else \tabl_tabulate_column_vruled_normal % could be a skip instead \fi \global\d_tabl_tabulate_vrulethickness\zeropoint} % nils second one -\unexpanded\def\tabl_tabulate_column_vrule_inject_second +\protected\def\tabl_tabulate_column_vrule_inject_second {\ifcase\d_tabl_tabulate_vrulethickness\else \ifempty\m_tabl_tabulate_vrule_color \tabl_tabulate_column_vruled_normal @@ -1602,9 +1560,9 @@ \expandafter\ignorespaces % interferes with the more tricky hooks \fi} -\unexpanded\def\setquicktabulate#1% see \startlegend \startgiven (for the moment still public) - {\let#1\tabl_tabulate_column_inject_auto - \let\\\tabl_tabulate_column_inject_auto} % brrr, will go +\protected\def\setquicktabulate#1% see \startlegend \startgiven (for the moment still public) + {\enforced\let#1\tabl_tabulate_column_inject_auto + \enforced\let\\\tabl_tabulate_column_inject_auto} % brrr, will go \setvalue{\??tabulateseparator\v!blank }{\s_tabl_tabulate_separator\bigskipamount} \setvalue{\??tabulateseparator\v!depth }{\s_tabl_tabulate_separator\strutdp} @@ -1636,24 +1594,15 @@ \directvskip\s_tabl_tabulate_separator \egroup} -\def\tabl_tabulate_hrule_spec_ignore#1% - {%\glet\currenttabulationlocalhrulecolor\empty - %\global\d_tabl_tabulate_hrulethickness_local\d_tabl_tabulate_hrulethickness_default - \doifelsefastoptionalcheck#1#1} - -\def\tabl_tabulate_hrule_spec_pickup#1% - {\glet\currenttabulationlocalhrulecolor\m_tabl_tabulate_hrule_color_default - \global\d_tabl_tabulate_hrulethickness_local\d_tabl_tabulate_hrulethickness_default - \doifelsefastoptionalcheck{\tabl_tabulate_hrule_preset#1}#1} - \def\tabl_tabulate_hrule_preset_step#1% {\doifelsenumber{#1} {\global\d_tabl_tabulate_hrulethickness_local#1\d_tabl_tabulate_hrulethickness_default} {\xdef\currenttabulationlocalhrulecolor{#1}}} -\def\tabl_tabulate_hrule_preset#1[#2]% - {\rawprocesscommalist[#2]\tabl_tabulate_hrule_preset_step - #1} +\def\tabl_tabulate_hrule_preset[#1]% + {\glet\currenttabulationlocalhrulecolor\m_tabl_tabulate_hrule_color_default + \global\d_tabl_tabulate_hrulethickness_local\d_tabl_tabulate_hrulethickness_default + \iftok{#1}\emptytoks\else\rawprocesscommalist[#1]\tabl_tabulate_hrule_preset_step\fi} \def\tabl_tabulate_hrule_inject_normal {\autorule @@ -1666,12 +1615,12 @@ {\dousecolorparameter\currenttabulationlocalhrulecolor \tabl_tabulate_hrule_inject_normal} -\unexpanded\def\tabl_tabulate_hrule_inject_first +\protected\def\tabl_tabulate_hrule_inject_first {\ifcase\d_tabl_tabulate_hrulethickness_local\else \tabl_tabulate_hrule_inject_normal \fi} -\unexpanded\def\tabl_tabulate_hrule_inject_second +\protected\def\tabl_tabulate_hrule_inject_second {\ifcase\d_tabl_tabulate_hrulethickness_local\else \ifempty\currenttabulationlocalhrulecolor \tabl_tabulate_hrule_inject_normal @@ -1715,7 +1664,7 @@ % \NC test \CC[yellow] test \NC test \NC \NR % \stoptabulate -\unexpanded\def\tabl_tabulate_color_set#1% we could store the attributes at the cost of a lua call +\protected\def\tabl_tabulate_color_set#1% we could store the attributes at the cost of a lua call {\begingroup \clf_enablebackgroundalign % was \node_backgrounds_align_initialize \glet\tabl_tabulate_color_repeat\tabl_tabulate_color_repeat_second @@ -1821,7 +1770,7 @@ \def\tabl_tabulate_digits{\digits} -%D Beware, we cannot use \type {\unexpanded} on \type {\HL} cum suis, since \TEX's +%D Beware, we cannot use \type {\protected} on \type {\HL} cum suis, since \TEX's %D hard coded noalign lookahead fails on it! I mistakenly added this for a while. \setvalue{\??tabulatealigning\v!normal}{0} @@ -1832,10 +1781,10 @@ \setvalue{\??tabulateheader\v!repeat}{\plusone} \setvalue{\??tabulateheader\v!text }{\plustwo} -\unexpanded\def\tabl_tabulate_bskip_first {\setbox\b_tabl_tabulate\vbox\bgroup\glet\tabl_tabulate_hook\tabl_tabulate_hook_nop} -\unexpanded\def\tabl_tabulate_eskip_first {\par\egroup\glet\tabl_tabulate_hook\tabl_tabulate_hook_yes} -\unexpanded\def\tabl_tabulate_xbskip_first{\hpack\bgroup\vbox\bgroup\glet\tabl_tabulate_hook\tabl_tabulate_hook_nop} -\unexpanded\def\tabl_tabulate_xeskip_first{\par\egroup\egroup\glet\tabl_tabulate_hook\tabl_tabulate_hook_yes} +\protected\def\tabl_tabulate_bskip_first {\setbox\b_tabl_tabulate\vbox\bgroup\glet\tabl_tabulate_hook\tabl_tabulate_hook_nop} +\protected\def\tabl_tabulate_eskip_first {\par\egroup\glet\tabl_tabulate_hook\tabl_tabulate_hook_yes} +\protected\def\tabl_tabulate_xbskip_first{\hpack\bgroup\vbox\bgroup\glet\tabl_tabulate_hook\tabl_tabulate_hook_nop} +\protected\def\tabl_tabulate_xeskip_first{\par\egroup\egroup\glet\tabl_tabulate_hook\tabl_tabulate_hook_yes} \let\tabl_tabulate_bbskip\relax \let\tabl_tabulate_eeskip\relax @@ -1873,28 +1822,28 @@ % so far -\unexpanded\def\tabl_tabulate_VL_first{\tabl_tabulate_column_vruled\zerocount\zerocount} -\unexpanded\def\tabl_tabulate_NC_first{\tabl_tabulate_column_normal\zerocount\zerocount} -\unexpanded\def\tabl_tabulate_RC_first{\tabl_tabulate_column_normal\zerocount\plusone} -\unexpanded\def\tabl_tabulate_HC_first{\tabl_tabulate_column_normal\zerocount\plustwo} -\unexpanded\def\tabl_tabulate_EQ_first{\tabl_tabulate_column_equal \plustwo \zerocount} -\unexpanded\def\tabl_tabulate_RQ_first{\tabl_tabulate_column_equal \zerocount\plusone} -\unexpanded\def\tabl_tabulate_HQ_first{\tabl_tabulate_column_equal \zerocount\plustwo} +\permanent\protected\def\tabl_tabulate_VL_first{\tabl_tabulate_column_vruled\zerocount\zerocount} +\permanent\protected\def\tabl_tabulate_NC_first{\tabl_tabulate_column_normal\zerocount\zerocount} +\permanent\protected\def\tabl_tabulate_RC_first{\tabl_tabulate_column_normal\zerocount\plusone} +\permanent\protected\def\tabl_tabulate_HC_first{\tabl_tabulate_column_normal\zerocount\plustwo} +\permanent\protected\def\tabl_tabulate_EQ_first{\tabl_tabulate_column_equal \plustwo \zerocount} +\permanent\protected\def\tabl_tabulate_RQ_first{\tabl_tabulate_column_equal \zerocount\plusone} +\permanent\protected\def\tabl_tabulate_HQ_first{\tabl_tabulate_column_equal \zerocount\plustwo} -\unexpanded\def\tabl_tabulate_NG_first{\tabl_tabulate_column_normal\zerocount\zerocount} -\unexpanded\def\tabl_tabulate_NN_first{\tabl_tabulate_column_normal\zerocount\zerocount\tabl_tabulate_digits} % new, undocumented, test first -\unexpanded\def\tabl_tabulate_ND_first{\tabl_tabulate_column_normal\zerocount\zerocount\tabl_tabulate_digits} % same, for old times sake +\permanent\protected\def\tabl_tabulate_NG_first{\tabl_tabulate_column_normal\zerocount\zerocount} +\permanent\protected\def\tabl_tabulate_NN_first{\tabl_tabulate_column_normal\zerocount\zerocount\tabl_tabulate_digits} % new, undocumented, test first +\permanent\protected\def\tabl_tabulate_ND_first{\tabl_tabulate_column_normal\zerocount\zerocount\tabl_tabulate_digits} % same, for old times sake -\unexpanded\def\tabl_tabulate_NR_first {\tabl_tabulate_NR_common\conditionaltrue \tabl_tabulate_check_penalties} % next row -\unexpanded\def\tabl_tabulate_NB_first {\tabl_tabulate_NR_common\conditionaltrue \tabl_tabulate_nobreak_inject } % next row no break +\permanent\protected\def\tabl_tabulate_NR_first {\tabl_tabulate_NR_common\conditionaltrue \tabl_tabulate_check_penalties} % next row +\permanent\protected\def\tabl_tabulate_NB_first {\tabl_tabulate_NR_common\conditionaltrue \tabl_tabulate_nobreak_inject } % next row no break -\unexpanded\def\tabl_tabulate_NR_second{\tabl_tabulate_NR_common\conditionalfalse\tabl_tabulate_check_penalties} % next row -\unexpanded\def\tabl_tabulate_NB_second{\tabl_tabulate_NR_common\conditionalfalse\tabl_tabulate_nobreak_inject } % next row no break +\permanent\protected\def\tabl_tabulate_NR_second{\tabl_tabulate_NR_common\conditionalfalse\tabl_tabulate_check_penalties} % next row +\permanent\protected\def\tabl_tabulate_NB_second{\tabl_tabulate_NR_common\conditionalfalse\tabl_tabulate_nobreak_inject } % next row no break -\unexpanded\def\tabl_tabulate_CC_first{\global\c_tabl_tabulate_localcolorspan\zerocount\tabl_tabulate_set_color_column\zerocount} -\unexpanded\def\tabl_tabulate_CL_first{\global\c_tabl_tabulate_localcolorspan\plusone \tabl_tabulate_set_color_column\zerocount} -\unexpanded\def\tabl_tabulate_CM_first{\global\c_tabl_tabulate_localcolorspan\plustwo \tabl_tabulate_set_color_column\zerocount} -\unexpanded\def\tabl_tabulate_CR_first{\global\c_tabl_tabulate_localcolorspan\plusthree\tabl_tabulate_set_color_column\zerocount} +\permanent\protected\def\tabl_tabulate_CC_first{\global\c_tabl_tabulate_localcolorspan\zerocount\tabl_tabulate_set_color_column\zerocount} +\permanent\protected\def\tabl_tabulate_CL_first{\global\c_tabl_tabulate_localcolorspan\plusone \tabl_tabulate_set_color_column\zerocount} +\permanent\protected\def\tabl_tabulate_CM_first{\global\c_tabl_tabulate_localcolorspan\plustwo \tabl_tabulate_set_color_column\zerocount} +\permanent\protected\def\tabl_tabulate_CR_first{\global\c_tabl_tabulate_localcolorspan\plusthree\tabl_tabulate_set_color_column\zerocount} %D Sort of special: %D @@ -1920,53 +1869,50 @@ %D %D \typebuffer \getbuffer -\unexpanded\def\tabl_tabulate_NI_first{\doifelsefastoptionalcheck\tabl_tbl_NI_yes\tabl_tbl_NI_nop} - -\def\tabl_tbl_NI_yes[#1]{\NC \itemtag[#1]\NC} -\def\tabl_tbl_NI_nop {\NC \itemtag \NC} +\permanent\tolerant\protected\def\tabl_tabulate_NI_first[#1]{\NC\itemtag[#1]\NC} %D The following shortcut is handy for tables where one needs bold headers: -\unexpanded\def\tabl_tabulate_BC_first +\permanent\protected\def\tabl_tabulate_BC_first {\tabl_tabulate_column_normal\plusone\zerocount \let\fontstyle\globalfontstyle \bf} \appendtoks - \let\VL\tabl_tabulate_VL_first - \let\NC\tabl_tabulate_NC_first - \let\BC\tabl_tabulate_BC_first - \let\RC\tabl_tabulate_RC_first - \let\HC\tabl_tabulate_HC_first - \let\EQ\tabl_tabulate_EQ_first - \let\RQ\tabl_tabulate_RQ_first - \let\HQ\tabl_tabulate_HQ_first - \let\NG\tabl_tabulate_NG_first - \let\NN\tabl_tabulate_NN_first - \let\ND\tabl_tabulate_ND_first - \let\NR\tabl_tabulate_NR_first - \let\NB\tabl_tabulate_NB_first - \let\CC\tabl_tabulate_CC_first - \let\CL\tabl_tabulate_CL_first - \let\CM\tabl_tabulate_CM_first - \let\CR\tabl_tabulate_CR_first - \let\NI\tabl_tabulate_NI_first + \enforced\let\VL\tabl_tabulate_VL_first + \enforced\let\NC\tabl_tabulate_NC_first + \enforced\let\BC\tabl_tabulate_BC_first + \enforced\let\RC\tabl_tabulate_RC_first + \enforced\let\HC\tabl_tabulate_HC_first + \enforced\let\EQ\tabl_tabulate_EQ_first + \enforced\let\RQ\tabl_tabulate_RQ_first + \enforced\let\HQ\tabl_tabulate_HQ_first + \enforced\let\NG\tabl_tabulate_NG_first + \enforced\let\NN\tabl_tabulate_NN_first + \enforced\let\ND\tabl_tabulate_ND_first + \enforced\let\NR\tabl_tabulate_NR_first + \enforced\let\NB\tabl_tabulate_NB_first + \enforced\let\CC\tabl_tabulate_CC_first + \enforced\let\CL\tabl_tabulate_CL_first + \enforced\let\CM\tabl_tabulate_CM_first + \enforced\let\CR\tabl_tabulate_CR_first + \enforced\let\NI\tabl_tabulate_NI_first \to \t_tabl_tabulate_initializers_first \appendtoks - \let\NR\tabl_tabulate_NR_second - \let\NB\tabl_tabulate_NB_second + \enforced\let\NR\tabl_tabulate_NR_second + \enforced\let\NB\tabl_tabulate_NB_second \to \t_tabl_tabulate_initializers_second \appendtoks - \let\SR\NR - \let\FR\NR - \let\MR\NR - \let\LR\NR - \let\AR\NR + \enforced\let\SR\NR + \enforced\let\FR\NR + \enforced\let\MR\NR + \enforced\let\LR\NR + \enforced\let\AR\NR \to \t_tabl_tabulate_initializers_first -\unexpanded\def\tabl_tabulate_NR_common#1#2% +\permanent\protected\def\tabl_tabulate_NR_common#1#2% {\global\advance\c_tabl_tabulate_noflines\plusone \global\setfalse\c_tabl_tabulate_firstflushed \global\setfalse\c_tabl_tabulate_equal @@ -1977,10 +1923,7 @@ \tabl_tabulate_pheight_reset \unskip\unskip\crcr\tabl_tabulate_flush_collected % can we omit the next one in the first run? probably - \starttabulatenoalign - \the\t_tabl_tabulate_every_after_row - #2% - \stoptabulatenoalign} + \noalign{\the\t_tabl_tabulate_every_after_row#2}} \def\tabl_tabulate_check_penalties {\ifconditional\c_tabl_tabulate_tolerant_break\else @@ -2005,20 +1948,20 @@ \fi \global\setfalse\c_tabl_tabulate_firstflushed} -\unexpanded\def\tabl_tabulate_bbskip_second_split_yes +\protected\def\tabl_tabulate_bbskip_second_split_yes {\ifvoid\b_tabl_tabulate_current\c_tabl_tabulate_column \ifempty\tabl_tabulate_flush_collected_indeed\else \setbox0\hbox \fi \fi} -\unexpanded\def\tabl_tabulate_eskip_second +\protected\def\tabl_tabulate_eskip_second {\par\egroup \tabl_tabulate_pheight_set \glet\tabl_tabulate_hook\tabl_tabulate_hook_yes \tabl_tabulate_splitoff_box} -\unexpanded\def\tabl_tabulate_bskip_second_split_yes +\protected\def\tabl_tabulate_bskip_second_split_yes {\ifvoid\b_tabl_tabulate_current\c_tabl_tabulate_column % first line \global\setbox\b_tabl_tabulate_current\c_tabl_tabulate_column\vbox @@ -2037,33 +1980,33 @@ \expandafter\tabl_tabulate_splitoff_box \fi} -\unexpanded\def\tabl_tabulate_xbskip_second{\tabl_tabulate_bskip} -\unexpanded\def\tabl_tabulate_xeskip_second{\tabl_tabulate_eskip} +\protected\def\tabl_tabulate_xbskip_second{\tabl_tabulate_bskip} +\protected\def\tabl_tabulate_xeskip_second{\tabl_tabulate_eskip} -\unexpanded\def\tabl_tabulate_flush_second_indeed +\protected\def\tabl_tabulate_flush_second_indeed {\glet\tabl_tabulate_flush_collected_indeed\empty \global\c_tabl_tabulate_column\zerocount \tabl_tabulate_pbreak_check \dofastloopcs\c_tabl_tabulate_columns\tabl_tabulate_flush_second_step \global\settrue\c_tabl_tabulate_firstflushed} -\unexpanded\def\tabl_tabulate_flush_second_step +\protected\def\tabl_tabulate_flush_second_step {\ifvoid\b_tabl_tabulate_current\fastloopindex\else \gdef\tabl_tabulate_flush_collected_indeed{\the\t_tabl_tabulate_dummy}% \fi} \def\tabl_tabulate_flush_second - {\tabulatenoalign{\tabl_tabulate_flush_second_indeed}% + {\noalign{\tabl_tabulate_flush_second_indeed}% \tabl_tabulate_flush_collected_indeed} -\unexpanded\def\tabl_tabulate_bskip_second_split_nop +\protected\def\tabl_tabulate_bskip_second_split_nop {\vtop\bgroup \ifconditional\c_tabl_tabulate_automode\hsize\d_tabl_tabulate_width\fi % \begstrut % interferes with pre-\pars % evt: \appendtoks\begstrut\to\everypar \ignorespaces} -\unexpanded\def\tabl_tabulate_eskip_second_split_nop % vertical strut added august 2003 +\protected\def\tabl_tabulate_eskip_second_split_nop % vertical strut added august 2003 {\par\verticalstrut \vskip-\struttotal \egroup} @@ -2090,19 +2033,15 @@ % \starttabulate[||] \dorecurse{100}{\NC Eins \NC \NR \HL} \stoptabulate % \stoptext -\def\tabl_tabulate_XX_none - {\starttabulatenoalign - \tabl_tabulate_break_state_set - \tabl_tabulate_hrule_spec_ignore - \stoptabulatenoalign} +\permanent\tolerant\noaligned\protected\def\tabl_tabulate_XX_none [#1]{\noalign{\tabl_tabulate_break_state_set}} -\def\tabl_tabulate_FL_second{\starttabulatenoalign\tabl_tabulate_hrule_spec_pickup\tabl_tabulate_FL_second_indeed} -\def\tabl_tabulate_ML_second{\starttabulatenoalign\tabl_tabulate_hrule_spec_pickup\tabl_tabulate_ML_second_indeed} -\def\tabl_tabulate_LL_second{\starttabulatenoalign\tabl_tabulate_hrule_spec_pickup\tabl_tabulate_LL_second_indeed} -\def\tabl_tabulate_TL_second{\starttabulatenoalign\tabl_tabulate_hrule_spec_pickup\tabl_tabulate_TL_second_indeed} -\def\tabl_tabulate_BL_second{\starttabulatenoalign\tabl_tabulate_hrule_spec_pickup\tabl_tabulate_BL_second_indeed} +\permanent\tolerant\noaligned\protected\def\tabl_tabulate_FL_second[#1]{\noalign{\tabl_tabulate_hrule_preset[#1]\tabl_tabulate_FL_second_indeed}} +\permanent\tolerant\noaligned\protected\def\tabl_tabulate_ML_second[#1]{\noalign{\tabl_tabulate_hrule_preset[#1]\tabl_tabulate_ML_second_indeed}} +\permanent\tolerant\noaligned\protected\def\tabl_tabulate_LL_second[#1]{\noalign{\tabl_tabulate_hrule_preset[#1]\tabl_tabulate_LL_second_indeed}} +\permanent\tolerant\noaligned\protected\def\tabl_tabulate_TL_second[#1]{\noalign{\tabl_tabulate_hrule_preset[#1]\tabl_tabulate_TL_second_indeed}} +\permanent\tolerant\noaligned\protected\def\tabl_tabulate_BL_second[#1]{\noalign{\tabl_tabulate_hrule_preset[#1]\tabl_tabulate_BL_second_indeed}} -\unexpanded\def\tabl_tabulate_FL_second_indeed +\protected\def\tabl_tabulate_FL_second_indeed {\ifinsidefloat\else \doifempty{\tabulationparameter\c!before}\tabl_tabulate_baselinecorrection % no expansion \fi @@ -2110,13 +2049,12 @@ \tabl_tabulate_nobreak_inject \tabl_tabulate_column_rule_separator_inject \prevdepth\strutdp - \tabl_tabulate_nobreak_inject - \stoptabulatenoalign} + \tabl_tabulate_nobreak_inject} \def\spac_vspacing_no_topskip % use grouped {\c_attr_skipcategory\plusten} -\unexpanded\def\tabl_tabulate_ML_second_indeed +\protected\def\tabl_tabulate_ML_second_indeed {\tabl_tabulate_break_no \tabl_tabulate_column_rule_separator_inject \tabl_tabulate_break_no @@ -2127,10 +2065,9 @@ \tabl_tabulate_hrule_inject \endgroup \tabl_tabulate_break_no - \tabl_tabulate_column_rule_separator_inject - \stoptabulatenoalign} + \tabl_tabulate_column_rule_separator_inject} -\unexpanded\def\tabl_tabulate_LL_second_indeed +\protected\def\tabl_tabulate_LL_second_indeed {\tabl_tabulate_nobreak_inject \tabl_tabulate_column_rule_separator_inject \tabl_tabulate_nobreak_inject @@ -2139,10 +2076,9 @@ \tabl_tabulate_inside_inbetween \else \tabl_tabulate_outside_inbetween - \fi - \stoptabulatenoalign} + \fi} -\unexpanded\def\tabl_tabulate_TL_second_indeed +\protected\def\tabl_tabulate_TL_second_indeed {\tabl_tabulate_nobreak_inject \tabl_tabulate_column_rule_separator_inject \tabl_tabulate_nobreak_inject @@ -2150,12 +2086,11 @@ \tabl_tabulate_nobreak_inject \tabl_tabulate_column_rule_separator_inject %\prevdepth\strutdp % todo, might differ between TL and BL - \tabl_tabulate_nobreak_inject - \stoptabulatenoalign} + \tabl_tabulate_nobreak_inject} \let\tabl_tabulate_BL_second_indeed\tabl_tabulate_TL_second_indeed -\def\tabl_tabulate_HL_second +\permanent\def\tabl_tabulate_HL_second {\csname \ifnum\c_tabl_tabulate_noflines=\zerocount F\orelse \ifnum\c_tabl_tabulate_noflines=\c_tabl_tabulate_totalnoflines L\else @@ -2163,52 +2098,25 @@ L\endcsname} \appendtoks - \let\FL\tabl_tabulate_XX_none - \let\ML\tabl_tabulate_XX_none - \let\LL\tabl_tabulate_XX_none - \let\TL\tabl_tabulate_XX_none - \let\BL\tabl_tabulate_XX_none - \let\HL\tabl_tabulate_XX_none - \let\HR\tabl_tabulate_XX_none + \enforced\let\FL\tabl_tabulate_XX_none + \enforced\let\ML\tabl_tabulate_XX_none + \enforced\let\LL\tabl_tabulate_XX_none + \enforced\let\TL\tabl_tabulate_XX_none + \enforced\let\BL\tabl_tabulate_XX_none + \enforced\let\HL\tabl_tabulate_XX_none + \enforced\let\HR\tabl_tabulate_XX_none \to \t_tabl_tabulate_initializers_first \appendtoks - \let\FL\tabl_tabulate_FL_second - \let\ML\tabl_tabulate_ML_second - \let\LL\tabl_tabulate_LL_second - \let\TL\tabl_tabulate_TL_second - \let\BL\tabl_tabulate_BL_second - \let\HL\tabl_tabulate_HL_second - \let\HR\tabl_tabulate_HL_second + \enforced\let\FL\tabl_tabulate_FL_second + \enforced\let\ML\tabl_tabulate_ML_second + \enforced\let\LL\tabl_tabulate_LL_second + \enforced\let\TL\tabl_tabulate_TL_second + \enforced\let\BL\tabl_tabulate_BL_second + \enforced\let\HL\tabl_tabulate_HL_second + \enforced\let\HR\tabl_tabulate_HL_second \to \t_tabl_tabulate_initializers_second -% \def\tabulatedoHRfive % horizontal rule line (break untested) -% {\starttabulatenoalign -% \glet\dotabulateautoline\dotabulatelinerule -% %\ifcase#1\or % todo: check what this does -% \ifnum\noftabulatelines=\zerocount -% \glet\dotabulateautoline\donothing -% \orelse\ifnum\noftabulatelines=\totalnoftabulatelines -% \glet\dotabulateautoline\donothing -% \fi -% %\fi -% \dotabulatenobreak -% \stoptabulatenoalign -% \dotabulateautoline -% \starttabulatenoalign -% \tabl_tabulate_break_no -% \ifx\dotabulateautoline\dotabulatelinerule\kern-\lineheight\fi -% \ifnum\noftabulatelines=\totalnoftabulatelines -% \expandafter\dotabulatenobreak -% \else -% \expandafter\tabl_tabulate_break_allow -% \fi -% \stoptabulatenoalign -% \dotabulateautoline -% \starttabulatenoalign -% \dotabulatenobreak -% \stoptabulatenoalign} - % \dorecurse{10}{ % \starttabulate[|l|] % \FL @@ -2393,7 +2301,7 @@ \the\t_tabl_tabulate_initializers_second % collect more here % \ifx\p_line\v!line - \let\HL\HR + \enforced\let\HL\HR \let\tabulateautoline\tabulateautorule \let\tabulateline\tabulaterule \fi @@ -2505,36 +2413,19 @@ % \NC text \NC text \NC \NR % \stoptabulate -\def\tabl_tabulate_TB - {\starttabulatenoalign - \dosingleempty\tabl_tabulate_TB_indeed} - -\def\tabl_tabulate_TB_indeed[#1]% - {\iffirstargument - \blank[#1] - \orelse\ifempty\m_tabl_tabulate_blank_default - \blank - \else - \blank[\m_tabl_tabulate_blank_default]% - \fi - \stoptabulatenoalign} - -% to be tested: -% -% \def\tabl_tabulate_TB -% {\starttabulatenoalign -% \doiffastoptionalcheckelse\tabl_tabulate_TB_yes\tabl_tabulate_TB_nop} -% -% \def\tabl_tabulate_TB_yes[#1]% -% {\blank[#1] -% \stoptabulatenoalign} -% -% \def\tabl_tabulate_TB_nop[#1]% -% {\blank -% \stoptabulatenoalign} +\permanent\tolerant\noaligned\protected\def\tabl_tabulate_TB[#1]% + {\noalign\bgroup + \unless\iftok{#1}\emptytoks + \blank[#1] + \orelse\ifempty\m_tabl_tabulate_blank_default + \blank + \else + \blank[\m_tabl_tabulate_blank_default]% + \fi + \egroup} \appendtoks - \let\TB\tabl_tabulate_TB + \enforced\let\TB\tabl_tabulate_TB \to \everytabulate % %D Between alignment lines certain rules apply, and even a simple test can mess @@ -2701,13 +2592,17 @@ \newconditional\c_tabl_generic -\unexpanded\setuvalue{starttabulate}% +\pushoverloadmode + +\permanent\protected\setuvalue{starttabulate}% {\bgroup % whole thing \settrue\c_tabl_generic \let\currenttabulationparent\empty - \dodoubleempty\tabl_start_regular} + \tabl_start_regular} -\letvalue{stoptabulate}\relax +\permanent\letvalue{stoptabulate}\relax % testcase cvs-002.tex + +\popoverloadmode %D The following helpers are just there because we also have them at the \LUA\ end: %D @@ -2734,10 +2629,10 @@ \expandafter\tabl_tabulate_compact_step \fi#1} -\unexpanded\def\tabulaterow {\tabl_tabulate_compact_row\relax} -\unexpanded\def\tabulaterowbold{\tabl_tabulate_compact_row\bold} -\unexpanded\def\tabulaterowtype{\tabl_tabulate_compact_row\type} -\unexpanded\def\tabulaterowtyp {\tabl_tabulate_compact_row\typ} +\permanent\protected\def\tabulaterow {\tabl_tabulate_compact_row\relax} +\permanent\protected\def\tabulaterowbold{\tabl_tabulate_compact_row\bold} +\permanent\protected\def\tabulaterowtype{\tabl_tabulate_compact_row\type} +\permanent\protected\def\tabulaterowtyp {\tabl_tabulate_compact_row\typ} %D Here we plug in a row background feature. As we only have support for %D \type {frame=name} we can use these variables. @@ -2823,13 +2718,13 @@ \let\m_table_current_row_background_defaultfiller\empty \let\m_table_current_row_background_auto \empty -\unexpanded\def\tabl_register_row_background#1% +\protected\def\tabl_register_row_background#1% {\xdef\m_table_current_row_background{#1}} -\unexpanded\def\tabl_register_row_background_filler#1% +\protected\def\tabl_register_row_background_filler#1% {\xdef\m_table_current_row_background_filler{#1}} -\unexpanded\def\tabl_synchronize_row_background +\protected\def\tabl_synchronize_row_background {\iftrialtypesetting\else \ifempty\m_table_current_row_background_filler \ifempty\m_table_current_row_background @@ -2843,7 +2738,7 @@ \fi \fi} -\unexpanded\def\tabl_synchronize_row_background_dummy +\protected\def\tabl_synchronize_row_background_dummy {\iftrialtypesetting\else \begingroup %\clf_setbackgroundrowdata\numexpr\c_tabl_tabulate_nofrealrows+\minusone\relax\zerocount\zeropoint @@ -2851,7 +2746,7 @@ \endgroup \fi} -\unexpanded\def\tabl_synchronize_row_background_indeed#1% +\protected\def\tabl_synchronize_row_background_indeed#1% {\iftrialtypesetting\else \begingroup \clf_enablebackgroundalign % can be moved into \clf_setbackgroundrowdata @@ -2862,7 +2757,7 @@ \endgroup \fi} -\unexpanded\def\tabl_synchronize_row_background_filler_indeed#1% +\protected\def\tabl_synchronize_row_background_filler_indeed#1% {\iftrialtypesetting\else \begingroup \clf_enablebackgroundalign % can be moved into \clf_setbackgroundrowdata @@ -2898,21 +2793,27 @@ \glet\m_table_current_row_background_filler\empty \to \t_tabl_tabulate_every_after_row -\unexpanded\def\tabl_tabulate_NL_first[#1]% +\permanent\protected\def\tabl_tabulate_NL_first[#1]% {\tabl_tabulate_column_normal\zerocount\zerocount\relax \ifcase\c_tabl_tabulate_column\or \tabl_register_row_background{#1}% \fi \ignorespaces} -\unexpanded\def\tabl_tabulate_ND_first - {\tabl_tabulate_column_normal\zerocount\zerocount\relax - \ifcase\c_tabl_tabulate_column\or - \tabl_register_row_background\m_table_current_row_background_default - \fi - \ignorespaces} +\pushoverloadmode + + % redefinition needs checking -\unexpanded\def\tabl_tabulate_LB_first[#1]% + \permanent\overloaded\protected\def\tabl_tabulate_ND_first + {\tabl_tabulate_column_normal\zerocount\zerocount\relax + \ifcase\c_tabl_tabulate_column\or + \tabl_register_row_background\m_table_current_row_background_default + \fi + \ignorespaces} + +\popoverloadmode + +\permanent\protected\def\tabl_tabulate_LB_first[#1]% {\tabl_tabulate_column_normal\plusone\zerocount\relax \ifcase\c_tabl_tabulate_column\or \tabl_register_row_background{#1}% @@ -2920,30 +2821,30 @@ \usetabulationstyleandcolor\c!foregroundstyle\c!foregroundcolor \ignorespaces} -\unexpanded\def\tabl_tabulate_DB_first +\permanent\protected\def\tabl_tabulate_DB_first {\tabl_tabulate_column_normal\plusone\zerocount\relax \ifcase\c_tabl_tabulate_column\or \tabl_register_row_background\m_table_current_row_background_default \fi - \let\fontstyle\globalfontstyle + \enforced\let\fontstyle\globalfontstyle \usetabulationstyleandcolor\c!foregroundstyle\c!foregroundcolor \ignorespaces} -\unexpanded\def\tabl_tabulate_NF_first[#1]% +\permanent\protected\def\tabl_tabulate_NF_first[#1]% {\tabl_tabulate_column_normal\zerocount\zerocount\relax \ifcase\c_tabl_tabulate_column\or \tabl_register_row_background_filler{#1}% \fi \ignorespaces} -\unexpanded\def\tabl_tabulate_NP_first +\permanent\protected\def\tabl_tabulate_NP_first {\tabl_tabulate_column_normal\zerocount\zerocount\relax \ifcase\c_tabl_tabulate_column\or \tabl_register_row_background_filler\m_table_current_row_background_default_filler \fi \ignorespaces} -\unexpanded\def\tabl_tabulate_FB_first[#1]% +\permanent\protected\def\tabl_tabulate_FB_first[#1]% {\tabl_tabulate_column_normal\plusone\zerocount\relax \ifcase\c_tabl_tabulate_column\or \tabl_register_row_background_filler{#1}% @@ -2951,29 +2852,33 @@ \usetabulationstyleandcolor\c!foregroundstyle\c!foregroundcolor \ignorespaces} -\unexpanded\def\tabl_tabulate_PB_first +\permanent\protected\def\tabl_tabulate_PB_first {\tabl_tabulate_column_normal\plusone\zerocount\relax \ifcase\c_tabl_tabulate_column\or \tabl_register_row_background_filler\m_table_current_row_background_default_filler \fi - \let\fontstyle\globalfontstyle + \enforced\let\fontstyle\globalfontstyle \usetabulationstyleandcolor\c!foregroundstyle\c!foregroundcolor \ignorespaces} -\unexpanded\def\tabl_tabulate_BC_first % overloaded - {\tabl_tabulate_column_normal\plusone\zerocount - \let\fontstyle\globalfontstyle - \ifempty\m_table_current_row_background - \ifempty\m_table_current_row_background_filler - \usetabulationstyleandcolor\c!headstyle\c!headcolor - \else - \usetabulationstyleandcolor\c!foregroundstyle\c!foregroundcolor - \fi - \else - \usetabulationstyleandcolor\c!foregroundstyle\c!foregroundcolor - \fi} +\pushoverloadmode + + \permanent\overloaded\protected\def\tabl_tabulate_BC_first + {\tabl_tabulate_column_normal\plusone\zerocount + \enforced\let\fontstyle\globalfontstyle + \ifempty\m_table_current_row_background + \ifempty\m_table_current_row_background_filler + \usetabulationstyleandcolor\c!headstyle\c!headcolor + \else + \usetabulationstyleandcolor\c!foregroundstyle\c!foregroundcolor + \fi + \else + \usetabulationstyleandcolor\c!foregroundstyle\c!foregroundcolor + \fi} + +\popoverloadmode -\unexpanded\def\tabl_tabulate_A_first +\permanent\protected\def\tabl_tabulate_A_first {\global\advance\c_tabl_tabulate_autocolor\plusone \edef\m_table_current_row_background_auto{\tabulateparameter{\c!backgroundcolor:\number\c_tabl_tabulate_autocolor}}% \ifempty\m_table_current_row_background_auto @@ -2985,7 +2890,7 @@ \fi \tabl_register_row_background{\m_table_current_row_background_auto}} -\unexpanded\def\tabl_tabulate_NA_first +\permanent\protected\def\tabl_tabulate_NA_first {\tabl_tabulate_column_normal\zerocount\zerocount\relax \iftrialtypesetting\else \ifcase\c_tabl_tabulate_column\or @@ -2994,7 +2899,7 @@ \fi \ignorespaces} -\unexpanded\def\tabl_tabulate_BA_first +\permanent\protected\def\tabl_tabulate_BA_first {\tabl_tabulate_column_normal\plusone\zerocount\relax \iftrialtypesetting\else \ifcase\c_tabl_tabulate_column\or @@ -3005,16 +2910,16 @@ \ignorespaces} \appendtoks - \let\NL\tabl_tabulate_NL_first % NC with Line - \let\ND\tabl_tabulate_ND_first % NC with Default Line - \let\LB\tabl_tabulate_LB_first % BC with Line - \let\DB\tabl_tabulate_DB_first % BC with Default Line - \let\NF\tabl_tabulate_NF_first % NC with Filler - \let\NP\tabl_tabulate_NP_first % NC with Predefined Filler - \let\FB\tabl_tabulate_FB_first % BC with Filler - \let\PB\tabl_tabulate_PB_first % BC with Predefined Filler - \let\NA\tabl_tabulate_NA_first % NC with Auto Line - \let\BA\tabl_tabulate_BA_first % NC with Auto Line + \enforced\let\NL\tabl_tabulate_NL_first % NC with Line + \enforced\let\ND\tabl_tabulate_ND_first % NC with Default Line + \enforced\let\LB\tabl_tabulate_LB_first % BC with Line + \enforced\let\DB\tabl_tabulate_DB_first % BC with Default Line + \enforced\let\NF\tabl_tabulate_NF_first % NC with Filler + \enforced\let\NP\tabl_tabulate_NP_first % NC with Predefined Filler + \enforced\let\FB\tabl_tabulate_FB_first % BC with Filler + \enforced\let\PB\tabl_tabulate_PB_first % BC with Predefined Filler + \enforced\let\NA\tabl_tabulate_NA_first % NC with Auto Line + \enforced\let\BA\tabl_tabulate_BA_first % NC with Auto Line \to \t_tabl_tabulate_initializers_first \appendtoks diff --git a/tex/context/base/mkiv/tabl-xnt.mklx b/tex/context/base/mkiv/tabl-xnt.mklx new file mode 100644 index 000000000..f2a41c500 --- /dev/null +++ b/tex/context/base/mkiv/tabl-xnt.mklx @@ -0,0 +1,142 @@ +% macros=mkvi + +%D \module +%D [ file=tabl-xtb, +%D version=2011.10.28, +%D title=\CONTEXT\ Table Macros, +%D subtitle=Natural to Xtreme 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 Table Macros / Natural to Xtreme Tables} + +\unprotect + +%D Don't expect wonders but it might come in handy: +%D +%D \starttyping +%D \mapTABLEtoxtable +%D \restoreTABLEfromxtable +%D \stoptyping +%D +%D We stick to a simple example: +%D +%D \startbuffer +%D \bTABLE +%D \bTR +%D \bTD[width=1cm,background=color,backgroundcolor=red] one \eTD +%D \bTD[width=2cm] two \eTD +%D \eTR +%D \bTR +%D \bTD alpha \eTD +%D \bTD beta \eTD +%D \eTR +%D \eTABLE +%D \stopbuffer +%D +%D \typebuffer +%D +%D \startbuffer +%D \startlinecorrection +%D \getbuffer +%D \stoplinecorrection +%D +%D \startlinecorrection +%D \mapTABLEtoxtable \getbuffer +%D \stoplinecorrection +%D \stopbuffer +%D +%D \typebuffer \getbuffer + +\pushoverloadmode % this file is runtime loaded + +\overloaded\permanent\let\tabl_x_normal_bTABLEhead\bTABLEhead +\overloaded\permanent\let\tabl_x_normal_eTABLEhead\eTABLEhead +\overloaded\permanent\let\tabl_x_normal_bTABLEnext\bTABLEnext +\overloaded\permanent\let\tabl_x_normal_eTABLEnext\eTABLEnext +\overloaded\permanent\let\tabl_x_normal_bTABLEfoot\bTABLEfoot +\overloaded\permanent\let\tabl_x_normal_eTABLEfoot\eTABLEfoot +\overloaded\permanent\let\tabl_x_normal_bTABLEbody\bTABLEbody +\overloaded\permanent\let\tabl_x_normal_eTABLEbody\eTABLEbody +\overloaded\permanent\let\tabl_x_normal_bTR \bTR +\overloaded\permanent\let\tabl_x_normal_eTR \eTR +\overloaded\permanent\let\tabl_x_normal_bTD \bTD +\overloaded\permanent\let\tabl_x_normal_eTD \eTD +\overloaded\permanent\let\tabl_x_normal_bTH \bTH +\overloaded\permanent\let\tabl_x_normal_eTH \eTH +\overloaded\permanent\let\tabl_x_normal_setupTABLE\setupTABLE +\overloaded\permanent\let\tabl_x_normal_bTABLE \bTABLE +\overloaded\permanent\let\tabl_x_normal_eTABLE \eTABLE + +\permanent\protected\def\restoreTABLEfromxtable + {\enforced\let\bTABLEhead\tabl_x_normal_bTABLEhead + \enforced\let\eTABLEhead\tabl_x_normal_eTABLEhead + \enforced\let\bTABLEnext\tabl_x_normal_bTABLEnext + \enforced\let\eTABLEnext\tabl_x_normal_eTABLEnext + \enforced\let\bTABLEfoot\tabl_x_normal_bTABLEfoot + \enforced\let\eTABLEfoot\tabl_x_normal_eTABLEfoot + \enforced\let\bTABLEbody\tabl_x_normal_bTABLEbody + \enforced\let\eTABLEbody\tabl_x_normal_eTABLEbody + \enforced\let\bTR \tabl_x_normal_bTR + \enforced\let\eTR \tabl_x_normal_eTR + \enforced\let\bTD \tabl_x_normal_bTD + \enforced\let\eTD \tabl_x_normal_eTD + \enforced\let\bTH \tabl_x_normal_bTH + \enforced\let\eTH \tabl_x_normal_eTH + \enforced\let\setupTABLE\tabl_x_normal_setupTABLE + \enforced\let\bTABLE \tabl_x_normal_bTABLE + \enforced\let\eTABLE \tabl_x_normal_eTABLE} + +\permanent\protected\def\mapTABLEtoxtable + {\enforced\let\bTABLEhead\startxtablehead + \enforced\let\eTABLEhead\stopxtablehead + \enforced\let\bTABLEnext\startxtablefoot + \enforced\let\eTABLEnext\stopxtablefoot + \enforced\let\bTABLEfoot\startxtablefoot + \enforced\let\eTABLEfoot\stopxtablefoot + \enforced\let\bTABLEbody\startxtablebody + \enforced\let\eTABLEbody\stopxtablebody + \enforced\let\bTR \startxrow + \enforced\let\eTR \stopxrow + \enforced\let\bTD \startxcell + \enforced\let\eTD \stopxcell + \enforced\let\bTH \tabl_x_TABLE_TH_start_cell + \enforced\let\eTH \tabl_x_TABLE_TH_stop_cell + \enforced\let\setupTABLE\tabl_x_TABLE_setup + \enforced\let\bTABLE \tabl_x_TABLE_start + \enforced\let\eTABLE \tabl_x_TABLE_stop} + +\popoverloadmode + +\permanent\protected\def\tabl_x_TABLE_TH_start_cell + {\startxcellgroup[\c!foregroundstyle=\v!bold]% + \startxcell} + +\permanent\protected\def\tabl_x_TABLE_TH_stop_cell + {\stopxcell + \stopxcellgroup} + +\permanent\protected\tolerant\def\tabl_x_TABLE_setup[#settings]% + {\ifarguments\or + %\ifparameter#1\or + \setupxtable[#settings]% + \fi} + +\permanent\protected\tolerant\def\tabl_x_TABLE_start[#settings]% + {\bgroup + \ifarguments\or + %\ifparameter#1\or + \tabl_x_prepare{#settings}% + \fi + \edef\tabl_x_current_buffer{\tabl_x_default_buffer}% + \buff_pickup\tabl_x_current_buffer{bTABLE}{eTABLE}\relax\tabl_x_process\zerocount} + +\permanent\protected\def\tabl_x_TABLE_stop + {\stopxtable} + +\protect \endinput diff --git a/tex/context/base/mkiv/tabl-xtb.mklx b/tex/context/base/mkiv/tabl-xtb.mklx new file mode 100644 index 000000000..b54685863 --- /dev/null +++ b/tex/context/base/mkiv/tabl-xtb.mklx @@ -0,0 +1,983 @@ +% macros=mkvi + +%D \module +%D [ file=tabl-xtb, +%D version=2011.10.26, +%D title=\CONTEXT\ Table Macros, +%D subtitle=Xtreme, +%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 Table Macros / Xtreme} + +\registerctxluafile{tabl-xtb}{} + +% todo: +% +% - yes or no: foregroundstyle/color <- style/color +% - template alignment +% - maybe split horizontal (a la linetables) +% - before/after and wrapping (linecorrection) +% - maybe also some before/after commands +% - maybe correction when non float usage +% - tagging needs to be checked +% - maybe only tag the box +% - scale to fit +% +% - buffers permit verbatim but are not always handy + +%D This module started as an afternoon experiment and surprisingly could be +%D mostly finished the same evening. Of course it builds upon existing +%D functionality. The main reason for writing it is that we occasionally +%D run into pretty large tables that take tens of pages and need to be split +%D into floats. Speed is one issue there, avoiding to use vsplit is another. +%D +%D \starttyping +%D \definextable [tag] | [tag][parent] +%D \setupxtable [settings] | [tag][settings] +%D +%D \startxtable[tag|settings] +%D \startxtablehead|\startxtablenext|\startxtablebody|\startxtablefoot +%D \startxrowgroup[tag|settings] +%D \startxrow[settings] +%D \startxcellgroup[tag|settings] +%D \startxcell[settings] ... \stopxcell +%D \stopxcellgroup +%D \stopxrow +%D \startxrowgroup +%D \stopxtablehead|\stopxtablenext|\stopxtablebody|\stopxtablefoot +%D \stopxtable +%D \stoptyping +%D +%D See xtables-001.tex etc for some examples. + +% We can avoid some checking by using the fastoptionalcheckcs helpers +% instead of dosingleempty but the speed gain is neglectable. + +\unprotect + +% option=stretch : equal distribution +% option={stretch,width} : proportional distribution +% option={max} : prefer max over forced width/height +% +% cells: option=fixed : nils autostretch (not yet complete) + +% \setbox\scratchbox\hbox attr \taggedattribute \c_attr_tagged {...} +% +% \let\tsplitbeforeresult\donothing +% \let\tsplitafterresult \donothing +% \let\tsplitinbetween \donothing +% \let\tsplitbefore \donothing +% \let\tsplitafter \donothing +% \let\postprocesstsplit \donothing + +\let\dotagxtablecell \relax % names will change +\let\dotagxtablesignal\relax % names will change + +\appendtoks + \def\dotagxtablecell + {\clf_settagtablecell + \numexpr\tablecellrows\relax + \numexpr\tablecellcolumns\relax + \numexpr\raggedstatus\relax}% + \def\dotagxtablesignal + {\signalcharacter}% not used +\to \everyenableelements + +\newdimen\d_tabl_x_width +\newdimen\d_tabl_x_height +\newdimen\d_tabl_x_depth % not used +\newdimen\d_tabl_x_distance +\newcount\c_tabl_x_nx +\newcount\c_tabl_x_ny +\newcount\c_tabl_x_mode +\newbox \b_tabl_x +\newcount\c_tabl_x_state % 0=empty 1=content 3=splitleft +\newdimen\d_tabl_x_final_width +\newcount\c_tabl_x_nesting +\newcount\c_tabl_x_skip_mode % 1 = skip +\newdimen\d_tabl_x_textwidth +\newcount\c_tabl_x_swapped +\newcount\c_tabl_x_swapped_max + +\let\m_tabl_x_swapped_settings\empty + +\aliased\let\currentxtablerow \clf_x_table_r +\aliased\let\currentxtablecolumn\clf_x_table_c + +% \setupxtable[one][parent][a=b,c=d] +% \setupxtable[one] [a=b,c=d] +% \setupxtable [a=b,c=d] + +\installcorenamespace{xtable} +\installcorenamespace{xtablecheck} +\installcorenamespace{xtableswap} + +\installframedautocommandhandler \??xtable {xtable} \??xtable + +\appendtoks + \checkxtableparent % so we can deal with undefined settings, not that it's efficient +\to \everysetupxtable + +\setupxtable[% + \c!nr=\plusone, + \c!nc=\plusone, + \c!nx=\plusone, % slow + \c!ny=\plusone, % slow + \c!align=\v!table, % {\v!flushleft,\v!broad,\v!high}, % just as \bTABLE .. \eTABLE + \c!frameoffset=.5\linewidth, + \c!backgroundoffset=\v!frame, + % \c!framecolor=\s!black, + % \c!foregroundstyle=\xtableparameter\c!style, % not clean, better capture elsewhere + % \c!foregroundcolor=\xtableparameter\c!color, % not clean, better capture elsewhere + % \c!bodyfont=, + \c!width=\v!fit, + \c!height=\v!fit, + \c!maxwidth=8\emwidth, + \c!autowidth=\v!yes, % controls framed + \c!rulethickness=\linewidth, + \c!strut=\v!yes, + \c!autostrut=\v!no, + \c!split=\v!auto, % a number will take that many lines + \c!splitoffset=\zeropoint, % extra space taken + \c!aligncharacter=\v!no, + \c!alignmentcharacter={,}, + \c!alignmentleftsample=, + \c!alignmentrightsample=, + \c!alignmentleftwidth=\zeropoint, + \c!alignmentrightwidth=\zeropoint, + % \c!option=, % \v!stretch {\v!stretch,\v!width} + % \c!footer=, + % \c!header=, + \c!spaceinbetween=, + \c!textwidth=\v!local, % was \hsize, + \c!textheight=\vsize, % used for vertical spread + \c!distance=\zeropoint, % individual column + \c!columndistance=\zeropoint, % each column (whole table) + \c!leftmargindistance=\zeropoint, % whole table + \c!rightmargindistance=\zeropoint,% whole table +] + +\def\tabl_x_default_buffer{x_table_\number\c_tabl_x_nesting} +\let\tabl_x_current_buffer\empty + +\permanent\protected\def\startxtable{\tabl_x_start_table} + +\protected\tolerant\def\tabl_x_start_table[#settings]% maybe two arguments: [tag][settings] | [tag] | [settings] + {\bgroup + \tabl_x_prepare{#settings}% + \edef\tabl_x_current_buffer{\tabl_x_default_buffer}% + \buff_pickup{\tabl_x_current_buffer}{startxtable}{stopxtable}\relax\tabl_x_process\zerocount} + +% \permanent\protected\aliased\startxtable\tabl_x_start_table + +\aliased\permanent\let\stopxtable\relax + +% These direct buffers can be somewhat faster but it's probably neglectable. +% Anyway, no nesting is supported as we then need to catch (e.g.) rows and +% keep track of nesting and have a more complex redefinition of nested +% instanced \unknown\ it's not worth the trouble. Only use them when you +% really need them and use the embeddedxtable command when nesting them. +% Implementing nesting would be slower than not using direct buffers. + +\permanent\tolerant\protected\def\processxtablebuffer[#name]% + {\bgroup + \let\tabl_x_start_table\tabl_x_process_buffer + \edef\tabl_x_current_buffer{#name}% + \tabl_x_get_buffer % settings + \tabl_x_process} + +\protected\tolerant\def\tabl_x_start_ignore[#settings]% + {} + +\protected\tolerant\def\tabl_x_process_buffer[#settings]% + {\tabl_x_prepare{#settings}% + \let\tabl_x_start_table\tabl_x_start_ignore + \gobbleuntil\stopxtable} % nested xtables are not supported, + +%D A bonus: you have to use the following construct inside a macro or +%D direct buffer. + +\permanent\tolerant\protected\def\startembeddedxtable[#settings]#;#content\stopembeddedxtable + {\tabl_x_prepare{#settings}% + \clf_assignbuffer{embedded_x_table}{\detokenize{#content}}\catcodetable\relax + \bgroup + \let\tabl_x_start_table\tabl_x_process_buffer + \edef\tabl_x_current_buffer{embedded_x_table}% + \tabl_x_process} + +\aliased\permanent\let\stopembeddedxtable\relax + +%D We can also define xtables. + +\appendtoks + \permanent\setuevalue{\e!start\currentxtable}{\tabl_x_start_named[\currentxtable]}% + \permanent\setuevalue{\e!stop \currentxtable}{\tabl_x_stop_named}% +\to \everydefinextable + +\protected\def\tabl_x_start_named[#tag]#spacer[#settings]% + {\bgroup + \edef\currentxtable{#tag}% + \advance\c_tabl_x_nesting\plusone + \dostarttaggedchained\t!table\empty\??xtable + \setupcurrentxtable[#settings]% + \tabl_x_check_textwidth + %\forgetall % else whitespace mess + \edef\tabl_x_current_buffer{\tabl_x_default_buffer}% + \normalexpanded{\buff_pickup{\tabl_x_current_buffer}{\e!start\currentxtable}{\e!stop\currentxtable}\relax\tabl_x_process\zerocount}} + +\protected\def\tabl_x_stop_named + {} + +%D Now we come to processing: + +\protected\def\tabl_x_check_textwidth + {\edef\p_textwidth{\xtableparameter\c!textwidth}% + \ifx\p_textwidth\v!local + \d_tabl_x_textwidth\availablehsize + \else + \d_tabl_x_textwidth\p_textwidth + \fi} + +\newtoks\everypreparextable + +\protected\def\tabl_x_prepare#settings% + {\advance\c_tabl_x_nesting\plusone + \dostarttaggedchained\t!table\empty\??xtable + \tabl_x_set_checked{#settings}% + \tabl_x_check_textwidth + \the\everypreparextable + }% else whitespace mess + +\def\tabl_x_get_buffer + {\clf_gettexbuffer{\tabl_x_current_buffer}} + +\let\tabl_x_start_row_yes \relax +\let\tabl_x_start_row_nop \relax +\let\tabl_x_stop_row \relax +\let\tabl_x_start_cell_yes\relax +\let\tabl_x_start_cell_nop\relax +\let\tabl_x_stop_cell \relax + +\newtoks\t_table_x_cleanup + +\protected\def\tabl_x_process + {\begingroup % * + \forgetall % moved here + \dontcomplain % for the moment here till we figure out where we get the overflow + \usebodyfontparameter\xtableparameter + \setbox\scratchbox\vbox + {\doifsomething{\xtableparameter\c!spaceinbetween}{\blank[\xtableparameter\c!spaceinbetween]}}% + \clf_x_table_create + option {\xtableparameter\c!option}% + textwidth \d_tabl_x_textwidth + textheight \dimexpr\xtableparameter\c!textheight\relax + maxwidth \dimexpr\xtableparameter\c!maxwidth\relax + lineheight \openlineheight + columndistance \dimexpr\xtableparameter\c!columndistance\relax + leftmargindistance \dimexpr\xtableparameter\c!leftmargindistance\relax + rightmargindistance \dimexpr\xtableparameter\c!rightmargindistance\relax + rowdistance \ht\scratchbox + header {\xtableparameter\c!header}% + footer {\xtableparameter\c!footer}% + \relax + % + \letxtableparameter\c!option\empty + % not so nice but needed as we use this in the setup + \linewidth\xtableparameter\c!rulethickness\relax + % so we freeze it + \c_tabl_x_swapped_max\zerocount + \begingroup + \let\tabl_x_start_row_yes \tabl_x_start_row_reflow_width_yes + \let\tabl_x_start_row_nop \tabl_x_start_row_reflow_width_nop + \let\tabl_x_stop_row \tabl_x_stop_row_reflow_width + \let\tabl_x_start_cell_yes\tabl_x_start_cell_reflow_width_yes + \let\tabl_x_start_cell_nop\tabl_x_start_cell_reflow_width_nop + \let\tabl_x_stop_cell \tabl_x_stop_cell_reflow_width + \settrialtypesetting + \tabl_x_get_buffer + \ifcase\c_tabl_x_swapped_max + \else + \tabl_x_flush_swapped + \fi + \clf_x_table_reflow_width + \endgroup + \begingroup + \let\tabl_x_start_row_yes \tabl_x_start_row_reflow_height_yes + \let\tabl_x_start_row_nop \tabl_x_start_row_reflow_height_nop + \let\tabl_x_stop_row \tabl_x_stop_row_reflow_height + \let\tabl_x_start_cell_yes\tabl_x_start_cell_reflow_height_yes + \let\tabl_x_start_cell_nop\tabl_x_start_cell_reflow_height_nop + \let\tabl_x_stop_cell \tabl_x_stop_cell_reflow_height + \settrialtypesetting + \ifcase\c_tabl_x_swapped_max + \tabl_x_get_buffer + \else + \tabl_x_flush_swapped + \fi + \clf_x_table_reflow_height + \endgroup + \begingroup + \let\tabl_x_start_row_yes \tabl_x_start_row_construct_yes + \let\tabl_x_start_row_nop \tabl_x_start_row_construct_nop + \let\tabl_x_stop_row \tabl_x_stop_row_construct + \let\tabl_x_start_cell_yes\tabl_x_start_cell_construct_yes + \let\tabl_x_start_cell_nop\tabl_x_start_cell_construct_nop + \let\tabl_x_stop_cell \tabl_x_stop_cell_construct + \ifcase\c_tabl_x_swapped_max + \tabl_x_get_buffer + \else + \tabl_x_flush_swapped + \fi + \clf_x_table_construct + \endgroup + \endgroup % * + \ifinsidesplitfloat + \tabl_x_flush_float_split + \orelse\ifinsidefloat + \tabl_x_flush_float_normal + \else + \tabl_x_flush_text_checked + \fi + \clf_x_table_cleanup + \dostoptagged + \resetbuffer[\tabl_x_current_buffer]% + \resetcharacteralign + \the\t_table_x_cleanup + \egroup} + +% text flow split modes + +\installcorenamespace{xtableflushsplit} + +\protected\def\tabl_x_flush_text_checked + {\expandnamespaceparameter\??xtableflushsplit\xtableparameter\c!split\v!no} + +% in text flow: headers and footers only once + +\setvalue{\??xtableflushsplit\v!yes}% + {\clf_x_table_flush + method {\v!split}% + \relax} + +% in text flow: headers and footers only once + +\setvalue{\??xtableflushsplit\v!no}% + {% \noindent % gives extra line after table + % \noindentation % messes up the next indentation + % \dontleavehmode % no leftskip + \kern\zeropoint % yet another guess + \ignorespaces + \clf_x_table_flush + method {\v!normal}% + \relax + \removeunwantedspaces} + +% in text flow: headers and footers get repeated + +\setvalue{\??xtableflushsplit\v!repeat}% + {\doloop + {\clf_x_table_flush + method {\v!split}% + height \ifdim\pagegoal=\maxdimen\textheight\else\pagegoal\fi + \relax + \ifcase\c_tabl_x_state + \exitloop + \else + \page + \fi}} + +% \setvalue{\??xtableflushsplit\v!setups}% +% {\directsetup{xtable:split:user}} +% +% \startsetups[xtable:split:user] +% \doloop { +% \xtablesplitflush % uses \xtablesplitvsize (a macro) +% \ifcase\xtablesplitstate +% \exitloop +% \else +% \page +% \fi +% } +% \stopsetups +% +% \protected\def\xtablesplitflush +% {\clf_x_table_flush +% method {\v!split}% +% height \dimexpr\xtablesplitvsize\relax +% \relax} +% +% \def\xtablesplitvsize +% {\ifdim\pagegoal=\maxdimen\textheight\else\pagegoal\fi} +% +% \let\xtablesplitstate\c_tabl_x_state + +\let\extratxtablesplitheight\zeropoint % might disappear so don't depend on it + +\protected\def\tabl_x_flush_float_normal + {\clf_x_table_flush + method {\v!normal}% + \relax} + +\protected\def\tabl_x_flush_float_split + {\resetdirecttsplit + \edef\extrasplitfloatlines {\xtableparameter\c!split}% + \edef\tsplitminimumfreespace{\the\dimexpr\extratxtablesplitheight+\xtableparameter\c!splitoffset\relax}% + % \edef\tsplitminimumfreelines{2}% not needed here as we're precise enough + \let\tsplitdirectsplitter\tabl_x_split_splitter + \let\tsplitdirectwidth \d_tabl_x_final_width + \handledirecttsplit} + +\protected\def\tabl_x_split_splitter#height% + {\setbox\tsplitresult\vbox + {\clf_x_table_flush + method {\v!split}% + height \dimexpr#height\relax + \relax}% + \ifcase\c_tabl_x_state + \global\setfalse\somenextsplitofffloat + \else + \global\settrue \somenextsplitofffloat + \fi} + +% \permanent\protected\def\startxrow +% {\begingroup +% \doifelsenextoptionalcs\tabl_x_start_row_yes\tabl_x_start_row_nop} + +% \permanent\protected\def\stopxrow +% {\tabl_x_stop_row +% \endgroup} + +\protected\def\tabl_x_start_row_reflow_width_yes[#settings]% + {\setupcurrentxtable[#settings]% + \clf_x_table_next_row} + +\protected\def\tabl_x_start_row_reflow_width_nop + {\clf_x_table_next_row} + +\protected\def\tabl_x_stop_row_reflow_width + {} + +\let\tabl_x_start_row_reflow_height_yes\tabl_x_start_row_reflow_width_yes +\let\tabl_x_start_row_reflow_height_nop\tabl_x_start_row_reflow_width_nop +\let\tabl_x_stop_row_reflow_height \tabl_x_stop_row_reflow_width + +\protected\def\tabl_x_start_row_construct_yes[#settings]% + {\setupcurrentxtable[#settings]% + \dostarttagged\t!tablerow\empty + \clf_x_table_next_row_option{\xtableparameter\c!samepage}} + +\protected\def\tabl_x_start_row_construct_nop + {\dostarttagged\t!tablerow\empty + \clf_x_table_next_row} + +\protected\def\tabl_x_stop_row_construct + {\clf_x_table_finish_row + \dostoptagged} + +\permanent\protected\def\dummyxcell + {\begingroup + \let\inheritedxtableframed\relax + \tabl_x_start_cell_nop + \tabl_x_stop_cell + \endgroup} + +\def\tabl_x_setup_character_align + {\edef\p_left {\directxtableparameter\c!alignmentleftsample}% + \edef\p_right{\directxtableparameter\c!alignmentrightsample}% + \ifx\p_left\empty + \scratchdimenone\dimexpr\directxtableparameter\c!alignmentleftwidth\relax + \else + \setbox\scratchbox\hbox{\p_left}% + \scratchdimenone\wd\scratchbox + \fi + \ifx\p_right\empty + \scratchdimentwo\dimexpr\directxtableparameter\c!alignmentrightwidth\relax + \else + \setbox\scratchbox\hbox{\p_right}% + \scratchdimentwo\wd\scratchbox + \fi + \clf_setcharacteraligndetail + \clf_x_table_c + {\directxtableparameter\c!alignmentcharacter}% + \scratchdimenone + \scratchdimentwo + \relax} + +\newtoks\t_tabl_x_every_cell + +% \appendtoks +% \inhibitblank % already in framed +% \to \t_tabl_x_every_cell + +\appendtoks + \edef\p_characteralign{\directxtableparameter\c!aligncharacter}% + \ifx\p_characteralign\v!yes + \ifcase\clf_x_table_r\or + \tabl_x_setup_character_align + \fi + \signalcharacteralign\clf_x_table_c\clf_x_table_r + \fi +\to \t_tabl_x_every_cell + +\protected\def\tabl_x_begin_of_cell + {\the\t_tabl_x_every_cell + \everypar{\delayedbegstrut}} + +\protected\def\tabl_x_end_of_cell + {\ifhmode + \delayedendstrut + \par + \else + \par + \ifdim\prevdepth<\zeropoint % =-1000pt ? + \vskip-\strutdp + \else + \removebottomthings + \fi + \fi} + +% For historic reasons we support both nx/nc and ny/nr : maybe nx/ny becomes +% obsolete some day. The let as well as the direct speed things up a bit. We +% could also consider a \defaultxtableparameter. +% +% \c_tabl_x_nx\defaultxtableparameter\c!nc{\defaultxtableparameter\c!nx\plusone} +% \c_tabl_x_ny\defaultxtableparameter\c!nr{\defaultxtableparameter\c!ny\plusone} +% +% Although this becomes kind of messy. It saves already time that we only check +% for it when we have settings. + +% \def\tabl_x_set_hsize +% {\hsize.25\maxdimen} % let's be reasonable + +% \def\tabl_x_set_hsize +% {\edef\p_width{\xtableparameter\c!width}% +% \ifx\p_width\empty +% \hsize.25\maxdimen % is this really needed +% \fi} + +\let\tabl_x_set_hsize\relax + +\protected\def\tabl_x_start_cell_reflow_width_yes[#settings]% + {\setbox\b_tabl_x\hpack\bgroup + \ifnum\c_tabl_x_nesting>\plusone + \letxtableparameter\c!width \v!fit % overloads given width + \letxtableparameter\c!height\v!fit % overloads given height + \fi + % + \letxtableparameter\c!nx\plusone + \letxtableparameter\c!ny\plusone + \letxtableparameter\c!nc\plusone + \letxtableparameter\c!nr\plusone + % + \setupcurrentxtable[#settings]% + % + \c_tabl_x_nx\directxtableparameter\c!nc\relax + \c_tabl_x_ny\directxtableparameter\c!nr\relax + \ifnum\c_tabl_x_nx=\plusone + \c_tabl_x_nx\directxtableparameter\c!nx\relax + \fi + \ifnum\c_tabl_x_ny=\plusone + \c_tabl_x_ny\directxtableparameter\c!ny\relax + \fi + % + \d_tabl_x_distance\xtableparameter\c!distance\relax + \clf_x_table_init_reflow_width_option{\xtableparameter\c!option}% + \inheritedxtableframed\bgroup + \tabl_x_begin_of_cell + \tabl_x_set_hsize} + +\protected\def\tabl_x_start_cell_reflow_width_nop + {\setbox\b_tabl_x\hpack\bgroup + \ifnum\c_tabl_x_nesting>\plusone + \letxtableparameter\c!width \v!fit % overloads given width + \letxtableparameter\c!height\v!fit % overloads given height + \fi + \c_tabl_x_nx\plusone + \c_tabl_x_ny\plusone + \d_tabl_x_distance\xtableparameter\c!distance\relax + \clf_x_table_init_reflow_width + \inheritedxtableframed\bgroup + \tabl_x_begin_of_cell + \tabl_x_set_hsize} + +\protected\def\tabl_x_stop_cell_reflow_width + {\tabl_x_end_of_cell + \egroup + \egroup + \clf_x_table_set_reflow_width} + +\protected\def\tabl_x_start_cell_reflow_height_yes[#settings]% + {\setbox\b_tabl_x\hpack\bgroup + \clf_x_table_init_reflow_height + \ifcase\c_tabl_x_skip_mode % can be sped up + \ifnum\c_tabl_x_nesting>\plusone + \letxtableparameter\c!height\v!fit % overloads given height + \fi + \setupcurrentxtable[#settings]% + \relax + \letxtableparameter\c!width\d_tabl_x_width % overloads given width + \inheritedxtableframed\bgroup + \tabl_x_begin_of_cell + \fi} + +\protected\def\tabl_x_start_cell_reflow_height_nop + {\setbox\b_tabl_x\hpack\bgroup + \clf_x_table_init_reflow_height + \ifcase\c_tabl_x_skip_mode % can be sped up + \ifnum\c_tabl_x_nesting>\plusone + \letxtableparameter\c!height\v!fit % overloads given height + \fi + \relax + \letxtableparameter\c!width\d_tabl_x_width % overloads given width + \inheritedxtableframed\bgroup + \tabl_x_begin_of_cell + \fi} + +\protected\def\tabl_x_stop_cell_reflow_height + {\ifcase\c_tabl_x_skip_mode + \tabl_x_end_of_cell + \egroup + \fi + \egroup + \clf_x_table_set_reflow_height} + +\protected\def\tabl_x_start_cell_construct_yes[#settings]% + {\dostarttagged\t!tablecell\empty % can't we just tag the box + \setbox\b_tabl_x\hpack\bgroup + \setupcurrentxtable[#settings]% + \letxtableparameter\c!width \d_tabl_x_width % overloads given width + \letxtableparameter\c!height\d_tabl_x_height % overloads given height + \clf_x_table_init_construct + \inheritedxtableframed\bgroup + \tabl_x_begin_of_cell + \dotagxtablecell} + +\protected\def\tabl_x_start_cell_construct_nop + {\dostarttagged\t!tablecell\empty % can't we just tag the box + \setbox\b_tabl_x\hpack\bgroup + \letxtableparameter\c!width \d_tabl_x_width % overloads given width + \letxtableparameter\c!height\d_tabl_x_height % overloads given height (commenting it ... nice option) + \clf_x_table_init_construct + \inheritedxtableframed\bgroup + \tabl_x_begin_of_cell + \dotagxtablecell} + +\protected\def\tabl_x_stop_cell_construct + {\tabl_x_end_of_cell + \egroup + \dotagxtablesignal % harmless spot + \egroup + \clf_x_table_set_construct + \dostoptagged} + +% \permanent\tolerant\protected\def\startxcellgroup[#settings]% +% {\begingroup +% \ifarguments\or +% \tabl_x_set_checked{#settings}% +% \fi} +% +% \permanent\protected\def\stopxcellgroup +% {\endgroup} +% +% \permanent\tolerant\protected\def\startxrowgroup[#settings]% +% {\begingroup +% \ifarguments\or +% \tabl_x_set_checked{#settings}% +% \fi} +% +% \permanent\protected\def\stopxrowgroup +% {\dostoptagged +% \endgroup} + +\protected\def\tabl_x_set_checked#settings% + {\ifcsname\namedxtablehash{#settings}\s!parent\endcsname + \edef\currentxtable{#settings}% + \else + \setupcurrentxtable[#settings]% + \fi} + +\permanent\protected\def\startxtablehead{\begingroup\c_tabl_x_mode\plusone \tabl_x_start_partition} +\permanent\protected\def\startxtablefoot{\begingroup\c_tabl_x_mode\plustwo \tabl_x_start_partition} +\permanent\protected\def\startxtablenext{\begingroup\c_tabl_x_mode\plusthree\tabl_x_start_partition} +\permanent\protected\def\startxtablebody{\begingroup\c_tabl_x_mode\plusfour \tabl_x_start_partition} + +\permanent\tolerant\protected\def\tabl_x_start_partition[#settings]% + {\ifarguments\or + \tabl_x_set_checked{#settings}% + \fi} + +\protected\def\tabl_x_stop_partition + {\endgroup} + +\permanent\aliased\let\stopxtablehead\tabl_x_stop_partition +\permanent\aliased\let\stopxtablefoot\tabl_x_stop_partition +\permanent\aliased\let\stopxtablenext\tabl_x_stop_partition +\permanent\aliased\let\stopxtablebody\tabl_x_stop_partition + +%D This is an experiment! Beware: you can create loops by using nested +%D references to already chained settings. +%D +%D \startbuffer +%D \setupxtable[suffix][align=middle,foregroundcolor=red] +%D \setupxtable[blabla][foregroundstyle=slanted] +%D \setupxtable[crap] [foregroundcolor=blue] +%D \setupxtable[bold] [crap][foregroundstyle=bold] +%D +%D \startxtable[frame=off] +%D \startxtablehead +%D \startxrow[bold] +%D \startxcell[suffix] a 0 \stopxcell +%D \startxcell[blabla] a 1 \stopxcell +%D \startxcell a 2 \stopxcell +%D \stopxrow +%D \stopxtablehead +%D \startxtablebody +%D \startxrow \startxcell[suffix][ny=2] a 1 \stopxcell \startxcell b 1 \stopxcell \startxcell c 1 \stopxcell \stopxrow +%D \startxrow \startxcell b 2 \stopxcell \startxcell c 2 \stopxcell \stopxrow +%D \startxrow \startxcell[suffix] a 3 \stopxcell \startxcell b 3 \stopxcell \startxcell c 3 \stopxcell \stopxrow +%D \startxrow \startxcell[suffix] a 4 \stopxcell \startxcell b 4 \stopxcell \startxcell c 4 \stopxcell \stopxrow +%D \startxrow \startxcell[suffix] a 5 \stopxcell \startxcell b 5 \stopxcell \startxcell c 5 \stopxcell \stopxrow +%D \stopxtablebody +%D \stopxtable +%D \stopbuffer +%D +%D \typebuffer \placetable{}{\getbuffer} + +\appendtoks + \letvalue{\??xtablecheck\currentxtable}\relax % faster than checking parent +\to \everysetupxtable + +% \definefontfamily[newtimes][serif][TeX Gyre Termes] +% \setupxtable[newtimes][foregroundstyle=\newtimes] +% \startxcell[newtimes] ...\stopxcell +% \startxcell[foregroundstyle=\newtimes] ...\stopxcell + +% % \ifcsname\namedxtablehash{#tag}\s!parent\endcsname +% % \ifcsname\??xtablecheck#tag\endcsname +% \ifcsname\??xtablecheck\detokenize\expandafter{\normalexpanded{#tag}}\endcsname % two times slower on keywords +% \expandafter\whatever % but more tolerant for tricky key=value +% \else +% \expandafter\whatever +% \fi[#tag] + +% groups + +\permanent\protected\def\startxgroup + {\begingroup + \doifelsenextoptionalcs\tabl_x_start_group_delayed_one\relax} + +\permanent\protected\def\stopxgroup + {\endgroup} + +\protected\def\tabl_x_start_group_delayed_one[#tag]% + {\ifcsname\??xtablecheck\detokenize\expandafter{\normalexpanded{#tag}}\endcsname + \expandafter\tabl_x_start_group_delayed_two + \else + \expandafter\setupcurrentxtable + \fi[#tag]} + +\protected\def\tabl_x_start_group_delayed_two[#tag]% + {\ifx\currentxtable\empty \else + \chaintocurrentxtable{#tag}% + \fi + \edef\currentxtable{#tag}% + \doifelsenextoptionalcs\setupcurrentxtable\relax} + +\aliased\let\startxrowgroup \startxgroup +\aliased\let\stopxrowgroup \stopxgroup +\aliased\let\startxcellgroup\startxgroup +\aliased\let\stopxcellgroup \stopxgroup + +% cells (maybe also check for 1 etc but it becomes messy) + +\permanent\protected\def\startxcell + {\begingroup + \doifelsenextoptionalcs\tabl_x_start_cell_delayed_one\tabl_x_start_cell_nop} + +\protected\def\tabl_x_start_cell_delayed_one[#tag]% + {\ifcsname\??xtablecheck\detokenize\expandafter{\normalexpanded{#tag}}\endcsname + \expandafter\tabl_x_start_cell_delayed_two + \else + \expandafter\tabl_x_start_cell_yes + \fi[#tag]} + +\protected\def\tabl_x_start_cell_delayed_two[#tag]% + {\ifx\currentxtable\empty \else + \chaintocurrentxtable{#tag}% + \fi + \edef\currentxtable{#tag}% + \doifelsenextoptionalcs\tabl_x_start_cell_yes\tabl_x_start_cell_nop} + +\permanent\protected\def\stopxcell + {\tabl_x_stop_cell + \endgroup} + +% rows + +\permanent\protected\def\startxrow + {\begingroup + \doifelsenextoptionalcs\tabl_x_start_row_delayed_one\tabl_x_start_row_nop} + +\protected\def\tabl_x_start_row_delayed_one[#tag]% + {\ifcsname\??xtablecheck\detokenize\expandafter{\normalexpanded{#tag}}\endcsname + \expandafter\tabl_x_start_row_delayed_two + \else + \expandafter\tabl_x_start_row_yes + \fi[#tag]} + +\permanent\protected\def\tabl_x_start_row_delayed_two[#tag]% + {\ifx\currentxtable\empty \else + \chaintocurrentxtable{#tag}% + \fi + \edef\currentxtable{#tag}% + \doifelsenextoptionalcs\tabl_x_start_row_yes\tabl_x_start_row_nop} + +\permanent\protected\def\stopxrow + {\tabl_x_stop_row + \endgroup} + +%D A bonus, not advertised but some like it this way: + +\protected\def\tabl_x_nc + {\startxrow + \enforced\let\NC\tabl_x_nc_next + \enforced\let\NR\tabl_x_nr + \startxcell} + +\protected\def\tabl_x_nc_next + {\stopxcell + \startxcell} + +\protected\def\tabl_x_nr + {\stopxcell + \stopxrow + \enforced\let\NC\tabl_x_nc} + +\appendtoks + \enforced\let\NC\tabl_x_nc + \enforced\let\NR\tabl_x_nr +\to \everypreparextable + +%D Another bonus, suggested by Taco at the 2018 \CONTEXT\ meeting. + +\protected\def\tabl_x_c_cell_start#settings% + {\begingroup + \tabl_x_set_checked{#settings}% + \doifelsenextoptionalcs\tabl_x_start_cell_yes\tabl_x_start_cell_nop} + +\protected\def\tabl_x_c_cell_stop + {\tabl_x_stop_cell + \endgroup} + +% \protected\def\dummyxcell +% {\tabl_x_start_cell_nop +% \tabl_x_stop_cell} + +\mutable\let\t_tabl_x_swapped\relax + +\def\tabl_x_flush_swapped + {\dorecurse\c_tabl_x_swapped_max + {\expandafter + \startxrow + \the\csname\??xtableswap##1\endcsname\relax + \stopxrow}} + +\def\tabl_x_collect_allocate + {\expandafter\newtoks\csname\??xtableswap\number\c_tabl_x_swapped\endcsname + \expandafter\let\expandafter\t_tabl_x_swapped\csname\??xtableswap\number\c_tabl_x_swapped\endcsname} + +\def\tabl_x_collect_advance + {\global\advance\c_tabl_x_swapped\plusone + \ifnum\c_tabl_x_swapped>\c_tabl_x_swapped_max + \global\c_tabl_x_swapped_max\c_tabl_x_swapped + \fi + \mutable\expandafter\let\expandafter\t_tabl_x_swapped\csname\??xtableswap\number\c_tabl_x_swapped\endcsname + \ifx\t_tabl_x_swapped\relax + \tabl_x_collect_allocate + \fi} + +\protected\def\tabl_x_collect_cell_start + {\doifelsenextoptionalcs + \tabl_x_collect_cell_start_yes + \tabl_x_collect_cell_start_nop} + +\def\tabl_x_collect_cell_start_nop#content\stopxcell + {\tabl_x_collect_advance + \ifx\m_tabl_x_swapped_settings\empty + \gtoksapp\t_tabl_x_swapped{\tabl_x_c_cell_start{}#content\tabl_x_c_cell_stop}% + \else + \gtoksapp\t_tabl_x_swapped\expandafter{\expandafter\tabl_x_c_cell_start\expandafter{\m_tabl_x_swapped_settings}#content\tabl_x_c_cell_stop}% + \fi} + +\def\tabl_x_collect_cell_start_yes[#settings]#content\stopxcell + {\tabl_x_collect_advance + \ifx\m_tabl_x_swapped_settings\empty + \gtoksapp\t_tabl_x_swapped{\tabl_x_c_cell_start{}[#settings]#content\tabl_x_c_cell_stop}% + \else + \gtoksapp\t_tabl_x_swapped\expandafter{\expandafter\tabl_x_c_cell_start\expandafter{\m_tabl_x_swapped_settings}[#settings]#content\tabl_x_c_cell_stop}% + \fi + \getdummyparameters[\c!ny=1,#settings]% + \scratchcounter\numexpr\dummyparameter\c!ny-\plusone\relax + \ifcase\scratchcounter\else + \dorecurse\scratchcounter\tabl_x_collect_advance + \fi} + +\permanent\tolerant\protected\def\startxcolumn[#1]% + {\begingroup + \global\c_tabl_x_swapped\zerocount + \enforced\let\startxcell\tabl_x_collect_cell_start + \enforced\let\stopxcell \relax + \xdef\m_tabl_x_swapped_settings{#1}} + +\permanent\protected\def\stopxcolumn + {\endgroup} + +\appendtoks + \dorecurse\c_tabl_x_swapped_max + {\global\csname\??xtableswap\number#1\endcsname\emptytoks}% +\to \t_table_x_cleanup + +%D \startbuffer +%D \setupxtable[one][foregroundcolor=red] +%D \setupxtable[two][foregroundcolor=blue] +%D +%D \startlinecorrection +%D \startxtable +%D \startxrow[one] +%D \startxcell[width=5cm] Row 1, Column 1 \stopxcell +%D \startxcell Row 1, Column 2 \stopxcell +%D \startxcell Row 1, Column 3 \stopxcell +%D \stopxrow +%D \startxrow[two] +%D \startxcell Row 2, Column 1 \stopxcell +%D \startxcell Row 2, Column 2 \stopxcell +%D \startxcell Row 2, Column 3 \stopxcell +%D \stopxrow +%D \stopxtable +%D \stoplinecorrection +%D +%D \startlinecorrection +%D \startxtable +%D \startxcolumn[one] +%D \startxcell[width=5cm] Row 1, Column 1 \stopxcell +%D \startxcell Row 1, Column 2 \stopxcell +%D \startxcell Row 1, Column 3 \stopxcell +%D \stopxcolumn +%D \startxcolumn[two] +%D \startxcell Row 2, Column 1 \stopxcell +%D \startxcell Row 2, Column 2 \stopxcell +%D \startxcell Row 2, Column 3 \stopxcell +%D \stopxcolumn +%D \stopxtable +%D \stoplinecorrection +%D \stopbuffer +%D +%D \typebuffer \getbuffer + +\protect \endinput diff --git a/tex/context/base/mkiv/task-ini.lua b/tex/context/base/mkiv/task-ini.lua index 033672f45..45c0c3239 100644 --- a/tex/context/base/mkiv/task-ini.lua +++ b/tex/context/base/mkiv/task-ini.lua @@ -53,7 +53,6 @@ appendaction("processors", "fonts", "typesetters.fontkerns.handler", appendaction("processors", "fonts", "nodes.handlers.protectglyphs", nil, "nonut", "enabled" ) appendaction("processors", "fonts", "builders.kernel.ligaturing", nil, "nut", "disabled" ) appendaction("processors", "fonts", "builders.kernel.kerning", nil, "nut", "disabled" ) -appendaction("processors", "fonts", "builders.kernel.cleanup", nil, "nut", "enabled" ) appendaction("processors", "fonts", "nodes.handlers.stripping", nil, "nut", "disabled" ) appendaction("processors", "fonts", "nodes.handlers.flatten", nil, "nut", "disabled" ) appendaction("processors", "fonts", "fonts.goodies.colorschemes.coloring", nil, "nut", "disabled" ) diff --git a/tex/context/base/mkiv/toks-aux.lmt b/tex/context/base/mkiv/toks-aux.lmt index c77c868fc..e1a4e89b3 100644 --- a/tex/context/base/mkiv/toks-aux.lmt +++ b/tex/context/base/mkiv/toks-aux.lmt @@ -5,113 +5,172 @@ if not modules then modules = { } end modules ['toks-aux'] = { license = "see context related readme files" } -if CONTEXTLMTXMODE > 0 then +local type, tostring = type, tostring +local max = math.max +local formatters, gsub, char = string.formatters, string.gsub, string.char +local concat = table.concat - local type, tostring = type, tostring - local max = math.max - local formatters, gsub = string.formatters, string.gsub +local function flags(t) + if type(t) == "string" then + t = token.create(t) + end + local r = { } + if t.frozen then r[#r+1] = "frozen" end + if t.permanent then r[#r+1] = "permanent" end + if t.immutable then r[#r+1] = "immutable" end + if t.primitive then r[#r+1] = "primitive" end + if t.mutable then r[#r+1] = "mutable" end + if t.noaligned then r[#r+1] = "noaligned" end + if t.instance then r[#r+1] = "instance" end + if t.tolerant then r[#r+1] = "tolerant" end + if t.protected then r[#r+1] = "protected" end + return r +end + +tokens.flags= flags - interfaces.implement { - name = "showluatokens", - public = true, - protected = true, - actions = function() - local f0 = formatters["%s: %s"] - local nl = logs.newline - local wr = logs.writer - local t = token.peek_next() -- local t = token.scan_next() token.put_back(t) - local n = "" - local w = "" - local c = t.cmdname - if c == "left_brace" then - w = "given token list" - t = token.scan_toks(false) - elseif c == "register_toks" then - token.scan_next() - w = "token register" - n = t.csname or t.index - t = tex.gettoks(n,true) - elseif c == "internal_toks" then - token.scan_next() - w = "internal token variable" - n = t.csname or t.index - t = tex.gettoks(n,true) +interfaces.implement { + name = "showluatokens", + public = true, + protected = true, + actions = function() + local f0 = formatters["%s: %s"] + local nl = logs.newline + local wr = logs.writer + local t = token.peek_next() -- local t = token.scan_next() token.put_back(t) + local n = "" + local w = "" + local c = t.cmdname + if c == "left_brace" then + w = "given token list" + t = token.scan_toks(false) + elseif c == "register_toks" then + token.scan_next() + w = "token register" + n = t.csname or t.index + t = tex.gettoks(n,true) + elseif c == "internal_toks" then + token.scan_next() + w = "internal token variable" + n = t.csname or t.index + t = tex.gettoks(n,true) + else + n = token.scan_csname() + local r = flags(t) + local m = token.get_meaning(n,true) + r[#r+1] = "control sequence" + if type(m) == "table" then + t = m else - if t.protected then - w = "protected control sequence" - else - w = "control sequence" - end - n = token.scan_csname() - t = token.get_meaning(n,true) + t = { t } end - wr(f0(w,n)) - nl() - if type(t) == "table" then - local w1 = 4 - local w2 = 1 - local w3 = 3 - local w4 = 3 - for i=1,#t do - local ti = t[i] - w1 = max(w1,#tostring(ti.id)) - w2 = max(w2,#tostring(ti.command)) - w3 = max(w3,#tostring(ti.index)) - w4 = max(w4,#ti.cmdname) + w = concat(r, " ") + end + wr(f0(w,n)) + nl() + if type(t) == "table" then + local w1 = 4 + local w2 = 1 + local w3 = 3 + local w4 = 3 + for i=1,#t do + local ti = t[i] + w1 = max(w1,#tostring(ti.id)) + w2 = max(w2,#tostring(ti.command)) + w3 = max(w3,#tostring(ti.index)) + w4 = max(w4,#ti.cmdname) + end + local f1 = formatters["%" .. w1 .. "i %" .. w2 .. "i %" .. w3 .. "i %-" .. w4 .. "s %s"] + local f2 = formatters["%" .. w1 .. "i %" .. w2 .. "i %" .. w3 .. "i %-" .. w4 .. "s"] + local f3 = formatters["%" .. w1 .. "i %" .. w2 .. "i %" .. w3 .. "i %-" .. w4 .. "s %C"] + for i=1,#t do + local ti = t[i] + local cs = ti.csname + local id = ti.id + local ix = ti.index + local cd = ti.command + local cn = ti.cmdname + if cn == "prefix" and not cs then + cs = "always enforced" end - local f1 = formatters["%" .. w1 .. "i %" .. w2 .. "i %" .. w3 .. "i %-" .. w4 .. "s %s"] - local f2 = formatters["%" .. w1 .. "i %" .. w2 .. "i %" .. w3 .. "i %-" .. w4 .. "s"] - local f3 = formatters["%" .. w1 .. "i %" .. w2 .. "i %" .. w3 .. "i %-" .. w4 .. "s %C"] - for i=1,#t do - local ti = t[i] - local cs = ti.csname - local id = ti.id - local ix = ti.index - local cd = ti.command - local cn = gsub(ti.cmdname,"_"," ") - if cs then - wr(f1(id,cd,ix,cn,cs)) - elseif cn == "letter" or cn == "other_char" then - wr(f3(id,cd,ix,cn,ix)) - else - wr(f2(id,cd,ix,cn)) - if cn == "end_match" then - wr("-------") - end + cn = gsub(cn,"_"," ") + if cs then + wr(f1(id,cd,ix,cn,cs)) + elseif cn == "letter" or cn == "other char" then + wr(f3(id,cd,ix,cn,ix)) + elseif cn == "match" then + local s + if ix == 32 then s = "optional spacer" -- space + elseif ix == 42 then s = "skip spaces" -- * + elseif ix == 43 then s = "keep braces" -- + + elseif ix == 45 then s = "thrash" -- - + elseif ix == 47 then s = "prune" -- / + elseif ix == 58 then s = "continue" -- : + elseif ix == 59 then s = "quit" -- ; + elseif ix == 61 then s = "mandate braces" -- = + elseif ix == 94 then s = "keep spaces" -- ^ + elseif ix == 95 then s = "keep mandate braces" -- _ + else s = "argument " .. char(ix) + end + wr(f1(id,cd,ix,cn,s)) + else + wr(f2(id,cd,ix,cn)) + if cn == "end match" then + wr("--------------") end end - nl() end + nl() end - } + end +} - -- For the moment here, will move to initex only (also see node-ini.lua); we need - -- to actually store these. +-- For the moment here, will move to initex only (also see node-ini.lua); we need +-- to actually store these. - local groupcodes = { } - local hyphenationcodes = { } +local groupcodes = { } +local glyphoptioncodes = { } +local hyphenationcodes = { } +local frozenparcodes = { } +local flagcodes = { } - for k, v in next, tex.getgroupvalues() do - groupcodes[k] = gsub(v,"_","") - end - for k, v in next, tex.gethyphenationvalues() do - hyphenationcodes[k] = gsub(v,"_","") - end +for k, v in next, tex.getgroupvalues() do + groupcodes[k] = gsub(v,"[_ ]","") +end +for k, v in next, tex.gethyphenationvalues() do + hyphenationcodes[k] = gsub(v,"[_ ]","") +end +for k, v in next, tex.getglyphoptionvalues() do + glyphoptioncodes[k] = gsub(v,"[_ ]","") +end +for k, v in next, tex.getfrozenparvalues() do + frozenparcodes[k] = gsub(v,"[_ ]","") +end +for k, v in next, tex.getflagvalues() do + flagcodes[k] = gsub(v,"[_ ]","") +end - if environment.initex then - local texchardef = tex.chardef +if environment.initex then - -- for k, v in next, prefixcodes do texchardef(v .. "prefixcode", k) end - for k, v in next, groupcodes do texchardef(v .. "groupcode", k) end - for k, v in next, hyphenationcodes do texchardef(v .. "hyphenationmodecode",k) end + local texintegerdef = tex.integerdef - end + for k, v in next, groupcodes do texintegerdef(v .. "groupcode", k,"immutable") end + for k, v in next, glyphoptioncodes do texintegerdef(v .. "code", k,"immutable") end + for k, v in next, hyphenationcodes do texintegerdef(v .. "hyphenationmodecode",k,"immutable") end + for k, v in next, frozenparcodes do texintegerdef("frozen" .. v .. "code", k,"immutable") end + for k, v in next, flagcodes do texintegerdef(v .. "flagcode", k,"immutable") end - groupcodes = utilities.storage.allocate(table.swapped(groupcodes, groupcodes)) - hyphenationcodes = utilities.storage.allocate(table.swapped(hyphenationcodes,hyphenationcodescodes)) +end - tex.groupcodes = groupcodes - tex.hyphenationcodes = hyphenationcodes +groupcodes = utilities.storage.allocate(table.swapped(groupcodes, groupcodes)) +glyphoptioncodes = utilities.storage.allocate(table.swapped(glyphoptioncodes,glyphoptioncodes)) +hyphenationcodes = utilities.storage.allocate(table.swapped(hyphenationcodes,hyphenationcodes)) +frozenparcodes = utilities.storage.allocate(table.swapped(frozenparcodes, frozenparcodes)) +flagcodes = utilities.storage.allocate(table.swapped(flagcodes, flagcodes)) -end +tex.groupcodes = groupcodes +tex.glyphoptioncodes = glyphoptioncodes +tex.hyphenationcodes = hyphenationcodes +tex.frozenparcodes = frozenparcodes +tex.flagcodes = flagcodes diff --git a/tex/context/base/mkiv/toks-aux.mkiv b/tex/context/base/mkiv/toks-aux.mkiv index 817a5aba9..f66b51ec5 100644 --- a/tex/context/base/mkiv/toks-aux.mkiv +++ b/tex/context/base/mkiv/toks-aux.mkiv @@ -65,8 +65,4 @@ \lastnamedcs\emptytoks \fi} -\ifcase\contextlmtxmode \or - \chardef\discretionarygroupcode = \discgroupcode -\fi - \protect diff --git a/tex/context/base/mkiv/toks-ini.lmt b/tex/context/base/mkiv/toks-ini.lmt index cf1edd272..23896883c 100644 --- a/tex/context/base/mkiv/toks-ini.lmt +++ b/tex/context/base/mkiv/toks-ini.lmt @@ -72,8 +72,8 @@ tokens.istoken = is_token tokens.isdefined = is_defined tokens.defined = is_defined -tokens.getdata = token.get_data -- only lmtx -tokens.setdata = token.set_data -- only lmtx +tokens.getinteger = token.get_integer +tokens.setinteger = token.set_integer local bits = { escape = 0x00000001, -- 2^00 @@ -296,8 +296,14 @@ if setinspector then cmdname = cmdname, active = t.active, expandable = t.expandable, - protected = t.protected, frozen = t.frozen, + tolerant = t.tolerant, + protected = t.protected, + primitive = t.primitive, + permanent = t.permanent, + noaligned = t.noaligned, + instance = t.instance, + immutable = t.imutable, user = t.user, } end diff --git a/tex/context/base/mkiv/toks-ini.lua b/tex/context/base/mkiv/toks-ini.lua index 7f3254dde..7120b47c3 100644 --- a/tex/context/base/mkiv/toks-ini.lua +++ b/tex/context/base/mkiv/toks-ini.lua @@ -66,9 +66,6 @@ tokens.istoken = is_token tokens.isdefined = is_defined tokens.defined = is_defined -tokens.getdata = token.get_data -- only lmtx -tokens.setdata = token.set_data -- only lmtx - local bits = { escape = 0x00000001, -- 2^00 begingroup = 0x00000002, -- 2^01 diff --git a/tex/context/base/mkiv/trac-deb.lmt b/tex/context/base/mkiv/trac-deb.lmt index 7a2eba2a0..88d686462 100644 --- a/tex/context/base/mkiv/trac-deb.lmt +++ b/tex/context/base/mkiv/trac-deb.lmt @@ -119,7 +119,7 @@ do local writenl = texio.write_nl local write = texio.write - local runtoks = tex.runtoks + local runlocal = tex.runlocal local terminaldata = false local context = context @@ -140,7 +140,7 @@ do terminaldata = false break else - runtoks("t_syst_terminal_data",nil,nil,true) -- obeymode + runlocal("t_syst_terminal_data",nil,nil,true) -- obeymode end end end @@ -284,7 +284,11 @@ function tracers.printerror(specification) local offset = specification.offset local endoffile = specification.endoffile local report = errorreporter(luaerrorline) - if errortype == errorvalues.eof then + if errortype == errorvalues.warning then + report("warning error: %s",lasttexerror or "-") + busy = false; + return; + elseif errortype == errorvalues.eof then report("runaway error: %s",lasttexerror or "-") if not quitonerror and texio.terminal then texio.terminal() -- not well tested @@ -377,7 +381,7 @@ directives.register("system.errorcontext", function(v) register('show_error_message', nop) register('show_warning_message', function() processwarning(v) end) register('intercept_lua_error', function() processerror(v) end) - register('intercept_tex_error', function(mode,eof) processerror(v,eof) end) + register('intercept_tex_error', function(mode,eof) processerror(v,eof) return mode end) else register('show_error_message', nil) register('show_warning_message', nil) diff --git a/tex/context/base/mkiv/trac-deb.mkiv b/tex/context/base/mkiv/trac-deb.mkiv index 994c357d0..77f54b5aa 100644 --- a/tex/context/base/mkiv/trac-deb.mkiv +++ b/tex/context/base/mkiv/trac-deb.mkiv @@ -13,11 +13,11 @@ \writestatus{loading}{ConTeXt Tracing Macros / Debugger} -\unprotect - %registerctxluafile{trac-lmx}{} \registerctxluafile{trac-deb}{autosuffix} +\unprotect + \unexpanded\def\breakpoint {\showdebuginfo\wait} \unexpanded\def\showtrackers {\clf_showtrackers} @@ -40,14 +40,10 @@ % \enabledirectives[system.showerror] -\unprotect - \ifcase\contextlmtxmode \else \newtoks \t_syst_terminal_data % \t_syst_terminal_data {\beginlocalcontrol\clf_fetchterminaldata\endlocalcontrol} \t_syst_terminal_data {\clf_fetchterminaldata} \fi -\protect - \protect \endinput diff --git a/tex/context/base/mkiv/trac-log.lua b/tex/context/base/mkiv/trac-log.lua index 4fbab5cdc..96b69a73e 100644 --- a/tex/context/base/mkiv/trac-log.lua +++ b/tex/context/base/mkiv/trac-log.lua @@ -8,6 +8,11 @@ if not modules then modules = { } end modules ['trac-log'] = { -- In fact all writes could go through lua and we could write the console and -- terminal handler in lua then. Ok, maybe it's slower then, so a no-go. +-- +-- This is the version for mtxrun. The alternative functions for the TeX engines +-- have been separated. In order to keep in sync we use tex specific witer names. +-- +-- Todo: some cleanup (less local needed). local next, type, select, print = next, type, select, print local format, gmatch, find = string.format, string.gmatch, string.find @@ -17,30 +22,16 @@ local utfchar = utf.char local datetime = os.date local openfile = io.open -local runningtex = tex and (tex.jobname or tex.formatname) --- local write_nl = texio and texio.write_nl or print --- local write = texio and texio.write or io.write - -local write_nl = runningtex and texio and texio.write_nl or print -local write = runningtex and texio and texio.write or io.write +local write_nl = print +local write = io.write local setmetatableindex = table.setmetatableindex local formatters = string.formatters local settings_to_hash = utilities.parsers.settings_to_hash local sortedkeys = table.sortedkeys --- variant is set now - local variant = "default" --- local variant = "ansi" - --- todo: less categories, more subcategories (e.g. nodes) --- todo: split into basics and ctx specific - ---[[ldx-- -

This is a prelude to a more extensive logging module. We no longer -provide based logging as parsing is relatively easy anyway.

---ldx]]-- +----- variant = "ansi" logs = logs or { } local logs = logs @@ -53,23 +44,6 @@ webpage : http://www.pragma-ade.nl / http://tex.aanhet.net wiki : http://contextgarden.net ]] --- -- we extend the formatters: --- --- function utilities.strings.unichr(s) return "U+" .. format("%05X",s) .. " (" .. utfchar(s) .. ")" end --- function utilities.strings.chruni(s) return utfchar(s) .. " (U+" .. format("%05X",s) .. ")" end --- --- utilities.strings.formatters.add ( --- string.formatters, "unichr", --- [[unichr(%s)]], --- [[local unichr = utilities.strings.unichr]] --- ) --- --- utilities.strings.formatters.add ( --- string.formatters, "chruni", --- [[chruni(%s)]], --- [[local chruni = utilities.strings.chruni]] --- ) - formatters.add ( formatters, "unichr", [["U+" .. format("%%05X",%s) .. " (" .. utfchar(%s) .. ")"]] @@ -80,26 +54,6 @@ formatters.add ( [[utfchar(%s) .. " (U+" .. format("%%05X",%s) .. ")"]] ) --- function utilities.strings.unichk(s) return s <= 0xFFFF and ("U+" .. format("%05X",s) .. " (" .. utfchar(s) .. ")") or ("U+" .. format("%05X",s)) end --- function utilities.strings.chkuni(s) return s <= 0xFFFF and (utfchar(s) .. " (U+" .. format("%05X",s) .. ")") or ("U+" .. format("%05X",s)) end --- --- utilities.strings.formatters.add ( --- string.formatters, "unichk", --- [[unichk(%s)]], --- [[local unichk = utilities.strings.unichk]] --- ) --- --- utilities.strings.formatters.add ( --- string.formatters, "chkuni", --- [[chkuni(%s)]], --- [[local chkuni = utilities.strings.chkuni]] --- ) --- --- print(formatters["Missing character %!chruni! in font."](234)) --- print(formatters["Missing character %!unichr! in font."](234)) --- print(formatters["Missing character %!chkuni! in font."](234)) --- print(formatters["Missing character %!unichk! in font."](234)) - -- basic loggers local function ignore() end @@ -124,322 +78,7 @@ local function ansisupported(specification) end end -if runningtex and texio then - - if texio.setescape then - texio.setescape(0) -- or (false) - end - - if arg and ansisupported then - -- we're don't have environment.arguments yet - for k, v in next, arg do -- k can be negative ! - if v == "--ansi" or v == "--c:ansi" then - if ansisupported("ansi") then - variant = "ansi" - end - break - elseif v == "--ansilog" or v == "--c:ansilog" then - if ansisupported("ansilog") then - variant = "ansilog" - end - break - end - end - end - - local function useluawrites() - - -- quick hack, awaiting speedup in engine (8 -> 6.4 sec for --make with console2) - -- still needed for luajittex .. luatex should not have that ^^ mess - - local texio_write_nl = texio.write_nl - local texio_write = texio.write - local io_write = io.write - - write_nl = function(target,...) - if not io_write then - io_write = io.write - end - if target == "term and log" then - texio_write_nl("log",...) - texio_write_nl("term","") - io_write(...) - elseif target == "log" then - texio_write_nl("log",...) - elseif target == "term" then - texio_write_nl("term","") - io_write(...) - elseif type(target) == "number" then - texio_write_nl(target,...) -- a tex output channel - elseif target ~= "none" then - texio_write_nl("log",target,...) - texio_write_nl("term","") - io_write(target,...) - end - end - - write = function(target,...) - if not io_write then - io_write = io.write - end - if target == "term and log" then - texio_write("log",...) - io_write(...) - elseif target == "log" then - texio_write("log",...) - elseif target == "term" then - io_write(...) - elseif type(target) == "number" then - texio_write(target,...) -- a tex output channel - elseif target ~= "none" then - texio_write("log",target,...) - io_write(target,...) - end - end - - texio.write = write - texio.write_nl = write_nl - - useluawrites = ignore - - end - - -- local format = string.formatter - - local whereto = "both" - local target = nil - local targets = nil - - local formats = table.setmetatableindex("self") - local translations = table.setmetatableindex("self") - - local report_yes, subreport_yes, direct_yes, subdirect_yes, status_yes - local report_nop, subreport_nop, direct_nop, subdirect_nop, status_nop - - local variants = { - default = { - formats = { - report_yes = formatters["%-15s > %s\n"], - report_nop = formatters["%-15s >\n"], - direct_yes = formatters["%-15s > %s"], - direct_nop = formatters["%-15s >"], - subreport_yes = formatters["%-15s > %s > %s\n"], - subreport_nop = formatters["%-15s > %s >\n"], - subdirect_yes = formatters["%-15s > %s > %s"], - subdirect_nop = formatters["%-15s > %s >"], - status_yes = formatters["%-15s : %s\n"], - status_nop = formatters["%-15s :\n"], - }, - targets = { - logfile = "log", - log = "log", - file = "log", - console = "term", - terminal = "term", - both = "term and log", - }, - }, - ansi = { - formats = { - report_yes = formatters["%-15s > %s\n"], - report_nop = formatters["%-15s >\n"], - direct_yes = formatters["%-15s > %s"], - direct_nop = formatters["%-15s >"], - subreport_yes = formatters["%-15s > %s > %s\n"], - subreport_nop = formatters["%-15s > %s >\n"], - subdirect_yes = formatters["%-15s > %s > %s"], - subdirect_nop = formatters["%-15s > %s >"], - status_yes = formatters["%-15s : %s\n"], - status_nop = formatters["%-15s :\n"], - }, - targets = { - logfile = "none", - log = "none", - file = "none", - console = "term", - terminal = "term", - both = "term", - }, - } - } - - variants.ansilog = { - formats = variants.ansi.formats, - targets = variants.default.targets, - } - - logs.flush = io.flush - - writer = function(...) - write_nl(target,...) - end - - newline = function() - write_nl(target,"\n") - end - - report = function(a,b,c,...) - if c ~= nil then - write_nl(target,report_yes(translations[a],formatters[formats[b]](c,...))) - elseif b then - write_nl(target,report_yes(translations[a],formats[b])) - elseif a then - write_nl(target,report_nop(translations[a])) - else - write_nl(target,"\n") - end - end - - direct = function(a,b,c,...) - if c ~= nil then - return direct_yes(translations[a],formatters[formats[b]](c,...)) - elseif b then - return direct_yes(translations[a],formats[b]) - elseif a then - return direct_nop(translations[a]) - else - return "" - end - end - - subreport = function(a,s,b,c,...) - if c ~= nil then - write_nl(target,subreport_yes(translations[a],translations[s],formatters[formats[b]](c,...))) - elseif b then - write_nl(target,subreport_yes(translations[a],translations[s],formats[b])) - elseif a then - write_nl(target,subreport_nop(translations[a],translations[s])) - else - write_nl(target,"\n") - end - end - - subdirect = function(a,s,b,c,...) - if c ~= nil then - return subdirect_yes(translations[a],translations[s],formatters[formats[b]](c,...)) - elseif b then - return subdirect_yes(translations[a],translations[s],formats[b]) - elseif a then - return subdirect_nop(translations[a],translations[s]) - else - return "" - end - end - - status = function(a,b,c,...) - if c ~= nil then - write_nl(target,status_yes(translations[a],formatters[formats[b]](c,...))) - elseif b then - write_nl(target,status_yes(translations[a],formats[b])) - elseif a then - write_nl(target,status_nop(translations[a])) - else - write_nl(target,"\n") - end - end - - settarget = function(askedwhereto) - whereto = askedwhereto or whereto or "both" - target = targets[whereto] - if not target then - whereto = "both" - target = targets[whereto] - end - if target == "term" or target == "term and log" then - logs.flush = io.flush - else - logs.flush = ignore - end - end - - local stack = { } - - pushtarget = function(newtarget) - insert(stack,target) - settarget(newtarget) - end - - poptarget = function() - if #stack > 0 then - settarget(remove(stack)) - end - end - - setformats = function(f) - formats = f - end - - settranslations = function(t) - translations = t - end - - setprocessor = function(f) - local writeline = write_nl - write_nl = function(target,...) - writeline(target,f(...)) - end - end - - setformatters = function(specification) - local t = nil - local f = nil - local d = variants.default - if not specification then - -- - elseif type(specification) == "table" then - t = specification.targets - f = specification.formats or specification - else - if not ansisupported(specification) then - specification = "default" - end - local v = variants[specification] - if v then - t = v.targets - f = v.formats - variant = specification - end - end - targets = t or d.targets - target = targets[whereto] or target - if f then - d = d.formats - else - f = d.formats - d = f - end - setmetatableindex(f,d) - report_yes = f.report_yes - report_nop = f.report_nop - subreport_yes = f.subreport_yes - subreport_nop = f.subreport_nop - direct_yes = f.direct_yes - direct_nop = f.direct_nop - subdirect_yes = f.subdirect_yes - subdirect_nop = f.subdirect_nop - status_yes = f.status_yes - status_nop = f.status_nop - if variant == "ansi" or variant == "ansilog" then - useluawrites() -- because tex escapes ^^, not needed in lmtx - end - settarget(whereto) - end - - setformatters(variant) - - setlogfile = ignore - settimedlog = ignore - - -- settimedlog = function() - -- local localtime = os.localtime - -- local writeline = write_nl - -- write_nl = function(f,...) - -- writeline(f,localtime() .. " | " .. concat { ... }) - -- end - -- settimedlog = ignore - -- end - -else +do local report_yes, subreport_yes, status_yes local report_nop, subreport_nop, status_nop @@ -788,80 +427,6 @@ directives.register("logs.target", function(v) settarget(v) end) --- tex specific loggers (might move elsewhere) - -if tex then - - local report = logs.reporter("pages") -- not needed but saves checking when we grep for it - local texgetcount = tex and tex.getcount - - local real, user, sub = 0, 0, 0 - - function logs.start_page_number() - real = texgetcount("realpageno") - user = texgetcount("userpageno") - sub = texgetcount("subpageno") - end - - local timing = false - local usage = false - local lasttime = nil - - logs.private = { - enablepagetiming = function() - usage = true - end, - getpagetiming = function() - return type(usage) == "table" and usage - end, - } - - trackers.register("pages.timing", function() timing = "" end) - - function logs.stop_page_number() -- the first page can includes the initialization so we omit this in average - if timing or usage then - local elapsed = statistics.currenttime(statistics) - local average, page - if not lasttime or real < 2 then - average = elapsed - page = elapsed - else - average = elapsed / (real - 1) - page = elapsed - lasttime - end - lasttime = elapsed - if timing then - timing = formatters[", total %0.03f, page %0.03f, average %0.03f"](elapsed,page,average) - end - if usage then - usage = { - page = { - real = real, - user = user, - sub = sub, - }, - time = { - elapsed = elapsed, - page = page, - average = average, - } - } - end - end - if real <= 0 then - report("flushing page%s",timing) - elseif user <= 0 then - report("flushing realpage %s%s",real,timing) - elseif sub <= 0 then - report("flushing realpage %s, userpage %s%s",real,user,timing) - else - report("flushing realpage %s, userpage %s, subpage %s%s",real,user,sub,timing) - end - logs.flush() - end - -end - -- we don't have show_open and show_close callbacks yet ----- report_files = logs.reporter("files") @@ -888,14 +453,6 @@ logs.help = ignore -- obsolete -- applications --- local function reportlines(t,str) --- if str then --- for line in gmatch(str,"([^\n\r]*)[\n\r]") do --- t.report(line) --- end --- end --- end - local Carg, C, lpegmatch = lpeg.Carg, lpeg.C, lpeg.match local p_newline = lpeg.patterns.newline @@ -950,12 +507,12 @@ local function reportexport(t,method) end local reporters = { - lines = reportlines, -- not to be overloaded - banner = reportbanner, - version = reportversion, - help = reporthelp, - info = reportinfo, - export = reportexport, + lines = reportlines, -- not to be overloaded + banner = reportbanner, + version = reportversion, + help = reporthelp, + info = reportinfo, + export = reportexport, } local exporters = { @@ -1024,47 +581,10 @@ end local report_system = logs.reporter("system","logs") -function logs.obsolete(old,new) - local o = loadstring("return " .. new)() - if type(o) == "function" then - return function(...) - report_system("function %a is obsolete, use %a",old,new) - loadstring(old .. "=" .. new .. " return ".. old)()(...) - end - elseif type(o) == "table" then - local t, m = { }, { } - m.__index = function(t,k) - report_system("table %a is obsolete, use %a",old,new) - m.__index, m.__newindex = o, o - return o[k] - end - m.__newindex = function(t,k,v) - report_system("table %a is obsolete, use %a",old,new) - m.__index, m.__newindex = o, o - o[k] = v - end - if libraries then - libraries.obsolete[old] = t -- true - end - setmetatable(t,m) - return t - end -end - if utilities then utilities.report = report_system end -do - local texerror = tex and tex.error or print - local formatters = string.formatters - - function logs.texerrormessage(fmt,first,...) -- for the moment we put this function here - texerror(first and formatters[fmt](first,...) or fmt) - end - -end - -- this is somewhat slower but prevents out-of-order messages when print is mixed -- with texio.write @@ -1077,104 +597,3 @@ end if package.helpers.report then package.helpers.report = logs.reporter("package loader") -- when used outside mtxrun end - -if tex then - - local finalactions = { } - local fatalerrors = { } - local possiblefatal = { } - local loggingerrors = false - - function logs.loggingerrors() - return loggingerrors - end - - directives.register("logs.errors",function(v) - loggingerrors = v - if type(v) == "string" then - fatalerrors = settings_to_hash(v) - else - fatalerrors = { } - end - end) - - function logs.registerfinalactions(...) - insert(finalactions,...) -- so we can force an order if needed - end - - local what = nil - local report = nil - local state = nil - local target = nil - - local function startlogging(t,r,w,s) - target = t - state = force - force = true - report = type(r) == "function" and r or logs.reporter(r) - what = w - pushtarget(target) - newline() - if s then - report("start %s: %s",what,s) - else - report("start %s",what) - end - if target == "logfile" then - newline() - end - return report - end - - local function stoplogging() - if target == "logfile" then - newline() - end - report("stop %s",what) - if target == "logfile" then - newline() - end - poptarget() - state = oldstate - end - - function logs.startfilelogging(...) - return startlogging("logfile", ...) - end - - logs.stopfilelogging = stoplogging - - local done = false - - function logs.starterrorlogging(r,w,...) - if not done then - pushtarget("terminal") - newline() - logs.report("error logging","start possible issues") - poptarget() - done = true - end - if fatalerrors[w] then - possiblefatal[w] = true - end - return startlogging("terminal",r,w,...) - end - - logs.stoperrorlogging = stoplogging - - function logs.finalactions() - if #finalactions > 0 then - for i=1,#finalactions do - finalactions[i]() - end - if done then - pushtarget("terminal") - newline() - logs.report("error logging","stop possible issues") - poptarget() - end - return next(possiblefatal) and sortedkeys(possiblefatal) or false - end - end - -end diff --git a/tex/context/base/mkiv/trac-vis.lmt b/tex/context/base/mkiv/trac-vis.lmt new file mode 100644 index 000000000..7ac5964da --- /dev/null +++ b/tex/context/base/mkiv/trac-vis.lmt @@ -0,0 +1,1700 @@ +if not modules then modules = { } end modules ['trac-vis'] = { + version = 1.001, + optimize = true, + comment = "companion to trac-vis.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local node, nodes, attributes, tex = node, nodes, attributes, tex +local type, tonumber, next, rawget = type, tonumber, next, rawget +local gmatch = string.gmatch +local formatters = string.formatters +local round = math.round + +-- This module started out in the early days of mkiv and luatex with visualizing +-- kerns related to fonts. In the process of cleaning up the visual debugger code it +-- made sense to integrate some other code that I had laying around and replace the +-- old supp-vis debugging code. As only a subset of the old visual debugger makes +-- sense it has become a different implementation. Soms of the m-visual +-- functionality will also be ported. The code is rather trivial. The caching is not +-- really needed but saves upto 50% of the time needed to add visualization. Of +-- course the overall runtime is larger because of color and layer processing in the +-- backend (can be times as much) so the runtime is somewhat larger with full +-- visualization enabled. In practice this will never happen unless one is demoing. + +-- todo: global switch (so no attributes) +-- todo: maybe also xoffset, yoffset of glyph +-- todo: inline concat (more efficient) +-- todo: tags can also be numbers (just add to hash) +-- todo: make a lmtx variant (a few more efficient fetchers) + +local nodecodes = nodes.nodecodes + +local nuts = nodes.nuts +local tonut = nuts.tonut + +local setboth = nuts.setboth +local setlink = nuts.setlink +local setdisc = nuts.setdisc +local setlist = nuts.setlist +local setleader = nuts.setleader +local setsubtype = nuts.setsubtype +local setattr = nuts.setattr +local setwidth = nuts.setwidth +local setshift = nuts.setshift + +local getid = nuts.getid +local getfont = nuts.getfont +local getattr = nuts.getattr +local getsubtype = nuts.getsubtype +local getbox = nuts.getbox +local getlist = nuts.getlist +local getleader = nuts.getleader +local getnext = nuts.getnext +local getboth = nuts.getboth +local getdisc = nuts.getdisc +local getwhd = nuts.getwhd +local getkern = nuts.getkern +local getpenalty = nuts.getpenalty +local getwidth = nuts.getwidth +local getdepth = nuts.getdepth +local getshift = nuts.getshift +local getexpansion = nuts.getexpansion +local getdirection = nuts.getdirection +local getstate = nuts.getstate + +local isglyph = nuts.isglyph + +local hpack_nodes = nuts.hpack +local vpack_nodes = nuts.vpack +local copy_list = nuts.copy_list +local copy_node = nuts.copy_node +local flush_node_list = nuts.flush_list +local insert_node_before = nuts.insert_before +local insert_node_after = nuts.insert_after +local apply_to_nodes = nuts.apply +local effectiveglue = nuts.effective_glue + +local hpack_string = nuts.typesetters.tohpack + +local texgetattribute = tex.getattribute +local texsetattribute = tex.setattribute + +local setmetatableindex = table.setmetatableindex + +local unsetvalue = attributes.unsetvalue + +local current_font = font.current + +local fonthashes = fonts.hashes +local chardata = fonthashes.characters +local exheights = fonthashes.exheights +local emwidths = fonthashes.emwidths +local pt_factor = number.dimenfactors.pt + +local nodepool = nuts.pool +local new_rule = nodepool.rule +local new_kern = nodepool.kern +local new_glue = nodepool.glue +local new_hlist = nodepool.hlist +local new_vlist = nodepool.vlist + +local tracers = nodes.tracers +local visualizers = nodes.visualizers + +local setcolor = tracers.colors.set +local setlistcolor = tracers.colors.setlist +local settransparency = tracers.transparencies.set +local setlisttransparency = tracers.transparencies.setlist + +local starttiming = statistics.starttiming +local stoptiming = statistics.stoptiming + +local a_visual = attributes.private("visual") +local a_layer = attributes.private("viewerlayer") + +local band = bit32.band +local bor = bit32.bor + +local enableaction = nodes.tasks.enableaction + +-- local trace_hbox +-- local trace_vbox +-- local trace_vtop +-- local trace_kern +-- local trace_glue +-- local trace_penalty +-- local trace_fontkern +-- local trace_strut +-- local trace_whatsit +-- local trace_user +-- local trace_math +-- local trace_italic +-- local trace_discretionary +-- local trace_expansion +-- local trace_line +-- local trace_space + +local report_visualize = logs.reporter("visualize") + +local modes = { + hbox = 0x000001, + vbox = 0x000002, + vtop = 0x000004, + kern = 0x000008, + glue = 0x000010, + penalty = 0x000020, + fontkern = 0x000040, + strut = 0x000080, + whatsit = 0x000100, + glyph = 0x000200, + simple = 0x000400, + simplehbox = 0x000401, + simplevbox = 0x000402, + simplevtop = 0x000404, + user = 0x000800, + math = 0x001000, + italic = 0x002000, + origin = 0x004000, + discretionary = 0x008000, + expansion = 0x010000, + line = 0x020000, + space = 0x040000, + depth = 0x080000, + marginkern = 0x100000, + mathlistkern = 0x200000, + dir = 0x400000, + par = 0x800000, +} + +local usedfont, exheight, emwidth +local l_penalty, l_glue, l_kern, l_fontkern, l_hbox, l_vbox, l_vtop, l_strut, l_whatsit, l_glyph, l_user, l_math, l_marginkern, l_mathlistkern, l_italic, l_origin, l_discretionary, l_expansion, l_line, l_space, l_depth, + l_dir, l_whatsit + +local enabled = false +local layers = { } + +local preset_boxes = modes.hbox + modes.vbox + modes.vtop + modes.origin +local preset_makeup = preset_boxes + + modes.kern + modes.glue + modes.penalty +local preset_all = preset_makeup + + modes.fontkern + modes.marginkern + modes.mathlistkern + + modes.whatsit + modes.glyph + modes.user + modes.math + + modes.dir + modes.whatsit + +function visualizers.setfont(id) + usedfont = id or current_font() + exheight = exheights[usedfont] + emwidth = emwidths[usedfont] +end + +-- we can preset a bunch of bits + +local userrule -- bah, not yet defined: todo, delayed(nuts.rules,"userrule") +local outlinerule -- bah, not yet defined: todo, delayed(nuts.rules,"userrule") + +local function initialize() + -- + if not usedfont then + -- we use a narrow monospaced font -- infofont ? + visualizers.setfont(fonts.definers.define { name = "lmmonoltcond10regular", size = tex.sp("4pt") }) + end + -- + for mode, value in next, modes do + local tag = formatters["v_%s"](mode) + attributes.viewerlayers.define { + tag = tag, + title = formatters["visualizer %s"](mode), + visible = "start", + editable = "yes", + printable = "yes" + } + layers[mode] = attributes.viewerlayers.register(tag,true) + end + l_hbox = layers.hbox + l_vbox = layers.vbox + l_vtop = layers.vtop + l_glue = layers.glue + l_kern = layers.kern + l_penalty = layers.penalty + l_fontkern = layers.fontkern + l_strut = layers.strut + l_whatsit = layers.whatsit + l_glyph = layers.glyph + l_user = layers.user + l_math = layers.math + l_italic = layers.italic + l_marginkern = layers.marginkern + l_mathlistkern = layers.mathlistkern + l_origin = layers.origin + l_discretionary = layers.discretionary + l_expansion = layers.expansion + l_line = layers.line + l_space = layers.space + l_depth = layers.depth + l_dir = layers.dir + l_par = layers.par + -- + if not userrule then + userrule = nuts.rules.userrule + end + -- + if not outlinerule then + outlinerule = nuts.pool.outlinerule + end + initialize = false +end + +local function enable() + if initialize then + initialize() + end + enableaction("shipouts","nodes.visualizers.handler") + report_visualize("enabled") + enabled = true + tex.setcount("global","c_syst_visualizers_state",1) -- so that we can optimize at the tex end +end + +local function setvisual(n,a,what,list) -- this will become more efficient when we have the bit lib linked in + if not n or n == "reset" then + return unsetvalue + elseif n == true or n == "makeup" then + if not a or a == 0 or a == unsetvalue then + a = preset_makeup + else + a = bor(a,preset_makeup) + end + elseif n == "boxes" then + if not a or a == 0 or a == unsetvalue then + a = preset_boxes + else + a = bor(a,preset_boxes) + end + elseif n == "all" then + if what == false then + return unsetvalue + elseif not a or a == 0 or a == unsetvalue then + a = preset_all + else + a = bor(a,preset_all) + end + else + for s in gmatch(n,"[a-z]+") do + local m = modes[s] + if not m then + -- go on + elseif not a or a == 0 or a == unsetvalue then + a = m + else + a = bor(a,m) + end + end + end + if not a or a == 0 or a == unsetvalue then + return unsetvalue + elseif not enabled then -- must happen at runtime (as we don't store layers yet) + enable() + end + return a +end + +function nuts.setvisual(n,mode) + setattr(n,a_visual,setvisual(mode,getattr(n,a_visual),true)) +end + +function nuts.setvisuals(n,mode) -- currently the same + setattr(n,a_visual,setvisual(mode,getattr(n,a_visual),true,true)) +end + +-- fast setters + +do + + local cached = setmetatableindex(function(t,k) + if k == true then + return texgetattribute(a_visual) + elseif not k then + t[k] = unsetvalue + return unsetvalue + else + local v = setvisual(k) + t[k] = v + return v + end + end) + + -- local function applyvisuals(n,mode) + -- local a = cached[mode] + -- apply_to_nodes(n,function(n) setattr(n,a_visual,a) end) + -- end + + local a = unsetvalue + + local f = function(n) setattr(n,a_visual,a) end + + local function applyvisuals(n,mode) + a = cached[mode] + apply_to_nodes(n,f) + end + + nuts.applyvisuals = applyvisuals + + function nodes.applyvisuals(n,mode) + applyvisuals(tonut(n),mode) + end + + function visualizers.attribute(mode) + return cached[mode] + end + + visualizers.attributes = cached + +end + +function nuts.copyvisual(n,m) + setattr(n,a_visual,getattr(m,a_visual)) +end + +function visualizers.setvisual(n) + texsetattribute(a_visual,setvisual(n,texgetattribute(a_visual))) +end + +function visualizers.setlayer(n) + texsetattribute(a_layer,layers[n] or unsetvalue) +end + +local function set(mode,v) + texsetattribute(a_visual,setvisual(mode,texgetattribute(a_visual),v)) +end + +for mode, value in next, modes do + trackers.register(formatters["visualizers.%s"](mode), function(v) set(mode,v) end) +end + +local fraction = 10 + +trackers .register("visualizers.reset", function(v) set("reset", v) end) +trackers .register("visualizers.all", function(v) set("all", v) end) +trackers .register("visualizers.makeup", function(v) set("makeup",v) end) +trackers .register("visualizers.boxes", function(v) set("boxes", v) end) +directives.register("visualizers.fraction", function(v) fraction = (v and tonumber(v)) or (v == "more" and 5) or 10 end) + +local c_positive = "trace:b" +local c_negative = "trace:r" +local c_zero = "trace:g" +local c_text = "trace:s" +local c_space = "trace:y" +local c_space_x = "trace:m" +local c_skip_a = "trace:c" +local c_skip_b = "trace:m" +local c_glyph = "trace:o" +local c_ligature = "trace:s" +local c_white = "trace:w" +----- c_math = "trace:s" +----- c_origin = "trace:o" +----- c_discretionary = "trace:d" +----- c_expansion = "trace:o" +local c_depth = "trace:o" +local c_indent = "trace:s" + +local c_positive_d = "trace:db" +local c_negative_d = "trace:dr" +local c_zero_d = "trace:dg" +local c_text_d = "trace:ds" +local c_space_d = "trace:dy" +local c_space_x_d = "trace:dm" +local c_skip_a_d = "trace:dc" +local c_skip_b_d = "trace:dm" +local c_glyph_d = "trace:do" +local c_ligature_d = "trace:ds" +local c_white_d = "trace:dw" +local c_math_d = "trace:dr" +local c_origin_d = "trace:do" +local c_discretionary_d = "trace:dd" +----- c_expansion_d = "trace:do" +----- c_depth_d = "trace:do" +----- c_indent_d = "trace:ds" + +local function sometext(str,layer,color,textcolor,lap) -- we can just paste verbatim together .. no typesteting needed + local text = hpack_string(str,usedfont) + local size = getwidth(text) + local rule = new_rule(size,2*exheight,exheight/2) + local kern = new_kern(-size) + if color then + setcolor(rule,color) + end + if textcolor then + setlistcolor(getlist(text),textcolor) + end + local info = setlink(rule,kern,text) + setlisttransparency(info,c_zero) + info = hpack_nodes(info) + local width = getwidth(info) + if lap then + info = new_hlist(setlink(new_kern(-width),info)) + else + info = new_hlist(info) -- a bit overkill: double wrapped + end + if layer then + setattr(info,a_layer,layer) + end + return info, width +end + +local function someblob(str,layer,color,textcolor,width) + local text = hpack_string(str,usedfont) + local size = getwidth(text) + local rule = new_rule(width,2*exheight,exheight/2) + local kern = new_kern(-width + (width-size)/2) + if color then + setcolor(rule,color) + end + if textcolor then + setlistcolor(getlist(text),textcolor) + end + local info = setlink(rule,kern,text) + setlisttransparency(info,c_zero) + info = hpack_nodes(info) + local width = getwidth(info) + info = new_hlist(info) + if layer then + setattr(info,a_layer,layer) + end + return info, width +end + +local caches = setmetatableindex("table") + +local fontkern, italickern, marginkern, mathlistkern do + + local f_cache = caches["fontkern"] + local i_cache = caches["italickern"] + local m_cache = caches["marginkern"] + local l_cache = caches["mathlistkern"] + + local function somekern(head,current,cache,color,layer) + local width = getkern(current) + local extra = getexpansion(current) + local kern = width + extra + local info = cache[kern] + if not info then + local text = hpack_string(formatters[" %0.3f"](kern*pt_factor),usedfont) + local rule = new_rule(emwidth/fraction,6*exheight,2*exheight) + local list = getlist(text) + if kern > 0 then + setlistcolor(list,c_positive_d) + elseif kern < 0 then + setlistcolor(list,c_negative_d) + else + setlistcolor(list,c_zero_d) + end + setlisttransparency(list,color) + setcolor(rule,color) + settransparency(rule,color) + setshift(text,-5 * exheight) + info = new_hlist(setlink(rule,text)) + setattr(info,a_layer,layer) + f_cache[kern] = info + end + head = insert_node_before(head,current,copy_list(info)) + return head, current + end + + fontkern = function(head,current) + return somekern(head,current,f_cache,c_text_d,l_fontkern) + end + + italickern = function(head,current) + return somekern(head,current,i_cache,c_glyph_d,l_italic) + end + + marginkern = function(head,current) + return somekern(head,current,m_cache,c_glyph_d,l_marginkern) + end + + mathlistkern = function(head,current) + return somekern(head,current,l_cache,c_glyph_d,l_mathlistkern) + end + +end + +local glyphexpansion do + + local f_cache = caches["glyphexpansion"] + + glyphexpansion = function(head,current) + local extra = getexpansion(current) + if extra and extra ~= 0 then + extra = extra / 1000 + local info = f_cache[extra] + if not info then + local text = hpack_string(round(extra),usedfont) + local rule = new_rule(emwidth/fraction,exheight,2*exheight) + local list = getlist(text) + if extra > 0 then + setlistcolor(list,c_positive_d) + elseif extra < 0 then + setlistcolor(list,c_negative_d) + end + setlisttransparency(list,c_text_d) + setcolor(rule,c_text_d) + settransparency(rule,c_text_d) + setshift(text,1.5 * exheight) + info = new_hlist(setlink(rule,text)) + setattr(info,a_layer,l_expansion) + f_cache[extra] = info + end + head = insert_node_before(head,current,copy_list(info)) + return head, current + end + return head, current + end + +end + +local kernexpansion do + + local f_cache = caches["kernexpansion"] + + -- in mkiv we actually need to reconstruct but let's not do that now + + kernexpansion = function(head,current) + local extra = getexpansion(current) + if extra ~= 0 then + extra = extra / 1000 + local info = f_cache[extra] + if not info then + local text = hpack_string(round(extra),usedfont) + local rule = new_rule(emwidth/fraction,exheight,4*exheight) + local list = getlist(text) + if extra > 0 then + setlistcolor(list,c_positive_d) + elseif extra < 0 then + setlistcolor(list,c_negative_d) + end + setlisttransparency(list,c_text_d) + setcolor(rule,c_text_d) + settransparency(rule,c_text_d) + setshift(text,3.5 * exheight) + info = new_hlist(setlink(rule,text)) + setattr(info,a_layer,l_expansion) + f_cache[extra] = info + end + head = insert_node_before(head,current,copy_list(info)) + return head, current + end + return head, current + end + +end + +local whatsit do + + local whatsitcodes = nodes.whatsitcodes + local w_cache = caches["whatsit"] + + local tags = { + open = "OPN", + write = "WRI", + close = "CLS", + special = "SPE", + latelua = "LUA", + savepos = "POS", + userdefined = "USR", + literal = "LIT", + setmatrix = "MAT", + save = "SAV", + restore = "RES", + } + + whatsit = function(head,current) + local what = getsubtype(current) + local info = w_cache[what] + if info then + -- print("hit whatsit") + else + info = sometext(formatters["W:%s"](what),usedfont,nil,c_white) + setattr(info,a_layer,l_whatsit) + w_cache[what] = info + end + head, current = insert_node_after(head,current,copy_list(info)) + return head, current + end + +end + +local dir, par do + + local dircodes = nodes.dircodes + local dirvalues = nodes.dirvalues + + local cancel_code = dircodes.cancel + local l2r_code = dirvalues.l2r + local r2l_code = dirvalues.r2l + + local d_cache = caches["dir"] + + local tags = { + l2r = "L2R", + r2l = "R2L", + cancel = "CAN", + par = "PAR", + } + + par = function(head,current) + local what = "par" -- getsubtype(current) + local info = d_cache[what] + if info then + -- print("hit par") + else + info = sometext(formatters["L:%s"](what),usedfont,nil,c_white) + setattr(info,a_layer,l_dir) + d_cache[what] = info + end + return head, current + end + + dir = function(head,current) + local what = getsubtype(current) + if what == cancelcode then + what = "cancel" + elseif getdirection(current) == r2l_code then + what = "r2l" + else + what = "l2r" + end + local info = d_cache[what] + if info then + -- print("hit dir") + else + info = sometext(formatters["D:%s"](what),usedfont,nil,c_white) + setattr(info,a_layer,l_dir) + d_cache[what] = info + end + return head, current + end + +end + +local user do + + local u_cache = caches["user"] + + user = function(head,current) + local what = getsubtype(current) + local info = u_cache[what] + if info then + -- print("hit user") + else + info = sometext(formatters["U:%s"](what),usedfont) + setattr(info,a_layer,l_user) + u_cache[what] = info + end + head, current = insert_node_after(head,current,copy_list(info)) + return head, current + end + +end + +local math do + + local mathcodes = nodes.mathcodes + local m_cache = { + beginmath = caches["bmath"], + endmath = caches["emath"], + } + local tags = { + beginmath = "B", + endmath = "E", + } + + math = function(head,current) + local what = getsubtype(current) + local tag = mathcodes[what] + local skip = getkern(current) + getwidth(current) -- surround + local info = m_cache[tag][skip] + if info then + -- print("hit math") + else + local text, width = sometext(formatters["M:%s"](tag and tags[tag] or what),usedfont,nil,c_math_d) + local rule = new_rule(skip,-655360/fraction,2*655360/fraction) + setcolor(rule,c_math_d) + settransparency(rule,c_math_d) + setattr(rule,a_layer,l_math) + if tag == "beginmath" then + info = new_hlist(setlink(new_glue(-skip),rule,new_glue(-width),text)) + else + info = new_hlist(setlink(new_glue(-skip),rule,new_glue(-skip),text)) + end + setattr(info,a_layer,l_math) + m_cache[tag][skip] = info + end + head, current = insert_node_after(head,current,copy_list(info)) + return head, current + end + +end + +local ruleddepth do + + ruleddepth = function(current,wd,ht,dp) + local wd, ht, dp = getwhd(current) + if dp ~= 0 then + local rule = new_rule(wd,0,dp) + setcolor(rule,c_depth) + settransparency(rule,c_zero) + setattr(rule,a_layer,l_depth) + setlist(current,setlink(rule,new_kern(-wd),getlist(current))) + end + end + +end + +local ruledbox do + + local b_cache = caches["box"] + local o_cache = caches["origin"] + + setmetatableindex(o_cache,function(t,size) + local rule = new_rule(2*size,size,size) + local origin = hpack_nodes(rule) + setcolor(rule,c_origin_d) + settransparency(rule,c_origin_d) + setattr(rule,a_layer,l_origin) + t[size] = origin + return origin + end) + + ruledbox = function(head,current,vertical,layer,what,simple,previous,trace_origin,parent) + local wd, ht, dp = getwhd(current) + if wd ~= 0 then + local shift = getshift(current) + local next = getnext(current) + local prev = previous + setboth(current) + local linewidth = emwidth/fraction + local size = 2*linewidth + local this + if not simple then + this = b_cache[what] + if not this then + local text = hpack_string(what,usedfont) + this = setlink(new_kern(-getwidth(text)),text) + setlisttransparency(this,c_text) + this = new_hlist(this) + b_cache[what] = this + end + end + -- we need to trigger the right mode (else sometimes no whatits) + local info = setlink( + this and copy_list(this) or nil, + (dp == 0 and outlinerule and outlinerule(wd,ht,dp,linewidth)) or userrule { + width = wd, + height = ht, + depth = dp, + line = linewidth, + type = "box", + dashed = 3*size, + } + ) + -- + setlisttransparency(info,c_text) + info = new_hlist(info) -- important + -- + setattr(info,a_layer,layer) + if vertical then + if shift == 0 then + info = setlink(current,dp ~= 0 and new_kern(-dp) or nil,info) + elseif trace_origin then + local size = 2*size + local origin = o_cache[size] + origin = copy_list(origin) + if getid(parent) == vlist_code then + setshift(origin,-shift) + info = setlink(current,new_kern(-size),origin,new_kern(-size-dp),info) + else + -- todo .. i need an example + info = setlink(current,dp ~= 0 and new_kern(-dp) or nil,info) + end + setshift(current,0) + else + info = setlink(current,new_dp ~= 0 and new_kern(-dp) or nil,info) + setshift(current,0) + end + info = new_vlist(info,wd,ht,dp,shift) + else + if shift == 0 then + info = setlink(current,new_kern(-wd),info) + elseif trace_origin then + local size = 2*size + local origin = o_cache[size] + origin = copy_list(origin) + if getid(parent) == vlist_code then + info = setlink(current,new_kern(-wd-size-shift),origin,new_kern(-size+shift),info) + else + setshift(origin,-shift) + info = setlink(current,new_kern(-wd-size),origin,new_kern(-size),info) + end + setshift(current,0) + else + info = setlink(current,new_kern(-wd),info) + setshift(current,0) + end + info = new_hlist(info,wd,ht,dp,shift) + end + if next then + setlink(info,next) + end + if prev and prev > 0 then + setlink(prev,info) + end + if head == current then + return info, info + else + return head, info + end + else + return head, current + end + end + +end + +local ruledglyph do + + -- see boundingbox feature .. maybe a pdf stream is more efficient, after all we + -- have a frozen color anyway or i need a more detailed cache .. below is a more + -- texie approach + + ruledglyph = function(head,current,previous) -- wrong for vertical glyphs + local wd = getwidth(current) + if wd ~= 0 then + local wd, ht, dp = getwhd(current) + local next = getnext(current) + local prev = previous + setboth(current) + local linewidth = emwidth/(2*fraction) + local info + -- + info = setlink( + (dp == 0 and outlinerule and outlinerule(wd,ht,dp,linewidth)) or userrule { + width = wd, + height = ht, + depth = dp, + line = linewidth, + type = "box", + }, + new_kern(-wd) + ) + -- + local c, f = isglyph(current) + local char = chardata[f][c] + if char and type(char.unicode) == "table" then -- hackery test + setlistcolor(info,c_ligature) + setlisttransparency(info,c_ligature_d) + else + setlistcolor(info,c_glyph) + setlisttransparency(info,c_glyph_d) + end + info = new_hlist(info) + setattr(info,a_layer,l_glyph) + local info = setlink(current,new_kern(-wd),info) + info = hpack_nodes(info) + setwidth(info,wd) + if next then + setlink(info,next) + end + if prev then + setlink(prev,info) + end + if head == current then + return info, info + else + return head, info + end + else + return head, current + end + end + + function visualizers.setruledglyph(f) + ruledglyph = f or ruledglyph + end + +end + +local ruledglue do + + local gluecodes = nodes.gluecodes + + local userskip_code = gluecodes.userskip + local spaceskip_code = gluecodes.spaceskip + local xspaceskip_code = gluecodes.xspaceskip + local zerospaceskip_code = gluecodes.zerospaceskip or gluecodes.userskip + -- local keepskip_code = gluecodes.keepskip or gluecodes.userskip + local leftskip_code = gluecodes.leftskip + local rightskip_code = gluecodes.rightskip + local parfillleftskip_code = gluecodes.parfillleftskip or parfillskip_code + local parfillrightskip_code = gluecodes.parfillrightskip or parfillskip_code + local indentskip_code = gluecodes.indentskip + local correctionskip_code = gluecodes.correctionskip + + local g_cache_v = caches["vglue"] + local g_cache_h = caches["hglue"] + + local tags = { + -- [userskip_code] = "US", + [gluecodes.lineskip] = "LI", + [gluecodes.baselineskip] = "BS", + [gluecodes.parskip] = "PS", + [gluecodes.abovedisplayskip] = "DA", + [gluecodes.belowdisplayskip] = "DB", + [gluecodes.abovedisplayshortskip] = "SA", + [gluecodes.belowdisplayshortskip] = "SB", + [gluecodes.topskip] = "TS", + [gluecodes.splittopskip] = "ST", + [gluecodes.tabskip] = "AS", + [gluecodes.lefthangskip] = "LH", + [gluecodes.righthangskip] = "RH", + [gluecodes.thinmuskip] = "MS", + [gluecodes.medmuskip] = "MM", + [gluecodes.thickmuskip] = "ML", + [gluecodes.intermathskip] = "IM", + [gluecodes.keepskip or 99] = "KS", + [gluecodes.mathskip] = "MT", + [gluecodes.leaders] = "NL", + [gluecodes.cleaders] = "CL", + [gluecodes.xleaders] = "XL", + [gluecodes.gleaders] = "GL", + -- true = "VS", + -- false = "HS", + [leftskip_code] = "LS", + [rightskip_code] = "RS", + [spaceskip_code] = "SP", + [xspaceskip_code] = "XS", + [zerospaceskip_code] = "ZS", + [parfillleftskip_code] = "PL", + [parfillrightskip_code] = "PR", + [indentskip_code] = "IN", + [correctionskip_code] = "CS", + } + + -- we sometimes pass previous as we can have issues in math (not watertight for all) + + ruledglue = function(head,current,vertical,parent) + local subtype = getsubtype(current) + local width = effectiveglue(current,parent) + local amount = formatters["%s:%0.3f"](tags[subtype] or (vertical and "VS") or "HS",width*pt_factor) + local info = (vertical and g_cache_v or g_cache_h)[amount] + if info then + -- print("glue hit") + else + if subtype == spaceskip_code or subtype == xspaceskip_code or subtype == zerospaceskip_code then + info = sometext(amount,l_glue,c_space) + elseif subtype == leftskip_code or subtype == rightskip_code then + info = sometext(amount,l_glue,c_skip_a) + elseif subtype == parfillleftskip_code or subtype == parfillrightskip_code or subtype == indentskip_code or subtype == correctionskip_code then + info = sometext(amount,l_glue,c_indent) + elseif subtype == userskip_code then + if width > 0 then + info = sometext(amount,l_glue,c_positive) + elseif width < 0 then + info = sometext(amount,l_glue,c_negative) + else + info = sometext(amount,l_glue,c_zero) + end + else + info = sometext(amount,l_glue,c_skip_b) + end + (vertical and g_cache_v or g_cache_h)[amount] = info + end + info = copy_list(info) + if vertical then + info = vpack_nodes(info) + end + head, current = insert_node_before(head,current,info) + return head, getnext(current) + end + + -- ruledspace = function(head,current,parent) + -- local subtype = getsubtype(current) + -- if subtype == spaceskip_code or subtype == xspaceskip_code or subtype == zerospaceskip_code then + -- local width = effectiveglue(current,parent) + -- local amount = formatters["%s:%0.3f"](tags[subtype] or "HS",width*pt_factor) + -- local info = g_cache_h[amount] + -- if info then + -- -- print("space hit") + -- else + -- info = sometext(amount,l_glue,c_space) + -- g_cache_h[amount] = info + -- end + -- info = copy_list(info) + -- head, current = insert_node_before(head,current,info) + -- return head, getnext(current) + -- else + -- return head, current + -- end + -- end + + local g_cache_s = caches["space"] + local g_cache_x = caches["xspace"] + + ruledspace = function(head,current,parent) + local subtype = getsubtype(current) + if subtype == spaceskip_code or subtype == xspaceskip_code or subtype == zerospaceskip_code then -- not yet all space + local width = effectiveglue(current,parent) + local info + if subtype == spaceskip_code then + info = g_cache_s[width] + if not info then + info = someblob("SP",l_glue,c_space,nil,width) + g_cache_s[width] = info + end + else + info = g_cache_x[width] + if not info then + info = someblob("XS",l_glue,c_space_x,nil,width) + g_cache_x[width] = info + end + end + info = copy_list(info) + head, current = insert_node_before(head,current,info) + return head, getnext(current) + else + return head, current + end + end + +end + +local ruledkern do + + local k_cache_v = caches["vkern"] + local k_cache_h = caches["hkern"] + + ruledkern = function(head,current,vertical,mk) + local kern = getkern(current) + local cache = vertical and k_cache_v or k_cache_h + local info = cache[kern] + if not info then + local amount = formatters["%s:%0.3f"](vertical and "VK" or (mk and "MK") or "HK",kern*pt_factor) + if kern > 0 then + info = sometext(amount,l_kern,c_positive) + elseif kern < 0 then + info = sometext(amount,l_kern,c_negative) + else + info = sometext(amount,l_kern,c_zero) + end + cache[kern] = info + end + info = copy_list(info) + if vertical then + info = vpack_nodes(info) + end + head, current = insert_node_before(head,current,info) + return head, getnext(current) + end + +end + +local ruleditalic do + + local i_cache = caches["italic"] + + ruleditalic = function(head,current) + local kern = getkern(current) + local info = i_cache[kern] + if not info then + local amount = formatters["%s:%0.3f"]("IC",kern*pt_factor) + if kern > 0 then + info = sometext(amount,l_kern,c_positive) + elseif kern < 0 then + info = sometext(amount,l_kern,c_negative) + else + info = sometext(amount,l_kern,c_zero) + end + i_cache[kern] = info + end + info = copy_list(info) + head, current = insert_node_before(head,current,info) + return head, getnext(current) + end + +end + +local ruledmarginkern do + + local m_cache = caches["marginkern"] + + ruledmarginkern = function(head,current) + local kern = getkern(current) + local info = m_cache[kern] + if not info then + local amount = formatters["%s:%0.3f"]("MK",kern*pt_factor) + if kern > 0 then + info = sometext(amount,l_marginkern,c_positive) + elseif kern < 0 then + info = sometext(amount,l_marginkern,c_negative) + else + info = sometext(amount,l_marginkern,c_zero) + end + m_cache[kern] = info + end + info = copy_list(info) + head, current = insert_node_before(head,current,info) + return head, getnext(current) + end + +end + +local ruledmathlistkern do + + local l_cache = caches["mathlistkern"] + + ruledmathlistkern = function(head,current) + local kern = getkern(current) + local info = l_cache[kern] + if not info then + local amount = formatters["%s:%0.3f"]("LK",kern*pt_factor) + if kern > 0 then + info = sometext(amount,l_mathlistkern,c_positive) + elseif kern < 0 then + info = sometext(amount,l_mathlistkern,c_negative) + else + info = sometext(amount,l_mathlistkern,c_zero) + end + l_cache[kern] = info + end + info = copy_list(info) + head, current = insert_node_before(head,current,info) + return head, getnext(current) + end + +end + +local ruleddiscretionary do + + local d_cache = caches["discretionary"] + + ruleddiscretionary = function(head,current) + local d = d_cache[true] + if not the_discretionary then + local rule = new_rule(4*emwidth/fraction,4*exheight,exheight) + local kern = new_kern(-2*emwidth/fraction) + setlink(kern,rule) + setcolor(rule,c_discretionary_d) + settransparency(rule,c_discretionary_d) + setattr(rule,a_layer,l_discretionary) + d = new_hlist(kern) + d_cache[true] = d + end + insert_node_after(head,current,copy_list(d)) + return head, current + end + +end + +local ruledpenalty do + + local p_cache_v = caches["vpenalty"] + local p_cache_h = caches["hpenalty"] + + local raisepenalties = false + + directives.register("visualizers.raisepenalties",function(v) raisepenalties = v end) + + ruledpenalty = function(head,current,vertical) + local penalty = getpenalty(current) + local info = (vertical and p_cache_v or p_cache_h)[penalty] + if info then + -- print("penalty hit") + else + local amount = formatters["%s:%s"](vertical and "VP" or "HP",penalty) + if penalty > 0 then + info = sometext(amount,l_penalty,c_positive) + elseif penalty < 0 then + info = sometext(amount,l_penalty,c_negative) + else + info = sometext(amount,l_penalty,c_zero) + end + (vertical and p_cache_v or p_cache_h)[penalty] = info + end + info = copy_list(info) + if vertical then + info = vpack_nodes(info) + elseif raisepenalties then + setshift(info,-65536*4) + end + head, current = insert_node_before(head,current,info) + return head, getnext(current) + end + +end + +do + + local disc_code = nodecodes.disc + local kern_code = nodecodes.kern + local glyph_code = nodecodes.glyph + local glue_code = nodecodes.glue + local penalty_code = nodecodes.penalty + local whatsit_code = nodecodes.whatsit + local user_code = nodecodes.user + local math_code = nodecodes.math + local hlist_code = nodecodes.hlist + local vlist_code = nodecodes.vlist + local marginkern_code = nodecodes.marginkern + local mathlistkern_code = nodecodes.mathlistkern + local dir_code = nodecodes.dir + local par_code = nodecodes.par + + local kerncodes = nodes.kerncodes + local fontkern_code = kerncodes.fontkern + local italickern_code = kerncodes.italiccorrection + local leftmarginkern_code = kerncodes.leftmarginkern + local rightmarginkern_code = kerncodes.rightmarginkern + local mathlistkern_code = kerncodes.mathlistkern + ----- userkern_code = kerncodes.userkern + + local listcodes = nodes.listcodes + local linelist_code = listcodes.line + + local vtop_package_state = 3 -- todo: symbolic + + local cache + + local function visualize(head,vertical,forced,parent) + local trace_hbox = false + local trace_vbox = false + local trace_vtop = false + local trace_kern = false + local trace_glue = false + local trace_penalty = false + local trace_fontkern = false + local trace_strut = false + local trace_whatsit = false + local trace_glyph = false + local trace_simple = false + local trace_user = false + local trace_math = false + local trace_italic = false + local trace_origin = false + local trace_discretionary = false + local trace_expansion = false + local trace_line = false + local trace_space = false + local trace_depth = false + local trace_dir = false + local trace_par = false + local current = head + local previous = nil + local attr = unsetvalue + local prev_trace_fontkern = nil + local prev_trace_italic = nil + local prev_trace_marginkern = nil +-- local prev_trace_mathlist = nil + local prev_trace_expansion = nil + + while current do + local id = getid(current) + local a = forced or getattr(current,a_visual) or unsetvalue + local subtype + if a ~= attr then + prev_trace_fontkern = trace_fontkern + prev_trace_italic = trace_italic + prev_trace_marginkern = trace_marginkern +-- prev_trace_mathlistkern = trace_mathlistkern + prev_trace_expansion = trace_expansion + attr = a + if a == unsetvalue then + trace_hbox = false + trace_vbox = false + trace_vtop = false + trace_kern = false + trace_glue = false + trace_penalty = false + trace_fontkern = false + trace_strut = false + trace_whatsit = false + trace_glyph = false + trace_simple = false + trace_user = false + trace_math = false + trace_italic = false + trace_origin = false + trace_discretionary = false + trace_expansion = false + trace_line = false + trace_space = false + trace_depth = false + trace_marginkern = false + trace_mathlistkern = false + trace_dir = false + trace_par = false + if id == kern_code then + goto kern + else + goto list + end + else -- dead slow: + -- cache[a]() + trace_hbox = band(a,0x000001) ~= 0 + trace_vbox = band(a,0x000002) ~= 0 + trace_vtop = band(a,0x000004) ~= 0 + trace_kern = band(a,0x000008) ~= 0 + trace_glue = band(a,0x000010) ~= 0 + trace_penalty = band(a,0x000020) ~= 0 + trace_fontkern = band(a,0x000040) ~= 0 + trace_strut = band(a,0x000080) ~= 0 + trace_whatsit = band(a,0x000100) ~= 0 + trace_glyph = band(a,0x000200) ~= 0 + trace_simple = band(a,0x000400) ~= 0 + trace_user = band(a,0x000800) ~= 0 + trace_math = band(a,0x001000) ~= 0 + trace_italic = band(a,0x002000) ~= 0 + trace_origin = band(a,0x004000) ~= 0 + trace_discretionary = band(a,0x008000) ~= 0 + trace_expansion = band(a,0x010000) ~= 0 + trace_line = band(a,0x020000) ~= 0 + trace_space = band(a,0x040000) ~= 0 + trace_depth = band(a,0x080000) ~= 0 + trace_marginkern = band(a,0x100000) ~= 0 + trace_mathlistkern = band(a,0x200000) ~= 0 + trace_dir = band(a,0x400000) ~= 0 + trace_whatsit = band(a,0x800000) ~= 0 + end + elseif a == unsetvalue then + goto list + end + if trace_strut then + setattr(current,a_layer,l_strut) + elseif id == glyph_code then + if trace_glyph then + head, current = ruledglyph(head,current,previous) + end + if trace_expansion then + head, current = glyphexpansion(head,current) + end + elseif id == disc_code then + if trace_discretionary then + head, current = ruleddiscretionary(head,current) + end + local pre, post, replace = getdisc(current) + if pre then + pre = visualize(pre,false,a,parent) + end + if post then + post = visualize(post,false,a,parent) + end + if replace then + replace = visualize(replace,false,a,parent) + end + setdisc(current,pre,post,replace) + elseif id == kern_code then + goto kern + elseif id == glue_code then + local content = getleader(current) + if content then + setleader(current,visualize(content,false,nil,parent)) + elseif trace_glue then + head, current = ruledglue(head,current,vertical,parent) + elseif trace_space then + head, current = ruledspace(head,current,parent) + end + elseif id == penalty_code then + if trace_penalty then + head, current = ruledpenalty(head,current,vertical) + end + elseif id == hlist_code or id == vlist_code then + goto list + elseif id == whatsit_code then + if trace_whatsit then + head, current = whatsit(head,current) + end + elseif id == user_code then + if trace_user then + head, current = user(head,current) + end + elseif id == math_code then + if trace_math then + head, current = math(head,current) + end + elseif id == marginkern_code then + if trace_kern then + head, current = ruledkern(head,current,vertical,true) + end + elseif id == dir_code then + if trace_dir then + head, current = dir(head,current) + end + elseif id == par_code then + if trace_par then + head, current = par(head,current) + end + end + goto next + ::kern:: + subtype = getsubtype(current) + if subtype == fontkern_code then + if trace_fontkern or prev_trace_fontkern then + head, current = fontkern(head,current) + end + if trace_expansion or prev_trace_expansion then + head, current = kernexpansion(head,current) + end + elseif subtype == italickern_code then + if trace_italic or prev_trace_italic then + head, current = italickern(head,current) + elseif trace_kern then + head, current = ruleditalic(head,current) + end + elseif subtype == leftmarginkern_code or subtype == rightmarginkern_code then + if trace_marginkern or prev_trace_marginkern then + head, current = marginkern(head,current) + elseif trace_kern then + head, current = ruledmarginkern(head,current) + end + elseif subtype == mathlistkern_code then + if trace_mathlist then -- or prev_trace_mathlist then + head, current = mathlistkern(head,current) + elseif trace_kern then + head, current = ruledmathlistkern(head,current) + end + else + if trace_kern then + head, current = ruledkern(head,current,vertical) + end + end + goto next; + ::list:: + if id == hlist_code then + local content = getlist(current) + if content then + setlist(current,visualize(content,false,nil,current)) + end + if trace_depth then + ruleddepth(current) + end + if trace_line and getsubtype(current) == linelist_code then + head, current = ruledbox(head,current,false,l_line,"L__",trace_simple,previous,trace_origin,parent) + elseif trace_hbox then + head, current = ruledbox(head,current,false,l_hbox,"H__",trace_simple,previous,trace_origin,parent) + end + elseif id == vlist_code then + local content = getlist(current) + local isvtop = getstate(current) == vtop_package_state + local tag = nil + local layer = nil + if content then + setlist(current,visualize(content,true,nil,current)) + end + if trace_vtop then + if isvtop then + tag = "_T_" + layer = l_vtop + elseif trace_vbox then + tag = "__V" + layer = l_vbox + end + elseif trace_vbox then + if not isvtop then + tag = "__V" + layer = l_vbox + end + end + if tag then + head, current = ruledbox(head,current,true,layer,tag,trace_simple,previous,trace_origin,parent) + end + end + ::next:: + previous = current + current = getnext(current) + end + return head + end + + local function cleanup() + for tag, cache in next, caches do + for k, v in next, cache do + flush_node_list(v) + end + end + cleanup = function() + report_visualize("error, duplicate cleanup") + end + end + + luatex.registerstopactions(cleanup) + + function visualizers.handler(head) + if usedfont then + starttiming(visualizers) + head = visualize(head,true) + stoptiming(visualizers) + return head, true + else + return head, false + end + end + + function visualizers.box(n) + if usedfont then + starttiming(visualizers) + local box = getbox(n) + if box then + setlist(box,visualize(getlist(box),getid(box) == vlist_code)) + end + stoptiming(visualizers) + return head, true + else + return head, false + end + end + +end + +do + + local hlist_code = nodecodes.hlist + local vlist_code = nodecodes.vlist + local nextnode = nuts.traversers.node + + local last = nil + local used = nil + + local mark = { + "trace:1", "trace:2", "trace:3", + "trace:4", "trace:5", "trace:6", + "trace:7", + } + + local function markfonts(list) + for n, id in nextnode, list do + if id == glyph_code then + local font = getfont(n) + local okay = used[font] + if not okay then + last = last + 1 + okay = mark[last] + used[font] = okay + end + setcolor(n,okay) + elseif id == hlist_code or id == vlist_code then + markfonts(getlist(n)) + end + end + end + + function visualizers.markfonts(list) + last, used = 0, { } + markfonts(type(n) == "number" and getlist(getbox(n)) or n) + end + +end + +statistics.register("visualization time",function() + if enabled then + -- cleanup() -- in case we don't don't do it each time + return formatters["%s seconds"](statistics.elapsedtime(visualizers)) + end +end) + +-- interface + +do + + local implement = interfaces.implement + + implement { + name = "setvisual", + arguments = "string", + actions = visualizers.setvisual + } + + implement { + name = "setvisuals", + arguments = "string", + actions = visualizers.setvisual + } + + implement { + name = "getvisual", + arguments = "string", + actions = { setvisual, context } + } + + implement { + name = "setvisuallayer", + arguments = "string", + actions = visualizers.setlayer + } + + implement { + name = "markvisualfonts", + arguments = "integer", + actions = visualizers.markfonts + } + + implement { + name = "setvisualfont", + arguments = "integer", + actions = visualizers.setfont + } + +end + +-- Here for now: + +do + + local function make(str,forecolor,rulecolor,layer) + if initialize then + initialize() + end + local rule = new_rule(emwidth/fraction,exheight,4*exheight) + setcolor(rule,rulecolor) + settransparency(rule,rulecolor) + local info + if str == "" then + info = new_hlist(rule) + else + local text = hpack_string(str,usedfont) + local list = getlist(text) + setlistcolor(list,textcolor) + setlisttransparency(list,textcolor) + setshift(text,3.5 * exheight) + info = new_hlist(setlink(rule,text)) + end + setattr(info,a_layer,layer) + return info + end + + function visualizers.register(name,textcolor,rulecolor) + if rawget(layers,name) then + -- message + return + end + local cache = caches[name] + local layer = layers[name] + if not textcolor then + textcolor = c_text_d + end + if not rulecolor then + rulecolor = c_origin_d + end + return function(str) + if not str then + str = "" + end + local info = cache[str] + if not info then + info = make(str,textcolor,rulecolor,layer) + cache[str] = info + end + return copy_node(info) + end + end + +end diff --git a/tex/context/base/mkiv/trac-vis.lua b/tex/context/base/mkiv/trac-vis.lua index c676f4dd7..fb5ef98d9 100644 --- a/tex/context/base/mkiv/trac-vis.lua +++ b/tex/context/base/mkiv/trac-vis.lua @@ -28,12 +28,12 @@ local round = math.round -- todo: maybe also xoffset, yoffset of glyph -- todo: inline concat (more efficient) -- todo: tags can also be numbers (just add to hash) +-- todo: make a lmtx variant (a few more efficient fetchers) local nodecodes = nodes.nodecodes local nuts = nodes.nuts local tonut = nuts.tonut -local tonode = nuts.tonode local setboth = nuts.setboth local setlink = nuts.setlink @@ -64,6 +64,7 @@ local getdepth = nuts.getdepth local getshift = nuts.getshift local getexpansion = nuts.getexpansion local getdirection = nuts.getdirection +local getstate = nuts.getstate local isglyph = nuts.isglyph @@ -167,7 +168,7 @@ local modes = { marginkern = 0x100000, mathlistkern = 0x200000, dir = 0x400000, - localpar = 0x800000, + par = 0x800000, } local usedfont, exheight, emwidth @@ -236,7 +237,7 @@ local function initialize() l_space = layers.space l_depth = layers.depth l_dir = layers.dir - l_localpar = layers.localpar + l_par = layers.par -- if not userrule then userrule = nuts.rules.userrule @@ -559,6 +560,8 @@ local kernexpansion do local f_cache = caches["kernexpansion"] + -- in mkiv we actually need to reconstruct but let's not do that now + kernexpansion = function(head,current) local extra = getexpansion(current) if extra ~= 0 then @@ -624,7 +627,7 @@ local whatsit do end -local dir, localpar do +local dir, par do local dircodes = nodes.dircodes local dirvalues = nodes.dirvalues @@ -642,11 +645,11 @@ local dir, localpar do par = "PAR", } - localpar = function(head,current) + par = function(head,current) local what = "par" -- getsubtype(current) local info = d_cache[what] if info then - -- print("hit localpar") + -- print("hit par") else info = sometext(formatters["L:%s"](what),usedfont,nil,c_white) setattr(info,a_layer,l_dir) @@ -927,7 +930,6 @@ end local ruledglue do local gluecodes = nodes.gluecodes - local leadercodes = nodes.gluecodes local userskip_code = gluecodes.userskip local spaceskip_code = gluecodes.spaceskip @@ -936,14 +938,11 @@ local ruledglue do -- local keepskip_code = gluecodes.keepskip or gluecodes.userskip local leftskip_code = gluecodes.leftskip local rightskip_code = gluecodes.rightskip - local parfillskip_code = gluecodes.parfillskip local parfillleftskip_code = gluecodes.parfillleftskip or parfillskip_code local parfillrightskip_code = gluecodes.parfillrightskip or parfillskip_code local indentskip_code = gluecodes.indentskip local correctionskip_code = gluecodes.correctionskip - local cleaders_code = leadercodes.cleaders - local g_cache_v = caches["vglue"] local g_cache_h = caches["hglue"] @@ -967,10 +966,10 @@ local ruledglue do [gluecodes.intermathskip] = "IM", [gluecodes.keepskip or 99] = "KS", [gluecodes.mathskip] = "MT", - [leadercodes.leaders] = "NL", - [leadercodes.cleaders] = "CL", - [leadercodes.xleaders] = "XL", - [leadercodes.gleaders] = "GL", + [gluecodes.leaders] = "NL", + [gluecodes.cleaders] = "CL", + [gluecodes.xleaders] = "XL", + [gluecodes.gleaders] = "GL", -- true = "VS", -- false = "HS", [leftskip_code] = "LS", @@ -978,7 +977,6 @@ local ruledglue do [spaceskip_code] = "SP", [xspaceskip_code] = "XS", [zerospaceskip_code] = "ZS", - [parfillskip_code] = "PR", [parfillleftskip_code] = "PL", [parfillrightskip_code] = "PR", [indentskip_code] = "IN", @@ -999,7 +997,7 @@ local ruledglue do info = sometext(amount,l_glue,c_space) elseif subtype == leftskip_code or subtype == rightskip_code then info = sometext(amount,l_glue,c_skip_a) - elseif subtype == parfillskip_code or subtype == parfillleftskip_code or subtype == parfillrightskip_code or subtype == indentskip_code or subtype == correctionskip_code then + elseif subtype == parfillleftskip_code or subtype == parfillrightskip_code or subtype == indentskip_code or subtype == correctionskip_code then info = sometext(amount,l_glue,c_indent) elseif subtype == userskip_code then if width > 0 then @@ -1252,7 +1250,7 @@ do local marginkern_code = nodecodes.marginkern local mathlistkern_code = nodecodes.mathlistkern local dir_code = nodecodes.dir - local localpar_code = nodecodes.localpar + local par_code = nodecodes.par local kerncodes = nodes.kerncodes local fontkern_code = kerncodes.fontkern @@ -1289,7 +1287,7 @@ do local trace_space = false local trace_depth = false local trace_dir = false - local trace_localpar = false + local trace_par = false local current = head local previous = nil local attr = unsetvalue @@ -1334,7 +1332,7 @@ do trace_marginkern = false trace_mathlistkern = false trace_dir = false - trace_localpar = false + trace_par = false if id == kern_code then goto kern else @@ -1431,9 +1429,9 @@ do if trace_dir then head, current = dir(head,current) end - elseif id == localpar_code then - if trace_localpar then - head, current = localpar(head,current) + elseif id == par_code then + if trace_par then + head, current = par(head,current) end end goto next diff --git a/tex/context/base/mkiv/trac-vis.mkiv b/tex/context/base/mkiv/trac-vis.mkiv index b261747c1..5357c8414 100644 --- a/tex/context/base/mkiv/trac-vis.mkiv +++ b/tex/context/base/mkiv/trac-vis.mkiv @@ -70,26 +70,18 @@ \unexpanded\def\ruledmbox#1{\ruledhbox{\startimath#1\stopimath}} -\ifcase\contextlmtxmode +\unexpanded\def\sys_ruled_vcenter{\syst_visualizers_vcenter attr \visualattribute \clf_getvisual {simplevbox}} - \unexpanded\def\sys_ruled_vcenter{\syst_visualizers_vcenter attr \visualattribute \clf_getvisual {simplevbox}} +\unexpanded\def\ruledvcenter + {\ruledvbox\bgroup + \dowithnextboxcs\syst_boxes_ruled_vcenter_finish\ruledvbox} - \unexpanded\def\ruledvcenter - {\ruledvbox\bgroup - \dowithnextboxcs\syst_boxes_ruled_vcenter_finish\ruledvbox} +\def\syst_boxes_ruled_vcenter_finish + {\ruledhpack{\normalstartimath\ruledvcenter{\box\nextbox}\normalstopimath}% + \egroup} - \def\syst_boxes_ruled_vcenter_finish - {\ruledhpack{\normalstartimath\ruledvcenter{\box\nextbox}\normalstopimath}% - \egroup} - - \prependtoks \let\ruledvcenter\sys_ruled_vcenter \to \everymath - \prependtoks \let\ruledvcenter\sys_ruled_vcenter \to \everydisplay - -\else - - \unexpanded\def\ruledvcenter{\syst_visualizers_vcenter attr \visualattribute \clf_getvisual {simplevbox}} - -\fi +\prependtoks \let\ruledvcenter\sys_ruled_vcenter \to \everymath +\prependtoks \let\ruledvcenter\sys_ruled_vcenter \to \everydisplay \appendtoks \ifcase\c_syst_visualizers_state\else diff --git a/tex/context/base/mkiv/trac-vis.mkxl b/tex/context/base/mkiv/trac-vis.mkxl new file mode 100644 index 000000000..77df80848 --- /dev/null +++ b/tex/context/base/mkiv/trac-vis.mkxl @@ -0,0 +1,219 @@ +%D \module +%D [ file=trac-vis, % replaces supp-vis plus some s-* modules +%D version=2012.06.23, % 1996.10.21, +%D title=\CONTEXT\ Tracing Macros, +%D subtitle=Visualization, +%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 old visual debugger dates from 1996 and started out as joke. In practice +%D it's not used that often although the \type {\ruledhbox} cum suis macros come +%D in handy when writing code. In the process of luafication some additional +%D tracing options were tested, for instance showing font kerns. As part of the +%D \MKIV\ cleanup the decision was made to reimplement, reintegrate and reconsider +%D all these features. The old code is gone and the new code will get extended +%D when needed. We still provide placeholders for some old visualization commands +%D but they might go away. +%D +%D Control over what gets visualized happens with the tracker command: +%D +%D \enabletrackers[visualizers.*] +%D +%D Possible values are: \type {fontkern}, \type {kern}, \type {glue}, \type +%D {penalty}, \type {hbox}, \type {vbox}, \type {all}, \type {reset}, \type +%D {makeup}, \type {whatsit}, \type{glyph}. +%D +%D In due time some special visualzation of math will move here as well. + +\writestatus{loading}{ConTeXt Tracing Macros / Visualization} + +\registerctxluafile{trac-vis}{autosuffix,optimize} + +\unprotect + +\newconstant\c_syst_visualizers_state +\newtoks \t_syst_visualizers_optimize + +% \definesystemattribute[visual][public,global] % already defined + +% no, but can become an option: +% +% \appendtoks +% \c_attr_visual\attributeunsetvalue +% \to \everybeforepagebody + +%D We only provide box visualizers as they can come in handy for testing +%D macros. In due time we will move some of the m-visual code here too. + +\aliased\let\syst_visualizers_hbox \hbox +\aliased\let\syst_visualizers_vbox \vbox +\aliased\let\syst_visualizers_vtop \vtop +\aliased\let\syst_visualizers_vcenter\vcenter +\aliased\let\syst_visualizers_hpack \hpack +\aliased\let\syst_visualizers_vpack \vpack +\aliased\let\syst_visualizers_tpack \tpack + +\permanent\protected\def\ruledhbox {\syst_visualizers_hbox attr \visualattribute \clf_getvisual{simplehbox} } +\permanent\protected\def\ruledhpack {\syst_visualizers_hpack attr \visualattribute \clf_getvisual{simplehbox} } +\permanent\protected\def\ruledvbox {\syst_visualizers_vbox attr \visualattribute \clf_getvisual{simplevbox} } +\permanent\protected\def\ruledvpack {\syst_visualizers_vpack attr \visualattribute \clf_getvisual{simplevbox} } +\permanent\protected\def\ruledvtop {\syst_visualizers_vtop attr \visualattribute \clf_getvisual{simplevtop} } +\permanent\protected\def\ruledtpack {\syst_visualizers_tpack attr \visualattribute \clf_getvisual{simplevtop} } +\permanent\protected\def\ruledvcenter{\syst_visualizers_vcenter attr \visualattribute \clf_getvisual{simplevbox} } +\permanent\protected\def\ruledmbox #1{\ruledhbox{\startimath#1\stopimath}} + +\appendtoks + \ifcase\c_syst_visualizers_state\else + \syst_visualizers_speedup + \fi +\to \everyshipout + +\appendtoks + \glet\syst_visualizers_speedup\relax + \global\t_syst_visualizers_optimize\emptytoks +\to \t_syst_visualizers_optimize + +\def\syst_visualizers_speedup{\the\t_syst_visualizers_optimize} + +\appendtoks +% \enforced\global\protected\edef\ruledhbox {\syst_visualizers_hbox attr \visualattribute \number\clf_getvisual{simplehbox} } +% \enforced\global\protected\edef\ruledhpack {\syst_visualizers_hpack attr \visualattribute \number\clf_getvisual{simplehbox} } +% \enforced\global\protected\edef\ruledvbox {\syst_visualizers_vbox attr \visualattribute \number\clf_getvisual{simplevbox} } +% \enforced\global\protected\edef\ruledvpack {\syst_visualizers_vpack attr \visualattribute \number\clf_getvisual{simplevbox} } +% \enforced\global\protected\edef\ruledvtop {\syst_visualizers_vtop attr \visualattribute \number\clf_getvisual{simplevtop} } +% \enforced\global\protected\edef\ruledtpack {\syst_visualizers_tpack attr \visualattribute \number\clf_getvisual{simplevtop} } +% \enforced\global\protected\edef\ruledvcenter{\syst_visualizers_vcenter attr \visualattribute \number\clf_getvisual{simplevbox} } +\to \t_syst_visualizers_optimize + +\permanent\tolerant\protected\def\showmakeup[#1]% + {\ifarguments + \clf_setvisual{makeup}% + \else + \clf_setvisual{#1}% + \fi} + +\permanent\protected\def\showallmakeup {\clf_setvisual{all}\showstruts} +\permanent\protected\def\showboxes {\clf_setvisual{boxes}} +\permanent\protected\def\showglyphs {\clf_setvisual{glyph}} +\permanent\protected\def\showfontkerns {\clf_setvisual{fontkern}} +\permanent\protected\def\showfontitalics {\clf_setvisual{italic}} +\permanent\protected\def\showglyphdata {\showglyphs\showfontkerns\showfontitalics} +\permanent\protected\def\showfontexpansion{\clf_setvisual{expansion}} + +\permanent\tolerant\protected\def\setvisualizerfont[#1]% somename at 4pt + {\begingroup + \iftok{#1}\emptytoks + \definedfont[Mono at 4pt]% + \else + \definedfont[#1]% + \fi + \clf_setvisualfont\fontid\font + \endgroup} + +\permanent\protected\def\resetvisualizers + {\c_attr_visual\attributeunsetvalue} + +%D New (these might also be a visualizers): + +% \definecolor[f:r:t][a=1,t=.25,r=1] +% \definecolor[f:g:t][a=1,t=.25,g=1] +% \definecolor[f:b:t][a=1,t=.25,b=1] +% \definecolor[f:c:t][a=1,t=.25,c=1] +% \definecolor[f:m:t][a=1,t=.25,m=1] +% \definecolor[f:y:t][a=1,t=.25,y=1] +% \definecolor[f:k:t][a=1,t=.25,s=0] + +\permanent\protected\def\filledhboxr{\node_backgrounds_boxes_add\hbox[f:r:t]} +\permanent\protected\def\filledhboxg{\node_backgrounds_boxes_add\hbox[f:g:t]} +\permanent\protected\def\filledhboxb{\node_backgrounds_boxes_add\hbox[f:b:t]} +\permanent\protected\def\filledhboxc{\node_backgrounds_boxes_add\hbox[f:c:t]} +\permanent\protected\def\filledhboxm{\node_backgrounds_boxes_add\hbox[f:m:t]} +\permanent\protected\def\filledhboxy{\node_backgrounds_boxes_add\hbox[f:y:t]} +\permanent\protected\def\filledhboxk{\node_backgrounds_boxes_add\hbox[f:k:t]} + +%D Overload: + +\protected\def\spac_struts_vide_hbox + {\hbox attr \visualattribute \clf_getvisual{strut} } + +\appendtoks + \normalexpanded{\protected\xdef\spac_struts_vide_hbox\expandafter{\spac_struts_vide_hbox}}% +\to \t_syst_visualizers_optimize + +%D For manuals: + +\permanent\protected\def\markfonts#1% + {\dontleavehmode + \begingroup + \setbox\scratchbox\hbox{\getbuffer}% + \clf_markvisualfonts\scratchbox + \unhbox\scratchbox + \endgroup} + +% As demo: +% +% \startbuffer +% \hbox {\raise1cm\hbox{raised} normal \lower1cm\hbox{lowered}} +% \blank +% \moveleft1cm\hbox{left} +% \blank +% \hbox{normal} +% \blank +% \moveright1cm\hbox{right} +% \blank +% \stopbuffer +% +% \start \showboxes \getbuffer \stop \blank[4*big] \getbuffer +% +% \startbuffer +% \moveleft1cm\vbox{left} +% \blank +% \vbox{normal} +% \blank +% \moveright1cm\vbox{right} +% \blank +% \stopbuffer +% +% \start \showboxes \getbuffer \stop \blank[4*big] \getbuffer + +%D We keep this one: + +\permanent\protected\def\dontinterfere + {\reseteverypar + \parindent\zeropoint + \parskip \zeropoint + \leftskip \zeropoint + \rightskip\zeropoint + \relax} + +%D We keep these for a while: + +\let\ruledhss \hss +\let\ruledhfil \hfil +\let\ruledhfill \hfill +\let\ruledhfilll \hfilll +\let\ruledhfilneg \hfilneg +\let\ruledhfillneg \hfillneg +\let\ruledhfilllneg \hfilllneg +\let\ruledvss \vss +\let\ruledvfil \vfil +\let\ruledvfill \vfill +\let\ruledvfilll \vfilll +\let\ruledvfilneg \vfilneg +\let\ruledvfillneg \vfillneg +\let\ruledvfilllneg \vfilllneg +\let\ruledhskip \hskip +\let\ruledvskip \vskip +\let\ruledkern \kern +\let\ruledhglue \hglue +\let\ruledvglue \vglue +\let\ruledmkern \mkern +\let\ruledmskip \mskip +\let\ruledpenalty \penalty + +\protect \endinput diff --git a/tex/context/base/mkiv/type-ini.mklx b/tex/context/base/mkiv/type-ini.mklx index 1cb9bc2e5..f6dd7780d 100644 --- a/tex/context/base/mkiv/type-ini.mklx +++ b/tex/context/base/mkiv/type-ini.mklx @@ -27,8 +27,6 @@ \unprotect -\definesystemvariable {ts} % TypeScript / for the moment we keep this one - \newcount \c_font_typescripts_n_of_preloaded \newconditional\c_font_typescripts_quit \newtoks \c_font_typescripts_document @@ -69,7 +67,7 @@ \installmacrostack\m_font_typescripts_two \installmacrostack\m_font_typescripts_three -\let\t_font_typescripts\relax % uses as synonym +\mutable\let\t_font_typescripts\relax % uses as synonym \installcorenamespace{typescriptcache} \installcorenamespace{typescriptfiles} @@ -97,29 +95,41 @@ %D that one is also grouped and loading bodyfonts grouped is a real bad idea. %D Ignoring all spaces is also not a solution. So, our verdict is: no catch. -\unexpanded\def\starttypescriptcollection +\permanent\protected\def\starttypescriptcollection % redefined on the fly {\dosingleempty\font_typescripts_collection_start} \def\font_typescripts_collection_start[#tag]% {} -\let\stoptypescriptcollection\relax +\permanent\let\stoptypescriptcollection\relax + +\permanent\protected\def\usetypescriptfile[#filename]% + {\iftok{#filename}{\v!reset}% + \let\typescriptfiles\empty + \else + \splitfilename{#filename}% + \addtocommalist\splitoffbase\typescriptfiles + \fi} + +\installmacrostack\stoptypescript -\unexpanded\def\usetypescriptfile[#filename]% - {\doifelse{#filename}\v!reset - {\let\typescriptfiles\empty} - {\splitfilename{#filename}% - \addtocommalist\splitoffbase\typescriptfiles}} +% \permanent\protected\def\usetypescript {\dotripleempty\font_typescripts_use_one} +% \permanent\protected\def\usetypescriptexact{\dotripleempty\font_typescripts_use_two} +% +% \def\font_typescripts_use_one{\let\typescriptmethod\plusone\font_typescripts_use} +% \def\font_typescripts_use_two{\let\typescriptmethod\plustwo\font_typescripts_use} +% +% \protected\def\font_typescripts_use[#one][#two][#three]% -\unexpanded\def\usetypescript {\dotripleempty\font_typescripts_use_one} -\unexpanded\def\usetypescriptexact{\dotripleempty\font_typescripts_use_two} +% todo: just pass the method ... also further on then .. first test \def\font_typescripts_use_one{\let\typescriptmethod\plusone\font_typescripts_use} \def\font_typescripts_use_two{\let\typescriptmethod\plustwo\font_typescripts_use} -\installmacrostack\stoptypescript +\permanent\protected\def\usetypescript {\font_typescripts_use_one} +\permanent\protected\def\usetypescriptexact{\font_typescripts_use_two} -\unexpanded\def\font_typescripts_use[#one][#two][#three]% +\tolerant\protected\def\font_typescripts_use[#one]#spacer[#two]#spacer[#three]% {\push_macro_m_font_typescripts_one \push_macro_m_font_typescripts_two \push_macro_m_font_typescripts_three @@ -159,20 +169,20 @@ \let\font_typescripts_use_inline\font_typescripts_use_display -\unexpanded\def\preloadtypescripts +\permanent\protected\def\preloadtypescripts {\ifproductionrun\settrue\c_font_typescripts_preload\fi} \prependtoks \preloadtypescripts \to \everyjob -\unexpanded\def\loadtypescriptfile[#1]% +\permanent\protected\def\loadtypescriptfile[#1]% {\push_macro_typescriptstate \let\typescriptstate\plustwo % assumes 2 at the outer level \clf_loadtypescriptfile{#1}% \pop_macro_typescriptstate} -\unexpanded\def\loadfoundtypescriptfile#1#2% name foundname / not a user command +\permanent\protected\def\loadfoundtypescriptfile#1#2% name foundname / not a user command {\startreadingfile \unprotect \pushendofline @@ -181,17 +191,17 @@ \protect \stopreadingfile} -\unexpanded\def\quittypescriptscanning +\permanent\protected\def\quittypescriptscanning {\settrue\c_font_typescripts_quit} % public -\def\font_typescripts_start_store#definitions\stoptypescript +\permanent\protected\def\font_typescripts_start_store#definitions\stoptypescript {\global\advance\c_font_typescripts_n_of_preloaded\plusone \expandafter\normalgdef\csname\??typescriptcache\the\c_font_typescripts_n_of_preloaded\endcsname {\starttypescript#definitions\stoptypescript}% \gtoksapp\t_font_typescripts\expandafter {\csname\??typescriptcache\the\c_font_typescripts_n_of_preloaded\endcsname}} -\def\font_typescripts_collection_start_store#definitions\stoptypescriptcollection +\permanent\protected\def\font_typescripts_collection_start_store#definitions\stoptypescriptcollection {\global\advance\c_font_typescripts_n_of_preloaded\plusone \expandafter\normalgdef\csname\??typescriptcache\the\c_font_typescripts_n_of_preloaded\endcsname {\starttypescriptcollection#definitions\stoptypescriptcollection}% @@ -215,6 +225,7 @@ \def\font_typescript_process_typescript_file_and_store {\expandafter\let\expandafter\t_font_typescripts\csname\??typescriptfiles\currenttypefile\endcsname +% {\aliased\expandafter\let\expandafter\t_font_typescripts\csname\??typescriptfiles\currenttypefile\endcsname \ifx\t_font_typescripts\relax \font_typescript_process_typescript_store_indeed \fi @@ -223,8 +234,8 @@ \def\font_typescript_process_typescript_store_indeed {\newtoks\t_font_typescripts % is \relaxed elsewhere \begingroup - \let\starttypescript \font_typescripts_start_store - \let\starttypescriptcollection\font_typescripts_collection_start_store + \enforced\let\starttypescript \font_typescripts_start_store + \enforced\let\starttypescriptcollection\font_typescripts_collection_start_store \font_typescript_process_typescript_file \endgroup \expandafter\let\csname\??typescriptfiles\currenttypefile\endcsname\t_font_typescripts} @@ -232,10 +243,7 @@ \def\font_typescript_process_typescript_file {\clf_doprocesstypescriptfile{\currenttypefile}} -\unexpanded\def\usetypescriptonce - {\dotripleempty\font_typescripts_use_once} - -\def\font_typescripts_use_once[#one][#two][#three]% +\permanent\tolerant\protected\def\usetypescriptonce[#one]#spacer[#two]#spacer[#three]% {\ifcsname\??typescriptonce#one:#two:#three\endcsname \writestatus\m!fonts{once (#one) (#two) (#three)}% \else @@ -245,13 +253,10 @@ % \definetypescriptsynonym[lbr][cmr] -\unexpanded\def\definetypescriptsynonym - {\dodoubleempty\font_typescripts_synonym_define} - -\def\font_typescripts_synonym_define[#name][#synonym]% +\permanent\tolerant\protected\def\definetypescriptsynonym[#name]#spacer[#synonym]% {\ifsecondargument\setevalue{\??typescriptsynonyms#name}{#synonym}\fi} -\def\truetypescript#name% recursive so no \lastnamedcs +\permanent\def\truetypescript#name% recursive so no \lastnamedcs {\ifcsname\??typescriptsynonyms#name\endcsname %\expandafter\truetypescript\csname\??typescriptsynonyms#name\endcsname \expandafter\truetypescript\lastnamedcs @@ -269,7 +274,7 @@ \settrue\c_font_typescripts_first_pass \to \everyjob -\unexpanded\def\starttypescript +\permanent\protected\def\starttypescript {\ifcase\typescriptstate % 0 = skip \expandafter\font_typescripts_start_gobble @@ -338,7 +343,7 @@ \def\font_typescripts_start_process_indeed {\push_macro_fontclass} -\unexpanded\def\stoptypescript +\permanent\protected\def\stoptypescript {\pop_macro_fontclass} \def\font_typescripts_check#asked#target#followup[#value]% script use value next @@ -366,23 +371,15 @@ \expandafter\font_typescripts_start_gobble \fi} -\def\extendtypescriptmatch +\permanent\protected\def\extendtypescriptmatch {\edef\m_font_typescripts_match{\m_font_typescripts_match\space[\m_font_typescripts_check]}} %D Map files will go away in \LUATEX, but till that happens we use stripped down %D support for loading them. -\unexpanded\def\loadmapfile{\dosingleempty\font_map_load_file} -\unexpanded\def\loadmapline{\dodoubleempty\font_map_load_line} - -\def\font_map_load_file[#filename]% - {\clf_loadmapfile{#filename}} - -\def\font_map_load_line[#kind][#data]% - {\clf_loadmapline{#kind}{#data}} - -\unexpanded\def\forgetmapfiles - {\clf_resetmapfiles} +\permanent\tolerant\protected\def\loadmapfile [#filename]{\clf_loadmapfile{#filename}} +\permanent\tolerant\protected\def\loadmapline [#kind]#spacer[#data]{\clf_loadmapline{#kind}{#data}} +\permanent \protected\def\forgetmapfiles {\clf_resetmapfiles} % \prependtoks % \loadmapfile[mkiv-base.map]% can't we preload this one? @@ -398,10 +395,13 @@ % \setupfontsynonym [\typescriptprefix\typescriptone] [handling=\typescriptthree] % \stoptypescript -\unexpanded\def\definetypescriptprefix - {\dodoubleargument\font_typescripts_define_prefix} +% \protected\def\definetypescriptprefix +% {\dodoubleargument\font_typescripts_define_prefix} +% +% \def\font_typescripts_define_prefix[#name][#prefix]% +% {\setgvalue{\??typescriptprefix#name}{#prefix}} % made global -\def\font_typescripts_define_prefix[#name][#prefix]% +\permanent\tolerant\protected\def\definetypescriptprefix[#name]#spacer[#prefix]% {\setgvalue{\??typescriptprefix#name}{#prefix}} % made global \def\typescriptprefix#name% @@ -417,9 +417,6 @@ % \definetypeface [joke] [rm] [serif] [lucida] [size] [settings] % \definetypeface [joke] [specification] -\unexpanded\def\definetypeface - {\dosixtupleargument\font_typefaces_define} - \appendtoks \font_helpers_reset_fontclass_math_families\fontclass \to \everybeforedefinetypeface @@ -428,7 +425,7 @@ \settrue\autotypescripts -\unexpanded\def\trycurrentfontclass#typeface% +\protected\def\trycurrentfontclass#typeface% {\ifconditional\autotypescripts \usetypescript[#typeface]% \ifcsname\??fontclassyes#typeface\endcsname @@ -451,16 +448,25 @@ %D Now we define: -\def\font_typefaces_define - {\iffifthargument - \expandafter\font_typefaces_define_a - \orelse\iffourthargument - \expandafter\font_typefaces_define_b - \orelse\ifthirdargument - \expandafter\font_typefaces_define_c - \else +\permanent\tolerant\protected\def\definetypeface[#name]#spacer[#style]#spacer[#fontshape]#spacer[#fontname]#spacer[#fontsize]#spacer[#settings]% + {\ifarguments + \expandafter\font_typefaces_define_e + \or \expandafter\font_typefaces_define_d - \fi} + \or + \expandafter\font_typefaces_define_d + \or + \expandafter\font_typefaces_define_c + \or + \expandafter\font_typefaces_define_b + \or + \expandafter\font_typefaces_define_a + \or + \expandafter\font_typefaces_define_a + \fi[#name][#style][#fontshape][#fontname][#fontsize][#settings]} + +\def\font_typefaces_define_e[#name][#style][#fontshape][#fontname][#fontsize][#settings]% + {} \def\font_typefaces_define_a[#name][#style][#fontshape][#fontname][#fontsize][#settings]% {\iftracetypescripts\writestatus\m!fonts{define: [#name] [#style] [#fontshape] [#fontname]}\fi @@ -477,13 +483,13 @@ \font_typescripts_use_one[#fontshape][#fontsize][\s!size]% \font_typefaces_defining_stop} -\def\font_typefaces_define_b[#name][#style][#fontshape][#fontname][#dummya][#dummyb]% - {\font_typefaces_define_a[#name][#style][#fontshape][#fontname][\s!default][#dummyb]} +\def\font_typefaces_define_b[#name][#style][#fontshape][#fontname][#discard][#discard]% + {\font_typefaces_define_a[#name][#style][#fontshape][#fontname][\s!default][#discard]} -\def\font_typefaces_define_c[#name][#style][#dummya][#dummyb][#dummyc][#dummyd]% +\def\font_typefaces_define_c[#name][#style][#discard][#discard][#discard][#discard]% {\font_typefaces_define_indeed[#name][#style]} -\def\font_typefaces_define_d[#name][#specification][#dummya][#dummyb][#dummyc][#dummyd]% use definitions in lfg file +\def\font_typefaces_define_d[#name][#specification][#discard][#discard][#discard][#discard]% use definitions in lfg file {\clf_definetypeface{#name}{#specification}} \def\font_typefaces_define_indeed[#name][#style]% saveguard against redefinition @@ -496,21 +502,62 @@ \setugvalue{#name}{\switchtotypeface[#name][#style]}% \fi}} +% needs testing first ... let'd do it stepwise + +% \permanent\tolerant\protected\def\definetypeface[#name]#spacer[#style]#spacer[#fontshape]#spacer[#fontname]#spacer[#fontsize]#spacer[#settings]% +% {\ifarguments +% \or +% \clf_definetypeface{#name}{#specification}% +% \or +% \clf_definetypeface{#name}{#specification}% +% \or +% \font_typefaces_define_simplex[#name][#style]% +% \or +% \font_typefaces_define_complex[#name][#style][#fontshape][#fontname][\s!default][#discard]% +% \else +% \font_typefaces_define_complex[#name][#style][#fontshape][#fontname][#fontsize][#settings]% +% \fi} +% +% \def\font_typefaces_define_complex[#name][#style][#fontshape][#fontname][#fontsize][#settings]% +% {\iftracetypescripts\writestatus\m!fonts{define: [#name] [#style] [#fontshape] [#fontname]}\fi +% \font_typefaces_define_simplex[#name][#style]% +% \font_typefaces_defining_start{#name}{#style}{#settings}% +% \font_typescripts_use_one[#fontshape][#fontname][\s!name]% [\s!name,\s!default]% +% \iftypescriptfound +% % we're okay +% \orelse\ifconditional\autotypescripts +% \iftracetypescripts\writestatus\m!fonts{auto load typescript file 2: [#fontname]}\fi +% \usetypescriptfile[#fontname]% +% \font_typescripts_use_one[#fontshape][#fontname][\s!name]% [\s!name,\s!default]% +% \fi +% \font_typescripts_use_one[#fontshape][#fontsize][\s!size]% +% \font_typefaces_defining_stop} +% +% \def\font_typefaces_define_simplex[#name][#style]% saveguard against redefinition +% {\doifsomething{#name} +% {\ifcsname\??typescriptdefaultstyles#name\endcsname \else +% \registerfontclass{#name}% +% \setxvalue{\??typescriptdefaultstyles#name}{#style}% +% \fi +% \ifcsname#name\endcsname \else +% \setugvalue{#name}{\switchtotypeface[#name][#style]}% +% \fi}} + \def\font_typefaces_defining_start#name#style#settings% - {\let\@@tsrscale \!!plusone % as we push/pop - \let\@@tsfeatures \empty - \let\@@tsfallbacks \empty - \let\@@tsgoodies \empty - \let\@@tsdirection \empty - \let\@@tsdesignsize\empty - \geteparameters[\??ts][#settings]% todo raw + {\let\m_ts_rscale \!!plusone % as we push/pop + \let\m_ts_features \empty + \let\m_ts_fallbacks \empty + \let\m_ts_goodies \empty + \let\m_ts_direction \empty + \let\m_ts_designsize\empty + \geteparameters[m_ts_][#settings]% todo raw ... no need for key interpretation \push_macro_fontclass \push_macro_fontclassstyle \setcurrentfontclass{#name}% - \savefontclassparameters{#style}\@@tsrscale\@@tsfeatures\@@tsfallbacks\@@tsgoodies\@@tsdesignsize\@@tsdirection + \savefontclassparameters{#style}\m_ts_rscale\m_ts_features\m_ts_fallbacks\m_ts_goodies\m_ts_designsize\m_ts_direction \the\everybeforedefinetypeface} -\def\tsvar#key#default% undocumented and unofficial +\permanent\def\tsvar#key#default% undocumented and unofficial {\expandafter\ifempty\csname\??ts#key\endcsname #default% \else @@ -528,39 +575,77 @@ \font_typescripts_use_one[#fontshape][#fontsize][\s!size]% \font_typefaces_defining_stop} -\unexpanded\def\setuptypeface% [class] [settings] - {\dodoubleempty\font_typefaces_setup} - -\unexpanded\def\switchtotypeface% [class] [settings] - {\dodoubleempty\font_typefaces_switch} +% \protected\def\setuptypeface% [class] [settings] +% {\dodoubleempty\font_typefaces_setup} +% +% \protected\def\switchtotypeface% [class] [settings] +% {\dodoubleempty\font_typefaces_switch} +% +% \def\font_typefaces_setup[#class][#settings]% +% {\setcurrentfontclass{#class}% +% \let\globalfontclass\fontclass +% \ifsecondargument +% \setupbodyfont[#settings]% +% \orelse\ifempty\fontclass +% \setupbodyfont[\s!rm]% +% \orelse\ifcsname\??typescriptdefaultstyles\fontclass\endcsname +% %\setupbodyfont[\csname\??typescriptdefaultstyles\fontclass\endcsname]% +% \expandafter\setupbodyfont\expandafter[\lastnamedcs]% +% \else +% \setupbodyfont[\s!rm]% +% \fi +% \ifmmode\mr\else\tf\fi} % needed ? +% +% \def\font_typefaces_switch[#class]#spacer[#settings]% +% {\setcurrentfontclass{#class}% +% \let\globalfontclass\globalfontclass +% \ifsecondargument +% \switchtobodyfont[#settings]% +% \orelse\ifempty\fontclass +% \switchtobodyfont[\s!rm]% +% \orelse\ifcsname\??typescriptdefaultstyles\fontclass\endcsname +% %\switchtobodyfont[\csname\??typescriptdefaultstyles\fontclass\endcsname]% +% \expandafter\switchtobodyfont\expandafter[\lastnamedcs]% +% \else +% \switchtobodyfont[\s!rm]% +% \fi +% \ifmmode\mr\else\tf\fi} % needed ? -\def\font_typefaces_setup[#class][#settings]% - {\setcurrentfontclass{#class}% - \let\globalfontclass\fontclass - \ifsecondargument +\permanent\tolerant\protected\def\setuptypeface[#class]#spacer[#settings]% + {\ifarguments + \or + \setcurrentfontclass{#class}% + \let\globalfontclass\fontclass + \ifempty\fontclass + \setupbodyfont[\s!rm]% + \orelse\ifcsname\??typescriptdefaultstyles\fontclass\endcsname + \expandafter\setupbodyfont\expandafter[\lastnamedcs]% + \else + \setupbodyfont[\s!rm]% + \fi + \or + \setcurrentfontclass{#class}% + \let\globalfontclass\fontclass \setupbodyfont[#settings]% - \orelse\ifempty\fontclass - \setupbodyfont[\s!rm]% - \orelse\ifcsname\??typescriptdefaultstyles\fontclass\endcsname - %\setupbodyfont[\csname\??typescriptdefaultstyles\fontclass\endcsname]% - \expandafter\setupbodyfont\expandafter[\lastnamedcs]% - \else - \setupbodyfont[\s!rm]% \fi \ifmmode\mr\else\tf\fi} % needed ? -\def\font_typefaces_switch[#class][#settings]% - {\setcurrentfontclass{#class}% - \let\globalfontclass\globalfontclass - \ifsecondargument - \switchtobodyfont[#settings]% - \orelse\ifempty\fontclass - \switchtobodyfont[\s!rm]% - \orelse\ifcsname\??typescriptdefaultstyles\fontclass\endcsname - %\switchtobodyfont[\csname\??typescriptdefaultstyles\fontclass\endcsname]% - \expandafter\switchtobodyfont\expandafter[\lastnamedcs]% - \else - \switchtobodyfont[\s!rm]% +\permanent\tolerant\protected\def\switchtotypeface[#class]#spacer[#settings]% + {\ifarguments + \or + \setcurrentfontclass{#class}% + \let\globalfontclass\globalfontclass + \ifempty\fontclass + \switchtobodyfont[\s!rm]% + \orelse\ifcsname\??typescriptdefaultstyles\fontclass\endcsname + \expandafter\switchtobodyfont\expandafter[\lastnamedcs]% + \else + \switchtobodyfont[\s!rm]% + \fi + \or + \setcurrentfontclass{#class}% + \let\globalfontclass\globalfontclass + \switchtobodyfont[#settings]% \fi \ifmmode\mr\else\tf\fi} % needed ? @@ -573,16 +658,14 @@ %D \inherittypeface[palatino] % == [rm,ss,tt,mm] %D \stoptyping -\unexpanded\def\inherittypeface - {\dotripleempty\font_typescripts_inherit_indeed} - -\def\font_typescripts_inherit_indeed[#name][#styles][#parentclass]% - {\doifelsenothing{#styles} - {\font_typescripts_inherit_indeed[#name][\s!rm,\s!ss,\s!tt,\s!mm][\fontclass]} - {\doifnot{#name}{#parentclass} - {\glet\font_typescripts_inherit_check\font_typescripts_inherit_check_indeed - \def\font_typescripts_inherit_check_step#style{\setevalue{\??typescriptinheritances#name:#style}{#parentclass}}% - \processcommalist[#styles]\font_typescripts_inherit_check_step}}} +\permanent\tolerant\protected\def\inherittypeface[#name]#spacer[#styles]#spacer[#parentclass]% + {\iftok{#styles}\emptytoks + \font_typescripts_inherit_indeed[#name][\s!rm,\s!ss,\s!tt,\s!mm][\fontclass]% + \orelse\iftok{#name}{#parentclass}\else + \glet\font_typescripts_inherit_check\font_typescripts_inherit_check_indeed + \def\font_typescripts_inherit_check_step#style{\setevalue{\??typescriptinheritances#name:#style}{#parentclass}}% + \processcommalist[#styles]\font_typescripts_inherit_check_step + \fi} \let\font_typescripts_inherit_check_step\relax @@ -612,7 +695,7 @@ \expandafter\ifx\csname\??typescriptdefaultstyles\fontclass\endcsname\s!tt \s!Mono \else \s!Serif \fi\fi\fi} -\unexpanded\def\font_helpers_set_fontstyle_of_fontclass +\protected\def\font_helpers_set_fontstyle_of_fontclass {\ifempty\fontclass \let\fontstyle\s!rm \orelse\ifcsname\??typescriptdefaultstyles\fontclass\endcsname diff --git a/tex/context/base/mkiv/typo-bld.lua b/tex/context/base/mkiv/typo-bld.lua index 6874d385a..269386e6c 100644 --- a/tex/context/base/mkiv/typo-bld.lua +++ b/tex/context/base/mkiv/typo-bld.lua @@ -242,31 +242,65 @@ end -- this will be split into contribute_filter for these 4 so at some point -- the check can go away -function builders.buildpage_filter(groupcode) - -- the next check saves 1% runtime on 1000 tufte pages - local head = texlists.contrib_head - local done = false - if head then - -- called quite often ... maybe time to remove timing - starttiming(builders) - if trace_page_builder then - report(groupcode,head) +if CONTEXTLMTXMODE > 0 then + + -- Todo: contrib_head can be any head (kind of) not per se the page one so maybe I will + -- intercept that in the engine with page_contribute_head or so. + + function builders.buildpage_filter(groupcode) + local head = texlists.contribute_head + if head then + local done = false + -- called quite often ... maybe time to remove timing + starttiming(builders) + if trace_page_builder then + report(groupcode,head) + end + head, done = pageactions(head,groupcode) + stoptiming(builders) + -- -- doesn't work here (not passed on?) + -- texset("pagegoal,texget("vsize") - texgetdimen("d_page_floats_inserted_top") - texgetdimen("d_page_floats_inserted_bottom") + texlists.contribute_head = head or nil -- needs checking + -- tex.setlist("contribute_head",head,head and nodes.tail(head)) + return done and head or true -- no return value needed + else + -- happens quite often + if trace_page_builder then + report(groupcode) + end + -- return nil, false -- no return value needed + return nil end - head, done = pageactions(head,groupcode) - stoptiming(builders) - -- -- doesn't work here (not passed on?) - -- texset("pagegoal,texget("vsize") - texgetdimen("d_page_floats_inserted_top") - texgetdimen("d_page_floats_inserted_bottom") - texlists.contrib_head = head or nil -- needs checking - -- tex.setlist("contrib_head",head,head and nodes.tail(head)) - return done and head or true -- no return value needed - else - -- happens quite often - if trace_page_builder then - report(groupcode) + end + +else + + function builders.buildpage_filter(groupcode) + local head = texlists.contrib_head + if head then + local done = false + -- called quite often ... maybe time to remove timing + starttiming(builders) + if trace_page_builder then + report(groupcode,head) + end + head, done = pageactions(head,groupcode) + stoptiming(builders) + -- -- doesn't work here (not passed on?) + -- texset("pagegoal,texget("vsize") - texgetdimen("d_page_floats_inserted_top") - texgetdimen("d_page_floats_inserted_bottom") + texlists.contrib_head = head or nil -- needs checking + -- tex.setlist("contrib_head",head,head and nodes.tail(head)) + return done and head or true -- no return value needed + else + -- happens quite often + if trace_page_builder then + report(groupcode) + end + -- return nil, false -- no return value needed + return nil end --- return nil, false -- no return value needed - return nil end + end registercallback('vpack_filter', builders.vpack_filter, "vertical spacing etc") diff --git a/tex/context/base/mkiv/typo-brk.lua b/tex/context/base/mkiv/typo-brk.lua index d670c5319..89eb7e52d 100644 --- a/tex/context/base/mkiv/typo-brk.lua +++ b/tex/context/base/mkiv/typo-brk.lua @@ -33,7 +33,7 @@ local getid = nuts.getid ----- getattr = nuts.getattr local getattrlist = nuts.getattrlist local takeattr = nuts.takeattr -local getlang = nuts.getlang +local getlanguage = nuts.getlanguage local isglyph = nuts.isglyph local setattr = nuts.setattr @@ -168,7 +168,7 @@ methods[2] = function(head,start) -- ( => (- head, start, replace = remove_node(head,start) local post = copy_node(replace) local hyphen = copy_node(post) - setchar(hyphen,languages.prehyphenchar(getlang(post))) + setchar(hyphen,languages.prehyphenchar(getlanguage(post))) setlink(post,hyphen) head, start = insert_node_before(head,start,new_disc(nil,post,replace)) setattrlist(start,replace) @@ -184,7 +184,7 @@ methods[3] = function(head,start) -- ) => -) head, start, replace = remove_node(head,start) local pre = copy_node(replace) local hyphen = copy_node(pre) - setchar(hyphen,languages.prehyphenchar(getlang(pre))) + setchar(hyphen,languages.prehyphenchar(getlanguage(pre))) setlink(hyphen,pre) head, start = insert_node_before(head,start,new_disc(hyphen,nil,replace)) -- so not pre ! setattrlist(start,tmp) @@ -264,7 +264,7 @@ function breakpoints.handler(head) -- setattr(current,a_breakpoints,unsetvalue) -- should not be needed -- for now we collect but when found ok we can move the handler here -- although it saves nothing in terms of performance - local lang = getlang(current) + local lang = getlanguage(current) local smap = lang and lang >= 0 and lang < 0x7FFF and (cmap[languages.numbers[lang]] or cmap[""]) if smap then local skip = smap.skip @@ -322,7 +322,7 @@ function breakpoints.handler(head) local cmap = data[3] local smap = data[4] -- we do a sanity check for language - -- local lang = getlang(start) + -- local lang = getlanguage(start) -- local smap = lang and lang >= 0 and lang < 0x7FFF and (cmap[numbers[lang]] or cmap[""]) -- if smap then local nleft = smap.nleft diff --git a/tex/context/base/mkiv/typo-chr.lua b/tex/context/base/mkiv/typo-chr.lua index 7a0f1fd75..bb3883b33 100644 --- a/tex/context/base/mkiv/typo-chr.lua +++ b/tex/context/base/mkiv/typo-chr.lua @@ -91,7 +91,7 @@ local boundarycodes = nodes.boundarycodes local subtypes = nodes.subtypes local glyph_code = nodecodes.glyph -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local boundary_code = nodecodes.boundary local wordboundary_code = boundarycodes.word @@ -175,7 +175,7 @@ local function pickup(head,tail,str) while true do local prev = first.prev if prev and prev[a_marked] == attr then - if prev.id == localpar_code then -- and start_of_par(prev) + if prev.id == par_code then -- and start_of_par(prev) break else first = prev diff --git a/tex/context/base/mkiv/typo-dha.lua b/tex/context/base/mkiv/typo-dha.lua index 7be74caa1..ac72ae394 100644 --- a/tex/context/base/mkiv/typo-dha.lua +++ b/tex/context/base/mkiv/typo-dha.lua @@ -78,7 +78,7 @@ local math_code = nodecodes.math local kern_code = nodecodes.kern local glue_code = nodecodes.glue local dir_code = nodecodes.dir -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local dirvalues = nodes.dirvalues local lefttoright_code = dirvalues.lefttoright @@ -332,7 +332,7 @@ local function process(start) end textdir = autodir setprop(current,"direction",true) - elseif id == localpar_code and start_of_par(current) then + elseif id == par_code and start_of_par(current) then local direction = getdirection(current) if direction == righttoleft_code then autodir = -1 diff --git a/tex/context/base/mkiv/typo-dir.mkxl b/tex/context/base/mkiv/typo-dir.mkxl index 577434e56..e9c7e47d6 100644 --- a/tex/context/base/mkiv/typo-dir.mkxl +++ b/tex/context/base/mkiv/typo-dir.mkxl @@ -33,18 +33,18 @@ \installsimplecommandhandler \??directions {directions} \??directions % no \define... yet -\edef\lefttorightmark{\normalUchar"200E} \let\lrm\lefttorightmark -\edef\righttoleftmark{\normalUchar"200F} \let\rlm\righttoleftmark +\permanent\edef\lefttorightmark{\normalUchar"200E} \let\lrm\lefttorightmark % expandable +\permanent\edef\righttoleftmark{\normalUchar"200F} \let\rlm\righttoleftmark % expandable -\unexpanded\def\setdirection[#1]% todo: symbolic names +\permanent\protected\def\setdirection[#1]% todo: symbolic names {\clf_setdirection#1\relax} -% \unexpanded\def\resetdirection +% \protected\def\resetdirection % {\clf_setdirection\zerocount} % % is in fact: -\unexpanded\def\resetdirection +\protected\def\resetdirection {\c_attr_directions\attributeunsetvalue} \newconstant\directionsbidimode % this one might become pivate @@ -100,16 +100,16 @@ \c!break=\v!both, % experimental value, maybe \v!no will be default (bad name too) \c!fences=\v!yes] -\unexpanded\edef\bidilre{\normalUchar"202A} -\unexpanded\edef\bidirle{\normalUchar"202B} -\unexpanded\edef\bidipop{\normalUchar"202C} -\unexpanded\edef\bidilro{\normalUchar"202D} -\unexpanded\edef\bidirlo{\normalUchar"202E} +\permanent\protected\edef\bidilre{\normalUchar"202A} +\permanent\protected\edef\bidirle{\normalUchar"202B} +\permanent\protected\edef\bidipop{\normalUchar"202C} +\permanent\protected\edef\bidilro{\normalUchar"202D} +\permanent\protected\edef\bidirlo{\normalUchar"202E} -\unexpanded\def\dirlre{\ifcase\directionsbidimode\or\bidilre\or\textdirection\directionlefttoright\fi} -\unexpanded\def\dirrle{\ifcase\directionsbidimode\or\bidirle\or\textdirection\directionrighttoleft\fi} -\unexpanded\def\dirlro{\ifcase\directionsbidimode\or\bidilro\or\setdirection[3]\fi} -\unexpanded\def\dirrlo{\ifcase\directionsbidimode\or\bidirlo\or\setdirection[4]\fi} +\permanent\protected\def\dirlre{\ifcase\directionsbidimode\or\bidilre\or\textdirection\directionlefttoright\fi} +\permanent\protected\def\dirrle{\ifcase\directionsbidimode\or\bidirle\or\textdirection\directionrighttoleft\fi} +\permanent\protected\def\dirlro{\ifcase\directionsbidimode\or\bidilro\or\setdirection[3]\fi} +\permanent\protected\def\dirrlo{\ifcase\directionsbidimode\or\bidirlo\or\setdirection[4]\fi} % for the moment: \setdirection[\plusone] @@ -143,7 +143,7 @@ % end % \stopluacode % -% \unexpanded\def\biditest#1#2#3% font text raw +% \protected\def\biditest#1#2#3% font text raw % {\dontleavehmode\hbox % {\framed[offset=overlay]{\tttf#2}\quad % \enabletrackers[typesetters.directions]% diff --git a/tex/context/base/mkiv/typo-drp.lua b/tex/context/base/mkiv/typo-drp.lua index ad4a80a57..12864e52d 100644 --- a/tex/context/base/mkiv/typo-drp.lua +++ b/tex/context/base/mkiv/typo-drp.lua @@ -82,7 +82,7 @@ local glyph_code = nodecodes.glyph local hlist_code = nodecodes.hlist local glue_code = nodecodes.glue local kern_code = nodecodes.kern -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local actions = { } initials.actions = actions @@ -270,7 +270,7 @@ actions[v_default] = function(head,setting) end -- We pack so that successive handling cannot touch the dropped cap. Packaging -- in a hlist is also needed because we cannot locally adapt e.g. parindent (not - -- yet stored in with localpar). + -- yet stored in with par). local prev = getprev(first) local next = getnext(last) -- @@ -339,7 +339,7 @@ end -- we can count ... when all done, we can disable ... function initials.handler(head) - if getid(head) == localpar_code and start_of_par(head) then + if getid(head) == par_code and start_of_par(head) then local settings = getprop(head,a_initial) if settings then disableaction("processors","typesetters.initials.handler") diff --git a/tex/context/base/mkiv/typo-dua.lua b/tex/context/base/mkiv/typo-dua.lua index 92cca7ae4..5e1d4c109 100644 --- a/tex/context/base/mkiv/typo-dua.lua +++ b/tex/context/base/mkiv/typo-dua.lua @@ -99,7 +99,7 @@ local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local math_code = nodecodes.math local dir_code = nodecodes.dir -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local parfillskip_code = gluecodes.parfillskip @@ -337,7 +337,7 @@ local function get_baselevel(head,list,size,direction) -- This is an adapted version: if direction == lefttoright_code or direction == righttoleft_code then return direction, true - elseif getid(head) == localpar_code and start_of_par(head) then + elseif getid(head) == par_code and start_of_par(head) then direction = getdirection(head) if direction == lefttoright_code or direction == righttoleft_code then return direction, true @@ -769,8 +769,8 @@ local function apply_to_list(list,size,head,pardir) enddir = false end elseif begindir then - if id == localpar_code and start_of_par(current) then - -- localpar should always be the 1st node + if id == par_code and start_of_par(current) then + -- par should always be the 1st node local d = new_direction(begindir) -- setprop(d,"directions",true) -- setattrlist(d,current) diff --git a/tex/context/base/mkiv/typo-dub.lua b/tex/context/base/mkiv/typo-dub.lua index ccbcc0a06..88b3361da 100644 --- a/tex/context/base/mkiv/typo-dub.lua +++ b/tex/context/base/mkiv/typo-dub.lua @@ -87,7 +87,7 @@ local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist local math_code = nodecodes.math local dir_code = nodecodes.dir -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local parfillskip_code = gluecodes.parfillskip @@ -398,7 +398,7 @@ end local function get_baselevel(head,list,size,direction) if direction == lefttoright_code or direction == righttoleft_code then return direction, true - elseif getid(head) == localpar_code and start_of_par(head) then + elseif getid(head) == par_code and start_of_par(head) then direction = getdirection(head) if direction == lefttoright_code or direction == righttoleft_code then return direction, true @@ -902,8 +902,8 @@ local function apply_to_list(list,size,head,pardir) enddir = false end elseif begindir then - if id == localpar_code and start_of_par(current) then - -- localpar should always be the 1st node + if id == par_code and start_of_par(current) then + -- par should always be the 1st node local d = new_direction(begindir) -- setprop(d,"directions",true) -- setattrlist(d,current) diff --git a/tex/context/base/mkiv/typo-duc.lua b/tex/context/base/mkiv/typo-duc.lua index a1ee14a28..6e4f27de2 100644 --- a/tex/context/base/mkiv/typo-duc.lua +++ b/tex/context/base/mkiv/typo-duc.lua @@ -51,70 +51,73 @@ local utfchar = utf.char local setmetatable = setmetatable local formatters = string.formatters -local directiondata = characters.directions -local mirrordata = characters.mirrors -local textclassdata = characters.textclasses +local directiondata = characters.directions +local mirrordata = characters.mirrors +local textclassdata = characters.textclasses -local nuts = nodes.nuts +local nuts = nodes.nuts -local getnext = nuts.getnext -local getid = nuts.getid -local getsubtype = nuts.getsubtype -local getlist = nuts.getlist -local getchar = nuts.getchar -local getattr = nuts.getattr -local getprop = nuts.getprop -local getdirection = nuts.getdirection -local isglyph = nuts.isglyph +local getnext = nuts.getnext +local getprev = nuts.getprev +local getid = nuts.getid +local getsubtype = nuts.getsubtype +local getlist = nuts.getlist +local getchar = nuts.getchar +local getattr = nuts.getattr +local getprop = nuts.getprop +local getdirection = nuts.getdirection +local isglyph = nuts.isglyph -local setprop = nuts.setprop -local setchar = nuts.setchar -local setdirection = nuts.setdirection -local setattrlist = nuts.setattrlist +local setprop = nuts.setprop +local setchar = nuts.setchar +local setdirection = nuts.setdirection +local setattrlist = nuts.setattrlist -local properties = nodes.properties.data +local properties = nodes.properties.data -local remove_node = nuts.remove -local insert_node_after = nuts.insert_after -local insert_node_before = nuts.insert_before -local start_of_par = nuts.start_of_par +local remove_node = nuts.remove +local insert_node_after = nuts.insert_after +local insert_node_before = nuts.insert_before +local start_of_par = nuts.start_of_par -local nodepool = nuts.pool -local new_direction = nodepool.direction +local nodepool = nuts.pool +local new_direction = nodepool.direction -local nodecodes = nodes.nodecodes -local gluecodes = nodes.gluecodes +local nodecodes = nodes.nodecodes +local gluecodes = nodes.gluecodes -local glyph_code = nodecodes.glyph -local glue_code = nodecodes.glue -local hlist_code = nodecodes.hlist -local vlist_code = nodecodes.vlist -local math_code = nodecodes.math -local dir_code = nodecodes.dir -local localpar_code = nodecodes.localpar +local glyph_code = nodecodes.glyph +local glue_code = nodecodes.glue +local hlist_code = nodecodes.hlist +local vlist_code = nodecodes.vlist +local math_code = nodecodes.math +local dir_code = nodecodes.dir +local par_code = nodecodes.par +local penalty_code = nodecodes.penalty -local parfillskip_code = gluecodes.parfillskip +local parfillskip_code = gluecodes.parfillskip +local parfillleftskip_code = gluecodes.parfillleftskip -local dirvalues = nodes.dirvalues -local lefttoright_code = dirvalues.lefttoright -local righttoleft_code = dirvalues.righttoleft +local dirvalues = nodes.dirvalues +local lefttoright_code = dirvalues.lefttoright +local righttoleft_code = dirvalues.righttoleft -local maximum_stack = 0xFF +local maximum_stack = 0xFF -local a_directions = attributes.private('directions') +local a_directions = attributes.private('directions') -local directions = typesetters.directions -local setcolor = directions.setcolor -local getfences = directions.getfences +local directions = typesetters.directions +local setcolor = directions.setcolor +local getfences = directions.getfences -local remove_controls = true directives.register("typesetters.directions.removecontrols",function(v) remove_controls = v end) ------ analyze_fences = true directives.register("typesetters.directions.analyzefences", function(v) analyze_fences = v end) +local remove_controls = true directives.register("typesetters.directions.removecontrols",function(v) remove_controls = v end) +----- analyze_fences = true directives.register("typesetters.directions.analyzefences", function(v) analyze_fences = v end) -local report_directions = logs.reporter("typesetting","directions three") +local report_directions = logs.reporter("typesetting","directions three") -local trace_directions = false trackers.register("typesetters.directions", function(v) trace_directions = v end) -local trace_details = false trackers.register("typesetters.directions.details", function(v) trace_details = v end) -local trace_list = false trackers.register("typesetters.directions.list", function(v) trace_list = v end) +local trace_directions = false trackers.register("typesetters.directions", function(v) trace_directions = v end) +local trace_details = false trackers.register("typesetters.directions.details", function(v) trace_details = v end) +local trace_list = false trackers.register("typesetters.directions.list", function(v) trace_list = v end) -- strong (old): -- @@ -413,7 +416,7 @@ end local function get_baselevel(head,list,size,direction) if direction == lefttoright_code or direction == righttoleft_code then return direction, true - elseif getid(head) == localpar_code and start_of_par(head) then + elseif getid(head) == par_code and start_of_par(head) then direction = getdirection(head) if direction == lefttoright_code or direction == righttoleft_code then return direction, true @@ -943,14 +946,25 @@ local function apply_to_list(list,size,head,pardir) elseif id == hlist_code or id == vlist_code then setdirection(current,pardir) -- is this really needed? elseif id == glue_code then + -- Maybe I should also fix dua and dub but on the other hand ... why? if enddir and getsubtype(current) == parfillskip_code then -- insert the last enddir before \parfillskip glue - head = insert_node_before(head,current,new_direction(enddir,true)) + local c = current + local p = getprev(c) + if p and getid(p) == glue_code and getsubtype(p) == parfillleftskip_code then + c = p + p = getprev(c) + end + if p and getid(p) == penalty_code then -- linepenalty + c = p + end + -- there is always a par nodes so head will stay + head = insert_node_before(head,c,new_direction(enddir,true)) enddir = false end elseif begindir then - if id == localpar_code and start_of_par(current) then - -- localpar should always be the 1st node + if id == par_code and start_of_par(current) then + -- par should always be the 1st node head, current = insert_node_after(head,current,new_direction(begindir)) begindir = nil end diff --git a/tex/context/base/mkiv/typo-fln.lua b/tex/context/base/mkiv/typo-fln.lua index c4a14846e..3941e65ef 100644 --- a/tex/context/base/mkiv/typo-fln.lua +++ b/tex/context/base/mkiv/typo-fln.lua @@ -56,7 +56,7 @@ local glyph_code = nodecodes.glyph local disc_code = nodecodes.disc local kern_code = nodecodes.kern local glue_code = nodecodes.glue -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local spaceskip_code = nodes.gluecodes.spaceskip @@ -372,7 +372,7 @@ end actions[v_default] = actions[v_line] function firstlines.handler(head) - if getid(head) == localpar_code and start_of_par(head) then + if getid(head) == par_code and start_of_par(head) then local settings = getprop(head,a_firstline) if settings then disableaction("processors","typesetters.firstlines.handler") diff --git a/tex/context/base/mkiv/typo-itc.mkvi b/tex/context/base/mkiv/typo-itc.mkvi index 312a2efb4..2bde63857 100644 --- a/tex/context/base/mkiv/typo-itc.mkvi +++ b/tex/context/base/mkiv/typo-itc.mkvi @@ -37,8 +37,12 @@ \unexpanded\def\italiccorrection {\ifnum\c_attr_italics<\plusone\normalitaliccorrection\fi} +\pushoverloadmode + \let\/\italiccorrection +\popoverloadmode + % 1 = end of word % 2 = end of word and end of a list diff --git a/tex/context/base/mkiv/typo-lig.mkxl b/tex/context/base/mkiv/typo-lig.mkxl new file mode 100644 index 000000000..e30774d8e --- /dev/null +++ b/tex/context/base/mkiv/typo-lig.mkxl @@ -0,0 +1,23 @@ +%D \module +%D [ file=typo-lig, +%D version=2014.12.01, +%D title=\CONTEXT\ Typesetting Macros, +%D subtitle=Ligatures, +%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 Typesetting Macros / Ligatures} + +%D The original macro was mostly used for testing an attribute that blocks ligatures +%D in the nodemode handler. In \LMTX\ things are done differently. + +\unprotect + +\permanent\protected\def\noligature{\dontleavehmode\groupedcommandcs\noligaturing\donothing} + +\protect \endinput diff --git a/tex/context/base/mkiv/typo-lin.lua b/tex/context/base/mkiv/typo-lin.lua index 95f9c13fa..4496bd44b 100644 --- a/tex/context/base/mkiv/typo-lin.lua +++ b/tex/context/base/mkiv/typo-lin.lua @@ -38,7 +38,7 @@ if not modules then modules = { } end modules ['typo-lin'] = { -- But, maybe there are good reasons for having just that anchor (mostly for educational purposes -- I guess.) -- --- At this stage the localpar node is no longer of any use so we remove it (each line has the +-- At this stage the par node is no longer of any use so we remove it (each line has the -- direction attached). We might at some point also strip the disc nodes as they no longer serve -- a purpose but that can better be a helper. Anchoring left has advantage of keeping page -- stream. @@ -65,7 +65,7 @@ local hlist_code = nodecodes.hlist local glue_code = nodecodes.glue local kern_code = nodecodes.kern local linelist_code = listcodes.line ------ localpar_code = nodecodes.localpar +----- par_code = nodecodes.par local leftskip_code = gluecodes.leftskip local rightskip_code = gluecodes.rightskip local parfillskip_code = gluecodes.parfillskip @@ -185,7 +185,7 @@ local function normalize(line,islocal) -- assumes prestine lines, nothing pre/ap id = getid(current) end -- no: - -- if id == localpar_code then + -- if id == par_code then -- head = remove_node(head,head,true) -- end local tail = find_tail(head) diff --git a/tex/context/base/mkiv/typo-mar.mkiv b/tex/context/base/mkiv/typo-mar.mkiv index 921f1f230..95010ab8e 100644 --- a/tex/context/base/mkiv/typo-mar.mkiv +++ b/tex/context/base/mkiv/typo-mar.mkiv @@ -161,8 +161,6 @@ % trialtypesetting: no need for margin stuff while trialing as % is has no dimensions -\definesystemconstant{margintext} - \newcount\nofmargintexts \definepagestate[\s!margintext] @@ -337,7 +335,7 @@ {\endgraf\ifhmode\space\fi} \appendtoks - \let\\\spaceorpar + \enforced\let\\\spaceorpar \to \everymargindatacontent %D Another one: diff --git a/tex/context/base/mkiv/typo-rub.lua b/tex/context/base/mkiv/typo-rub.lua index da63d7b64..6c6ab9a33 100644 --- a/tex/context/base/mkiv/typo-rub.lua +++ b/tex/context/base/mkiv/typo-rub.lua @@ -63,7 +63,7 @@ local glue_code = nodecodes.glue local penalty_code = nodecodes.penalty local hlist_code = nodecodes.hlist local vlist_code = nodecodes.vlist -local localpar_code = nodecodes.localpar +local par_code = nodecodes.par local dir_code = nodecodes.dir local kerncodes = nodes.kerncodes @@ -310,7 +310,7 @@ local function whatever(current) -- go on elseif id == hlist_code and getwidth(c) == 0 then -- go on - elseif id == whatsit_code or id == localpar_code or id == dir_code then + elseif id == whatsit_code or id == par_code or id == dir_code then -- go on else l = false diff --git a/tex/context/bib/mkii/bibl-ams.tex b/tex/context/bib/mkii/bibl-ams.tex index 37bcf253f..6adddbf3f 100644 --- a/tex/context/bib/mkii/bibl-ams.tex +++ b/tex/context/bib/mkii/bibl-ams.tex @@ -122,7 +122,7 @@ %D Some shortcuts. % ((#1(type\ |)chapter#2)|#3) - + \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{chapter\ }}{#2}% @@ -167,15 +167,16 @@ \insertcomment{}{.}{}% } -\newif\ifeditedbook +% \newif\ifeditedbook + \setuppublicationlayout[book]{% \insertauthors{}{ }{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \inserttitle {\unskip, \bgroup\it }% - {\/\egroup + {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume @@ -217,7 +218,7 @@ \setuppublicationlayout[inbook]{% \insertauthors{}{}{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \inserttitle {, \bgroup\it }% @@ -313,7 +314,7 @@ \insertarttitle{\bgroup\it }{\/\egroup }{}%% \inserttitle {\unskip, in \bgroup\it}% - {\egroup + {\egroup \inserteditors{, edited by }% {}% {}% @@ -337,11 +338,11 @@ \insertpages {\unskip, \fixpp.~} {\unskip.} - {\unskip.}% + {\unskip.}% }% { In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, \fixpp.~}{. }{\unskip. }% + \insertpages{\unskip, \fixpp.~}{. }{\unskip. }% }% \insertNote{ }{.}{}% } @@ -349,11 +350,11 @@ \setuppublicationlayout[proceedings]{% \inserteditors{}{, ed% \ifnum\getvalue{editor@num}> 1 s\fi., - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{ }{}}% \inserttitle {\bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% @@ -370,7 +371,7 @@ \insertpages {\unskip, p.~} {\insertcity{, }{}{}} - {\unskip\insertcity{, }{}{}}% + {\unskip\insertcity{, }{}{}}% }% {}% \insertNote{\unskip. }{.}{.}% @@ -433,5 +434,5 @@ \insertpubyear{ (unpublished, }{)}{ (unpublished)}% \insertpages{\unskip, }{ }{}% \insertNote{\unskip. }{.}{\unskip.}% -} +} \protect diff --git a/tex/context/bib/mkii/bibl-apa-de.tex b/tex/context/bib/mkii/bibl-apa-de.tex index afeebd260..60ef3113b 100644 --- a/tex/context/bib/mkii/bibl-apa-de.tex +++ b/tex/context/bib/mkii/bibl-apa-de.tex @@ -105,7 +105,7 @@ %D Some shortcuts. % ((#1(type\ |)chapter#2)|#3) - + \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{Kapitel\ }}{#2}% @@ -137,15 +137,15 @@ \insertcomment{}{.}{}% } -\newif\ifeditedbook +% \newif\ifeditedbook \setuppublicationlayout[book]{% \insertauthors{}{ }{\inserteditors{}{, Herausgeber% - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \insertpubyear{(}{). }{\unskip.}% \inserttitle {\bgroup\it }% - {\/\egroup + {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume @@ -184,7 +184,7 @@ \setuppublicationlayout[inbook]{% \insertauthors{}{ }{\inserteditors{}{, Herausgeber% - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \insertpubyear{(}{). }{\unskip.}% \inserttitle @@ -260,13 +260,13 @@ {, Herausgeber, }% {}% \bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, Nummer }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, Seiten~}{. }{\unskip. }% + \insertpages{\unskip, Seiten~}{. }{\unskip. }% \insertpublisher {}% {\insertedition{, }{ Auflage. }{. }}% @@ -274,7 +274,7 @@ }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, Seiten~}{. }{\unskip. }% + \insertpages{\unskip, Seiten~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } @@ -288,7 +288,7 @@ {, Herausgeber, }% {}% \bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, Nummer }{~in }{ }}% {}% @@ -297,7 +297,7 @@ \insertpages {\unskip, Seiten~} {\insertcity{, }{. }{. }} - {\unskip. }% + {\unskip. }% \insertorganization {}% {\insertpubname{, }{. }{. }}% @@ -305,26 +305,26 @@ }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, Seiten~}{. }{\unskip. }% + \insertpages{\unskip, Seiten~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } \setuppublicationlayout[proceedings]{% \inserteditors{}{, Herausgeber% - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{ }{}}% \insertpubyear{(}{). }{}% \inserttitle {\bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, Nummer }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, Seiten~}{\insertcity{, }{. }{. }} - {\unskip\insertcity{, }{. }{. }}% + {\unskip\insertcity{, }{. }{. }}% \insertorganization {}% {\insertpubname{, }{. }{. }}% diff --git a/tex/context/bib/mkii/bibl-apa-fr.tex b/tex/context/bib/mkii/bibl-apa-fr.tex index 654a36441..20216c9ba 100644 --- a/tex/context/bib/mkii/bibl-apa-fr.tex +++ b/tex/context/bib/mkii/bibl-apa-fr.tex @@ -105,7 +105,7 @@ %D Some shortcuts. % ((#1(type\ |)chapter#2)|#3) - + \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{chapitre\ }}{#2}% @@ -137,16 +137,16 @@ \insertcomment{}{.}{}% } -\newif\ifeditedbook +% \newif\ifeditedbook \setuppublicationlayout[book]{% \insertauthors{}{ }{\inserteditors{}{, \'editeur% \ifnum\getvalue{editor@num}> 1 s\fi - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \insertpubyear{(}{). }{\unskip.}% \inserttitle {\bgroup\it }% - {\/\egroup + {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume @@ -186,7 +186,7 @@ \setuppublicationlayout[inbook]{% \insertauthors{}{ }{\inserteditors{}{, \'editeur% \ifnum\getvalue{editor@num}> 1 s\fi - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \insertpubyear{(}{). }{\unskip.}% \inserttitle @@ -262,13 +262,13 @@ {, \'editeur\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, num\'ero }{~dans }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, pages~}{. }{\unskip. }% + \insertpages{\unskip, pages~}{. }{\unskip. }% \insertpublisher {}% {\insertedition{, }{ \'edition. }{. }}% @@ -276,7 +276,7 @@ }% {Dans \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, pages~}{. }{\unskip. }% + \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } @@ -290,7 +290,7 @@ {, \'editeur\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, num\'ero }{~dans }{ }}% {}% @@ -299,7 +299,7 @@ \insertpages {\unskip, pages~} {\insertcity{, }{. }{. }} - {\unskip. }% + {\unskip. }% \insertorganization {}% {\insertpubname{, }{. }{. }}% @@ -307,7 +307,7 @@ }% {Dans \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, pages~}{. }{\unskip. }% + \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } @@ -315,19 +315,19 @@ \setuppublicationlayout[proceedings]{% \inserteditors{}{, \'editeur% \ifnum\getvalue{editor@num}> 1 s\fi - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{ }{}}% \insertpubyear{(}{). }{}% \inserttitle {\bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, num\'ero }{~dans }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{\insertcity{, }{. }{. }} - {\unskip\insertcity{, }{. }{. }}% + {\unskip\insertcity{, }{. }{. }}% \insertorganization {}% {\insertpubname{, }{. }{. }}% diff --git a/tex/context/bib/mkii/bibl-apa-it.tex b/tex/context/bib/mkii/bibl-apa-it.tex index ebf03313a..1f2dd00e4 100644 --- a/tex/context/bib/mkii/bibl-apa-it.tex +++ b/tex/context/bib/mkii/bibl-apa-it.tex @@ -157,7 +157,7 @@ \insertcomment{}{.}{}% } -\newif\ifeditedbook +% \newif\ifeditedbook \setuppublicationlayout[book]{% \insertauthors{}{ }{\inserteditors{}{, a c. di% diff --git a/tex/context/bib/mkii/bibl-apa.tex b/tex/context/bib/mkii/bibl-apa.tex index b0403e542..d9ac9c5bf 100644 --- a/tex/context/bib/mkii/bibl-apa.tex +++ b/tex/context/bib/mkii/bibl-apa.tex @@ -160,7 +160,7 @@ \insertcomment{}{.}{}% } -\newif\ifeditedbook +% \newif\ifeditedbook \setuppublicationlayout[book]{% \insertauthors{}{ }{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi diff --git a/tex/context/bib/mkii/bibl-aps.tex b/tex/context/bib/mkii/bibl-aps.tex index 39d3bd7d4..2997e2066 100644 --- a/tex/context/bib/mkii/bibl-aps.tex +++ b/tex/context/bib/mkii/bibl-aps.tex @@ -122,7 +122,7 @@ %D Some shortcuts. % ((#1(type\ |)chapter#2)|#3) - + \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{chapter\ }}{#2}% @@ -169,15 +169,15 @@ \insertcomment{}{.}{}% } -\newif\ifeditedbook +% \newif\ifeditedbook \setuppublicationlayout[book]{% \insertauthors{}{ }{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \inserttitle {\unskip, \bgroup\it }% - {\/\egroup + {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume @@ -219,7 +219,7 @@ \setuppublicationlayout[inbook]{% \insertauthors{}{}{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{. }{}}}% \inserttitle {, \bgroup\it }% @@ -289,7 +289,7 @@ \inserttitle {, in % \bgroup\it}% - {\egroup + {\egroup \inserteditors{, edited by }% {}% {} @@ -301,22 +301,22 @@ \insertpubyear{(% \insertpublisher{}%{, }%{}% }{)\insertEdition{, }{ ed. }{}}{}% - \insertpages{\unskip, p.~}{. }{\unskip. }% + \insertpages{\unskip, p.~}{. }{\unskip. }% }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, p.~}{. }{\unskip. }% + \insertpages{\unskip, p.~}{. }{\unskip. }% }% \insertNote{ }{.}{}% } \setuppublicationlayout[inproceedings]{% \insertauthors{}{ }{}% -% +% % \insertarttitle{\bgroup }{\egroup. }{}%% \inserttitle {\unskip, in \bgroup\it}% - {\egroup + {\egroup \inserteditors{, edited by }% {}% {}% @@ -340,11 +340,11 @@ \insertpages {\unskip, \fixpp.~} {\unskip.} - {\unskip.}% + {\unskip.}% }% { In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, \fixpp.~}{. }{\unskip. }% + \insertpages{\unskip, \fixpp.~}{. }{\unskip. }% }% \insertNote{ }{.}{}% } @@ -352,11 +352,11 @@ \setuppublicationlayout[proceedings]{% \inserteditors{}{, ed% \ifnum\getvalue{editor@num}> 1 s\fi., - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{ }{}}% \inserttitle {\bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% @@ -373,7 +373,7 @@ \insertpages {\unskip, p.~} {\insertcity{, }{}{}} - {\unskip\insertcity{, }{}{}}% + {\unskip\insertcity{, }{}{}}% }% {}% \insertNote{\unskip. }{.}{.}% @@ -438,4 +438,4 @@ \insertNote{\unskip. }{.}{\unskip.}% } -\protect \ No newline at end of file +\protect diff --git a/tex/context/bib/mkii/bibl-num-fr.tex b/tex/context/bib/mkii/bibl-num-fr.tex index c4271fb7f..649e7e3f2 100644 --- a/tex/context/bib/mkii/bibl-num-fr.tex +++ b/tex/context/bib/mkii/bibl-num-fr.tex @@ -111,7 +111,7 @@ %D Some shortcuts. % ((#1(type\ |)chapter#2)|#3) - + \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{chapitre\ }}{#2}% @@ -145,15 +145,15 @@ \insertcomment{}{.}{}% } -\newif\ifeditedbook +% \newif\ifeditedbook \setuppublicationlayout[book]{% \insertauthors{}{\unskip. }{\inserteditors{}{\unskip, \'editeur% \ifnum\getvalue{editor@num}> 1 s\fi - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{\unskip. }{}}}% \inserttitle {\bgroup\it }% - {\/\egroup + {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume @@ -195,7 +195,7 @@ \setuppublicationlayout[inbook]{% \insertauthors{}{\unskip. }{\inserteditors{}{\unskip, \'editeur% \ifnum\getvalue{editor@num}> 1 s\fi - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{\unskip. }{}}}% \inserttitle {\bgroup\it }% @@ -281,13 +281,13 @@ {\unskip, editor\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, pages~}{. }{\unskip. }% + \insertpages{\unskip, pages~}{. }{\unskip. }% \insertpublisher {}% {\insertedition{, }{ \'edition}{}% @@ -297,7 +297,7 @@ }% {Dans \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, pages~}{. }{\unskip. }% + \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } @@ -310,7 +310,7 @@ {\unskip, \'editeur\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, num\'ero }{~dans }{ }}% {}% @@ -321,7 +321,7 @@ {\insertcity{, }{}{} \insertpubyear{\unskip, }{. }{. }}% {\unskip - \insertpubyear{\unskip, }{. }{. }}% + \insertpubyear{\unskip, }{. }{. }}% \insertorganization {}% {\insertpubname{, }{. }{. }}% @@ -329,7 +329,7 @@ }% {Dans \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, pages~}{. }{\unskip. }% + \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } @@ -337,11 +337,11 @@ \setuppublicationlayout[proceedings]{% \inserteditors{}{\unskip, \'editeur% \ifnum\getvalue{editor@num}> 1 s\fi - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{ }{}}% \inserttitle {\bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, num\'ero }{~dans }{ }}% {}% @@ -357,7 +357,7 @@ \insertcity {, } {\insertpubyear{, }{. }{. }} - {\insertpubyear{, }{. }{. }}}% + {\insertpubyear{, }{. }{. }}}% \insertorganization {}% {\insertpubname{, }{. }{. }}% @@ -419,7 +419,7 @@ \insertpublisher {} {, \insertpubyear{}{.}{}} - {\insertpubyear{}{.}{}}% + {\insertpubyear{}{.}{}}% \insertbibtype{ (}{)}{}% \insertnote{ }{.}{}% } diff --git a/tex/context/bib/mkii/bibl-num.tex b/tex/context/bib/mkii/bibl-num.tex index 3c72d975a..8f2cbf34f 100644 --- a/tex/context/bib/mkii/bibl-num.tex +++ b/tex/context/bib/mkii/bibl-num.tex @@ -111,7 +111,7 @@ %D Some shortcuts. % ((#1(type\ |)chapter#2)|#3) - + \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{chapter\ }}{#2}% @@ -145,15 +145,15 @@ \insertcomment{}{.}{}% } -\newif\ifeditedbook +% \newif\ifeditedbook \setuppublicationlayout[book]{% \insertauthors{}{\unskip. }{\inserteditors{}{\unskip, editor% \ifnum\getvalue{editor@num}> 1 s\fi.% - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{\unskip. }{}}}% \inserttitle {\bgroup\it }% - {\/\egroup + {\/\egroup \ifeditedbook.% \global\editedbookfalse \insertvolume @@ -195,7 +195,7 @@ \setuppublicationlayout[inbook]{% \insertauthors{}{\unskip. }{\inserteditors{}{\unskip, editor% \ifnum\getvalue{editor@num}> 1 s\fi - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{\unskip. }{}}}% \inserttitle {\bgroup\it }% @@ -281,13 +281,13 @@ {\unskip, editor\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, pages~}{. }{\unskip. }% + \insertpages{\unskip, pages~}{. }{\unskip. }% \insertpublisher {}% {\insertedition{, }{ edition}{}% @@ -297,7 +297,7 @@ }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, pages~}{. }{\unskip. }% + \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } @@ -310,7 +310,7 @@ {\unskip, editor\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% @@ -321,7 +321,7 @@ {\insertcity{, }{}{}% \insertpubyear{\unskip, }{. }{. }}% {\unskip - \insertpubyear{\unskip, }{. }{. }}% + \insertpubyear{\unskip, }{. }{. }}% \insertorganization {}% {\insertpubname{, }{. }{. }}% @@ -329,7 +329,7 @@ }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, pages~}{. }{\unskip. }% + \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } @@ -337,11 +337,11 @@ \setuppublicationlayout[proceedings]{% \inserteditors{}{\unskip, editor% \ifnum\getvalue{editor@num}> 1 s\fi.% - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{ }{}}% \inserttitle {\bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% @@ -357,7 +357,7 @@ \insertcity {, } {\insertpubyear{, }{. }{. }} - {\insertpubyear{, }{. }{. }}}% + {\insertpubyear{, }{. }{. }}}% \insertorganization {}% {\insertpubname{, }{. }{. }}% @@ -419,9 +419,9 @@ \insertpublisher {} {, \insertpubyear{}{.}{}} - {\insertpubyear{}{.}{}}% + {\insertpubyear{}{.}{}}% \insertbibtype{ (}{)}{}% \insertnote{ }{.}{}% } -\protect \ No newline at end of file +\protect diff --git a/tex/context/bib/mkii/bibl-ssa.tex b/tex/context/bib/mkii/bibl-ssa.tex index b93bd1b68..cc8e124a8 100644 --- a/tex/context/bib/mkii/bibl-ssa.tex +++ b/tex/context/bib/mkii/bibl-ssa.tex @@ -1,5 +1,5 @@ %D \module -%D [ file=bibl-apa, +%D [ file=bibl-apa, %D version=2004.7.16, %D title=APA bibliography style, %D subtitle=Publications, @@ -117,9 +117,9 @@ %TH %D The \type{\scratchcounter} is incremented by \specialbibinsert -%D before each author/editor is typeset, so the only thing that needs +%D before each author/editor is typeset, so the only thing that needs %D doing is testing its value to decide which of the two `standard' -%D author formatting macros to call. +%D author formatting macros to call. %D %D The \type{\normalauthor} definition above is a bit altered/stripped %D down, because the 'glue items' like \type{firstnamesep} got in the @@ -127,20 +127,20 @@ \def\toggledauthor#1#2#3#4#5% {\relax - \ifnum \scratchcounter > 1 - \normalauthor{#1}{#2}{#3}{#4}{#5}% + \ifnum \scratchcounter > 1 + \normalauthor{#1}{#2}{#3}{#4}{#5}% \else - \invertedauthor{#1}{#2}{#3}{#4}{#5}% + \invertedauthor{#1}{#2}{#3}{#4}{#5}% \fi } %TH %D Below, each \type{\setuppublicationlayout} macro's body will -%D start by setting a global toggle to true, that controls whether +%D start by setting a global toggle to true, that controls whether %D or not the next \type{\insertartauthors},\type{\insertauthors} %D or \type{\inserteditors} has to store it's contents for comparison. %D All three are instances of the generic macro \type{\specialbibinsert}. %D The net result of this trick is that the first typeset block of -%D names will be saved, regardless of whether they are book authors, +%D names will be saved, regardless of whether they are book authors, %D article authors, or editors. \newif\ifsetstoredauthor @@ -156,17 +156,17 @@ \def\specialbibinsert#1#2#3#4#5% {\relax - \ifsetstoredauthor + \ifsetstoredauthor \global\setstoredauthorfalse % RESET \putcurrentinallstuff{#1}{#2}% \ifx\allstuff\oldstuff % do nothing \else - \normalspecialbibinsert{#1}{#2}{#3}{#4}{#5}% + \normalspecialbibinsert{#1}{#2}{#3}{#4}{#5}% \fi \global\let\oldstuff\allstuff \else - \normalspecialbibinsert{#1}{#2}{#3}{#4}{#5}% + \normalspecialbibinsert{#1}{#2}{#3}{#4}{#5}% \fi} %D initialize \type{\oldstuff} @@ -189,7 +189,7 @@ % ((#1(type\ |)chapter#2)|#3) - + \def\insertchap#1#2#3% {\insertchapter {#1\insertbibtype{}{\ }{chapter\ }}{#2}% @@ -222,17 +222,17 @@ \insertcomment{}{.}{}% } -\newif\ifeditedbook +% \newif\ifeditedbook \setuppublicationlayout[book]{% \global\setstoredauthortrue \insertauthors{}{.}{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{. }{}}}\hfill\break% \insertpubyear{}{. }{\unskip.}% \inserttitle {\bgroup\it }% - {\/\egroup + {\/\egroup \ifeditedbook \global\editedbookfalse \insertvolume @@ -273,7 +273,7 @@ \global\setstoredauthortrue \insertauthors{}{ }{\inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{. }{}}}\hfill\break% \insertpubyear{}{. }{\unskip.}% \inserttitle @@ -352,13 +352,13 @@ {, editor\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, pages~}{. }{\unskip. }% + \insertpages{\unskip, pages~}{. }{\unskip. }% \insertpublisher {}% {\insertedition{, }{ edition. }{. }}% @@ -366,7 +366,7 @@ }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, pages~}{. }{\unskip. }% + \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } @@ -381,7 +381,7 @@ {, editor\ifnum\getvalue{editor@num}> 1 s\fi, }% {}% \bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% @@ -390,7 +390,7 @@ \insertpages {\unskip, pages~} {\insertcity{, }{. }{. }} - {\unskip. }% + {\unskip. }% \insertorganization {}% {\insertpubname{, }{. }{. }}% @@ -398,7 +398,7 @@ }% {In \insertcrossref{}{}{}% \insertchap{\unskip, }{ }{ }% - \insertpages{\unskip, pages~}{. }{\unskip. }% + \insertpages{\unskip, pages~}{. }{\unskip. }% }% \insertnote{ }{.}{}% } @@ -407,19 +407,19 @@ \global\setstoredauthortrue \inserteditors{}{, editor% \ifnum\getvalue{editor@num}> 1 s\fi - \ \global\editedbooktrue + \ \global\editedbooktrue }{\insertthekey{}{ }{}}\hfill\break% \insertpubyear{}{. }{}% \inserttitle {\bgroup\it}% - {\egroup + {\egroup \insertseries {\insertvolume{, number }{~in }{ }}% {}% {}% \insertchap{\unskip, }{ }{ }% \insertpages{\unskip, pages~}{\insertcity{, }{. }{. }} - {\unskip\insertcity{, }{. }{. }}% + {\unskip\insertcity{, }{. }{. }}% \insertorganization {}% {\insertpubname{, }{. }{. }}% @@ -483,4 +483,4 @@ \insertnote{ }{.}{}% } -\protect \ No newline at end of file +\protect diff --git a/tex/context/interface/mkii/keys-cs.xml b/tex/context/interface/mkii/keys-cs.xml index 122154078..76c186103 100644 --- a/tex/context/interface/mkii/keys-cs.xml +++ b/tex/context/interface/mkii/keys-cs.xml @@ -1817,7 +1817,7 @@ - + diff --git a/tex/context/interface/mkii/keys-ro.xml b/tex/context/interface/mkii/keys-ro.xml index b811b79df..0f632ddb0 100644 --- a/tex/context/interface/mkii/keys-ro.xml +++ b/tex/context/interface/mkii/keys-ro.xml @@ -286,6 +286,7 @@ + @@ -389,6 +390,7 @@ + @@ -456,6 +458,7 @@ + @@ -1817,7 +1820,7 @@ - + diff --git a/tex/context/modules/mkiv/m-catchword.mkiv b/tex/context/modules/mkiv/m-catchword.mkiv index 70d713e44..86a3a2d55 100644 --- a/tex/context/modules/mkiv/m-catchword.mkiv +++ b/tex/context/modules/mkiv/m-catchword.mkiv @@ -27,7 +27,7 @@ local hlist_code = nodecodes.hlist local fontkern_code = kerncodes.fontkern local function set_catchword(t) - local nextpage = tex.lists.contrib_head + local nextpage = tex.lists.contribute_head or tex.lists.contrib_head if not nextpage then return end diff --git a/tex/context/modules/mkiv/m-chart.lua b/tex/context/modules/mkiv/m-chart.lua index 6c57f070e..df769067a 100644 --- a/tex/context/modules/mkiv/m-chart.lua +++ b/tex/context/modules/mkiv/m-chart.lua @@ -1016,7 +1016,7 @@ local function makechart_indeed(chart) -- end --- We need to wrap because of tex.runtoks! +-- We need to wrap because of tex.runlocal! local function makechart(chart) context.hbox() diff --git a/tex/context/modules/mkiv/m-chart.mkvi b/tex/context/modules/mkiv/m-chart.mkvi index c48869928..e1ecd3f0c 100644 --- a/tex/context/modules/mkiv/m-chart.mkvi +++ b/tex/context/modules/mkiv/m-chart.mkvi @@ -46,7 +46,7 @@ \let\setupFLOWcharts\setupFLOWchart \let\setupFLOWlines \setupFLOWline \let\setupFLOWshapes\setupFLOWshape -\let\setupFLOWsets \setupFLOWset +%let\setupFLOWset \setupFLOWsets \setupFLOWcharts [\c!width=12\bodyfontsize, @@ -285,7 +285,7 @@ \let\connect \FLOW_connection \let\locate \FLOW_location % - \let\includeFLOWchart\include + \overloaded\let\includeFLOWchart\include \to \everyFLOWchart \unexpanded\def\FLOW_name #name{\clf_flow_set_name{#name}\ignorespaces} diff --git a/tex/context/modules/mkiv/m-format.mkiv b/tex/context/modules/mkiv/m-format.mkiv index 3a0a5bebd..083f6ed63 100644 --- a/tex/context/modules/mkiv/m-format.mkiv +++ b/tex/context/modules/mkiv/m-format.mkiv @@ -190,7 +190,7 @@ {\placeformatlinecounter}}}} {\let\doplaceformatlinecounter\relax}% \global\setfalse\formatforcedbreak - \def\\{\break\global\settrue\formatforcedbreak}% + \enforced\def\\{\break\global\settrue\formatforcedbreak}% \hsize\formatwidth \doglobal\increment\formatlinecounter \par diff --git a/tex/context/modules/mkiv/m-nodechart.lua b/tex/context/modules/mkiv/m-nodechart.lua index 8273f365a..98e09f4b5 100644 --- a/tex/context/modules/mkiv/m-nodechart.lua +++ b/tex/context/modules/mkiv/m-nodechart.lua @@ -62,8 +62,8 @@ function formatters.dir(n,comment) return format("\\doFLOWdirnode{%s}{%s}{%s}",comment,"dir",n.dir) end -function formatters.localpar(n,comment) - return format("\\doFLOWdirnode{%s}{%s}{%s}",comment,"localpar",n.dir) +function formatters.par(n,comment) + return format("\\doFLOWdirnode{%s}{%s}{%s}",comment,"par",n.dir) end -- I will make a dedicated set of shapes for this. diff --git a/tex/context/modules/mkiv/m-ntb-to-xtb.mkiv b/tex/context/modules/mkiv/m-ntb-to-xtb.mkiv index 55b4ab259..d48191ebc 100644 --- a/tex/context/modules/mkiv/m-ntb-to-xtb.mkiv +++ b/tex/context/modules/mkiv/m-ntb-to-xtb.mkiv @@ -1,4 +1,8 @@ -\loadmkvifile{tabl-xnt} +\ifcase\contextlmtxmode + \loadmkvifile{tabl-xnt} +\else + \loadmklxfile{tabl-xnt} +\fi \mapTABLEtoxtable diff --git a/tex/context/modules/mkiv/m-oldfun.mkiv b/tex/context/modules/mkiv/m-oldfun.mkiv index 7ec779c41..f20d7d8e9 100644 --- a/tex/context/modules/mkiv/m-oldfun.mkiv +++ b/tex/context/modules/mkiv/m-oldfun.mkiv @@ -648,7 +648,7 @@ \dontcomplain \setuptolerance[\v!verytolerant]% == \tolerance4500 \hsize#1% - \def\\{\softbreak}% + \enforced\def\\{\softbreak}% \!!heighta#4% \!!heightb#2% \doloop @@ -690,8 +690,8 @@ \advance\scratchdimen#2\relax \NormalizeFontWidth #1% - {\def\+{\global\settrue\NFSpread\gobbleuntil\relax}% - \def\\{\gobbleuntil\relax}% newline + {\enforced\def\+{\global\settrue\NFSpread\gobbleuntil\relax}% + \enforced\def\\{\gobbleuntil\relax}% newline \setupspacing #6\relax}% {\scratchdimen}% diff --git a/tex/context/modules/mkiv/m-oldnum.mkiv b/tex/context/modules/mkiv/m-oldnum.mkiv index a240cdb58..5109cca12 100644 --- a/tex/context/modules/mkiv/m-oldnum.mkiv +++ b/tex/context/modules/mkiv/m-oldnum.mkiv @@ -109,7 +109,7 @@ {\mbox{\grabdigit#1\relax}} % adding $ $ goes wrong in tabulate \def\grabdigit - {\futurelet\next\scandigit} + {\futurelet\nexttoken\scandigit} %D Watch the test for \type {\nextobeyedline}, because the %D endofline token can be \type {\def'd}, not \type {\let}'d, @@ -119,15 +119,15 @@ \ifx\normalmathshift\undefined \let\normalmathshift=$ \fi \unexpanded\def\scandigit - {\ifx\next\blankspace + {\ifx\nexttoken\blankspace \let\next\handledigits - \else\ifx\next\nextobeyedline % the indirect one + \else\ifx\nexttoken\nextobeyedline % the indirect one \let\next\handledigits - \else\ifx\next\bgroup + \else\ifx\nexttoken\bgroup \let\next\handledigits - \else\ifx\next\egroup + \else\ifx\nexttoken\egroup \let\next\handledigits - \else\ifx\next\normalmathshift + \else\ifx\nexttoken\normalmathshift \let\next\handledigits \else \let\next\collectdigit diff --git a/tex/context/modules/mkiv/m-scite.mkiv b/tex/context/modules/mkiv/m-scite.mkiv index 058a4cbcd..39ca00ced 100644 --- a/tex/context/modules/mkiv/m-scite.mkiv +++ b/tex/context/modules/mkiv/m-scite.mkiv @@ -378,7 +378,7 @@ moduledata.scite = scite \let\slxT \lettertilde \let\slxS \fixedspace -\let\slxS \buff_scite_slxs +%let\slxS \buff_scite_slxs \let\slxF \buff_scite_slxf \def\module_scite_inherit_typing diff --git a/tex/context/modules/mkiv/m-tikz.mkiv b/tex/context/modules/mkiv/m-tikz.mkiv index 73c0ec01e..99df42332 100644 --- a/tex/context/modules/mkiv/m-tikz.mkiv +++ b/tex/context/modules/mkiv/m-tikz.mkiv @@ -3,12 +3,16 @@ \unprotect \ifcase\contextlmtxmode \else - \unexpanded\def\pdflastxpos{\numexpr\clf_lastxpos\relax} - \unexpanded\def\pdflastypos{\numexpr\clf_lastypos\relax} + \frozen\overloaded\protected\def\pdflastxpos{\numexpr\clf_lastxpos\relax} + \frozen\overloaded\protected\def\pdflastypos{\numexpr\clf_lastypos\relax} \fi \protect +\ifcase\contextlmtxmode \else + \overloadmode\zerocount +\fi + \pushcatcodetable \setcatcodetable\texcatcodes @@ -23,7 +27,14 @@ \popcatcodetable -\let\starttikzpicture\tikzpicture -\let\stoptikzpicture \endtikzpicture +\protected\def\starttikzpicture + {\begingroup + \overloadmode\zerocount + \tikzpicture} + +\protected\def\stoptikzpicture + {\endtikzpicture + \endgroup} + \stopmodule diff --git a/tex/context/modules/mkiv/m-visual.mkiv b/tex/context/modules/mkiv/m-visual.mkiv index a7cecef93..8a49861cd 100644 --- a/tex/context/modules/mkiv/m-visual.mkiv +++ b/tex/context/modules/mkiv/m-visual.mkiv @@ -651,10 +651,10 @@ \appendtoks\dontshowwhatsits\to\everystoptext} \unexpanded\def\immediatewhatsit - {\bgroup\futurelet\next\doimmediatewhatsit} + {\bgroup\futurelet\nexttoken\doimmediatewhatsit} \unexpanded\def\doimmediatewhatsit - {\ifx\next\write + {\ifx\nexttoken\write \egroup\immediatewritetrue \else \egroup\expandafter\normalimmediate diff --git a/tex/context/modules/mkiv/s-article-titlepage.mkiv b/tex/context/modules/mkiv/s-article-titlepage.mkiv index abfb957c2..7579d421f 100644 --- a/tex/context/modules/mkiv/s-article-titlepage.mkiv +++ b/tex/context/modules/mkiv/s-article-titlepage.mkiv @@ -16,7 +16,7 @@ \unprotect % \startalignment[middle] -% \let\\=\par +% \enforced\let\\\par % \bfb % \setupinterlinespace % \documentvariable {subject} diff --git a/tex/context/modules/mkiv/s-inf-01.mkvi b/tex/context/modules/mkiv/s-inf-01.mkvi index 67fc45d46..7cebfd9bb 100644 --- a/tex/context/modules/mkiv/s-inf-01.mkvi +++ b/tex/context/modules/mkiv/s-inf-01.mkvi @@ -31,7 +31,6 @@ local list = { } local size = { } local comp = { } - local used = setmetatableindex("table") local nope = setmetatableindex("number") local omit = { @@ -44,7 +43,7 @@ "colo%-pan.tex", ".*test.*" } local types = { - "tex", "mkii", "mkiv", "mkvi", "mkxl", "mklx", "lua", -- "mpiv" + "tex", "mkii", "mkiv", "mkvi", "lua", "mkxl", "mklx", "lmt" -- "mpiv" } local patterns = { "^([a-z][a-z][a-z][a-z])%-[a-z0-9%-]+%.[a-z]+", @@ -90,7 +89,7 @@ end local data = io.loaddata(name) if data then - if suffix == "lua" then + if suffix == "lua" or suffix == "lmt" then data = gsub(data,"%-%-%[%[.-%]%]%-%-","") data = gsub(data,"%-%-.-[\n\r]","") else @@ -120,15 +119,6 @@ for i=1,#types do collect(list,types[i],i) end - for category in next, list do - pattern ="{"..category.."%-" - for suffix, t in next, used do - local data = io.loaddata(resolvers.find_file("context."..suffix)) - if data and find(data,pattern) then - t[category] = true - end - end - end end local max, what = 0, (what == "size" and size) or list for k, v in table.sortedpairs(what) do @@ -141,9 +131,9 @@ function document.context_state_1(what) local max, what, norm = prepare(what) - context.starttabulate { "|Tl|T|T|T|T|T|T|T|" } + context.starttabulate { "|Tl|T|T|T|T|T|T|T|T|" } context.NC() - context(category) + context("category") context.NC() for i=1,#types do local n, m = 0, 0 @@ -156,20 +146,13 @@ context.Top(types[i],norm(max),n,m) context.NC() end - context.NC() + -- context.NC() context.NR() context.HL() for k, v in table.sortedpairs(what) do local c = what == size and comp[k] or nope context.NC() - context("\\bf %s~%s~~%s~~%s~~%s~~%s", - (used.mkii[k] and "ii") or "~~", - (used.mkiv[k] and "iv") or "~~", - (used.mkvi[k] and "vi") or "~~", - (used.mkiv[k] and "xl") or "~~", - (used.mkvi[k] and "lx") or "~~", - k - ) + context(k) context.NC() for i=1,#types do context.Bar(types[i],v[i],c[i],f_norm(norm(v[i]))) @@ -201,13 +184,14 @@ \definecolor[bar:mkxl][middlemagenta] \definecolor[bar:mklx][middlecyan] \definecolor[bar:lua] [middlegray] +\definecolor[bar:lmt] [middleorange] \newcount\UpCounter \starttexdefinition Top #what#fraction#total#bigones \hbox to 7em{\hss#total}% \enspace - \hbox {{\bf#what}\ifnum#total=#bigones\else~#bigones\rlap{~+}\fi\hss}% + \hbox to 4em{{{\bf#what}\ifnum#total=#bigones\else\ifnum#bigones>0~#bigones\rlap{~+}\fi\fi\hss}}% \stoptexdefinition \starttexdefinition Bar #color#size#nobigones#fraction @@ -215,6 +199,8 @@ \hbox to 7em{\hss\ifcase#nobigones\else\llap{-~}\fi#size}% \enspace \blackrule[color=bar:#color,width=#fraction\dimexpr 20em\relax,height=.8\strutht]% +% \quad +% \quad \fi \stoptexdefinition @@ -269,9 +255,9 @@ {The size of (core) files used in ConTeXt (- : large data files excluded; + : large data files included; comment and spaces removed)} {1}{size} \Show - {The relative number of files used in ConTeXt (tex, mkii, mkiv, mkvi, mkxl, mklx, lua).} + {The relative number of files used in ConTeXt (tex, mkii, mkiv, mkvi, mkxl, mklx, lua, lmt).} {2}{number} \Show - {The relative size of files used in ConTeXt (tex, mkii, mkiv, mkvi, mkxl, mklx, lua).} + {The relative size of files used in ConTeXt (tex, mkii, mkiv, mkvi, mkxl, mklx, lua, lmt).} {2}{size} \stoptext diff --git a/tex/context/modules/mkiv/s-languages-hyphenation.lua b/tex/context/modules/mkiv/s-languages-hyphenation.lua index 65fd1ab14..2ba265b53 100644 --- a/tex/context/modules/mkiv/s-languages-hyphenation.lua +++ b/tex/context/modules/mkiv/s-languages-hyphenation.lua @@ -40,8 +40,8 @@ local getdisc = nuts.getdisc local getattr = nuts.getattr local getfont = nuts.getfont local getfield = nuts.getfield -local getlang = nuts.getlang -local setlang = nuts.setlang +local getlanguage = nuts.getlanguage +local setlanguage = nuts.setlanguage local setlink = nuts.setlink local setdisc = nuts.setdisc local setfield = nuts.setfield @@ -63,10 +63,12 @@ local states = table.setmetatableindex(function(t,k) } end) +local currentlanguage = language.current or function() return tex.language end + interfaces.implement { name = "storelanguagestate", actions = function() - states[tex.language] = { + states[currentlanguage()] = { lefthyphenmin = tex.lefthyphenmin, righthyphenmin = tex.righthyphenmin, hyphenationmin = tex.hyphenationmin, @@ -128,17 +130,6 @@ local function mark(head,marked,w,h,d,how) end end -local function getlanguage(head,l,left,right) - local t = { } - for n in nextglyph, tonut(head) do - t[n] = { - getlang(n), - getfield(n,"left"), - getfield(n,"right"), - } - end -end - local langs = { } local tags = { } local noflanguages = 0 @@ -151,7 +142,7 @@ function moduledata.languages.hyphenation.showhyphens(head) -- somehow assigning -1 fails for n in nextglyph, tonut(head) do cached[n] = { - getlang(n), + getlanguage(n), getfield(n,"left"), getfield(n,"right") } @@ -164,7 +155,7 @@ function moduledata.languages.hyphenation.showhyphens(head) local lmin = s.lefthyphenmin local rmin = s.righthyphenmin for n in next, cached do - setlang(n,l) + setlanguage(n,l) setfield(n,"left",lmin) setfield(n,"right",rmin) end @@ -176,7 +167,7 @@ function moduledata.languages.hyphenation.showhyphens(head) mark(head,marked[i],1/16,l/2,l/4,"hyphenation:"..(colorbytag and tags[i] or i)) end for n, d in next, cached do - setlang(n,d[1]) + setlanguage(n,d[1]) setfield(n,"left",d[2]) setfield(n,"right",d[3]) end diff --git a/tex/context/modules/mkiv/s-maps.mkiv b/tex/context/modules/mkiv/s-maps.mkiv index af646b2e1..8775f565e 100644 --- a/tex/context/modules/mkiv/s-maps.mkiv +++ b/tex/context/modules/mkiv/s-maps.mkiv @@ -363,8 +363,8 @@ \def\doarticleheader {\startbaselinecorrection \bgroup - \hsize = 457pt - \let\\\crlf + \hsize= 457pt + \enforced\let\\\crlf \blank[35pt,force] \switchtobodyfont[24pt] \startalign[flushleft,verytolerant,extremestretch] @@ -419,7 +419,8 @@ \def\signArticle {\doifnothing {\MapsSkipFooter} - {\blank[line]\let\\\crlf + {\blank[line]% + \enforced\let\\\crlf \noindent\switchtobodyfont[ss,9pt]% \MapsAuthor \doifsomething{\MapsAddress}{\\\MapsAddress}% diff --git a/tex/context/modules/mkiv/s-present-balls.mkiv b/tex/context/modules/mkiv/s-present-balls.mkiv index 6774b8340..14b33f303 100644 --- a/tex/context/modules/mkiv/s-present-balls.mkiv +++ b/tex/context/modules/mkiv/s-present-balls.mkiv @@ -156,7 +156,7 @@ \unexpanded\def\StartTitlePage {\startstandardmakeup \setupalign[middle] - \unexpanded\def\\{\vfil\bfb\setupinterlinespace} + \enforced\protected\def\\{\vfil\bfb\setupinterlinespace} \bfd\setupinterlinespace \vfil} diff --git a/tex/context/modules/mkiv/s-present-colorful.mkiv b/tex/context/modules/mkiv/s-present-colorful.mkiv index ed4b5f7c4..f71a297d7 100644 --- a/tex/context/modules/mkiv/s-present-colorful.mkiv +++ b/tex/context/modules/mkiv/s-present-colorful.mkiv @@ -231,7 +231,7 @@ \bfd\setupinterlinespace \setupalign[middle] \vfil - \let\\=\vfil + \enforced\let\\\vfil \scale [factor=max]\bgroup \framed diff --git a/tex/context/modules/mkiv/s-present-funny.mkiv b/tex/context/modules/mkiv/s-present-funny.mkiv index 4948766ad..3788f94f0 100644 --- a/tex/context/modules/mkiv/s-present-funny.mkiv +++ b/tex/context/modules/mkiv/s-present-funny.mkiv @@ -190,7 +190,7 @@ \bfd\setupinterlinespace \setupalign[middle] \vfil - \def\\{\vfil\bfb\setupinterlinespace}} + \enforced\protected\def\\{\vfil\bfb\setupinterlinespace}} \unexpanded\def\StopTitlePage {\vfil\vfil\vfil diff --git a/tex/context/modules/mkiv/s-present-fuzzy.mkiv b/tex/context/modules/mkiv/s-present-fuzzy.mkiv index ee029b0e6..312cf1ce7 100644 --- a/tex/context/modules/mkiv/s-present-fuzzy.mkiv +++ b/tex/context/modules/mkiv/s-present-fuzzy.mkiv @@ -125,7 +125,7 @@ \bfd\setupinterlinespace \setupalign[middle] \vfil - \let\\=\vfil} + \enforced\let\\\vfil} \unexpanded\def\StopTitlePage {\vfil\vfil\vfil diff --git a/tex/context/modules/mkiv/s-present-green.mkiv b/tex/context/modules/mkiv/s-present-green.mkiv index e62257ff3..5a5774257 100644 --- a/tex/context/modules/mkiv/s-present-green.mkiv +++ b/tex/context/modules/mkiv/s-present-green.mkiv @@ -261,7 +261,7 @@ \bfd\setupinterlinespace \setupalign[middle] \vfil - \let\\=\vfil} + \enforced\let\\\vfil} \unexpanded\def\StopTitlePage {\vfil\vfil\vfil diff --git a/tex/context/modules/mkiv/s-present-organic.mkiv b/tex/context/modules/mkiv/s-present-organic.mkiv index 657b786f2..7994205a1 100644 --- a/tex/context/modules/mkiv/s-present-organic.mkiv +++ b/tex/context/modules/mkiv/s-present-organic.mkiv @@ -289,7 +289,7 @@ \unexpanded\def\StartTitlePage {\startstandardmakeup \switchtobodyfont[big] - \def\\{\vfill\bfb\let\\=\par} + \enforced\protected\def\\{\vfill\bfb\enforced\let\\\par}% \bfd\setupinterlinespace\gray \vskip.5cm\relax} diff --git a/tex/context/modules/mkiv/s-present-original.mkiv b/tex/context/modules/mkiv/s-present-original.mkiv index 1c5e94c85..50cd6f9ba 100644 --- a/tex/context/modules/mkiv/s-present-original.mkiv +++ b/tex/context/modules/mkiv/s-present-original.mkiv @@ -213,7 +213,7 @@ \setupinterlinespace \setupalign[middle] \vfil - \let\\=\vfil} + \enforced\let\\\vfil} \unexpanded\def\StopTitlePage {\vfil\vfil\vfil diff --git a/tex/context/modules/mkiv/s-present-split.mkiv b/tex/context/modules/mkiv/s-present-split.mkiv index 48be7ca81..186075c58 100644 --- a/tex/context/modules/mkiv/s-present-split.mkiv +++ b/tex/context/modules/mkiv/s-present-split.mkiv @@ -154,7 +154,7 @@ \unexpanded\def\StartTitlePage {\startstandardmakeup \setupalign[middle] - \unexpanded\def\\{\vfil\bfb\setupinterlinespace} + \enforced\protected\def\\{\vfil\bfb\setupinterlinespace} \bfd\setupinterlinespace \vfil} diff --git a/tex/context/modules/mkiv/s-present-stack.mkiv b/tex/context/modules/mkiv/s-present-stack.mkiv index 4cc75404f..cda03ae12 100644 --- a/tex/context/modules/mkiv/s-present-stack.mkiv +++ b/tex/context/modules/mkiv/s-present-stack.mkiv @@ -98,7 +98,7 @@ \unexpanded\def\TitlePage#1% {\startstandardmakeup \setupalign[middle] - \def\\{\vfil\bfb\setupinterlinespace} + \enforced\protected\def\\{\vfil\bfb\setupinterlinespace} \bfd\setupinterlinespace \vfil#1\vfil\vfil \stopstandardmakeup} diff --git a/tex/context/modules/mkiv/s-present-stepper.mkiv b/tex/context/modules/mkiv/s-present-stepper.mkiv index 3dd8d9dcd..c2f3c018a 100644 --- a/tex/context/modules/mkiv/s-present-stepper.mkiv +++ b/tex/context/modules/mkiv/s-present-stepper.mkiv @@ -189,7 +189,7 @@ {\setups[fonts:normalize] \resetsetups[fonts:normalize] \startstandardmakeup[headerstate=high] - \def\\{\def\\{\endgraf\quad\quad}\endgraf\quad\ignorespaces#2}% + \enforced\protected\def\\{\enforced\protected\def\\{\endgraf\quad\quad}\endgraf\quad\ignorespaces#2}% #1\setstrut\setupinterlinespace\vfil#3\vfil\vfil \stopstandardmakeup} diff --git a/tex/context/modules/mkiv/s-present-tiles.mkiv b/tex/context/modules/mkiv/s-present-tiles.mkiv index 6026dd523..900d8edc6 100644 --- a/tex/context/modules/mkiv/s-present-tiles.mkiv +++ b/tex/context/modules/mkiv/s-present-tiles.mkiv @@ -259,7 +259,7 @@ \switchtobodyfont[\measure{titlepagefont}] - \let\\=\crlf + \enforced\let\\\crlf \startalignment[flushleft] \bf diff --git a/tex/context/modules/mkiv/s-present-weird.mkiv b/tex/context/modules/mkiv/s-present-weird.mkiv index 27ef7b2c2..641c3d979 100644 --- a/tex/context/modules/mkiv/s-present-weird.mkiv +++ b/tex/context/modules/mkiv/s-present-weird.mkiv @@ -288,7 +288,7 @@ \starttexdefinition TitlePage #1 \begingroup - \def\\{\vskip1ex\bfc\def\\{\vskip1ex\bfb}} + \enforced\protected\def\\{\vskip1ex\bfc\def\\{\vskip1ex\bfb}} \enablemode[SpreadPage] \StartPage{#1} \StopPage diff --git a/tex/context/modules/mkiv/s-present-windows.mkiv b/tex/context/modules/mkiv/s-present-windows.mkiv index 22d6fdba1..422e23801 100644 --- a/tex/context/modules/mkiv/s-present-windows.mkiv +++ b/tex/context/modules/mkiv/s-present-windows.mkiv @@ -320,7 +320,7 @@ align=middle] \startSampleText[middle] \bfd\setupinterlinespace - \def\\{\bfb\setupinterlinespace\vfil\def\\{\vfil}}} + \enforced\protected\def\\{\bfb\setupinterlinespace\vfil\enforced\protected\def\\{\vfil}}} \unexpanded\def\StopTitlePage {\stopSampleText diff --git a/tex/context/modules/mkiv/s-system-macros.mkxl b/tex/context/modules/mkiv/s-system-macros.mkxl new file mode 100644 index 000000000..87d4bba1f --- /dev/null +++ b/tex/context/modules/mkiv/s-system-macros.mkxl @@ -0,0 +1,86 @@ +%D \module +%D [ file=s-system-tokens.mkxl, +%D version=2020.06.02, +%D title=\CONTEXT\ Style File, +%D subtitle=System Tokens Checking, +%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 file is for Wolfgang and Hans and it's used in the transition from \MKIV\ +%D to the more robust \LMTX. + +% todo: \permanent\protected\let\select\directselect : same value (add ref) + +\startmodule[system-macros] + +\continueifinputfile{s-system-macros.mkxl} + +\usemodule[article-basic] \setuplayout[tight] \setupbodyfont[7pt,tt] + +\starttext + +\startluacode + local context = context + local ctx_NC = context.NC + local ctx_NR = context.NR + local ctx_bold = context.bold + + local find = string.find + local gsub = string.gsub + local create = token.create + + local crap = "[$>%|%&%#" .. string.char(0xEF) .. "]" + + require("mtx-interface") + local data = scripts.interface.editor("data") + local files = data and data.common and data.common.filenames or { } + local t = tex.hashtokens() + table.sort(t) + local function show(check) + context.starttabulate { "|l|l|l|l|l|l|l|l|" } + for i=1,#t do + local k = t[i] + if check(k) then + local v = create(k) + local frozen = v.frozen and "frozen" + local permanent = v.permanent and "permanent" + local immutable = v.immutable and "immutable" + local primitive = v.primitive and "primitive" + local mutable = v.immutable and "mutable" + local tolerant = v.tolerant and "tolerant" + local noaligned = v.noaligned and "noaligned" + local instance = v.instance and "instance" + local dealtwith = frozen or permanent or immutable or primitive or mutable -- beware: we can have combinations + local cscommand = gsub(v.cmdname or "","_"," ") + local whatever = find(k,"^[a-z][a-z][a-z]+_") + local filename = files[k] + local csname = context.escape(k) + ctx_NC() if dealtwith then context("+") elseif whatever then context("-") elseif instance then context("!")end + ctx_NC() if primitive then ctx_bold(csname) else context(csname) end + ctx_NC() context(cscommand) + ctx_NC() if dealtwith then context(dealtwith) end + ctx_NC() if tolerant then context(tolerant ) end + ctx_NC() if instance then context(instance ) end + ctx_NC() if noaligned then context(noaligned) end + ctx_NC() if filename then context(filename) end + ctx_NC() ctx_NR() + end + end + context.stoptabulate() + end + + show(function(k) return find(k,"^[a-zA-Z]+$") end) + + context.page() + + show(function(k) return not find(k,"^[a-zA-Z]+$") and not find(k,crap) end) +\stopluacode + +\stoptext + +\stopmodule diff --git a/tex/context/modules/mkiv/s-tugboat-columns.mkiv b/tex/context/modules/mkiv/s-tugboat-columns.mkiv index f8cace1e9..317c5196f 100644 --- a/tex/context/modules/mkiv/s-tugboat-columns.mkiv +++ b/tex/context/modules/mkiv/s-tugboat-columns.mkiv @@ -320,7 +320,7 @@ \startsetups tugboat:introduction:article \start - \unexpanded\def\\{\unskip\space\&\space\ignorespaces} + \enforced\protected\def\\{\unskip\space\&\space\ignorespaces} \hbox{\indent\getvariable{tugboat}{author}} \par \stop @@ -333,14 +333,14 @@ \start \switchtobodyfont[12pt] - \def\\{\unskip\space\&\space\ignorespaces} + \enforced\protected\def\\{\unskip\space\&\space\ignorespaces} \getvariable{tugboat}{author} \par \stop \start \switchtobodyfont[9pt] - \unexpanded\def\\{\unskip,\space\ignorespaces} + \enforced\protected\def\\{\unskip,\space\ignorespaces} \getvariable{tugboat}{address} \par \start @@ -380,7 +380,7 @@ \hrule height .6pt \blank[halfline] \start - \let\\=\par + \enforced\let\\\par \start \bf \getvariable{tugboat}{title} @@ -393,7 +393,7 @@ \blank[line] \doiftext {\getbuffer[abstract]} { - \let\\=\endgraf + \enforced\let\\\endgraf \setups[tugboat:abstract:setup] \startsubject[title={Abstract}] \getbuffer[abstract] @@ -421,7 +421,7 @@ \start \switchtobodyfont[14.4pt] - \let\\=\par + \enforced\let\\\par \getvariable{tugboat}{title} \par \stop @@ -430,7 +430,7 @@ \blank[tugmedium] - \let\\=\par + \enforced\let\\\par \setups[tugboat:abstract:setup] @@ -458,7 +458,7 @@ \leftskip=\dimexpr\textwidth-\signaturewidth\relax - \let\\=\par + \enforced\let\\\par \dontleavehmode\llap { $\diamond$\enspace diff --git a/tex/context/modules/mkiv/s-tugboat.mkiv b/tex/context/modules/mkiv/s-tugboat.mkiv index e243dc487..14d751fcd 100644 --- a/tex/context/modules/mkiv/s-tugboat.mkiv +++ b/tex/context/modules/mkiv/s-tugboat.mkiv @@ -393,7 +393,7 @@ % \blank[halfline] \start - \def\\{\unskip\space\&\space\ignorespaces} + \enforced\protected\def\\{\unskip\space\&\space\ignorespaces} \hbox{\indent\getvariable{tugboat}{author}} \par \stop @@ -431,7 +431,7 @@ \hrule height .6pt \blank[halfline] \start - \let\\=\par + \enforced\let\\\par {\bf\getvariable{tugboat}{title}} \par \blank[halfline] @@ -441,7 +441,7 @@ \blank[line] \doiftext {\getbuffer[abstract]} { - \let\\=\endgraf + \enforced\let\\\endgraf \setups{tugboat:abstract:setup} \subject{Abstract} \getbuffer[abstract] diff --git a/tex/context/modules/mkiv/x-mathml-basics.mkiv b/tex/context/modules/mkiv/x-mathml-basics.mkiv index e166995b0..bb119f514 100644 --- a/tex/context/modules/mkiv/x-mathml-basics.mkiv +++ b/tex/context/modules/mkiv/x-mathml-basics.mkiv @@ -6,7 +6,7 @@ % this can become a core helper -% bwe could do all of them in lua +% we could do all of them in lua \startluacode local find = string.find @@ -87,11 +87,11 @@ end } \stoptexdefinition -\starttexdefinition mtext #1 - \text { - #1 - } -\stoptexdefinition +% \starttexdefinition mtext #1 +% \text { +% #1 +% } +% \stoptexdefinition % mover diff --git a/tex/context/modules/mkiv/x-setups-basics.mkiv b/tex/context/modules/mkiv/x-setups-basics.mkiv index 4e960f428..67912b8d7 100644 --- a/tex/context/modules/mkiv/x-setups-basics.mkiv +++ b/tex/context/modules/mkiv/x-setups-basics.mkiv @@ -90,7 +90,9 @@ \pushmacro\setuptext -\defineframedtext +\ifcase\contextlmtxmode \else \pushoverloadmode \let\setuptext\setuptext \popoverloadmode \fi + +\defineframedtext % todo commands=no [setuptext] [\c!width=\hsize, \c!height=\v!fit, @@ -492,9 +494,15 @@ \unexpanded\def\basicsetup{\c_cmd_kind\zerocount\cmd_show_setup} \unexpanded\def\shortsetup{\c_cmd_kind\plusone \cmd_show_setup} -\unexpanded\def\setup {\c_cmd_kind\plustwo \cmd_show_setup} +%unexpanded\def\setup {\c_cmd_kind\plustwo \cmd_show_setup} \unexpanded\def\showsetup {\c_cmd_kind\plustwo \cmd_show_setup} +\ifcase\contextlmtxmode \else + \pushoverloadmode + \unexpanded\def\setup{\c_cmd_kind\plustwo\cmd_show_setup} + \popoverloadmode +\fi + \unexpanded\def\showsetupinlist#1#2#3% {%(#1)(#2)(#3)\par \edef\m_cmd_instance{\secondoftwoarguments#3}% diff --git a/tex/context/patterns/common/lang-bg.rme b/tex/context/patterns/common/lang-bg.rme index fff218f71..bfd391bef 100644 --- a/tex/context/patterns/common/lang-bg.rme +++ b/tex/context/patterns/common/lang-bg.rme @@ -1,3 +1,4 @@ % generated by mtxrun --script pattern --convert -% no comment \ No newline at end of file + +\message{Bulgarian hyphenation patterns (options: --safe-morphology --standalone-tex, version 21 October 2017)} \ No newline at end of file diff --git a/tex/context/patterns/common/lang-de.rme b/tex/context/patterns/common/lang-de.rme index fff218f71..8e3b9c720 100644 --- a/tex/context/patterns/common/lang-de.rme +++ b/tex/context/patterns/common/lang-de.rme @@ -1,3 +1,4 @@ % generated by mtxrun --script pattern --convert -% no comment \ No newline at end of file + +\message{German Hyphenation Patterns (Reformed Orthography, 2006) `dehyphn-x' 2019-04-04 (WL)} \ No newline at end of file diff --git a/tex/context/patterns/common/lang-deo.rme b/tex/context/patterns/common/lang-deo.rme index fff218f71..0fdb2c3d2 100644 --- a/tex/context/patterns/common/lang-deo.rme +++ b/tex/context/patterns/common/lang-deo.rme @@ -1,3 +1,4 @@ % generated by mtxrun --script pattern --convert -% no comment \ No newline at end of file + +\message{German Hyphenation Patterns (Traditional Orthography) `dehypht-x' 2019-04-04 (WL)} \ No newline at end of file diff --git a/tex/context/patterns/common/lang-eo.rme b/tex/context/patterns/common/lang-eo.rme new file mode 100644 index 000000000..45f6e82a5 --- /dev/null +++ b/tex/context/patterns/common/lang-eo.rme @@ -0,0 +1,7 @@ +% generated by mtxrun --script pattern --convert + + +\begingroup +\def\adj#1{#1a. #1aj. #1ajn. #1an. #1e.} +\edef\nom#1{\adj{#1} #1o. #1oj. #1ojn. #1on.} +\def\ver#1{#1as. #1i. #1is. #1os. #1u. #1us.} \ No newline at end of file diff --git a/tex/context/patterns/mkii/lang-ala.pat b/tex/context/patterns/mkii/lang-ala.pat index 772b8be81..63aff72e3 100644 --- a/tex/context/patterns/mkii/lang-ala.pat +++ b/tex/context/patterns/mkii/lang-ala.pat @@ -2,746 +2,26082 @@ % for comment and copyright, see lang-ala.rme -% used: a b c d e f g h i k l m n o p q r s t u x y z +% used: a b c d e f g h i j l m n o p q r s t u v x y z á æ é í ó ú ý ā ă ē ĕ ī ĭ ō ŏ œ ū ŭ ǣ ǽ ȳ ́ ̄ ̆ ͞ ͡ \patterns{ -.a2b3l -.anti1 -.anti3m2n -.ari3s2to -.circu2m1 -.co2n1iun -.e2x3 -.exs2t -.para1i -.para1u -.peri1 -.quin2c3un -.su2b3lu -.su2b3r -.s2 -2s3que. -2s3dem. -.sta3g2n -3p2sic -3p2neu -3ne. -2sne. -a1ua -a1ue -a1ui -a1uo -a1uu -e1ua -e1ue -e1ui -e1u2o -e1uu -i1ua -i1ue -i1ui -i1uo -i1uu -o1ua -o1ue -o1ui -o1uo -o1uu -u1ua -u1ue -u1ui -u1iu -u2iua -u2iue -u2iui -u2iuo -u1uo -u3u2u -a2l3ua -a2l3ue -a2l3ui -a2l3uo -a2l3uu -e2l3ue -i2l3ua -i2l3ue -i2l3ui -i2l3uo -i2l3uu -o2l3ua -o2l3ue -o2l3ui -o2l3uo -o2l3uu -u2l3ua -u2l3uo -u2l3uu -a1a -e1e -e1a -e1o -i3i -o1o -ui1a -a1is -cu3 -a1ia +.ab1 +.aba2 +.ab3a4u +.aba4v +.ab3áu +.ab3áv +.abe4 +.ab3es +.abé2 +.ab3és +.abi2 +.ab3i4n +.ab3is +.ab3it +.abi4u +.abi4v +.abī2 +.abī4n +.abī́4 +.abí2 +.ab3í4n +.ab3ís +.abí4t +.abo2 +.abó2 +.ab5us +.ab3ú +.ad3ā +.ad3á +.adǣ́4 +.adǽ2 +.ade4 +.ad3es +.ad3ē2 +.adḗ4 +.adé2 +.ad3ér +.ad3és +.ad3ib +.ad3i4c +.ad3ie +.ad3ié +.adi4m +.ad5i4n +.ad3i4q +.ad3is +.ad5i4t +.adi4u +.ad3i4v +.ad3ī4 +.adī́4 +.adí4c +.adí4m +.ad3í4n +.ad3í4q +.ad3ís +.adí4t +.ad3í4u +.ad3í4v +.ad6ora. +.ad6orane +.ad6oraq +.ad6oraue. +.ad6orave. +.ad5ṓro +.ad5ṓ6rō +.ad6ó6ra. +.adó4ro +.adú2 +.ae2a +.ae2ă3 +.ae4st +.ae5te +.ag2n +.aī3b +.aī́3b +.aí2 +.aí3b +.am4b3ē +.am4bi. +.am4b5i4n +.am4b5i4q +.am6b5is. +.am6b5isn +.am6b5isq +.am6b5isu +.am6b5isv +.ambi6ue +.amb6iui. +.amb6iuin +.amb6iuiq +.amb6iuiu +.amb6iuín +.amb6iuíq +.amb6iuíu +.ambi6ve +.amb6ivi. +.amb6ivin +.amb6iviq +.amb6iviv +.amb6ivín +.amb6ivíq +.amb6ivív +.ambī4n +.ambī́6n +.am4b5í4n +.am4bí4q +.am4b5ís +.am6bí6ue +.am6bí6ve +.am4b3ú +.an6t5ea. +.ante5i4 +.ante5í4 +.as4ce +.as4cé +.as4ta +.as4tá +.as4te +.as4té +.as4to +.as4tō +.as4tó +.as6trar +.as6trat +.as4trā +.as6trár +.as6trás +.as4tru +.as4trū +.ate2 +.atē2 +.a͞e4ă +.a͞e4s5t +.a͡e4ă +.a͡e4s5t +.á͡e4s5 +.āg2 +.ā́2 +.ā́g2 +.ā́4l +.ā́4t +.ăbă2 +.ăbă4u +.ăbă4v +.ăbĕ4 +.ăbĕ́4 +.ăbī2 +.ăbī4q +.ăbī́4 +.ăbĭ2 +.ăb3ĭt +.ăbĭ́4 +.ăbŏ́4 +.ăd3ā +.ăd3á +.ădæ4 +.ădǣ4 +.ădǣ́4 +.ădǽ4 +.ăd3ē2 +.ădḗ4 +.ădĕ4 +.ădĕ́4 +.ăd3ī4 +.ădī́4 +.ăd3ĭē +.ăd3ĭĕ +.ăd3ĭī +.ădĭ4m +.ăd3ĭ4t +.ădĭ́4t +.ăd5ṓ6rō +.ăd5ṓrŏ +.ăd3ŭ́ +.ăī3b +.ăī́3b +.ăm4b3ē +.ămbī4q +.ămbī́6q +.ăm4b5ŭ́ +.ăs4pĭ +.ăs4tă +.ăs4tĭ +.ăs4tō +.ăs4trā +.ăs4trū +.ắ2 +.ắb5ă4u +.ắb5ă4v +.ắb3ĕ4 +.ắbĭ4 +.ắb5ĭt +.ắb3ŏ +.ắ4c +.ắd3ē +.ắd3ĕ4 +.ắd3ī +.ắd5ĭē +.ắd5ĭī +.ắd5ĭ4t +.ắ4g +.ắ4ĭ +.ắ4l +.ắ4r +.ắ4s +.ắs4tā +.ắs4tă +.ắs4tĕ +.ắs4tō +.ắ4t +.áb1 +.ába2 +.áb3a4u +.áb3a4v +.áb3e4 +.ábi2 +.áb3is +.áb3it +.áb3o +.ád1 +.áde2 +.ád3es +.ád3ē +.ádi2 +.ád3ie +.ád3is +.ád3it +.ád3ī +.áes3 +.áes5t +.ág4nit +.ám4bi. +.ám4b5is +.án4ter +.ás4ta +.ás4tā +.ás4te +.ás4to +.ás4tō +.ás4tru +.æs3t +.ǣs3t +.ǣ́2 +.ǣ́4q +.ǣ́s3 +.ǽs3 +.ba3g +.ba6iane. +.ba6iáne. +.ba4ii +.ba4iī +.bā́3 +.bá4iī +.bi3 +.bĭ1 +.bĭ3ĕ +.ca2i +.cá2i +.cen3s +.cēn3s +.ci6sta +.ci6sté +.co3i4 +.co3í4 +.com5ēs +.com5ḗs +.co4més +.co4n5i4c +.co4ní4c +.cŏ3ĭ +.cŏm5ēs +.cŏm5ḗs +.cŏm3ĕ +.cŏ4n5ĭ4c +.cŏ6n5ĭ́6c +.cŏ́3ĭ +.cŏ́4m3 +.cŏ́mĭ4 +.cŏ́6n5ĭ6c +.có3i +.có4mit +.cómi6te +.có4n5i4c +.de3d +.de4met +.des2 +.de5u4ta +.de5u4tá +.de5utí +.dēs2 +.dē3sc +.dē3sú +.dḗ3i +.dḗ5sum +.dĕ1 +.dĕ3d +.dĕ3ŏ +.dé3s2 +.di3gé +.di4r5e4m +.di4r5é4m +.dis6cendam +.dis6cendas +.dis6cendám +.dis6cendás +.dis6cendi +.dis6cendí +.dis6cendo. +.dis6cendon +.dis6cendoq +.dis6cendou +.dis6cendov +.dis6cendón +.dis6cendóq +.dis6cendóu +.dis6cendóv +.dis6céndam +.dis6céndas +.dis6cénde +.dis6céndi +.dis6céndo. +.di5s6tau +.di5s6tav +.dis4tá +.di5s4tī +.dī1 +.dīs4t +.dĭ5s4tă +.dĭ5s4tī +.do3l +.dó3l +.ed2 +.ed4i +.ed4o +.ed4u +.ei2 +.er2e +.ere5x4 +.et3i +.ex3ā +.ex3á +.ex3éq +.ex3i4 +.ex3ī4 +.exī́4 +.ex3í4 +.ex5ṓr +.ex3ón +.ex3u4 +.exū2 +.exū́4 +.exú2 +.ēs3tĭ +.ḗ2 +.ĕd2 +.ĕd4ĭ +.ĕt3ĭ +.ĕx3ā +.ĕx3ī4 +.ĕxī́4 +.ĕx3ĭ2 +.ĕxĭ́4 +.ĕx5ṓr +.ĕxū2 +.ĕxū́4 +.ĕx3ŭ +.ĕ́2 +.ĕ́4c +.ĕ́4q +.ĕ́4t +.ĕ́t3ĭ +.ĕ́x3ī +.ĕ́x3ĭ4 +.ĕ́x3ŭ +.ét3e2 +.ét3i +.éx3eq +.éx3i2 +.éx3u +.gé1 +.hemi3 +.hḗ3 +.hi6ste +.hi6str +.hĭ6stĕ +.ho4s +.ibe3 +.id3eo +.id3eō +.id3í +.id3ue +.ie3su +.ié3su +.ig2 +.ig3ne +.ig3ni +.ig3nī +.ig3ní +.in1 +.in3a4 +.in3ā4 +.inā́4 +.iná4 +.in3e4 +.inē2 +.inḗ4 +.in3é2 +.in3i4 +.inī4 +.inī́4 +.in3í4 +.in3o4 +.inó4 +.in3t +.inte6re6ri +.inte6re6rí +.inte6res +.inte6rés +.inte6ri. +.inte6riq +.inte6ris +.inte6rí6n +.inte6rí6q +.inte6rís +.inte6rí6t +.inté6re6ri +.inté6ri6te +.inté6ri6ti +.inté6ri6to. +.inté6ri6tō +.inu4d +.in3ue +.in3ui +.in3uī +.in3uí +.in3us +.inū́4 +.inú4d +.io3s4 +.io5su +.ió3s2 +.is5ta +.is5tā +.is5te +.is5ti +.is5tí +.is3tr +.ī́2 +.ī́4b +.ī́4m +.ī́4n +.ī́4q +.ī́4t +.ĭd3ĕō +.ĭg2 +.ĭg3nĕ +.ĭg3nī +.ĭn1 +.ĭn3ā4 +.ĭnā́4 +.ĭnḗ4 +.ĭnĕ4 +.ĭnĕ́4 +.ĭnī4 +.ĭnī́4 +.ĭn3ĭ2 +.ĭnĭ́4 +.ĭntĕ6rĭt. +.ĭntĕ6rĭ6tĕ +.ĭntĕ6rĭtn +.ĭntĕ6rĭ6tō. +.ĭntĕ6rĭ6tōn +.ĭntĕ6rĭ6tōq +.ĭntĕ6rĭ6tōu +.ĭntĕ6rĭ6tōv +.ĭntĕ6rĭ6tṓn +.ĭntĕ6rĭ6tṓq +.ĭntĕ6rĭ6tṓu +.ĭntĕ6rĭ6tṓv +.ĭntĕ6rĭtq +.ĭntĕ6rĭtu +.ĭntĕ6rĭtv +.ĭntĕ6rĭ́6t +.ĭntĕ́6rĕ6rĭ +.ĭntĕ́6rĭ6tĕ +.ĭntĕ́6rĭ6tō +.ĭnū́4 +.ĭn3ŭs +.ĭs5tā +.ĭs5tă +.ĭs5tĕ +.ĭs5tĭ +.ĭ́2 +.ĭ́d5ĕō +.ĭ́4n +.ĭ́n3ĕ4 +.ĭ́n3ĭ4 +.ĭ́n5ŭĕ +.ĭ́n5ŭī +.ĭ́n5ŭō +.íd3eo +.íd3eō +.íd3ue +.ín1 +.ín3e2 +.ín3i2 +.ín3t +.ín3ui +.jo3s4 +.jo5su +.jó3s2 +.li4g5n +.líg3n +.lí3t +.ma3ge +.magnæ6u +.magnæ6v +.magnǣ6u +.magnǣ6v +.magnǣ́6u +.magnǣ́6v +.magnǽ6u +.magnǽ6v +.mă3gĕ +.măgnæ6u +.măgnæ6v +.măgnǣ6u +.măgnǣ6v +.măgnǣ́6u +.măgnǣ́6v +.măgnǽ6u +.măgnǽ6v +.mĕ3ĭ +.mi6sta +.ne3q +.ne3s +.ne5s4c +.ne5ute +.ne5uté +.ne5u4ti +.ne3xo +.ne3xō +.nḗ3 +.nĕ3xō +.né3s2 +.né5ute +.no6ste +.nŏ6stĕ +.nu3d +.nū3d +.ob3a2 +.obe4r +.ob3es +.ob3é2 +.obi2 +.ob3iī +.ob3i4n +.ob3iq +.ob3is +.obi4u +.obi4v +.ob3ī4 +.obī́4 +.obí4 +.ob3ín +.ob3íq +.ob3ís +.obo2 +.ob3ō +.obó4r +.ob3u +.oc4té +.os3t +.ṓ2 +.ṓ4l +.ṓ4s +.ŏb3ī4 +.ŏbī́4 +.ŏb3ĭī +.ŏb3ō +.ŏc4t3ĕ +.ŏ́2 +.ŏ́b3ĕ +.ŏ́b3ĭ +.ŏ́4l +.ŏ́4p +.ób3i +.œ́2 +.pa4r5ui +.pa4r5uí +.pā2r3 +.pá4rui +.pera4 +.pe4r5an +.per5ar +.peras5 +.pe4rā +.per5ār +.pe6ráeq +.peræ4q +.perǣ́4 +.per5ǣ́q +.pe4rǽ4q +.pere4 +.per5em +.pe4r5es +.pe4r5ē4 +.perḗ4 +.peré4 +.pe4r5ém +.pe4r5és +.pe4ri. +.pe6riens +.per6iere. +.per6ierene +.per6iereq +.per6iereu +.per6ierev +.per6ieris +.per6ierís +.per6iēn +.per6iēre +.per6iḗn +.per6iḗre +.per6iére +.pe5rille +.pe5r6illi +.pe5rillí +.pe5rimin +.per6imini +.per6iminí +.per5imu +.pe5r6imur +.peri6mus +.pe5rimúr +.per5i6mús +.peri4n +.per5ine +.pe4r5i4q +.per6i6re. +.peri6rem. +.pe5r6iremi +.peri6remn +.peri6remq +.peri6remue +.pe5r6iremur +.peri6remus +.pe5r6iremúr +.peri6remús +.peri6remv +.per6i6rene +.peri6rent. +.peri6rentn +.peri6rentq +.peri6rentue +.pe5r6irentur +.pe5r6irentú +.peri6rentv +.per6i6req +.pe5r6irer +.peri6res +.peri6ret +.per6iretur +.per6iretú +.per6i6reu +.per6i6rev +.pe5r6irémi +.peri6rémn +.peri6rémq +.peri6rémue +.pe5r6irémur +.peri6rémus +.peri6rémv +.peri6réntn +.peri6réntq +.peri6réntue +.pe5r6iréntur +.peri6réntv +.pe5r6irér +.peri6rés +.peri6rét +.per6irétur +.pe5r6iri +.pe5r6irí +.pe6ris. +.pe6risn +.pe6risq +.pe6r5isse. +.pe6r5issem +.pe6r5issen +.pe6r5isseq +.pe6r5isses +.pe6r5isset +.pe6r5isseue +.pe6r5issev +.pe6r5issém +.pe6r5issén +.pe6r5issés +.pe6r5issét +.pe6r5isti +.pe6r5istí +.pe6risu +.pe6risv +.per5it. +.peri6ta +.peri6tā +.peri6tá +.per6i6tæ +.per6i6tǽ +.per6i6te +.peri6ti. +.peri6tin +.peri6tiq +.peri6tis. +.peri6tisn +.peri6tisq +.peri6tisu +.peri6tisv +.peri6tiue +.peri6tiv +.peri6tín +.peri6tíq +.peri6tísn +.peri6tísq +.peri6tísu +.peri6tísv +.peri6tíu +.peri6tív +.per5itn +.per6i6to. +.per6i6ton +.per6i6toq +.per6itor +.pe5ritor. +.pe5ritorn +.pe5ritorq +.pe5ritorue +.peri6torum +.peri6torú +.pe5ritorv +.per6i6tos +.peri6tot +.per6i6tou +.per6i6tov +.per6i6tón +.per6i6tóq +.per6itór +.pe5ritórn +.pe5ritórq +.pe5ritórue +.peri6tórum +.pe5ritórv +.per6i6tós +.peri6tót +.per6i6tóu +.per6i6tóv +.per5itq +.per6i6tu +.per7itue +.peri6tū +.per6i6tú +.per5itv +.peri4u +.per7iue +.per5i4v +.pe4rī. +.pe6r5ī6mus +.pe6r5ī6mús +.per5ī4n +.pe4r5ī4q +.pe6r6ī6re. +.pe6rī6rem +.pe6r6ī6rene +.pe6rī6rent. +.pe6rī6rentn +.pe6rī6rentq +.pe6rī6rentue +.per6īrentur +.per6īrentú +.pe6rī6rentv +.pe6r6ī6req +.per6īrer +.pe6rī6ret +.pe6r6ī6reu +.pe6r6ī6rev +.per6īrēmi +.per6īrēmur +.pe6rī6rēmus +.per6īrēmúr +.pe6rī6rēmús +.per6īrēr +.pe6rī6rēs +.pe6rī6rēt +.per6īrētu +.per6īrētú +.per6īrḗmi +.per6īrḗmur +.pe6rī6rḗmus +.per6īrḗr +.pe6rī6rḗs +.pe6rī6rḗt +.per6īrḗtu +.pe6rī6rém +.pe6rī6réntn +.pe6rī6réntq +.pe6rī6réntue +.per6īréntur +.pe6rī6réntv +.per6īrér +.pe6rī6rét +.per6īri +.per6īrī +.per6īrí +.pe4r5īs +.pe6rī6te +.pe6r5ī6tis. +.pe6r5ī6tisn +.pe6r5ī6tisq +.pe6r5ī6tisu +.pe6r5ī6tisv +.pe6r5ī6tísn +.pe6r5ī6tísq +.pe6r5ī6tísu +.pe6r5ī6tísv +.pe6rī6tō. +.pe6rī6tōn +.pe6rī6tōq +.pe6r5ī6tōt +.pe6rī6tōu +.pe6rī6tōv +.pe6rī6tṓn +.pe6rī6tṓq +.pe6r5ī6tṓt +.pe6rī6tṓu +.pe6rī6tṓv +.pe6rī6tur +.pe6rī6túr +.pe4r5ī4u +.pe4r5ī4v +.pe6r5ī́6mus +.pe6r5ī́6n +.pe6r5ī́6q +.pe6r6ī́6re. +.pe6rī́6rem +.pe6rī́6ren +.per6ī́rene +.pe6r6ī́6req +.per6ī́rer +.pe6rī́6ret +.pe6r6ī́6reu +.pe6r6ī́6rev +.pe6rī́6rē +.per6ī́ri +.per6ī́rī +.pe6rī́s +.pe6rī́6te +.pe6r5ī́6tis +.pe6rī́6tō. +.pe6rī́6tur +.pe6rī́6u +.pe6rī́6v +.pe4ríe +.pe5ríl +.per6ímin +.pe6r5í6mus +.perí4n +.pe6r5íne +.pe4r5í4q +.pe6r6í6re. +.pe6rí6rem +.pe6rí6ren +.per6írene +.pe6r6í6req +.per6írer +.pe6rí6res +.pe6rí6ret +.pe6r6í6reu +.pe6r6í6rev +.per6íri +.pe6rísn +.pe6rísq +.pe6r5íss +.pe6r5ísti +.pe6rísu +.pe6rísv +.pe6rí6tan +.pe6rí6taq +.pe6rí6tau +.pe6rí6tav +.pe6rí6te +.pe6rí6tis +.pe6r5ítn +.pe6rí6to. +.pe6r5ítq +.pe6r5ítue +.pe6rítur +.pe6r5ítv +.pe4rí4u +.pe4rí4v +.per5os +.per3ō +.pe4rór +.pe4rós +.pē4nī +.pḗ3i +.pĕ4r3ā +.pĕ4r3ă +.pĕrăs5 +.pĕ6r5áeq +.pĕræ4 +.pĕrǣ4 +.pĕrǣ́4 +.pĕr5ǣ́q +.pĕrǽ4 +.pĕ4r5ǽq +.pĕ4r5ē4 +.pĕrḗ4 +.pĕ4rĕā +.pĕ4rĕă +.pĕ4r5ĕm +.pĕ4r5ĕō +.pĕ6r5ĕ́m +.pĕ4rī. +.pĕ6r5ī6mŭs +.pĕ6r5ī6mŭ́s +.pĕr5ī4n +.pĕ4r5ī4q +.pĕ6r5ī6rēmŭs +.pĕ6r5ī6rēmŭ́s +.pĕ6r5ī6rēs +.pĕ6rī6rēt +.pĕr5īrētĭ +.pĕ6r5ī6rḗmŭs +.pĕ6r5ī6rḗs +.pĕ6rī6rḗt +.pĕr5īrḗtĭ +.pĕ6rī6rĕ. +.pĕ6r5ī6rĕm +.pĕ6rī6rĕnĕ +.pĕ6r5ī6rĕnt. +.pĕ6r5ī6rĕntn +.pĕ6r5ī6rĕntq +.pĕ6r5ī6rĕntu +.pĕ6r5ī6rĕntv +.pĕ6rī6rĕq +.pĕ6r5ī6rĕt +.pĕ6rī6rĕu +.pĕ6rī6rĕv +.pĕ6r5ī6rĕ́m +.pĕ6r5ī6rĕ́ntn +.pĕ6r5ī6rĕ́ntq +.pĕ6r5ī6rĕ́ntu +.pĕ6r5ī6rĕ́ntv +.pĕ6r5ī6rĕ́t +.pĕ4r5īs +.pĕ6rī6tĕ +.pĕ6r5ī6tĭs. +.pĕ6r5ī6tĭsn +.pĕ6r5ī6tĭsq +.pĕ6r5ī6tĭsu +.pĕ6r5ī6tĭsv +.pĕ6r5ī6tĭ́sn +.pĕ6r5ī6tĭ́sq +.pĕ6r5ī6tĭ́su +.pĕ6r5ī6tĭ́sv +.pĕ6rī6tō. +.pĕ6rī6tōn +.pĕ6rī6tōq +.pĕ6r5ī6tōt +.pĕ6rī6tōu +.pĕ6rī6tōv +.pĕ6rī6tṓn +.pĕ6rī6tṓq +.pĕ6r5ī6tṓt +.pĕ6rī6tṓu +.pĕ6rī6tṓv +.pĕ6rī6tŭr +.pĕ6rī6tŭ́r +.pĕ4r5ī4u +.pĕ4r5ī4v +.pĕ6r5ī́6mŭs +.pĕ6r5ī́6n +.pĕ6r5ī́6q +.pĕ6r5ī́6rē +.pĕ6rī́6rĕ. +.pĕ6r5ī́6rĕm +.pĕ6rī́6rĕn +.pĕr5ī́rĕnt +.pĕ6rī́6rĕq +.pĕ6r5ī́6rĕt +.pĕ6rī́6rĕu +.pĕ6rī́6rĕv +.pĕ6r5ī́s +.pĕ6rī́6tĕ +.pĕ6r5ī́6tĭs +.pĕ6rī́6tō. +.pĕ6rī́6tŭr +.pĕ6r5ī́6u +.pĕ6r5ī́6v +.pĕ6rĭēn +.pĕ6rĭērĕ +.pĕ6r5ĭērŭ +.pĕ6rĭḗn +.pĕ6rĭḗrĕ +.pĕ6r5ĭḗrŭ +.pĕ6r5ĭĕr +.pĕ6r5ĭĕ́r +.pĕ4r5ĭī +.pĕr5ĭmŭ +.pĕrĭ4t +.pĕ6r5ĭt. +.pĕ6r5ĭtā +.pĕ6rĭtĕ +.pĕ6r5ĭtn +.pĕ6r5ĭtq +.pĕ6r5ĭtu +.pĕ6r5ĭtū +.pĕ6r5ĭtv +.pĕ6r5ĭ́ĕ +.pĕ6r5ĭ́t +.pĕr3ō +.pĕ́4r5ĕ +.pĕ́6rĭē +.pĕ́6r5ĭī +.pĕ́6r5ĭ6t +.pé3i +.pé2r +.pér3e +.pér5ii +.pér5iī +.pér5i4t +.pi6str +.po6te6ris +.po6te6rís +.po6tes. +.po6tesn +.po6tesq +.po6tesu +.po6tesv +.po4tés +.pó4tes +.pule5i +.pulé3 +.ra3d4 +.radi5c +.ra3i +.ra3m +.ra5ra +.ra5rá +.ras5t +.ra6ste +.rā6ste +.rā6stĕ +.rā́6st +.rá3i +.ræ3 +.re1 +.re5dam. +.re5damq +.re5damu +.re5damv +.re5das +.red3e4 +.red3ē +.re4dé +.re4di. +.re4d5ie +.re4d5iē +.re4d5ié +.re4d5ií +.re4d5i4m +.red5i4n +.re4d5i4q +.re6dis. +.re6disn +.re6disq +.red5iss +.red5ist +.re6disu +.re6disv +.re4d5i4t +.re4di6u +.red5iue +.redi6v +.red5ive +.re4dī. +.red5ī4m +.re4d5ī4n +.re4d5ī4q +.red5ī4t +.redī6u +.redī6v +.red5ī́6m +.re6d5ī́6n +.re6d5ī́6q +.red5ī́s +.red5ī́6t +.re6d5ī́6u +.re6d5ī́6v +.re4d5í4m +.re4d5í4n +.re4d5í4q +.re6dísn +.re6dísq +.red5íss +.red5íst +.re6dísu +.re6dísv +.re4d5í4t +.re4d5í4u +.re4d5í4v +.re3ō +.re3ó +.res4tō +.rex2 +.re5xi +.rĕ1 +.rĕd3ē +.rĕ4dĕ +.rĕ4dī. +.rĕd5ī4m +.rĕ4d5ī4n +.rĕ4d5ī4q +.rĕd5ī4t +.rĕdī6u +.rĕdī6v +.rĕd5ī́6m +.rĕ6d5ī́6n +.rĕ6d5ī́6q +.rĕd5ī́s +.rĕd5ī́6t +.rĕ6d5ī́6u +.rĕ6d5ī́6v +.rĕdĭ4 +.rĕ4d5ĭē +.rĕ4d5ĭĕ +.rĕd5ĭm +.rĕ4d5ĭt +.rĕdĭ́4 +.rĕd5ĭ́t +.rĕ3ō +.rĕ5s4tō +.rĕ́4d5ĭ4 +.rĕ́3q +.rĕ́s6tē +.rĕ́s6tĕm +.rĕ́5s6tō +.ré4d3i4 +.rés6tem +.rés6tes +.rés4tē +.ré5s4to +.ré5s4tō +.ré5str +.ris2 +.ro3b2 +.ro3d4 +.ro5di +.rodi5u +.rodi5v +.ro4s3t +.rō3d4 +.rō5dī +.rōdī5u +.rōdī5v +.ru3r +.ru4s +.sa3mu +.sá3mu +.se3i +.se6mis. +.se6misn +.se6misq +.se6misue +.se6misv +.se6mísn +.se6mísq +.se6mísu +.se6mísv +.se3ps +.sē3i +.sē3p2 +.sḗ3i +.sḗ3p4 +.sé3i +.sé4mis +.sé3ps +.sér4ui +.sér4uī +.si4lu +.sil5ui +.sil5uī +.sil5uí +.si6str +.sí4lui +.sí4luī +.supe6ris +.supé6r5is +.te4ia +.te4iá +.te4ie +.te4ii +.te4ií +.te4io +.te4ió +.te4iú +.te3n4u +.te3ra +.te5r4e +.te5rim +.te5rin +.te5r6it +.teri5tur +.te5ri5ue +.te5ri5v +.te5rī +.terī5u +.terī5v +.te3ro +.te3rō +.te5runt +.tē2i +.tĕ5rĕ +.tĕrĕ5r +.tĕ5rī +.tĕrī5u +.tĕrī5v +.tĕ3rŭ +.té3n4u +.té5r4e +.té3rī +.tran5s6ue. +.trān5s6ue. +.trān5s6uĕ. +.trā́n5s6ue. +.trā́n5s6uĕ. +.trán5s6ue. +.tro4ii +.tro4ií +.tro4i5q +.tro6iue +.tro4iv +.tro4í +.troí5u +.troí5v +.ub2 +.ubī3q +.ubī́3 +.ueni4 +.ue4ni. +.ue6niens +.ue6n5ier +.ue6niéns +.ue6n5iér +.ue4nim +.ue4nin +.ue4niq +.ue4nir +.ue4nis +.ue4nit +.ue6niue +.ue4ní4 +.uen5íe +.ue6ste +.uē4nit +.uē4nī4 +.uēn5īs +.uēnī́4 +.uēn5ī́s +.uē4nĭt +.uē6nĭ́t +.uē4nít +.uḗ6nit +.uḗ4n5ī +.uḗ6nĭt +.uĕ6stĕ +.ué4ni. +.ué6niens +.ué4nis +.ué4nit +.uī4cĕ́ +.ul3ui +.ul3uī +.ul3uí +.um2e +.un3et +.uol6uere. +.uol6uerene +.uol6uereq +.uol6uereu +.uol6uēre +.uol6uēru +.uol6uērú +.uol6uḗre +.uol6uḗru +.uol6uit. +.uol6uitn +.uol6uitq +.uol6uitue +.uo6ste +.uŏ6stĕ +.uól6ui. +.uól6uit. +.uól6uī. +.ur1 +.uu2 +.ūn5ắn +.ū́2 +.ū́4d +.ū́4n +.ū́4s +.ū́4t +.ŭb2 +.ŭ́4n +.ŭ́4t +.úb2 +.veni4 +.ve4ni. +.ve6niens +.ve6n5ier +.ve6niéns +.ve6n5iér +.ve4nim +.ve4nin +.ve4niq +.ve4nir +.ve4nis +.ve4nit +.ve4niv +.ve4ní4 +.ven5íe +.ve6ste +.vē4nit +.vē4nī4 +.vēn5īs +.vēnī́4 +.vēn5ī́s +.vē4nĭt +.vē6nĭ́t +.vē4nít +.vḗ6nit +.vḗ4n5ī +.vḗ6nĭt +.vĕ6stĕ +.vé4ni. +.vé6niens +.vé4nis +.vé4nit +.vī4cĕ́ +.vo6ste +.vŏ6stĕ +a1ā2 +a3āt +a3ā́2 +a1á2 +a3át +2aba +aba3i +ab2a3q +aba6ste +ab3aui +ab3auí +ab3av +2abá +abá3i +abæ3 +a2beú +2abé +ab2ia +ab2iá +a2b3i2b +ab3ice +a2bie +ab4ies +ab4iet +a2biē +ab4iēs +ab4iḗs +a2bié +ab4iés +ab4iét +a2bii +a2biī +ab3iī. +ab3iīn +ab3iīq +ab3iīu +ab3iīv +ab5iī́n +ab5iī́q +ab5iī́u +ab5iī́v +a2b3ií +2abil +2abim +ab3iss +ab3ist +2abit +abi4tot +abi4tót +1abī +abī2m +a2b3í2b +a2bíe +ab3íer +a2bíi +ab3ímu +ab3íss +ab3íst +ab3íto +1abj +1a2bl +1abn +2abo +2abó +abó2l +1ab1r +ab3rā +ab3rá +1abs +ab2sq +ab4stem +ab4stēm +ab6stḗm +ab4stén +ab4sti +abs5tin +ab4stó +abs3tr +ab4stru +ab4strū +ab4strú +4abunt +ab3u4s +abu2t +ab1ū2 +abū4s +abū́2 +2abú +5abúndat +5a4b5úndā +5abúndem +5abúndes +5abúndet +5a4b5úndē +5a4b5úndō +abú2t +a3ca +a3cá +a3cæ +a3cǽ +1acc +2a3ce. +2a3cen +2a3ceq +2a3ceu +2a3cev +2aci +a3ci. +a3ciq +a3cis +a3ciu +a3civ +2a3cī +2ací +a3cl +2a3co +aco3ni +2a3cō +2a3có +2acum +2acus +a2cut +1a2c2ū +2acúm +2acús +a2cút +ad1 +ad2ad +ada4ma. +ad6amans +ada6mante. +ada6mantem +ada6manten +ada6manteq +ada6mantes +ada6manteue +ada6mantev +ada6mantēs +ada6mantḗs +ad6amanté +ada6mantém +ada6mantés +ada6manti +ad6amanti. +ad6amantib +ad6amantin +ad6amantiq +ad6amantis +ad6amantiu +ad6amantiú +ad6amantiv +ad6a6mantī +ada6mantí +ad6amantín +ad6amantíq +ad6amantís +ad6amantíu +ad6amantív +ad6amas. +ad6amasn +ad6amasq +ad6amasu +ad6amasv +ad6amāns +ad6amās. +ad6amāsn +ad6amāsq +ad6amāsu +ad6amāsv +ad6amā́ns +ad6amā́sn +ad6amā́sq +ad6amā́su +ad6amā́sv +ad6amáns +ad6amánte +ad6amántē +ad6amánti. +ad6amántib +ad6amántis +ad6amántiu +ad6amántī +ad6amásn +ad6amásq +ad6amásu +ad6amásv +ad2an +a2dap +ada2q +ad2ar +ad3ác +adæ2 +adǣ2 +1add +ade4d +ade2g +ade2q +ade4s +adē2d +adē2g +adē4s +adḗ4d +adḗ4g +adḗ4s +adé2d +adé2g +adé2s +1adh +ad3iác +adi2c +adi2g +adi4mí +adi2r +adi4tā +adi4tǣ +adi4tī +adi4tū +adī2m +adī2r +adī2t +adī́4m +adī́4r +adī́4t +adí2b +adí2g +adí4mu +adí2r +ad3íss +ad3íst +adí4to +adí4tu +1adj +1adn +a2do2 +a3do. +ad4oc +a3don +a3doq +a3dou +a3dov +adō2 +ad4ōc +ad5ṓ6rant +ad5ṓ6rat +ad5ṓ4rā +ad5ṓ6rem +ad5ṓ6rent +ad5ṓ6rer +ad5ṓ6ret +ad5ṓ4rē +adṓ6ror +adó6rans +adó6rant +adó4ras +adó4rat +adó4rem +adó6rent +adó4rer +adó4res +adó4ret +adó4ria +adó4ror +1adp +1ads +adu2 +a2dul +ad3u4r +ad3us +adū2 +adū́2 +a2dú2l +adú2r +ae1 +2ae. +2aea +aea2b3 +a3eamú +a3eant +2aeā +a3eām +a3eā́m +2aeă +aeắ2 +2aeá +ae3ác +a3eánt +ae3áp +ae4cue +1ae3d2 +aed4o +2aee +ae2eo +ae2eō +ae2eó +ae3es +ae2eu +2aeĕ +aeé2r +ae3és +ae3g2 +2aei2 +ae3ic +2ae2ī +2aeí +2aen +aení3t +2ae2o +2ae2ō +2aeó +aepo6tés +aepó6tes +ae3q +4aeque. +4aequĕ. +ae3r +aer4i +ae4rn +ae4rq +ae4rv +ae5sci +ae4scu +ae4scú +ae4spō +ae2sq +aes4te +aesti5t4 +aestí5t4 +aetere6ri +aete6re6rí +aete6res +aete6rés +aete6ri. +aeter5ii +aeter5ií +aeteri6mu +aeteri6mú +aeteri6n +aete6ri6q +aeteri6ti +aeteri6tí +aeteri6to +aeteri6tó +aeteri6tú +aete4r5ī4 +aeterī́6 +aete6r5í6mu +aete6rí6n +aete6rí6q +aete6rí6t +aeter5íti +aete6rí6u +aete6rí6v +a3e2tē +ae5tĕr +aeté6r5es +aeté6ri. +aeté6r5ii +aeté6rite +aeté6ri6ti +ae2un +ae3ut +2aeŭ +2aeú +aex2 +ae2xu +aé2ru +1af +afe4r +afé2 +ag2a +a3gae +a3ga͞ +a3ga͡ +a3gā. +a3gān +a3gāq +a3gāu +a3gāv +a3gáe +a3gál +a3g2æ3 +a3g2ǣ +a2geb +a2ger +a2get +1a2gē +a3gē. +a3gēq +a3gēu +a3gēv +a2géb +a2gét +a2gim +agi6ste +agi6str +a2gím +a2gít +a2gn +ag3ne +ag3ni. +ag3nin +ag3niq +ag3nis +ag3niu +ag3niv +ag3nī +ag3nín +ag3níq +ag3nís +ag3níu +ag3nív +ag3no. +ag5norum +ag5norúm +ag5nos. +ag5nosn +ag5nosq +ag5nosu +ag5nosv +ag5noue. +ag5nove. +ag3nō +ag3nón +ag3nóq +ag5nórum +ag5nósn +ag5nósq +ag5nósu +ag5nósv +ag5nóue. +ag5nóve. +ag3nu +ag3nú +a3gri +a3grī +a3grí +a2gun +a2gún +a1h +ai2a +aiad2 +ai4an +ai2á +a1ib a1ie -a1io +a1i2i +a1iī +a2i3m +ai4mn +ai4mq +ai4mv +ai2nu +aio2s +a1iō +a1is +a1it a1iu -ae1a -ae1o -ae1u -e1ia -e1ie -e1i2u -io1i -o1ia -o1ie -o1io -o1iu +a1ī2b +aīn3 +aī2nu +a1ī2r +a1īs +aī́2b +aī́2r +aī́2t +a1í2b +a1íi +a2í3me +a1í2r +a1í2t +a3la +alae2 +a3lá +alæ2 +alǣ2 +2a3le +ale2i +alē2i +2a3lé +a3li. +a3lia +a3lib +a3lii +a3lií +a3lin +a3lio +a3liō +a3lió +a3liq +a3lis +a3lit +a3liu +a3liú +a3liv +2a3lī +2a3lí +2alu +a2l3ua +a2luā +a2l3uá +a2l3uæ +a2luǣ +a2l3uǽ +al3ue. +al3uen +al3ueq +al3ueu +al3uin +al6uine. +a4l5uis. +a4l5uisn +a4l5uisq +a4l5uisu +al3uīs +al5uī́s +a4l5uísn +a4l5uísq +a4l5uísu +a3l4um +al3uó +a3l4us +alu6ste +a3l4ut +al3uu +al3uú +alū6ste +2alú 2am. -2at. +am2a +4amantē +6amantéa +6amantéæ +6amantée +6amantéi +6amantéo +6amantéu +a4mantō +1a2mā +1amb +am2be +amb3és +am4b5i4mu +am4b5i4mú +am4b5it. +am6b5i6te. +am6b5i6ten +am6b5i6teq +am6b5i6teu +am6b5i6tev +ambi4ti +am4b5i4tí +am4b5itn +am4bi4to +am4b5i4tó +am4b5itq +am6b5itue +am4bitú +am4b5itv +am6bi6ui. +am6bi6vi. +am4bít +am4b3u4r +am4b3us +ambūbā6i +ambūbē6i +am4bū4r +am4b3ū́4 +am4b3ú4r +am2e +ame3g +am4es +ame3sæ +ame3sǽ +am2ē +am2é +am4és +amé3sa +am2i +3a2mic +2amin +ami4s3 +ami6ste +ami6str +3a2míc +2amm +2amn +3amnæ +3amnǣ +3amnǽ +1amo +a2móe +1amœ +1amp +2amq +2a1mu +am4uel +am2uē +am2ué +a2mui +a2muī +a2m3uí +a3mur +a3mus +2a3mú +2amv +2an2a +an2ā +2aná +2anæ +2anǽ +1anc +an2cu +2and +ande4s3 +2ane +a3nē +1anh +1ani +a2nim +2anī +3a2ním +2a3n2o +ano3p +2anō +2a3nó +2ans1 +an2sa2 +ans3ab3 +ansabi4 +ansabí4 +an4sá4b3 +an4s3ci +an4scí +an4sea +an4seá +an4seo +an4seó +an4si4b +an4sig +ansi4mi +an4si4t +ansi4u +an4si4v +an4sí4b +an4síe +an4síg +an4sí4m +an4sí4t +ansí4ui +ansí4vi +an4sn +an2sp +an4sq +ans3t +an4sv +2ant. +ante5re +an4t5ero +an4t5erō +an4t5e4ró +an5tes +antes4t +ante5stāti +ante5stā́ti +ante5stem. +ante5stemn +ante5stemq +ante5stemue +ante5stemv +ante5stes +ante5stēs +ante5stḗs +ante5stémn +ante5stémq +ante5stémue +ante5stémv +ante5stés +anté5ii +antés4t +anté5stem +anté5stes +anté5stē +2antn +2antq +2antu +2antú +2antv +2a1n2u +a2n3ue +an2ū +2anú +ao1n +a2one +ao3ni +ao2ny +ao2ný +a1or +aō2ny +aō2ný +a3ṓ4ny +a3ó2ny +aó1r +1ape1 +ape2i +ape3r4e +aper4ē +aper4i +ape3r4ī +aper4í +aperí5tur +aper4u +2aph +a3pi +apis3 +api6str +a3pí +a2pn +apo5str +apo4su +1apó +após3 +1app +appár4 +apule4 +aput3 +a3pú +a2qua +a2quā +a2quá +a3que. +a2quē +a2quo +a2quō +a2quó +a1r +2ar. +ar2a +arab2 +1arā +2arám +ardē2 +ar2e +2are. +are2i +2aren +2areq +2arer +3a4resc +2areu +2arev +arē2i +a3rēu +a3rēv +2aré +3a4résc +2ar2i +3arid +ari5do +ari3ni +2arí +3aríd +1arm +2arn +arpē4i +2arq +ar2sp +3a2r3ua +3a2r3uā +3a2r3uá +ar3uæ +ar3uǣ +ar3uǽ +ar3ue. +a4r3uen +a4r3ueq +ar4uer +a4r3ueu +ar4ui. +ar4uin +ar4uiq +ar4uis +ar5uis. +ar5uisn +ar5uisq +ar5uisu +ar4uiu +ar3uī +ar5uísn +ar5uísq +ar5uísu +2a3rum +2a3run +a2r3uo +a2r3uō +a2r3uó +a3rus +aru3sp +a2r3uu +a2r3uú +2a3rú +arú3sp +2arv +3arva +3arvā +3arvá 2as. -2ans. -2ax. -4ant. -2es. -2et. -2em. -2ex. -e5us. -2is. -2im. -2it. -2ix. -2yx. -2ys. -2ox. -2ui. -2ux. -i3um. -i3ur. -i3unt. -i3ui. -tru5us. -tru1um. -.i2a -.i2e -.i2i -.i2o -.i2u -.iuu2a -.iuu2e -.iuu2o -.iei2u -.iai2u -.iuu2i -i2oi2u -i3u2ia -i3ui3ua -i3ui3ue -i3ui3ui -i3ui3uo -i3ui3uu -e1ui1ue -e1ui1ui -e1ui1uo -i2y -uo3u -.ua3ua -.uo3ue -.ue1io -.u2a -.u2e -.u2i -.u2o -.u2u +2asca +2ascá +as6cendā +as6cende +as6cendī +as6cendō +as2cē +as6céndā +as6céndī +as6céndō +2as3ci +2ascí +2asco +2ascó +a3scr +as4cri +2ascu +2ascú +a3s2e +ase2i +as4er +asē2i +a3sé +a3s2i +a3sí +2asn +1asp +as5per. +as5pera +as5perā +as5perá +as5peræ +as5perǣ +as5perǽ +as5pere +as5perē +as5peré +as5pe5ri +as5pe5r4ī +as5per4í +as5perne. +as5pero +as5perō +as5peró +as5perq +as5peru +as5perú +as5perv +a4s3pē +as5péra +as6pérna +as5pérq +as5péru +as5pérv +a4spi +as3pis +a4s3pī +a4spí +as3pís +as3po +as3pō +as3pó +as3pum +as3púm +2as3q +2ass +as2tā +as5te. +as5teq +as4ter +as5teu +as5tev +as2tē +4a4s3ti. +4a4s3tin +4a4s3tiq +4a4stis +4a4stiu +4a4s3tiv +2as3tí +a4stín +a4stíq +a4stís +3as4tít +a4stíu +a4stív +as3to +2astr +as4tras +as4trau +as5traue. +as4trav +as5trave. +as4trát +as4tráu +as4tráv +as4trid +as4tríd +as5trum +as4trúe +2asu +a3s2ua +a4s3ue +as3uis +as3uís +2asv +2at +at3a4g +ata5str +a2t3á4g +ate4ie +ate4io +ate4ió +ate4iú +ate2ī +ate3r4a +ate3rǣ +ate5re +ate5ré +ate3ri +ateri5u +ateri5v +ate5rī +aterī5u +aterī5v +ate3ro +ate3rō +a3ti +ati4s +atis5t +ati6sta +a3tí +ato2i +ató2i +1att +a3tur +a3tú +a1u +au3a͞ +a2u1ǣ2 +au3d2 +2a3ue +2a3ué +1aug +2aui +2auí +a2ul +a2u1m +a2un +aupe5re +aupe5ri +auperi5n +auperi5q +auperi5ue +auperi5v +aupe5r4ī +auperī5n +auperī5q +auperī5u +auperī5v +a2u1r +a2ut +1auu +a2ux +au2xu +2av +av3a͞ +a2v1ǣ +a3ve +a3vé +1avu +ax2 +ax4eu +a2xia +a2xiá +a2xiæ +a2xiǽ +a2xié +a2xii +a2xií +a2xio +a2xió +a2xiú +a2xía +a2xíe +ax3ue +ax4us +a2͞ +4a͞e. +2a͞ea +2a͞eā +2a͞eă +2a͞eá +2a͞eī +4a͞en +6a͞eque. +6a͞equĕ. +a͞u6ste +a͞u6stĕ +4á͞ea +4á͞eā +4á͞eă +4á͞eī +4á͞en +a2͡ +4a͡e. +2a͡ea +2a͡eā +2a͡eă +2a͡eá +2a͡ei +2a͡eī +2a͡eí +4a͡en +6a͡eque. +6a͡equĕ. +a͡ete6res +a͡ete6rés +a͡eté6r5es +a͡u4st +a͡u6ste +a͡u6stĕ +4á͡ea +4á͡eā +4á͡eă +4á͡ei +4á͡eī +4á͡en +6á͡eque. +2āb2 +āba2 +ābá2 +ābī3u +ābī3v +ābo2 +āb4un +2ācĕ +ācé2 +2ācī +2ācĭ +1ā2cr +1āct +ā2c3ue +āda2 +ādá2 +ādē2s +ā3do2 +ād4or +ādó2 +āe1 +āe3r +āē2 +āēr3 +āḗ2 +āĕ1 +āĕ3r +āĕr4ĕ +āg2a +ā2gā +ā2gă +ā3g2æ3 +ā3g2ǣ +ā2ge +āge2r +ā2gĕ +ā2gé2 +ā2gn +ā2go2 +ā2gŏ +ā2gó +ā1i +ā2ia. +āiad2 +ā2iam +ā2ian +ā2iaq +ā2iau +ā2iav +āi2ā +ā4iāque +ā4iāue +ā4iāve +ā6iā́que +ā4iā́ue +ā4iā́ve +ā2iám +ā2id +ā2ien +ā4iḗne +ā6iḗque +ā4iḗue +ā4iḗve +ā2iī. +ā4iīne +ā4iīque +ā4iīue +ā4iīve +ā4iī́ne +ā6iī́que +ā4iī́ue +ā4iī́ve +ā2io +ā2iō. +ā4iōne +ā4iōque +ā4iōru +ā4iōrú +ā4iōs. +ā4iōsne +ā6iōsque +ā4iōsue +ā4iōsve +ā4iōue +ā4iōve +ā4iṓne +ā6iṓque +ā4iṓru +ā6iṓsne +ā6iṓsque +ā6iṓsue +ā6iṓsve +ā4iṓue +ā4iṓve +ā2ió +ā2is +ā2ium +ā2ius +ā2iús +ā1ĭc +ā2íe +2āl +āle2r +ā3li +ālo2 +2ā1m2 +āme4r3 +āmĭ́5c +āmo2 +ā3na +ā3n2ā +ā3nă +ā3ná +ā3næ +ā3nǣ +ā3nǽ +ā3ne +āne2r +ā3nē. +ā3nēn +ā3nēq +ā3nēu +ā3nēv +ā3n2ĕ +āné2 +āno2 +ā3nō +2āns +ān2s3a2 +ānsab3 +ān2să +ānsá2 +ān4s3áb3 +ān4scī +ān4s3ea +ān4s3eā +ān4s3eá +ān4s3eo +ān4s3eō +ān4s3eó +ān4s3ĕā +ān4s3ĕă +ān4s3ĕō +ān4s3ĕŏ +ān4s3i4b +ān4sig +ān4s3iī +ān4s3i4t +ān2s3ī2 +ānsī́4m +ānsī́4t +ān4s3ĭ4b +āns3ĭē +ān4sĭg +ān4s3ĭī +ān4s3ĭ4t +āns5ĭ́4b +ān4s5ĭ́ĕ +ān4s5ĭ́g +ān4s3í4b +ān4síe +ān4síg +ānsí4t +āns5íta +āns5íte +āns5íti +ān2sp +ān4s3t +ā1nu +ā2n3ue +ā3nus +ā3nŭ +ā3nú +ā1ō +āpē2 +ā3pi +ā3pĭ +ā3p2t +2āq +ā1r +2āra +2ārā +2ārá +2ā3r2e +ā3rē +ārē2i +2ārēm +2ārēr +4ārēs. +3ā4rēsc +4ārēsn +4ārēsq +4ārēsu +4ārēsv +2ārēt +2ārḗ +5ā4rḗsc +2ā3r2ĕ +2āré2 +2āria +2āriā +2āriá +2āriæ +2āriǣ +2āriǽ +ā2rid +āri5dō +2ārie +2āriē +2āriī +2ārim +2ārin +2āriō +2āris +2ārit +2āriu +2āriú +2ārī +2ārĭ +3ā2rĭd +ārĭ5dō +3ā4rĭ́d +2ārí +3ā2ríd +āro2 +2ārō +āró2 +ār2s3p +ār2u +ār3ue. +2ārum +2ārun +2ārŭ +ār4ŭn +2ārú +2ās +ās2ca +ās2că +ās3cī +ās2i +āsi2n +āso2 +ā2s3q +ās5ter +ās5tĕr +ā2s3ti +ā2s3tī +ā2s3tĭ +ā2s3tí +ā2s3ue +ā2s3uĕ +2āt +āté2 +āto2 +ātō2i +ātó2 +2ā1u2 +2āv +āx2 +ā2x3u +2ā2́ +ā́b2 +ā́4crĕ +ā́4crĭ +3ā́ctē +3ā́cti +ā́2f +ā́2go +ā́2gŏ +ā́3ici +ā́3iul +ā́3ĭcĭ +ā́3lu +ā́1m2 +ā́n4s5ea +ā́n4s5eā +ā́n4s5eo +ā́n4s5eō +ā́n4s5ĕā +ā́n4s5ĕă +ā́n4s5ĕō +ā́n4s5ĕŏ +ā́n4s5iī +ā́n4s5i4t +ā́n4s5ĭī +ā́n4s5ĭ4t +ā́3p2t +ā́3rĕ +3ā́4rid +3ā́4rĭd +ā́r4uī +ā́5s4trŭ +ă1ā2 +ă3āt +ă3ā́2 +ăb1 +ăb2a +2ăbă +ăb2ăc +ăbă4l +ăb2ăq +ăbă6stĕ +ăb2ắ +ăb3ắl +ăb2á +ăbæ3 +ăb2e +2ăbē +ăb2ēs +ă2bi +ăbī2m +ăb4ĭēs +ăb4ĭḗs +ăb3ĭī. +ăb3ĭīn +ăb3ĭīq +ăb3ĭīu +ăb3ĭīv +ăb5ĭī́n +ăb5ĭī́q +ăb5ĭī́u +ăb5ĭī́v +ăbĭ́4g +ă2bl +ăbŏ2 +ăbŏ3lŭ +ăbŏ́2 +ăb3r +ăb4ră +ăb2sq +ăb4stēm +ăb6stḗm +ăb4stĭ +ăbs3tr +ăb4strū +ăb4strŭ +ăb4stŭ +ăb2su +ăbū2 +ăbū́4 +ă2bŭ +ă3bŭm +2ăca +2ăcā +2ăcă +2ăcá +2ăcæ +2ăcǣ +2ăcǽ +1ăcc +2ăcē +ă3cĕ. +ă3cĕn +ă3cĕq +ă3cĕu +ă3cĕv +2ă3cī +2ăcĭ +2ă3cō +ă2cu +1ă2c2ū +2ăcŭm +2ăcŭs +ă3cŭ́m +ăd1 +ădă2 +ăd2ăd +ăd6ămāns +ăd6ămās. +ăd6ămāsn +ăd6ămāsq +ăd6ămāsu +ăd6ămāsv +ăd6ămā́ns +ăd6ămā́sn +ăd6ămā́sq +ăd6ămā́su +ăd6ămā́sv +ădă6măntēs +ădă6măntḗs +ăd6ămăntĕ +ăd6ămăntī +ăd6ămăntĭb +ăd6ămăntĭs +ăd6ămăntĭŭ +ăd6ămăntĭ́s +ăd6ămắntē +ăd6ămắntĕ +ăd6ămắntī +ăd6ămắntĭb +ăd6ămắntĭs +ăd6ămắntĭŭ +ăd2ăn +ădă4q +ădæ2 +ădǣ2 +ă3d2e +ăde4u +ădē2d +ădē2g +ădē2s +ădḗ4d +ădḗ4g +ădḗ4s +ădĕ2d +ădĕ2q +ădĕ́4d +ă2di +ădī2m +ădī2r +ădī2t +ădī́4m +ădī́4r +ădī́4t +ădĭ2c +ădĭ4ta +ădĭ4tā +ădĭ4tă +ădĭ4tá +ădĭ4tæ +ădĭ4tǣ +ădĭ4tǽ +ădĭ4tī +ădĭ4tū +ădĭ́4c +ădĭ́4tă +ădĭ́4tĭ +ădō2 +ăd4ōc +ăd5ṓ4rā +ăd5ṓ6rănt +ăd5ṓ6răt +ăd5ṓ4rē +ăd5ṓ6rĕm +ăd5ṓ6rĕnt +ăd5ṓ6rĕr +ăd5ṓ6rĕt +ădṓ6rŏr +ă2dŏ2 +ă2du +ădū2 +ădū́2 +ădū́4l +ădŭ2 +ă1ĕ2 +1ăf +1ăg +ă3g2a +ă2găr +ă2găt +ă3g2æ3 +ă3g2ǣ +ă2gē +ă3gē. +ă3gēq +ă3gēu +ă3gēv +ă2gĕ +ă3gĭb +ăgĭ6stĕ +ă2gĭt +ă2gn +ă3grī +ă2gŭn +ă1h +2ă1i +ă1ī2b +ă1ī2r +ă1īs +ăī́2b +ăī́2r +ăī́4t +ă1ĭĕ +ă1ĭĭ +ă3ĭ2t +ă3ĭ́ĕ +ă3ĭ́ĭ +ă3ĭ́2t +2ăj +ălae2 +ă3lă +ălæ2 +ălǣ2 +2ălē +2ălĕ +2ă3lī +ă3lĭă +ă3lĭō +ă3lĭŭ +ă3lĭ́ +ă2l1u +ălū6stĕ +2ălŭ +2ăm. +ă1ma +1ă2mā +ă1mă +4ămăntē +3ă2măt +1ămb +ăm2bĕ +ăm4b5ĭt. +ăm4b5ĭtn +ăm4b5ĭtq +ăm4b5ĭtu +ăm6b5ĭtŭ́ +ăm4b5ĭtv +ăm6b5ĭ́tn +ăm6b5ĭ́tq +ăm6b5ĭ́tu +ăm6b5ĭ́tv +ămbūbā́5i +ămbūbḗ5i +ăm4bū4r +ăm4b3ū́4 +ăm4b3ŭs +ăm2e +ăm2ē +ăm2ĕ +3ămīc +ăm3ĭc +ămĭ6stĕ +2ămm +2ămn +3ămna +3ămná +3ămnæ +3ămnǣ +3ămnǽ +1ămo +1ă2mó +1ămœ +1ămp +2ămq +2ămu +2ămv +ăn2ā +2ă3n2ă +1ănc +2ănd +ă3nē +2ă3n2ĕ +1ănh +2ă3nī +1ănĭ +ă2nĭm +2ă3nō +2ă3n2ŏ +2ănt. +ăn4t5ĕ4rō +ăn5tĕs4 +ăntĕ5stātĭ +ăntĕ5stā́tĭ +ăntĕ5stēs +ăntĕ5stḗs +ăntĕ5stĕm +ăntĕ5stĕ́m +ăntĕ́s4 +ăntĕ́5stē +ăntĕ́5stĕm +2ăntn +2ăntq +2ăntu +2ăntŭ +2ăntv +ăn2ū +2ă3n2ŭ +ăō2ny +ă3ṓ4ny +ă3pe +1ăpĕ +ăpĕ3rĕ +ăpĕ3rī +ăpĕ3rŭ +ă3pé +ă2pn +1ăpŏ +1ăpp +3ă2quā +3ă2quă +3ă2quē +3ă2quō +3ă2quŏ +2ăr. +ă1ra +ă1r2ă +ără3bŭ +ă3răg +ără3gĕ +ă1ræ +ă1rǣ +ărdē2 +ă3r2e +ă3rēu +ă3rēv +ă1r2ĕ +ă3rh +ă1rī +ă3r2ĭ +2ărn +ă1ro +ă1rō +ărpē3i +ărpḗ5i +2ărq +ăr2su +2ăr1u +3ăruā +ă1rū +ă1rŭ +2ărv +3ărvā +ă1ry +2ăs. +1ăsc +ăsce2 +ăs2cē +ăs2cĕ +ăscé2 +ă3s2ĕ +ăs4ĕr +ă3sĭ +2ăsn +ă2sp +ă4s3pē +ăs5pĕr. +ăs5pĕra +ăs5pĕrā +ăs5pĕră +ăs5pĕrá +ăs5pĕræ +ăs5pĕrǣ +ăs5pĕrǽ +ăs5pĕrē +ăs5pĕ5rī +ăs5pĕrnĕ. +ăs5pĕrō +ăs5pĕrq +ăs5pĕru +ăs5pĕrŭ +ăs5pĕrv +ă4s3pī +ă4spĭ +ăs3pĭs +ăs3pō +ăs3pŏ +ăs2pŭ +2ăs3q +2ăst +ăs2tā +ăs4tăn +ăs2tē +ăs2tĕ +ăs3tĕ. +ăs3tĕq +ăs3tĕu +ăs3tĕv +4ăstr +ăs3tră +ăs3trō +ă3strŏ +ăs4trŭ +2ăs3u +2ăsv +ă3ta +ă3tā +ătă5str +ătắ2 +ă4t3ắg +ă3tá +ă3tæ +ă3tǣ +ă3tǽ +ă3tē +ătḗ3i +ătĕ2ī +ătĕ3r4a +ătĕ3rǣ +ătĕ3rĕ +ătĕ5rī +ătĕrī5u +ătĕrī5v +ătĕ3rŭ +ă3tī +ă3tĭ +ătĭ4s +ătĭs5t +ă3tr +1ătt +ă2tu +ă1u +ă2u1a +ă2u1á +ă2uæ2 +ă2u1ǣ2 +ă2uǽ +ă3uĕ +ă3uŏ +ă2v1a +ă2v1á +ă2væ +ă2v1ǣ +ă2vǽ +ă3vĕ +ăx2 +ă2xu +ắb5ĭī. +3ắbl +ắb6stĭn +ắb4s5tr +ắ3bŭ +ắdă4 +ắd6ămān +ắd6ămās +ắd3ăq +3ắdd +ắd3ĕŏ +ắd3ĕs +3ắdh +ắd3ĭ4c +ắd3ĭĭ +ắd5ĭ4ta +ắd5ĭ4tā +ắd5ĭ4tă +ắd5ĭ4tæ +ắd5ĭ4tǣ +ắd5ĭ4tī +ắd5ĭ4tū +3ắdj +3ắds +ắ1ĕ +1ắf +3ắgg +ắ4gĭĕ +2ắ1i +ắ3ĭēn +ắ3ĭī. +ắ3ĭ2t +2ắj +ắl3u +ắm4b5ĭt +3ắmna +3ắmnæ +3ắmnǣ +3ắmp +3ắmt +ắ4nĭm +ắn2ŏ +ắn6tĕrō +3ắntr +ắ2r +ắ3r2ă +ắră3g +ắ3rēn +ắ3rĕ +ắ3rī +ắ3rĭ +ắ3rŭ +ắ2sp +ắs4tān +ắs4tăt +ắs4tēs +5ắs4tĕm +ắs6tĕnt +5ắs4tĕt +5ắstĭt +2ắ2t +ắ3ta +ắ3tā +ắ3tă +ắ3tæ +ắ3tǣ +ắ3tē +ắ3tĕ +ắ3tī +ắ3tō +ắ3tŏr +ắ3tr +3ắtt +ắ3tū +ắ3tŭ +ắ3uŏ +áa2t +áb2ac +áb2a3q +áb3aui +áb3avi +áb2eq +áb2ia +á2bie +áb4ies +3á2biē +áb4iēs +3á2bii +áb4iis +3á2biī +áb3iī. +áb2iu +1ábī +3á2bl +áb2o +ábs2c +áb5sci +áb2sq +áb5s4te +áb4stin +áb3sto +áb4str +á3bu +2áce +áda2 +ád6amans +ád4amas +ád4amān +ád4amās +3ádd +áde2d +ád1ē +3ádh +á2d3i2c +ádi2g +ád2ip +ádi3pi +3ádj +1ádm +á3do +ád4ora +ádo4ri +á3dō +3áds +ád1u +á3eant +á3eat +áe2ă +áe4cue +áe3d2 +áe2eo +áe2eō +áe3es +áe3g2 +áei2 +2áen +2áe3q +3áequa +3áequā +3áequă +5áequem +5áequer +5áeques +5áequet +3áequē +5áequĕm +5áequĕr +5áequĕt +3áequo +3áequō +3áequŏ +áe1r +áer4i +áes4ca +áes4ci +áes4ta +áes4te +áes4tē +áes4tī +áes4tō +áete3 +áetĕ3 +áetĕ5r +áe3ut +áe2ŭ +áe2x +1áf +ág2a +á3gæ +1áge +á2ger +3ágg +á2giā +á2giæ +á2giǣ +á2giē +á2gim +á2git +á2gn +ág3no +á3gr +á1h +ái2a +á2ia. +á2iae +á2iam +á3iane +á3iaq +á2ias +á3iau +á3iav +á2ia͞ +á2ia͡ +á2iā +á2iæ +á2iǣ +á3ieq +á3ieu +á3iev +á2iis +á3iit +á1iī +á1i2t +á1iu +1álp +á2l3ua +á2luā +á2l3uæ +á2luǣ +á2l3ue +ál3uē +ál3uin +á4l3uis +ál3uīs +ál3uu +ám1 +á1m2a +1ámb +ám4bes +ám2bē +ám4b3ia +ám4biā +ám4b3io +ám4b3i4t +ámb4iui +ámb4iv +ám2e +áme3s +ám2ē +2ám2i +ám2ī +2ámn +3ámnæ +3ámnǣ +á1mo +3ámp +2ámq +3ámt +2ámu +á3m2uē +2ámv +án2cu +á2nim +3ánnu +án2o3 +án4s3ea +án4s3eo +án2si2 +áns3it +án4t3ea +ánte3i +ánt5ero +ánt5erō +3ántr +á1nu +án2ua +á2nue +án2uī +án2ū +ápe3r +á3pi +á2pn +2áq +á2qui +á1r +2ár2a +ár5cha +2árd +2áre +2ár2i +3árid +2áro +ár2sp +2áru +á2r3ua +á2r3uā +ár3uæ +á2rue +á4ruis +á3rum +á3run +á2ruo +á2r3uō +á2ruu +2ás +ás3c +ás4er +ás2i +áspe3 +ás3pī +ás2pu +ás4tān +ás4tēs +á4sti +ás5ti. +ás5tis +3ástit +ás3to +ás3tri +ás5trum +2át +át3a4g +áte3r +á5trix +3átt +á1u +2áue +á2ul +á2u1m +á2un +áupe3 +áupe5r +á2u1r +á2ut +á2ux +áu2xu +2áv +áx2a +áx4eu +áx2i +á2xia +á2xiæ +á2xii +á2xio +á2xiu +áx2ī +áx2o +áx2ō +áx4us +æ1 +2æa +æa2b1 +æa2m +æ2a3n +æ2a3q +æ2a3r +æ2as +2æ2ā +2æă +æ2ăn +æ2ă3q +æ2ău +æ2ăv +æắ2 +2æá +æá2c +æ2ám +æ2án +æ2ár +2æ2æ +2æ2ǽ +æb2 +æbe3r +æ2c3ue +1æd2 +æde2s +ædē2s +æ2di +æ2dĭ +æ3do +æd4or +æ3dŭ +æd4ŭĕ +2æe2 +æ2e3n +æ2eo +æ2eō +æ2eó +æ2e3q +æe4ra +æe4ro +æe4rō +æ3es +æ2eu +æ2eú +æ2ev +æex3 +2æ2ē +2æĕ2 +æ2ĕō +æ2ĕ3q +æĕ4rō +æ2ĕŭ +æĕ́2 +2æ2é +æ3é2r +æ3és +æ2g2 +æge2 +ægé2 +æ3gn +2æi2 +æ3ic +æ2in +æ2i3q +æ2is +æ2i3ue +æ2i3v +2æ2ī +æĭ2 +æĭ́2 +2æ2í +æ3í2c +æmo4nu +æmō2 +2æn +æn2ā +æ3ne +æne3ī +æ3nē +æ3nĕ1 +æ3né +æ2nin +æni3t +æn1ī +æní3t +2æ2o +2æ2ō +æ2ŏ +2æ2ó +æó2nu +æó1r +æpo6te6ri +æpo6te6rí +æpo4tes +æpo4tés +æpŏ4tĕs +æpó4tes +æ2qua +æ2quā +æ2quá +4æ3que. +4æquĕ. +æ4quĕm +æ4quĕr +æ4quĕt +æ4quĕ́ +ær2 +æ3ră +æres3 +æ3rē +ærĕ2s3 +æs2c +æs3cu +æs3cŭ +æs3cú +æs2i +æs2p +æspe3 +æs3po +æs3pō +æs3pó +æst2 +æsti5t4 +æstí3t4 +æte5ram +æte5ran +æte5rar +æte6re6ri +æte6re6rí +æte6reru +æte4res +æte4rés +æte4r3i4 +æte4r3ī4 +æterī́4 +æte4rí4 +æter5ímu +æter5íti +æter5íu +æter5ív +æte3ro +æte3rō +æte5run +ætĕ4r3ī4 +ætĕrī́4 +ætĕ4rĭē +ætĕ4r5ĭī +ætĕ4rĭt +ætĕr5ĭ6tā +ætĕrĭ6tĕ +ætĕ5rĭtĭ +ætĕrĭ6tō. +ætĕrĭ6tōn +ætĕrĭ6tōq +ætĕrĭ6tōu +ætĕrĭ6tōv +ætĕrĭ6tṓn +ætĕrĭ6tṓq +ætĕrĭ6tṓu +ætĕrĭ6tṓv +ætĕrĭ́4 +ætĕ6rĭ́ĕ +ætĕ6rĭ́t +ætĕ3rŭ +ætĕ́6rĕ6rĭ +ætĕ́4rī +ætĕ́6r5ĭī +ætĕ́6r5ĭt. +ætĕ́6r5ĭ6tā +ætĕ́6rĭ6tĕ +ætĕ́6rĭ6tō +æté6re6ri +æté4r5es +æté4ri. +æté4rie +æté4riē +æté4r5ii +æté4r5iī +æté4r5is +æté4rit +ætér5it. +ætér5ita +ætér5i6tā +ætéri6te +ætéri6ti +ætéri6to. +ætéri6tō +æ3tr +æu2 +æū2 +2æŭ +æ2ŭs +æ2ŭ́ +2æ2ú +æx2 +æ2x3u +ǣ1 +2ǣa +ǣa2b1 +ǣa2m +ǣ2a3n +ǣ2a3q +2ǣ2ā +2ǣă +ǣ2ăn +ǣ2ă3q +ǣ2ău +ǣ2ăv +ǣắ2 +2ǣá2 +ǣ2ám +ǣ3ámb +2ǣ2ǣ +ǣ2c3ue +1ǣd2 +ǣda2r +ǣdē2s +ǣ2di +ǣ2dĭ +ǣ3do2 +ǣd4or +ǣdó2 +ǣ3dŭ +ǣd4ŭĕ +2ǣe2 +ǣ2e3n +ǣ2eō +ǣ2e3q +ǣe4ra +ǣe4rō +ǣ3es +ǣ2eu +ǣ2eú +ǣ2ev +2ǣ2ē +2ǣĕ2 +ǣ2ĕō +ǣ2ĕ3q +ǣĕ4rō +ǣ2ĕŭ +ǣĕ́2 +ǣé2 +ǣ3és +ǣ2g2 +ǣge2 +ǣgé2 +ǣ3gn +ǣi2 +ǣ3ic +ǣ2is +2ǣ2ī +ǣĭ2 +ǣĭ́2 +ǣí2 +ǣmō2 +2ǣn +ǣn2ā +ǣ3ne3 +ǣ3nē +ǣ3nĕ1 +ǣni3t +ǣn1ī +ǣní3t +ǣ2o +2ǣ2ō +ǣ2ŏ +ǣ2ó2 +ǣpote4 +ǣpo4t5er +ǣpo4t5es +ǣpoté4 +ǣpo4tér +ǣpo4t5és +ǣpŏ4tĕs +ǣpó4t3e +ǣ2quā +4ǣ3que. +4ǣquĕ. +ǣ4quĕm +ǣ4quĕr +ǣ4quĕt +ǣ4quĕ́ +ǣr2 +ǣra2r +ǣ3ră +ǣrá2 +ǣres3 +ǣ3rē +ǣrĕ2s3 +ǣro2 +ǣró2 +ǣs2c +ǣs3cu +ǣs3cŭ +ǣs3cú +ǣs2i +ǣs2p +ǣs3pō +ǣst2 +ǣsti5t4 +ǣstí3 +ǣstít4 +ǣte5ram +ǣte5ran +ǣte5rar +ǣte6re6ri +ǣte6re6rí +ǣte6reru +ǣte4r5es +ǣte6réri +ǣte4r5és +ǣter5iē +ǣter5iī +ǣte5rim +ǣter5i6tā +ǣteri6te +ǣte5riti +ǣte5rití +ǣte5rito +ǣteri6tō. +ǣteri6tōn +ǣteri6tōq +ǣteri6tōu +ǣteri6tōv +ǣteri6tṓn +ǣteri6tṓq +ǣteri6tṓu +ǣteri6tṓv +ǣte5ritó +ǣte5r6i5tur +ǣte5ritúr +ǣte4r3ī4 +ǣterī́4 +ǣterí4 +ǣte4ríe +ǣte4rít +ǣte3ro +ǣte3rō +ǣte5run +ǣtĕ4r3ī4 +ǣtĕrī́4 +ǣtĕ4rĭē +ǣtĕ4r5ĭī +ǣtĕ4rĭt +ǣtĕr5ĭ6tā +ǣtĕrĭ6tĕ +ǣtĕ5rĭtĭ +ǣtĕrĭ6tō. +ǣtĕrĭ6tōn +ǣtĕrĭ6tōq +ǣtĕrĭ6tōu +ǣtĕrĭ6tōv +ǣtĕrĭ6tṓn +ǣtĕrĭ6tṓq +ǣtĕrĭ6tṓu +ǣtĕrĭ6tṓv +ǣtĕrĭ́4 +ǣtĕ6rĭ́ĕ +ǣtĕ6rĭ́t +ǣtĕ3rŭ +ǣtĕ́6rĕ6rĭ +ǣtĕ́4rī +ǣtĕ́6r5ĭī +ǣtĕ́6r5ĭt. +ǣtĕ́6r5ĭ6tā +ǣtĕ́6rĭ6tĕ +ǣtĕ́6rĭ6tō +ǣté6re6ri +ǣté4r5es +ǣté4riē +ǣté4r5iī +ǣté6r5it. +ǣté6rita +ǣté6r5i6tā +ǣté6ri6te +ǣté6ri6tō +ǣu2 +ǣ3ue. +ǣue2r +ǣ3uĕ. +ǣū2 +2ǣŭ +ǣ2ŭs +ǣ2ŭ́ +2ǣ2ú +ǣ3úmb +ǣ3ve. +ǣ3vĕ. +ǣx2 +ǣ2x3u +ǣ2́ +ǣ́3da +ǣ́3dă +ǣ́3e2r +ǣ́3es +ǣ́3ĕ2r +ǣ́2g2 +ǣ́3gn +ǣ́4gr +ǣ́1i2 +ǣ́1ĭ2 +ǣ́3l +ǣ́2mu +ǣ́2mŭ +2ǣ́3n +3ǣ́4qua +3ǣ́4quā +3ǣ́4quă +5ǣ́4quem +5ǣ́4quer +5ǣ́4quet +3ǣ́4quē +5ǣ́4quĕm +5ǣ́4quĕr +5ǣ́4quĕt +3ǣ́4quo +3ǣ́4quō +3ǣ́4quŏ +ǣ́s4ca +ǣ́s4ci +ǣ́s4cī +ǣ́s4cĭ +ǣ́s4ta +ǣ́s4tă +ǣ́s4tǣ +ǣ́s4te +ǣ́s4tē +ǣ́s4tĕ +ǣ́s4tī +ǣ́s4tō +ǣ́tĕ3 +ǣ́4th +ǽ1 +2ǽ2a +2ǽ2ā +ǽ2ă +2ǽæ +ǽc3ue +ǽ3da +ǽ3dă +ǽ2e +ǽ3e2r +ǽ3es +ǽ2ĕ +ǽ3ĕ2r +ǽ3ĕs +ǽg2 +2ǽi2 +ǽ2is +2ǽ2ī +ǽĭ2 +ǽ2mu +ǽ2mŭ +2ǽn +ǽ3ne +ǽ3nĕ +ǽ2o +ǽ2ō +ǽ2ŏ +ǽ2qua +3ǽ2quā +3ǽ2quă +4ǽque. +ǽ4quem +ǽ4quer +ǽ4ques +ǽ4quet +3ǽ2quē +3ǽ4quĕm +3ǽ4quĕr +3ǽ4quĕt +ǽ2quo +3ǽ2quō +3ǽ2quŏ +ǽr2 +ǽ3ră +ǽst2 +ǽ2stu +ǽte1 +ǽtĕ3 +ǽu2 +ǽ2um +ǽ2ŭ +ǽ3ŭt +ǽ2x 1b -2bb +3ba. +bab2o +bab4u +ba2c +ba3ci +ba3cí +b2acu +b2acú +2b1a2d3 +3bae +b2aeq +b2aeu +b2aev +ba2g +ba3gē +ba3gu +ba3gú +ba3ian +ba3ián +ba3ion +ba3ió +ba2it +ba3iú +b1a2l +b2ami +b2an +b2ap +b1a2q +ba3que +ba2rā +b2a2ru +5barum +ba4sp +bas5pe +bas3t +bas5te +bas5tr +b3a2tr +ba4uen +ba4ueq +ba4ueu +ba2uī +ba2uo +ba2uō +ba2uó +ba2uu +ba2uú +3bav +ba4ven +ba4veq +ba4vev +b3a2vī +b3a2vo +b3a2vō +ba2vó +b3a2vu +ba2vú +2b1a2x +b1āc +2b1ā2g +bā2ic +bā2ĭ +b2ān +b2ār +b3ā2tr +b3ā́c +2b3ā́2g +b1ăb +3bă2c +bă3cŭ +b1ă2d3 +bă2g +bă3gē +bă3gŭ +3bă2l +băm3 +b2ăn +b2ăp +b1ă2q +b3ă2rŏ +3bărr +bă4sp +băs5pĕ +băs3t +băs5tĕ +băs5tr +b2ăt +bă4uĕn +bă4uĕq +bă4uĕu +b3ă2uī +b3ă2uō +b3ă2uŭ +bă4vĕn +bă4vĕq +bă4vĕv +b3ă2vī +b3ă2vō +b3ă2vŭ +b1ă2x +3bắc +b3ắ2d3 +b2ắn +b3ắ2u +b3ắ2v +b3ắ2x +b2áb +b1ác +2b1á2d3 +b2áeu +b2áev +2b1á2g +bá3ian +b2án +bá2ru +b3ásp +b2áu +bá4uen +bá4ueq +bá4ueu +bá4ven +bá4veq +bá4vev +2b1á2x +b1æ2 +b2æ3q +b2æu +bæ3ue +bæ3uĕ +b2æ3v +b1ǣ2 +b2ǣ3q +b2ǣu +bǣ3ue +bǣ3uĕ +b2ǣ3v +b2ǣ́ +b3ǣ́m +b2ǽq +b2ǽu +b2ǽv +2bb2 +b3ba +bba3q +b3bā +b3bá +b3bæ3 +b3bǣ +b3bǽ +b3be3 +b3bē +b3bé +b3bi +b3bī +bbī3u +bbī3v +b3bí +b3bo +b3bō +b3bó +b3bu +b3bŭ +b3bú +2bc 2bd -2bh -b2l -2bm -2bn -2bp -b2r -2bt -2bs -b3s2t -2b. -.b2 +bde2s +bdē2s +b3do +bd4or +bdū3r +be2a +3beæ +3beǽ +3bec +becī́3 +b1ed2 +be2dā +be2de +be2dē +be2dé +be2d4i +be2dī +be2dí +be2d4o +be2dō +be2dó +be2du +be2dú +3be2e +3beé +b1e2g +3bei +be3iǣ +be3iē +3beí +b2el +b2em +b2en +be4n3ia +be2o +b1e2q +be3ra +be5ra. +be5raq +be5rau +be5rav +be3r2æ3 +be3r2ǣ +ber2e +3berea +3bereá +3bereæ +3bereǽ +be4rec +3beree +3bereé +3berei +3bereí +3bereo +3bereó +3bereú +bere5x4 +be3rē +3beréa +be4réc +3berée +b3eréx +ber4i +be3ria +be3riá +be3rib +be3ri5c +3be3rie +3be3rié +be3rii +be3rií +3be3ri3n +be5rite +be3riu +be3riú +be3riv +be3rī +be4ríg +3berín +be4rít +be4rn +be3ro +be3rōr +be3rōs +be4rq +3berúm +be4rún +be4rv +be2s +be4sa +be4si +be4sn +be4so +be4sq +2best +be4su +be4sv +b1e2u +2beun +b1eú +b2ev +b1e2x +b2ēb +2b1ē2d +b1ē2g +bē6iaene +bē6iaeue +bē6iaeve +bē4iam +bē4ian +bē4iāne +bē6iāque +bē4iāru +bē4iārú +bē6iāsne +bē6iāsue +bē6iāsve +bē4iāue +bē4iāve +bē6iā́ne +bē6iā́ru +bē6iā́ue +bē6iā́ve +bē6iáene +bē6iáeue +bē6iáeve +bē4iám +bē4iæne +bē6iæque +bē4iæue +bē4iæve +bē4iǣne +bē6iǣque +bē4iǣue +bē4iǣve +bē6iǣ́ne +bē6iǣ́ue +bē6iǣ́ve +bē4iǽne +bē6iǽque +bē4iǽue +bē4iǽve +bē6iīsne +bē6iīsue +bē6iīsve +b2ēm +b2ēn +bē3ne +bē2s +bē4sa +bēs3tĭ +b2ēu +b2ēv +2b3ḗ2d +bḗ2g +bḗ3l2 +b2ḗm +bḗ2s +b3ḗse +b3ḗsĕ +b3ḗsī +b3ḗss +b3ḗst +b2ḗu +b2ḗv +3bĕ. +3bĕa +bĕ2ă +3bĕæ +3bĕǣ +3bĕc +bĕcī́3 +b1ĕd2 +bĕ3da +bĕ2dā +bĕ4dă +bĕ2dē +bĕ2dĕ +bĕ2dī +bĕ2d4ĭ +bĕ2dō +bĕ2dŏ +bĕ2dŭ +3bĕē +3bĕĕ +3bĕī +3bĕl +b2ĕm +3bĕ2q +bĕ3r2a +bĕ3r2æ +bĕ3r2ǣ +bĕ3rē +bĕ3r4ĕ +bĕ3rī +bĕ3rŏ +b3ĕrŭn +b1ĕs +b2ĕt +3bĕu +2bĕŭn +3bĕv +2b1ĕx +bĕ́4dĭ +bĕ́2q +bĕ́3rĕ +b1éd +bé2di +b1é2g +bé1i +bé3ie +bé3iē +b2él +b2é1m +bé4n3ia +3béra +3bérie +bé4rig +bé4rim +bé4riti +bé2ru +bé2s +bé4sa +b3ése +b3ési +b3éss +b3ést +b1é2x +2bf +b1h +bi2a +3b2ia. +3b2ian +3b2iaq +3b2iau +3b2iav +b2iā +b4iā́n +2biă +3b4iáni +3b4iáno +b2iæ +b2iǣ +b2iǽ +b1i2c +b1ie +3bieg +b1iē +2biĕ +b1ié +3biég +2b1i2g +5bigena +5bigenā +5bigená +5bigenæ +5bigenǣ +5bigenǽ +5bigenen +5bigeneq +5bigeneu +5bigenev +5bigenē +5bigené +5bigeni +5bigenī +5bigení +5bigeno +5bigenō +5bigenó +5bigenu +5bigenú +5bigéna +5b4igéne +bi4g3n +b1ii +3b4iis. +3b4iisn +3b4iisq +3b4iisu +3b4iisv +b2iī +3biīs +3biī́s +2biĭ +3b4iísn +3b4iísq +3b4iísu +3b4iísv +b2il +b1in +b3int +3b2io +bio2s +b2iō +b2ió +2b1i2r +b4i3ter +bi4tio +bi4tiō +4b3i4tud +4bi4tui. +4bi4tuin +4bi4tuiq +4bi4tuiu +4bi4tuiv +4bi4tuī. +4bi4tuīn +4bi4tuīq +4bi4tuīu +4bi4tuīv +6bi6tuī́n +6bi6tuī́q +6bi6tuī́u +6bi6tuī́v +4bi4tuín +4bi4tuíq +4bi4tuíu +4bi4tuív +4b3i4tuú +bi4tūd +bi4tūs +4bi4túd +b1iu +bi3u2b +2bi2ue +2bi2ué +4bi4uim +4bi4uin +4bi4uiq +4bi4uis +4bi4uit +4bi4uiue +bi3uī +2bi2uí +3biuía +b2ium +2biun +b2ius +b2iús +b1iv +bi2ve +2bi2vé +4bi4vim +4bi4vin +4bi4viq +4bi4vis +4bi4vit +4bi4viv +bi3vī +2bi2ví +3bivía +bi2x3 +b1ī +2bī2b +3bī3c +bī2mi +bī2mĭ +bī2r +b3ī2to +b3ī2tŏ +b3ī2tó +bī2u +bī2v +bī́2b +3bī́c +bī́2m +bī́2r +bī́4to +bī́4tŏ +bī́4ui +bī́4uī +bī́4uĭ +bī́4vi +bī́4vī +bī́4vĭ +b2ĭb +b1ĭ2c +b1ĭē +b1ĭĕ +3bĭĕg +3bĭĕ́g +2b1ĭ2g +5bĭgĕna +5bĭgĕnā +5bĭgĕnă +5bĭgĕná +5bĭgĕnæ +5bĭgĕnǣ +5bĭgĕnǽ +5bĭgĕnē +5bĭgĕnĕn +5bĭgĕnĕq +5bĭgĕnĕu +5bĭgĕnĕv +5bĭgĕnī +5bĭgĕnō +5bĭgĕnŭ +5bĭgĕ́nă +5bĭgĕ́nĕ +b4ĭīs +b1ĭĭ +b2ĭl +b2ĭm +b1ĭn +b4ĭ3tĕr +bĭ4tĭb +bĭ4tĭō +bĭ4tūd +b3ĭ4tūs +4bĭ4tŭī. +4bĭ4tŭīn +4bĭ4tŭīq +4bĭ4tŭīu +4bĭ4tŭīv +6bĭ6tŭī́n +6bĭ6tŭī́q +6bĭ6tŭī́u +6bĭ6tŭī́v +4b3ĭ4tŭŭ +bĭ́4cĭ +6bĭ́6gĕnĕ +4b5ĭ́4gĕq +4b5ĭ́4gĕr +4b5ĭ́4gĕu +4b5ĭ́4gĕv +4b3ĭ́4gĭ +4b3ĭ́gn +4b3ĭ́4gŭ +bĭ́4tĭb +6bĭ́6tŭī. +4b5ĭ́4tŭŭ +3bía +bí2ba +bí2bo +bí2bu +bí2ci +b1í2g +4bígene +4bígeq +4bíger +4bígeu +4bígev +2bígi +2bí4g3n +2bígu +b1íi +b2íl +2bí2mu +b3ínt +2b1í2r +2bí2to +bí4tui. +5bítuis +5bítuīs +5bítuo +5bítuō +5bítut +4bí4uer +4bí4ui. +4bí4uim +4bí4uit +4bí4ver +4bí4vi. +4bí4vim +4bí4vit +bí2x +2bj +bl2 +2blŏ +b3lu +2blŭ +b2ly +2b1m2 +2b1n2 +bne3g +bne3u2 +bnĕ3g +bné1 +bnéu2 +b3ni +b3nĭ +bno3b2 +bnŏ3b2 +b3nu +bn4ue +b1o +3bo2a +bo4am +boa3q +bo2á +bo2æ3 +bo2ǽ3 +bob2ú +bo2e +bo2ē +bo3iá +bo2ii +bo2ií +bo2i3q +bo2iu +bo2iv +bo2ī +boī3u +boī3v +boī́3u +boī́3v +bo2í +bo2l +b3olet +bo3lín +bo3líq +bo3lís +bo3líu +bo3lív +bol4u +bo2m +b2o1n +bo3ni +bo2o +bo2ō +bo2ó +b2ora +b2orá +b2ore +b2oré +bo2ri +bo3ri. +bo3rin +bo3riq +bo3ris +bo3riv +borí3t +bo4rn +b2oro +b2oró +bo4rq +bo2ru +bo4rv +3bo2s +bo4sn +bo4sq +b2o4su +bo4sv +bo3ue +bo3v +b1ō2m +b2ōn +b1ōr +bṓ3i +b3ṓ2m +bŏ2ă +b1ŏd +bŏ2ē +bŏ2ī +bŏī3u +bŏī3v +bŏī́3u +bŏī́3v +bŏ2l +b3ŏlĕt +bŏ2ō +b2ŏ3rĕ +bŏ3rī. +bŏ3rīn +bŏ3rīq +bŏ3rīs +bŏ3rīu +bŏ3rīv +bŏ5rī́n +bŏ5rī́q +bŏ5rī́s +bŏ5rī́u +bŏ5rī́v +bŏ2rĭ +bŏ2s +bŏ4́l +bŏ́4lĕā +bŏ́4lĕă +bŏ́4lĕō +bŏ́4lĕŏ +bŏ́4lŭ +bó3ia +bó3iæ +bó4lea +bó4leā +bó3len +bó4leo +bó4leō +bó3leq +bó3leu +bó3lev +ból2u +b1ó2m +b2óra +b2óre +bó4rie +bó4riē +b2ós +b3ósc +2b1œ2 +bœ4da +bœ4dă +bœ̄2 +bœ̄4d +bœ̄́2 +bœ́2 +br2 +bra3d4 +b2rā +b2rá +b4rác +b2ræ +bræ2ă +b2rǣ +brǣ2ă +b2rǽ +b1re +bre2i +brē2i +2bria +2briá +b2rim +b1rī +b2rĭd +b4rĭē +2brĭĕ +b2rĭm +b1ro +b2rot +b1rŏ +b4rŏt +b1ru +b2rus +b1rŭ +b2rŭs +b4rŭ́s +b2rús +b2ry +b2rý +2b1s +b4s5caen +b6s5ca͞en +b6s5cá͞en +b6s5ca͡en +b6s5cá͡en +b4s5cáen +b4s3cæn +b4s3cǣn +b4s5cǣ́n +b4s3cǽn +b2s3ce +b2s3cē +b2scĕ +b2s3cé +b4scid +bs6cidera +bs6ciderá +bs6cidere. +bs6ciderene +bs6cidereq +bs6cidereu +bs6ciderev +bs6cideri +bs6ciderí +bs6cidero +bs6cideró +bs6cideru +bs6ciderú +bs6cidére +bs6cidérim +bs6cidérit +bs6cidéru +bs6cidi. +bs6cidimus +bs6cidimús +bs6cidin +bs6cidiq +bs6cidis +bs6cidit. +bs6ciditn +bs6ciditq +bs6ciditue +bs6ciditv +bs6cidiu +bs6cidiv +bs6cidín +bs6cidíq +bs6cidíss +bs6cidíst +bs6cidítn +bs6cidítq +bs6cidítu +bs6cidítv +bs6cidíu +bs6cidív +bs4ciss +b2scī +bs2cĭ +b4scíd +bs6cídera +bs6cíderi +bs6cídero +bs6cídimus +bs4císs +b4scísu +bs2e +bs2q +bs2ta +bs2tā +bs2tă +bs2tá +b5s4tem. +b5s4temn +b5s4temq +b5s4temu +b5s4temú +b5s4temv +b4sten +b5s6tent. +b5s6tentn +b5s6tentq +b5s6tentue +b5s6tentv +bs4tern +bs4tes +bs4tet +b5s4tēmu +b5s4tēmŭ +b5s4tēmú +bs4tēs +bs4tēt +b7s6tḗmu +b7s6tḗmŭ +bs4tḗs +bs4tḗt +bs4tĕm +b4stĕn +b5s6tĕnt. +b5s6tĕntn +b5s6tĕntq +b5s6tĕntu +b5s6tĕntv +bs4tĕrn +bs4tĕt +bs4tĕ́m +bs6tĕ́ntn +bs6tĕ́ntq +bs6tĕ́ntu +b6stĕ́ntŭ +bs6tĕ́ntv +bs6tĕ́rn +bs4tĕ́t +b4stémi +bs4témn +bs4témq +bs4tému +bs4témv +b5s6téntn +b5s6téntq +b5s6téntue +b5s6téntv +bs4térn +bs4tés +bs4tét +b5stit +b5stĭt +b5s4tĭ́t +b4stín +bs4tít +b2sto +b3s4to. +b3s4ton +b3s4toq +b3s4tou +b3s4tov +bs2tō +b2stŏ +b5s4tón +b5s4tóq +b5s4tóu +b5s4tóv +bs4trar +bs4tras +bs4trat +bs4trau +bs4trav +bs4trār +bs4trās +bs4trāt +bs4trāu +bs4trāv +bs6trā́r +bs6trā́s +bs6trā́t +bs6trā́u +bs6trā́v +b4stră +bs4trár +bs4trás +bs4trát +bs4tráu +bs4tráv +b2sue +2bt2 +btes5t +bte6ste +btē6ste +btē6stĕ +b3tu +btū3s +bu3b2 +bu4lue +2bum +4b3undā +b2uni +b2uní +buol5ue +buol5ué +buol5ui +buol5uī +buol5uí +b1ur +bur5ue +3bus +b4us. +busa4t +bu2s3ā2 +bu2se +b4usn +bu4so +bu2só +bu2sp +b4usq +bu2su +bu2sú +b4usv +b1ūn +b1ūr +bū3rĭ +bū2su +2b3ū́4s +b2ŭē +b2ŭĕ +b2ŭī +b2ŭĭ +2bŭm +b2ŭ2s +b4ŭs. +b4ŭsn +b4ŭsq +b4ŭsu +b4ŭsv +3b2ŭ́l +b2úl +2búll +6búndans +6b5úndant +4b5úndat +4b5úndem +6b5úndent +4b5úndes +4b5úndet +3bú2s +bú4sa +b2y +b2ȳ +b2ý 1c -2cc -c2h2 -c2l -2cm -2cn +c2a +cab2 +ca3d2 +cad4u +3caena +3caenā +3caenă +3caená +3caene +3caenē +3caenĕ +3caené +3caeno +3caenō +3caenó +3caenu +3caenŭ +3caenú +cae4sp +ca2ie +ca2ii +ca2iō +3cam +ca3ni +ca3ní +3cant +3car +ca3rē +car4uī +caspe3 +cas3t +cas5tr +3cat. +cate3i +2catē +catē3i +catḗ5i +caté3i +3catn +3catq +3catu +3catv +ca2u3a +ca2u3á +ca2v3a +ca2vá +ca2x3 +5ca͞ena +5ca͞enā +5ca͞enă +5ca͞ená +5ca͞ene +5ca͞enē +5ca͞enĕ +5ca͞enō +5ca͞enu +5ca͞enŭ +5ca͞enú +5cá͞ena +5cá͞enā +5cá͞enă +5cá͞ene +5cá͞enē +5cá͞enĕ +5cá͞enō +5cá͞enu +5cá͞enŭ +5ca͡ena +5ca͡enā +5ca͡enă +5ca͡ená +5ca͡ene +5ca͡enē +5ca͡enĕ +5ca͡ené +5ca͡eno +5ca͡enō +5ca͡enó +5ca͡enu +5ca͡enŭ +5ca͡enú +5cá͡ena +5cá͡enā +5cá͡enă +5cá͡ene +5cá͡enē +5cá͡enĕ +5cá͡eno +5cá͡enō +5cá͡enu +5cá͡enŭ +cā5bun +cā4iae. +cā6iaene +cā6iaeque +cā6iaeue +cā6iaeve +cā6ia͞e. +cā6ia͞ene +cā6ia͞eque +cā6ia͞eue +cā6ia͞eve +cā6iá͞ene +cā6iá͞eque +cā6iá͞eue +cā6iá͞eve +cā6ia͡e. +cā6ia͡ene +cā6ia͡eque +cā6ia͡eue +cā6ia͡eve +cā6iá͡ene +cā6iá͡eque +cā6iá͡eue +cā6iá͡eve +cā2iā +cā6iáene +cā6iáeque +cā6iáeue +cā6iáeve +cā4iæ. +cā4iæne +cā6iæque +cā4iæue +cā4iæve +cā4iǣ. +cā4iǣne +cā6iǣque +cā4iǣue +cā4iǣve +cā6iǣ́ne +cā6iǣ́que +cā6iǣ́ue +cā6iǣ́ve +cā4iǽne +cā6iǽque +cā4iǽue +cā4iǽve +cā4iīs. +cā6iīsne +cā6iīsque +cā6iīsue +cā6iīsve +cā6iī́sne +cā6iī́sque +cā6iī́sue +cā6iī́sve +cā2iu +cā2iú +cā3s4uī +cā́5suī +c2ă +căd2 +că2ĭ +3căm +că3nĭ +3cănt +3căr +că3rē +că3rĕ +căs3 +căs5tr +3căt. +2cătē +2cătĕ +3cătn +3cătq +3cătu +3cătv +3cắm +cắ5nĭ +3cắr +cắ3rē +cắ3rō +3cáena +3cáenā +3cáenă +3cáene +3cáenē +3cáenĕ +3cáeno +3cáenō +3cáenu +3cáenŭ +cá3ni +cár4ui +cár4uī +cá2x +c2æ +3cæ. +cæ3d +cæ3n2 +3cæna +3cænā +3cænă +3cæná +3cænæ +3cænǽ +3cæne +3cænē +3cænĕ +3cæné +3cæno +3cænō +3cænó +3cænu +3cænŭ +3cænú +3cæq +cæ2s3p +c2ǣ +3cǣ. +cǣ3d +cǣn2 +3cǣna +3cǣnā +3cǣnă +3cǣná +3cǣnǣ +3cǣne +3cǣnē +3cǣnĕ +3cǣnō +3cǣnu +3cǣnŭ +3cǣnú +3cǣq +cǣ2s3p +3cǣ́na +3cǣ́nā +3cǣ́nă +3cǣ́nǣ +3cǣ́ne +3cǣ́nē +3cǣ́nĕ +3cǣ́nō +3cǣ́nu +3cǣ́nŭ +3cǽna +3cǽnā +3cǽnă +3cǽnæ +3cǽne +3cǽnē +3cǽnĕ +3cǽno +3cǽnō +3cǽnu +3cǽnŭ +cǽ2sp +2cc2 +2c2d2 +c3du +c3dŭ +c2e +3ce2a +3ceá +3ceæ +3ceǽ +3ceb +ce3d2 +ced4o +3ce2e +3ceé +3ce2i +3ceí +3cemú +4c5e4nare +4c5e4naré +6c5e6nari. +6cenarib +6c5e6narin +6c5e6nariq +6c5e6naris +6c5e6narit +6c5e6nariue +6c5e6nariv +6c5e6narín +6c5e6naríq +6c5e6narís +6c5e6naríu +6c5e6narív +4c5e4náre +6c5e6nári. +6cenárib +6c5e6náris +6c5e6nárit +4c3ennā +3cent +3ce2o +3ceó +cepe3 +ce3ra +ce3r2æ3 +ce3r2ǣ +2cerb +ce3rē +ce3r4i +ce3rī +ce3ro +ce3rō +cer5ue +cer3uē +cer3ué +ce3run +ce2sp +ce2sq +ce2su +3cet +cete3 +cete5r4 +ceteri5u +ceteri5v +ce4ua. +ce4uam +ce4uan +ce4uaq +ce4uau +ce4uā. +ce4uān +ce4uāq +ce4uāu +ce4uā́ +ce2uă +ce2uá +ce4uī́ +ce2uí +3ceum +ce2un +3ceus +3ceú +3cē. +cē2i +4c5ē4nāre +4c5ē4nārē +4c5ē4nārĕ +4c5ē4nāré +6cēnārib +6c5ē6nāris +6c5ē6nārit +4c5ē4nārī +6cēnārĭb +6c5ē6nārĭs +6c5ē6nārĭt +6c5ē6nārĭ́s +6c5ē6nārís +6c5ē6nā́re +6c5ē6nā́rē +6c5ē6nā́rĕ +6cēnā́rib +6c5ē6nā́ris +6c5ē6nā́rit +6c5ē6nā́rī +6cēnā́rĭb +6c5ē6nā́rĭs +6c5ē6nā́rĭt +cē3ne +cēpe3 +cēper4 +cēpĕ5r +3cēq +cēte3 +3cēu +3cēv +c2ĕ +cĕ2ă +cĕ3d +cĕ2ĭ +4c3ĕnnā +cĕ3r2a +cĕ3r2æ +cĕ3r2ǣ +2cĕrb +cĕ3rē +cĕ3r4ĕ +cĕ3rī +cĕ3rŏ +cĕ3rŭ +cĕ2s +cĕ́3rĕ +3cĕ́u +3cĕ́v +c2é +3céa +3céb +céd2 +3cée +cé2i +3céne +3cént +3céq +2cérb +3cét +3céu +cé4ua. +cé4uan +cé4uā. +cé3ue +3cév +2ch. +5chane +3chă. +3chăm +3chănĕ +3chăq +3chău +3chăv +3chắm +4cháng +che1 +che2i +che2s +chē2i +chĕ1 +ch4lĭ +2chm +2chn +2cht +c2i +ci2a +ci4an +ci3b +3cida +3cidá +cide4i +cidē4i +3cido +3cidó +3cid4u +3cidú +cig3 +ci4gn +ci2i +cin2ā +2cind +cin4e +cin4é +3cisa +3cisá +3cisæ +3cisǽ +ci4s3c +cis5ci +3cise +3cis2i +3cisí +3ciso +3cisó +4cissa +4cissā +4cissá +4cissæ +4cissǣ +4cissǽ +4cissī +4cisso +4cissō +4cissó +4cissu +4cissū +4cissú +ci4s3t +cis5ta +cis5tā +cis5té +3cisú +3citā +cī3s4uī +c2ĭ +cĭ3b +cĭn2a +cĭn2ā +cĭn2æ +2cĭnd +cĭnĭ5tĕ +cĭnĭ5tō +cĭ4st +cĭs5tā +cĭs5tă +3cĭtā +3cĭtă +4cĭ́nd +4cĭ́ssa +4cĭ́ssā +4cĭ́ssă +4cĭ́ssæ +4cĭ́ssǣ +4cĭ́ssī +4cĭ́ssō +4cĭ́ssū +4cĭ́ssŭ +cí3b +cí3d +cíg3 +cí4gn +2cínd +4císsa +4císsā +4císsæ +4císsǣ +4císsī +4císso +4císsō +4císsu +4císsū +cís3t +cí3tuī +cí3tur +cí3tuu +2cj +c2l2 +c4lei +c4leī +c4leí +c4leo +c4leō +c4leó +c4leu +c4leú +c4le͞ +c4le͡ +c3lĕg +c3léc +c3léx +2c2m2 +2c1n2 +cn4ē3m +3co. +co2a3q +co3ā +coǣ4u +coǣ4v +c2o3b2 +cobo3l +coco5m +coc5te +co3ea +co3eā +co3eá +co2ia +co3it +coī2 +coī4n +coī́4 +coí2t +co3l4u +com1 +co4me4d +co4me4s +co2mē +comē4d +comē4s +comḗ4d +comḗ4s +co4mé4d +comé4s +co4mit +comí4t +co4míte +3con1 +4conc +co4nia +co4niá +co4niē +co4niú +cons2 +co3ō +co2pī +3coq +3cor +co3re +co3rī +cot4e3 +co5ter +3cou +3cov +2cōnc +cōn3s2 +cō3r +cŏ3ā +cŏǣ4u +cŏǣ4v +c2ŏb2 +cŏcŏ3m4 +cŏc5tĕ +cŏī2 +cŏī4q +cŏī́4 +cŏĭ2 +cŏ3ĭt +cŏĭ́2 +cŏ2m1 +cŏmē4d +cŏmē4s +cŏmḗ4d +cŏmḗ4s +cŏmĕ2 +cŏm3ĕd +cŏmĭ́4 +cŏ3ō +cŏ3pĕ +cŏ2pī +3cŏr +cŏ3rī +cŏ4rs +cŏ3t4ĕ +cŏtĕ3r +3cŏ́ +cŏ́3g2 +cŏ́3ī +cŏ́4m3ē +cŏ́3rĭ +cób2 +cóbo3 +có3ea +có3eā +có3em +cóg2 +có3ie +có1ī +có3l2u +có4mes +có2m3ē +cómi4ta +cóm5ita. +cóm5i4tā +cómi6te. +cóm5itē +cómi4ti +cóm5iti. +cóm5i4tī +cómi4to +cóm5i4tō +cóm5i6tum +4cónc +có4nia +có4niu +cón3s +có2nu +cót4e3 2cq -c2r -2cs +cqui4 +cquid3 +cquí2 +cquíd3 +c2r2 +3cra +3cră +cræ2ă +crǣ2ă +cre3d4 +cre5di +cred6it +cre5mi +cre5mo +cre2o +cre3r +cres3 +crēs3 +2crĕ. +2crĕq +2crĕu +2crĕv +2cri3n +2crip +cri6spé +2crī +3crīm +3crī́m +2crĭă +2crĭb +crĭ6spĕ +2crĭŭ +3crím +cros2 +3crō +crŏs2 +3crŭ 2ct -2cz -2c. -.c2 +ct3enn +cte5re +ct3ĕnn +ctĕ3rĕ +ct3énn +c3tr +cu3b2 +cud2 +cuda3 +2c1uĕ +cu3ia +cu3iá +cu3iæ +cu3iǽ +cu3ii +cu3ií +cu3io +cu3ió +cu3ium +cu3ius +cu3iú +cule4i +4culix +4culíx +2culp +3cu2m1 +cuma2 +cu3men +cum3i2 +cumī́4 +cumí2 +cumín3 +2c3unc +2c3unx +c2uo +cupe3 +cuper4a +cuper4ē +cu3ré +3cus +cus4á +cu2s3p +c2ūl +c1ūn +3cūq +cū3rē +cū3rĕ +cū3ré +cū3rĭ +3cūs +cū2su +3cūu +3cūv +c2ŭ +2cŭăr +2cŭăt +cŭ3b2 +2cŭēs +2cŭĕt +2c3ŭ2lĭ +3cŭ2m +cŭm3ē +cŭmī́4 +cŭm3ĭ +cŭmĭ́4 +cŭmĭ́n5 +2cŭŏ +cŭpĕ5rĕ +3cŭ2s +2cŭŭn +cŭ́3b +cŭ́m3ĭ +3cŭ́s +cúb2 +cú3ia +cú3io +cú3ium +cú3ius +2cúlp +3cúm +cú2ma +cú2m3i2 +2c3únc +2c3únx +3cús +2cv +2c2x2 +cy4gn +cype3 +cý4gn 1d -2dd -2dg +d2ab2 +d1ac +2d1ad +da2dó +dad2u +dad2ū +dad2ú +3dae +d2aeu +d2aev +2d1a2g +da4g3n +d2al +da4mab +da4mand +da4mane +da4mans +da6mant. +d6amante +da6mantn +da6manto +da6mantó +da6mantq +da6mantu +da6mantú +da6mantv +da4maq +da4mat +da4mau +da4mav +da2má +2d3a2me +2d3a2mē +da2mé +d2a3mi +3damn +2da2mo +2d3a2mō +da2mó +2danc +da2ni +da3ni. +da3nib +da3nin +da3niq +da3nis +da3niu +da3niú +da3niv +da2p +d2a3re +da3ri +3darii +3darií +3dario +3darió +3dariu +3dariú +da3rí +d2aru +d2as3 +da2x3 +3dá͡e +2d1ā2g +d2ān +d2ār +2d3ā́4g +d2ă3b2 +d1ăc +d1ăd +dă3d2ū +d2ăg +2d3ă2mē +2d3ă2mĕ +3dămn +2d3ă2mō +2d3ă2mŏ +2dănc +dă2p +dă3ră +dăs3 +d2ăt +d2ắ +d3ắmb +5dắmnā +5dắmnă +5dắmnē +5dắmnĕm +5dắmnĕn +5dắmnĕr +5dắmnĕt +5dắmnō +5dắmnŏ +d3ắnĭ +dắ3rē +d3ắrg +d2á +3dáe +dá2g +dá4gn +2d3ámb +2dámp +2dámt +4dántr +dá2p +2d3árg +dás3 +2d3áus +dá2x +dæ2a +dæ2ă +dæ2á +dæ2i +d2æu +dæ3ue +dæ3uĕ +dæ2ŭ +d2æ3v +dǣ2a +dǣ2ă +d2ǣu +dǣ3ue +dǣ3uĕ +dǣ2ŭ +d2ǣ3v +d2ǣ́u +d2ǣ́v +d2ǽu +d2ǽv +2dc2 +2dd2 +dde2s +ddē2s +d3do +dd4or +d2eb +ded2 +de2dā +de2dē +ded4i +ded4o +de2dō +3dee +de3es +de3é2r +de3és +d2ef +2d1eg +de3go +3dei +de2ia +de2iá +de4ien +de2ii +de2ií +de4io. +de4ioq +de4ior +de4iou +de4iov +de4ión +de4ióq +de4iór +de4ióu +de4ióv +de2it +de4ium +3deī +3deí +de2ma +de2má +de4me. +de4meb +de4mem +de4mend +de4mene +de4mens +de6ment. +de6mente. +de6mentem +de6menten +de6menteq +de6mentes +de6menteu +de6mentev +de6mentém +de6mentés +de6menti. +de6mentia +de6mentib +de6mentin +de6mentiq +de6mentis. +de6mentisn +de6mentisq +de6mentisu +de6mentisv +de6mentiue +de6mentium +de6mentiúm +de6mentiv +de6mentía +de6mentín +de6mentíq +de6mentísn +de6mentísq +de6mentísu +de6mentísv +de6mentíu +de6mentív +de6mentn +de6mentq +de6mentu +de6mentú +de6mentv +de4meq +de4mer +de4mes +de4meu +de4mev +de2mé +d3e4mi. +d3e4mim +de4mine +d3e4miq +d3e4mis +d3e4mit +d3e4miu +d3e4miv +d3e2mí +d2emn +de4mo. +de4mone +de4moq +de4mor. +de4morn +de4morq +de4moru +de4morv +de4mou +de4mov +de4móne +de4móq +de4mórn +de4mórq +de4móru +de4mórv +de4móu +de4móv +de4munt +de4múnt +d2en +3deo +depe4 +deper5 +deperi4 +deper7iu +deperí4 +depé2 +depér3 +depéri4 +2d3ept +de1r +d2e3r2e +dere5x4 +de3ré +der4i +deri5c +de3rī +der4í +de3ríc +de1s +de4sca +de4scá +de4sci +de4scí +de4so +de2só +2d3ess +des2t +4dest. +de4s3ta +de4s5tā +de4s3tá +de4s5te +de4s3tē +de4s3té +desti5t4 +de4s3tī +destí5t4 +4destn +de4s3to +de4s3tō +de4s3tó +4destq +de4s3tú +4destv +de4uĕ +de2ul +2deun +deu4ra +deu4rá +deu4re +deu4ré +deu4ri. +deu4rin +deu4riq +deu4ris +deu4rit +deu4riu +deu4riv +deu4rín +deu4ríq +deu4rís +deu4rít +deu4ríu +deu4rív +de5u4ro. +de5u4ron +de5u4roq +de5u4ror +de5u4rou +de5u4rov +deu4ró +de3u4s +deu4tan +deu4tat +deu4tát +de5u4tet +de3uti +deu4ti. +deu4tin +deu4tiq +deu4tiu +deu4tiv +deu4tín +deu4tíq +deu4tíu +deu4tív +de3u4to +de3u4tó +de3utu +de3utú +deū4s +deū́4 +deú2 +de3únc +de3úr +deú4s +de3úsa +de3úsæ +de3úsi +d2ev +de2x +dē1 +d2ēb +2d1ēg +dē2ia +dē2iā +dē2iá +dē2iæ +dē2iǣ +dē2iǽ +dē4ien +dē2iī +dē2iō +dē2ma +dē2mā +dē2mă +dē2má +dē4me. +dē4mene +dē6mente. +dē6mentem +dē6menten +dē6menteq +dē6menteu +dē6mentev +dē6mentē +dē6mentém +dē6mentib +dē6mentis. +dē6mentisn +dē6mentisq +dē6mentisu +dē6mentisv +dē6mentium +dē6mentiúm +dē6mentī +dē6mentísn +dē6mentísq +dē6mentísu +dē6mentísv +dē6mentu +dē6mentú +dē4meq +dē4mer +dē4met +dē4meu +dē4mev +dē2mē +dē4mĕ. +dē4mĕnĕ +dē6mĕntē +dē6mĕntĕ. +dē6mĕntĕm +dē6mĕntĕn +dē6mĕntĕq +dē6mĕntĕu +dē6mĕntĕv +dē6mĕntĕ́m +dē6mĕntī +dē6mĕntĭb +dē6mĕntĭs. +dē6mĕntĭsn +dē6mĕntĭsq +dē6mĕntĭsu +dē6mĕntĭsv +dē6mĕntĭŭm +dē6mĕntĭŭ́m +dē6mĕntĭ́sn +dē6mĕntĭ́sq +dē6mĕntĭ́su +dē6mĕntĭ́sv +dē6mĕntŭ +dē4mĕq +dē4mĕr +dē4mĕt +dē4mĕu +dē4mĕv +dē4mĕ́ +d3ē2mé +dē4mim +dē4mis +d3ē4mit +d3ē2mī +dē4mĭm +dē4mĭs +d3ē4mĭt +d3ē4mĭ́ +dē2mí +dē4mō. +dē4mōne +dē4mōnĕ +dē4mōq +dē4mōu +dē4mōv +dē6mṓne +dē6mṓnĕ +dē4mṓq +dē4mṓu +dē4mṓv +dēm4ū +d2ēn +dē3ne +dēpe2 +dēper5 +dēperi4 +dēperī4 +dēperī́6 +dēpĕ2 +dēpĕr5 +dēpĕrī4 +dēpĕrī́6 +dēpĕrĭ4 +dēpĕ́4 +dēpĕ́r5 +dēpĕ́rĭ6 +dēpé2 +dēpér3 +dēpéri4 +d2ēr +dē2sā +d2ēu +d2ēv +2d3ḗg +dḗ3ic +dḗ3ĭc +dḗ4ma +dḗ4mā +dḗ4mă +d3ḗ4me +dḗ4mē +d3ḗ4mĕ +dḗ4mim +dḗ4mis +dḗ4mit +d3ḗ4mī +dḗ4mĭm +dḗ4mĭs +dḗ4mĭt +dḗ4mō +dḗ4se +dḗ4sĕ +dḗ3sp +dḗ5str +d2ḗu +d2ḗv +dĕ5cĭm +dĕd2 +dĕ2dā +dĕ4dă +dĕ2dē +dĕd4ĭ +dĕ2dō +dĕ2dŏ +dĕ2dŭ +3dĕĕ +dĕ3ĕ́ +d2ĕf +3dĕ2ī +dĕ2ĭ +dĕ3ĭn +dĕ3ĭ́n +dĕ2ō +2d1ĕp +dĕ3r4ĕ +dĕ3rī +dĕ3rŏ +4d3ĕrŭn +dĕs5tĕ +d2ĕt +dĕū́2 +2dĕŭ +3dĕŭm +3dĕŭs +d2ĕ́f +d3ĕ́mp +2d3ĕ́p +dĕ́2q +dĕ́3rĕ +3dée +dé3es +d2éf +2d1ég +dé3in +dé2ma +2d3é2me +d3é4mi. +d3é4mim +dé4mis +d3é4mit +dé4mo. +dé4mor. +2démp +2d1ép +d2ér +d3érr +dé4sa +dé4sn +dé3sp +dé4sq +2d3éss +4déstn +4déstq +4déstv +d2ésu +dé4sv +dé2x 2df -2dm -d2r -2ds -2d. -.g2 +2dg2 +2d1h +di2a +d2ia. +d2iab +d2iam +d2ian +d2iaq +d2iar +d2ias +d2iat +d2iau +d2iav +d2iā +2diă +d2iá +2d3i2ba +2d3i2bá +di2be +di2bé +4d3i4bim +4d3i4bis +4d3i4bit +di4bím +4d3i4bís +4d3i4bít +2d3i2bo +2d3i2bó +d2ibu +4d3i4bun +d2ibú +4d3i4bún +di3cem +di3cen +di3ces +d2icé +di3cém +di3cén +di3cés +di3cib +d2i3cu +di4c3ue +4d3i4cul +d2i3cú +4d3i4cúl +d2id +d2ieb +d2iem +d2ien +d2ies +d2iet +d2iēb +d2iēm +d2iēs +d2iēt +d2iéb +d2iém +d2ién +d2iés +d2iét +2d3i2ga +2d3i2gā +2d3i2gá +2digæ +2digǣ +2d3i2gǽ +4d3i4ge. +4d3i4gea +4d3i4geā +4d3i4geá +4d3i4geb +4d3i4gem +4d5i4gend +4d5i4gene +4d5i4gens +4d5i4gent +4d3i4geo +4d3i4geō +4d3i4geó +4d3i4geq +4d3iger +4d5i4ges. +4d5i4gesn +4d5i4gesq +4d5i4gesu +4d5i4gesv +4d3i4get +4d3i4geu +4d3i4gev +2d3i2gē +di2gé +4d3igéb +4d3igém +4d3igén +5digéna +4d3igéq +4d3igér +4d5igésn +4d5igésq +4d5igésu +4d5igésv +4d3igét +4d3igéu +4d3igév +di2gi +2d3i2gī +di2gí +dig5no. +di5gnore +di5gnori +di5gnorí +dig5norum +dig5norúm +di6g5nos. +di6g5nosn +di6g5nosq +di6g5nosu +di6g5nosv +di6g5noue. +di6g5nove. +di5g6nóre +2d3i2go +2d3i2gō +2d3i2gó +2d3i2gu +2d3i2gú +d2iīs +2dim. +2d3i2ma +2d3i2mā +2d3i2má +2di2me +2d3i2mē +di2mé +4diméb +4dimém +4dimér +4dimés +4dimét +4d3i4mi. +4d3i4mia +4d3i4miā +4d3i4miá +4d3imic +4dimie +4dimiē +4dimié +4dimii +4d3i4miī +4d3i4mií +4d3i4mim +di4mine +4d3i4mio +4d3i4miō +4d3i4mió +4d3i4miq +4dimir +4d3imis +4d3imit +4d3i4miu +4d3i4miú +4d3i4miv +2d3i2mī +2dimí +di4míe +di4mím +di4mín +di4míq +di4míu +di4mív +2dimn +2d3i2mo +2d3i2mō +2d3i2mó +2dimq +4d3i4mun +di3mú +4d3i4mún +2dimv +din2ā +din2d +d4ine +d4inē +d4iné +d4ini +d4inī +d4iní +di2nu +d4inú +d2io. +d2ioq +d2ior +d2iou +d2iov +d2iō +2diŏ +d2ió +d1ip +di2pi +di2pī +d2ips +d2iq +dir5emé +dir5e4mí +di2rē2 +dirḗ4 +dir5éme +diri4m +di5s6cende +di5s6cens +dispe6r5 +disperi6 +disperī6 +disperī́6 +disperí6 +dispé4r5 +di3spi +di3spí +di5s4ta. +di5s4tam +di5s4taq +di5s4tar +di5s4tas +di5s4tat +di3s4tā +di3stá +dis4tám +dis4tán +dis4táq +dis4tár +dis4tás +dis4tát +di5s4tem +di5s6tent. +di5s6tentn +di5s6tentq +di5s6tentue +di5s6tentv +di5s6tern +di5s4tes +di5s4tet +di3s4tē +di5s4tém +di5s6téntn +di5s6téntq +di5s6téntue +di5s6téntv +di5s6térn +di5s4tés +di5s4tét +di5stím +di5s4to. +di5s4ton +di5s4toq +di5s4tou +di5s4tov +di3s4tō +di5s4tón +di5s4tóq +di5s4tóu +di5s4tóv +di5s6trar +di5s6tras +di5s6trat +di5s6trau +di5s6trav +di5s6trār +di5s6trās +di5s6trāt +di5s6trāu +di5s6trāv +di5s6trā́r +di5s6trā́s +di5s6trā́t +di5s6trā́u +di5s6trā́v +di5s6trár +di5s6trás +di5s6trát +di5s6tráu +di5s6tráv +di5s4trī +d2ite +d2ité +di4tiā +4d3i4tib +d4itn +d4itq +4d3i4tui +4d3i4tuī +4d3i4tuí +di4tuum +4d3i4tuú +di4tūs +d4itv +4d3i4uia +4diuiā +4diuiá +4diuiæ +4diuiǣ +4diuiǽ +4d3i4uii +4d3i4uiī +4d3i4uií +4d3i4uio +4d3i4uiō +4d3i4uió +2di2uī +4d3i4uía +d4ius +2diŭ +d2iv +d3i4via +d3i4vii +d3i4viī +d3i4vií +d3i4vio +d3i4viō +d3i4vió +2di2vī +d3i4vía +di2xu +2d1ī2b +d2īne +d2īnĕ +dīo4n +dīó2 +d2īq +d2īs. +dīs2c +d2īsn +2dīso +2dīsŏ +2dīsó +d2īsq +d2īsu +d2īsv +d2īu +d2īv +dī2xu +2d3ī́2b +d2ī́n +d2ī́q +d2ī́u +d2ī́v +d2ĭ3b +dĭ4cŭl +d2ĭē +d2ĭĕn +d2ĭĕt +d2ĭĕ́ +dĭ2g +2dĭga +2d3ĭgā +2d3ĭgă +2dĭgá +2dĭgæ +2dĭgǣ +2dĭgǽ +2d3ĭgē +2dĭgĕ +d3ĭgĕ. +d3ĭgĕā +d3ĭgĕă +d3ĭgĕm +5dĭgĕna +5dĭgĕnā +5dĭgĕnă +5dĭgĕná +5dĭgĕnæ +5dĭgĕnǣ +5dĭgĕnǽ +d5ĭgĕnd +d5ĭgĕnĕ +5dĭgĕnī +d5ĭgĕnt +d3ĭgĕō +d3ĭgĕq +d3ĭgĕt +d3ĭgĕu +d3ĭgĕv +d3ĭgĕ́ +5dĭgĕ́nă +2d3ĭgī +2d3ĭgō +2d3ĭgŭ +2d3ĭ2mā +2d3ĭ2mă +2d3ĭ2mē +2d3ĭ2mĕ +2d3ĭ2mī +d3ĭ4mĭā +d3ĭ4mĭă +d3ĭ4mĭī +d3ĭ4mĭm +d3ĭ4mĭō +d3ĭ4mĭŏ +d3ĭ4mĭs +d3ĭ4mĭt +d3ĭ4mĭŭ +d3ĭ4mĭ́ +2d3ĭ2mō +2d3ĭ2mŏ +dĭ3mŭ +4d3ĭ4mŭn +dĭn2a +dĭn2ā +dĭn2æ +dĭn2d +d4ĭnē +d4ĭn2ĕ +d4ĭnī +d4ĭnĭ +d4ĭnŭ +d1ĭp +dĭ2pī +dĭ2rē2 +dĭrḗ4 +dĭr3ĕ +dĭ2sĭ +dĭspĕ4r5 +dĭspĕrī6 +dĭspĕrī́6 +dĭs6pĕ́rn +dĭ3s4pĭ +dĭ3s4tā +dĭs4tăt +dĭ3s4tē +dĭ5s6tĕnt. +dĭ5s6tĕntn +dĭ5s6tĕntq +dĭ5s6tĕntu +dĭ5s6tĕntv +dĭ5s6tĕrn +dĭ5s4tĕt +dĭ5s6tĕ́ntn +dĭ5s6tĕ́ntq +dĭ5s6tĕ́ntu +dĭ5s6tĕ́ntv +dĭ5s6tĕ́rn +dĭ5s6tĕ́t +dĭ3s4tō +dĭ5s6trār +dĭ5s6trās +dĭ5s6trāt +dĭ5s6trāu +dĭ5s6trāv +dĭ5s6trā́r +dĭ5s6trā́s +dĭ5s6trā́t +dĭ5s6trā́u +dĭ5s6trā́v +dĭ5s4trī +d2ĭtĕ +dĭ4tĭā +d3ĭ4tĭb +4d3ĭ4tūs +4d3ĭ4tŭī +4d3ĭ4tŭŭ +2d1ĭ2u +2d1ĭ2v +4d3ĭ́4cŭ +dĭ́2g +4d3ĭ́4gă +4d5ĭ́gĕā +4d5ĭ́gĕă +6d5ĭ́gĕnĕ +4d5ĭ́gĕō +4d5ĭ́gĕq +4d5ĭ́gĕt +4d5ĭ́gĕu +4d5ĭ́gĕv +4d3ĭ́gŭ +4d3ĭ́4mĕ +4d5ĭ́4mĭā +4d5ĭ́4mĭă +4d5ĭ́mĭē +4d5ĭ́mĭĕ +4d5ĭ́4mĭī +4dĭ́mĭĭ +4d5ĭ́4mĭm +4d5ĭ́4mĭō +4d5ĭ́4mĭŏ +4d5ĭ́4mĭt +4d5ĭ́mĭŭ +4dĭ́nt +4d3ĭ́nu +4d3ĭ́nv +d2ĭ́p +dĭ́2r3 +dĭ́5spĭ +dĭ́5s4tā +dĭ́5s4tă +dĭ́5s4tē +dĭ́5s4tĕ +dĭ́5s4tō +dĭ́4tĭb +4d3ĭ́4tŭ +2d3ĭ́2u +2d3ĭ́2v +d1íb +2dí2ba +dí2be +4dí4bim +4dí4bis +4dí4bit +2dí2bo +2dí2bu +dí4ciā +dí4cie +dí4ciē +d2ícu +dí4c3ue +4d3í4cul +2d3í2ga +4d3í4gea +4d3í4geā +4d5í4gene +4d3í4geo +4d3í4geō +4d3í4geq +4d3í4get +4d3í4geu +4d3í4gev +dí4gia +dí4gib +dí4giu +dí4g3n +2d3í2gu +2d3í2me +4d3í4mia +4d3í4miā +4d3í4mie +4d3í4miē +4d3í4mii +4d3í4miī +4d3í4mim +4d3í4mio +4d3í4miō +4d3í4mit +4d3í4miu +2dímn +2dímq +2dímv +d2ín +d3íns +2dínt +d3ínte +dí4nue +2d3ínv +d2íq +dí4r3i4m +dí3spi +dí3s4ta +dí3s4tā +dí3s4te +dí3s4tē +dí3s4to +dí3s4tō +4d3í4tib +4d3í4tui +4d3ítuī +dí3tur +4d3ítuu +d2íu +4d3í4uia +4díuiā +4díuiæ +4díuiǣ +4d3í4uii +4d3í4uiī +d2ív +4d3í4via +4díviā +4díviæ +4díviǣ +4d3í4vii +4d3í4viī +dí2xu +2dj +2dl2 +d3lu +2d1m +2d1n2 +d3ne +d3nĕ +dnéx2 +dob3r +dob2ū +d2oc +doco2 +doc5te +do1e2 +4d3olem +4d5oles. +4d5olesn +4d5olesq +4d5olesu +4d5olesv +4d5olēs. +4d5olēsn +4d5olēsq +4d5olēsu +4d5olēsv +6d5olḗsn +6d5olḗsq +6d5olḗsu +6d5olḗsv +4d3olém +4d5olésn +4d5olésq +4d5olésu +4d5olésv +do4lib +dol4u +domi3 +d2on +3don. +do3ne +do3ni +d1op +do2pé +2d3ord +d4ori. +d4orin +d4oriq +do4rit +d6oriue. +d6orive. +d4orī. +d4orīn +d4orīq +d6orīue. +d6orīve. +d4orī́n +d4orī́q +d6orī́ue. +d6orī́ve. +d4orín +d4oríq +d6oríue. +d6oríve. +2d3o4rn +do4rq +do4rv +d2os +dos2p +do3u +do3v +3dōc +d2ōn +3dōn. +d2ōs +4dṓrd +4dṓrn +dŏb2ū +d2ŏc +dŏc5tĕ +4d5ŏlēs. +4d5ŏlēsn +4d5ŏlēsq +4d5ŏlēsu +4d5ŏlēsv +6d5ŏlḗsn +6d5ŏlḗsq +6d5ŏlḗsu +6d5ŏlḗsv +4d3ŏ4lĕm +4d5ŏ4lĕ́m +dŏ4lĭb +dŏ4lĭs +dŏ4lĭŭ +dŏ3mĭ3 +d2ŏn +d1ŏp +dŏ2r +dŏ3ră +d2ŏ3rĕ +d4ŏrī. +d4ŏrīn +d4ŏrīq +d3ŏrīs +d6ŏrīuĕ. +d6ŏrīvĕ. +d4ŏrī́n +d4ŏrī́q +d6ŏrī́uĕ. +d6ŏrī́vĕ. +d3ŏrĭt +dŏs2p +4d3ŏ́lĭ +dŏ́4lĭb +dŏ́4lĭŭ +d4ŏ́rĕ +dŏ́4rĭŭ +dób3 +d2óc +dól2 +2d3óli +dó2pe +dó1r +2d3órd +dó4riā +dó4rie +dó4riē +dó4rio +dó4riō +dó4riu +d2órn +4dórna +4dórnem +4dórnen +4dórner +4dórnes +4dórnet +4dórno +d2ós +dós2p +dó2xu +2dp +2dq +d3qu +dqui4 +dquid3 +dquí2 +dquíd3 +dr2 +d2ra +d2rā +d2ră +d2rá +d2ræ +d2rǣ +d2rǽ +d3rex2 +dre5xi +dri3e +dri3é +dri5re5 +d2rĭă +drĭ3ĕ +d2rĭī +d2rĭō +d2rĭŭ +d2rō +d3rŏg +d2ró +d2ru +d2rŭ +dr4ŭn +dr4ŭ́ +d2rú +2d1s2 +d2ua +d2uá +dub2 +4d3u4cul +4d3u4cúl +2d3ueb +2d3uem +2d3uen +2d3ues +2d3uet +d1uē +2d3uĕ +d1ué +2d3uím +d4ulæ +d4ulǽ +d4uli +d4ulí +d4ulu +d4ulú +du2m +2d3ume +2d3umé +du2n +d3unc +d3und +du3ni +du3ní +d2uo +dupe3 +duper4 +du3r2u +d4us. +d4usn +du3s4tr +d4usu +d4usv +d1ut +2du2ta +2du2tá +2du2tæ +2du2tǽ +2du2te +du2té +4du4ti. +4du4tib +4dutil +4du4tin +4du4tiq +4du4tis +4du4tiu +4du4tiv +2du2tí +2du2to +2du2tó +2du2tu +2du2tú +2d1u2u +2d1u2v +d2ux +du2xu +4d3ū4cul +4d3ū4cŭl +4d5ū4cŭ́l +4d3ū4cúl +2d1ū2m +dū2n +dūn4e +dūn4ĕ +dū3nī +2d1ū2t +3dūtia +3dūtiā +3dūtiá +3dūtiæ +3dūtiǣ +3dūtiǽ +3dūtiī +3dūtĭa +3dūtĭā +3dūtĭá +3dūtĭæ +3dūtĭǣ +3dūtĭǽ +3dūtĭī +4d5ū́4cul +4d5ū́4cŭl +2d3ū́2t +5dū́tia +5dū́tiā +5dū́tiæ +5dū́tiǣ +5dū́tiī +5dū́tĭa +5dū́tĭā +5dū́tĭæ +5dū́tĭǣ +dū́4tĭb +5dū́tĭī +d2ŭă +dŭb2 +d1ŭē +2d3ŭĕn +2d3ŭĕt +2d3ŭĕ́ +3dŭī +3dŭĭ +4dŭĭs. +d4ŭnt +dŭpĕ3r +dŭ3str +2d1ŭ2u +2d1ŭ2v +d2ŭx +dŭ́3b +d2ŭ́m +d3ŭ́nc +d3ŭ́nd +dŭ́5str +2dŭ́u +2dŭ́v +dúb2 +4d3ú4cul +dú2lo +d2úm +d3úmb +dú2na +2d3únc +2d3únd +dú3s4tr +2d1ú2t +3dútia +3dútiæ +3dútii +2d1ú2u +2d1ú2v +dú2xu +2dv +d3ve +d3vĕ +2d2x2 +d2y +d2ý +2ea. +eab2 +e2ace +ea2cu +ea2cú +ead2 +2e2ae +e2ami +e2an +2eane +2e2a3q +e2ar +2earú +e2as +ea3tr +2eau +2eav +2ea͞ +e2a͞e +e2á͞ +e3á͞u +2ea͡ +e2a͡e +e2á͡ +e3á͡u +e2ā +2eā. +2eān +2eāq +2eāru +2eārú +2eāu +2eāv +2eā́n +2eā́q +2eā́u +2eā́v +e1ă +e2ăcĕ +eă2cŭ +e2ăn +e2ăq +e2ău +e2ăv +e2ắm +e3ắmb +e2á +eá2cu +2eáe +e3ál +e3ámb +2eáne +eá2nu +2eáq +2eáu +e3áud +2eáv +2e2æ +eæ2a +eæ2á +eæ2i +2e2ǣ +eǣ2a +2e2ǽ +eb2 +eba3q +ebæ3 +ebe3d +ebe3ia +ebe3iá +ebe3iæ +ebe3iǽ +ebe3ie +ebe3ié +ebe3io +ebe3ió +ebe3iú +ebé3io +e3bi +ebī3u +ebī3v +eb4ri +ebs3 +e2bul +e3bŭ +2ec +e4c3enn +ecen3s +ecēn3s +e4c3énn +e5cént +ec3le +ec3lē +ec3o2p +ec3ue. +ecu3ma +ecu3mā +ecu3má +ecu3me +ecu3m4i +ecumi5q +ecu3m4ī +ecumī́5n +ecumī́5q +ecumī́5u +ecumī́5v +ecu3m4í +ecumí5q +ecumí5u +ecumí5v +2ed. +ed1a +e3da. +ed2ae +ed5ama +e3dane +e3d2a3q +e5dari. +e5darin +e5dariq +e5dariv +e5darín +e5daríq +e5daríu +e5darív +e5darum +e3darú +e3daue +e3dav +e3d4a͡e +ed4á͡e +ed3ā́c +e2d3ác +e4d3áni +ede2g +e2dem +ed3eme +ed3emé +e3deō +e3deó +ede2s3 +ede6ste +e3deú +edē2g +ed3ēmē +edē2s +edḗ4g +edĕ3r +edé2g +e2diǣ +e2d3i2g +ed3ime +ed3imé +edi4mis +edi4mit +ed3i4mí +e2d3in +e2di2p +edi4s3 +edis5c +edi6sce +edis7cen +ed4it. +ed5i4ta͞ +e4d3i4tǣ +edi4tiō +e4d3i4tī +ed5i4tōr +ed5i4tōs +e4d3i4tū +edi5ue. +edi5ve. +edī5ue. +edī5ve. +e2d3í2g +e4d3ínu +ed5í4tiō +e2d3o2l +e2do2p +e2dōr +e2d3ó2l +e2d3óp +ed2r +ed3ue. +e2d3ul +e2dun +edu3no +edu3nó +ed2ū +edū3n +e3d2ŭ +ed4ŭĕ +ed3úlc +2e1e2 +e2el +e2em +ee3mi +ee3mu +ee3mú +e2en +e2e3q +ee4ra +ee3re +ee4ro +ee4rō +ee3ti +ee3tí +e2ev +eex3 +2e2ē +eēn3 +e1ĕ2 +e2ĕō +e2ĕ3q +eĕ4rō +e2ĕŭ +eĕ́2 +2eé +e2éq +eé2ru +2efe +2efé +2efi +2efí +2e3g2a +e3g2æ3 +e3ge. +e3gen +e3geq +e3geu +e3gev +2egm +eg3no +e2go +e3go. +e3gon +e3goq +e3gor +e3gou +e3gov +e2gō +e3gō. +e3gōn +e3gōq +e3gōu +e3gōv +e3gṓn +e3gṓq +e3gṓu +e3gṓv +e2gót +egu6ste +e1h +2e1i +ei2a +e2ia͡ +e3iát +e2iæ +e2iǣ +e2iǽ +ei2b +e3i2ce +ei2cé +ei2ci +ei2cí +ei2cu +ei2cú +e2id +ei2i +ei2m +ei2n +e2i3na +e2i3ni +e2i3nī +e2i3ní +e2i3nú +ei2o +eio2s +e2i3q +ei2r +e2is +e3ist +ei2t +ei3ta +ei3tā +ei3tá +eite3 +e4i3ue +e2iué +e2iui +e2iuí +e3iur +e2i3v +2eī +e1ī2b +e1ī2m +e2īq +e1ī2r +e2īs +e3īss +e3īst +e1ī2t +e2īu +e2īv +e2ī́ +e3ī́2b +e3ī́2m +e3ī́2r +e3ī́2t +e1ĭ2 +eĭ́2 +2eí +e1í2b +e1í2c +e2íe +e3íer +e1íi +e1í2m +e3ínc +e3índ +e2íq +e1í2r +e3íst +eí2te +eí2to +e2íu +e2ív +e3la. +e3lae +e3lam +e3lan +e3laq +e3lar +e3las +e3lau +e3lav +e3la͡ +e3láe +e3lám +e3lán +e3láq +e3lár +e3lás +e3láu +e3láv +2e3læ +2e3lǽ +4e3le. +e2leg +ele2i +4e3len +4e3leq +4e3les +elē2 +3e2léc +e3lis +eli6sta +e3lís +2ell +e2l3ue +el3uē +el3ué +el4ui +e2l3u2t +e1m +2em. +em2am +e4mani +e4maní +e2m3a2x +e4m3áni +e2m3áx +e5mem. +e5memn +e5memq +e5memv +em2eq +eme4s +e4m3esa +e4m3esá +e4mesæ +e4mesǽ +e4m3ese +e4m3esé +e4m3esi +e4m3esí +4emete +4emeté +2e3mēt +e5mémn +e5mémq +e5mémv +emé4s +e4mésa +e4m3ése +e4m3ési +em2i +emi3ac +emi3án +emi3es +4emini +4eminí +e5mité +emi3u +2emne +1emp +em3pn +2emq +1emt +2emu +em2uē +em2ué +e2muī +e5mul. +em3ulc +2emú +e2m3úl +2emv +en2a +en4an +ena3ni +ena3ní +5e4narib +en2ā +ená3ni +5e4nárib +2en3d2 +end4u +end4ú +2ene +en3eat +en3eát +en2e2x +e3nĕ1 +eni3tu +ení5tuī +en2o +eno3b2 +en2ŏ +en2sc +en3s2i +ensi5ti +en4sn +en4sq +ens3t +ens4ué +en4sv +2ent +ente5re +e1n2u +e1oc +eo2g3n +e2on +eo3ni +eo3p2 +eo5rā́ +eo3rá +e3ors +2eorú +2e2os +e2ōn +2eōr +2e2ōs +2eṓr +2eṓs +e2ŏ +e2ó +eó2g +eó2nu +eó3p2 +e3órs +2eós +eper4ē +eperi4b +eperi4r +eper4ī +eperí4r +epĕ3r +epĕ5rĭ +e3pé +epére5r +3e4pisc +epi5s4tr +3e4písc +epo4ter +epote6ri +epote6rí +epo4tes +epŏ4tĕs +2eps +ep4se. +ep4sen +ep4seq +ep4seu +ep4sev +ep2su +4e3que +2er. +2e3ra. +e3raba +e3rabá +e3rabe +e3rabé +e5rabil +e5rabim +e5rabis +e5rabit +e3rabí +e3rabo +e3rabó +e5rabunt +e5rabúnt +era2c +er3act +era2d3 +eradi4 +eradí4 +e3rae. +e3raea +e3raeā +e3raeá +e3raei +e3raeī +e3raeí +e3raen +er3aes +e3raeu +e3raev +era2g +er5ama +e3rame +e3ramé +e5ramin +e5ramur +e5ramúr +e3rand +4e5rane +e3rané +e3rans +e5rante +e5rantē +e5ranté +e5ranto +e5rantō +e5rantó +e5rantú +era2p +2e3raq +e3rar. +e5rare. +e5rareq +e5rareu +e5rarev +e5rari. +e5raria +e5rariá +e5rariæ +e5rariǽ +e5rarie +e5rarié +e5rarii +e5rarií +e5rarim +e5rarin +e5rario +e5rarió +e5rariq +e5raris +e5rarit +e5rariu +e5rariú +e5rariv +e3rarí +e3rarn +e3rarq +e5r6arum +e5rarun +e5r6arúm +e5rarún +e3rarv +e3rass +e5rasti. +e5rastin +e5rastiq +e5rastis +e5rastiu +e5rastiv +e5rastín +e5rastíq +e5rastís +e5rastíu +e5rastív +eras4to +eras4tō +eras4tó +e3rata +e3ratá +e3ratæ +e3ratǽ +e3rate +e3rato +e3rató +e3ratr +e3ratu +e3ratú +2erau +e3raue +e3raué +e3raui +e3rauí +2e3rav +e5ra͞e. +e5ra͞ea +e5ra͞eā +e5ra͞eá +e5ra͞eī +e5ra͞en +e5ra͞eu +e5ra͞ev +e5rá͞ea +e5rá͞eā +e5rá͞eī +e5ra͡e. +e5ra͡ea +e5ra͡eā +e5ra͡eá +e5ra͡ei +e5ra͡eī +e5ra͡eí +e5ra͡en +e5ra͡eu +e5ra͡ev +e5rá͡ea +e5rá͡eā +e5rá͡ei +e5rá͡eī +e5rá͡en +e5rá͡eu +e5rá͡ev +e3r2ă +er3áct +e2r3ád +er3áes +e2r3á2g +er3áll +e4r3ámb +er3á4pe +er5ás4te +er5ás4to +er5ás4tō +er3áud +er1æ2 +e3ræ. +e3ræa +e3ræā +e3ræá +e3rææ +e3ræǽ +e3ræi +e3ræī +e3ræí +e3ræn +e3ræu +e3ræv +er1ǣ2 +e3rǣ. +e3rǣa +e3rǣā +e3rǣá +e3rǣǣ +e3rǣī +e3rǣn +e3rǣu +e3rǣv +e3rǣ́a +e3rǣ́ā +e3rǣ́ǣ +e3rǣ́ī +e3rǣ́n +er3ǣ́s +e3rǣ́u +e3rǣ́v +er3ǽs +e1re +2e3re. +2erea +2ereá +2e3reæ +2e3reǽ +ere4d4 +ered6it +2e3ree +2e3reé +ere2g +2e3re2i +2e3reí +ere2l +e3rem. +e4r3e4ma +er3e4mā +e4r3e4má +er3e4me +er3e4mē +er3e4mé +er5e4mim +e5remini +e5reminí +er5e4mis +e4r5e4mit +er3e4mī +ere4mím +ere4mín +ere4mít +ere4mo. +ere4moq +ere4mou +ere4mov +ere4mō. +ere4mōq +ere4mōu +ere4mōv +ere4móq +ere4mór +ere4móu +ere4móv +e3remq +e3remu +e4r5e4mun +e3remú +er5e4mún +e3remv +2eren +ere4na +e3rend +e3rene +e3rent +2ere2o +2ereó +2ereq +e5reque +e3rer. +er3era +er3erā +er3erá +e3rere +e3rerí +e3rern +er3ero +er3erō +er3eró +e3rerq +e5rerue +er3erú +e3rerv +e3res. +e3resn +e3resq +er3ess +eres3t +ere4su +ere4sú +e3resv +e3ret +2ereu +e3reue +2ereú +2erev +e3reve +2erē +e2rē2d +erē2g +erē2i +e5rēminī +e5rēmu +e5rēmú +e5rēne +e5rēre +e5rēri +e5rērí +e5rēue +e5rēve +erḗ4d +e4rḗ4g +e5rḗminī +e5rḗmu +er5ḗna +e5rḗne +e5rḗq +e5rḗre +e5rḗri +e5rḗt +e5rḗue +e5rḗve +e1rĕ +erĕ2s3 +2eré +3eréc +eré2d +e2ré2g +eré4mer +er5é4mim +eré6miti +eré6mito +eré6mitō +eré6mitu +e4r3éna +er3éss +e2réx +2e3ri. +e3ria. +e3riae +e3riam +e3rian +e3riaq +e3riar +e3rias +e3riat +e3riau +e3riav +e3ria͞ +e3ria͡ +e3riā +er3iác +e3riáe +e3riám +e3rián +e3riáq +e3riár +e3riás +e3riát +e3riáu +e3riáv +e3riæ +e3riǣ +e3riǽ +2erib +er3i4ba +er3i4bá +er3i4be +er3i4bé +er3i4bi +er3i4bí +eri4bo. +eri4bon +eri4boq +eri4bor +eri4bou +eri4bov +er3i4bó +eri6bunt +eri6búnt +eri4cer +er5i4cér +er3i4ci +e3ricu +e3ricú +e3ride +e3ridē +e3ridé +e3ridi +e3ridī +e3ridí +eri4dō +eri4dó +e3ridu +e3ridú +2erie +e3rie. +e3rieb +e3riem +e3rien +e3rieq +er3ier +e3ries +e3riet +e3rieu +e3riev +e3riē. +e3riēb +e3riēm +er6iēne +e3riēq +er3iēr +e5riēri +e5riērí +e3riēs +e3riēt +e3riēu +e3riēv +e5riḗb +e5riḗm +e5riḗri +e5riḗs +e5riḗt +2erié +e3riéb +e3riém +e5riénd +e5riént +e3riéq +er3iér +e5riéris +e3riés +e3riét +e3riéu +e3riév +er3iim +er3iis +e5riis. +e5riisn +e5riisq +e5riisu +e5riisv +er3iit +e3riīs +e5riī́s +e5riísn +e5riísq +er5iíss +er5iíst +e5riísu +e5riísv +er3iít +er3i4ma +er3i4mā +er3i4má +eri4me. +eri4meb +eri4mem +eri4men +eri4meq +eri4mer +eri4mes +eri6met. +eri6meti +eri6metí +eri6metn +eri6metq +eri6metu +eri6metú +eri6metv +eri4meu +eri4mev +eri4mēb +eri4mēm +eri4mēn +eri4mēr +eri4mēs +eri4mēt +eri6mḗb +eri6mḗm +eri6mḗn +eri6mḗr +eri6mḗs +eri6mḗt +eri4mé +er5i4mi. +er5i4mim +e6r5i6mine +e5riminī +er5i4miq +er5i4mis +er5i4mit +er5i4miu +er5i4miv +er3i4mī +er3i4mí +eri4mo. +eri4moq +eri4mor +eri4mou +eri4mov +eri4mō. +eri4mōq +eri4mōu +eri4mōv +eri4móq +eri4mór +eri4móu +eri4móv +e5rimue +er5i4mun +er5i4mún +2erin +e3rio +e3riō +e3rió +e3rip +2e3riq +er3ire +er3iré +er3iri +er3irí +eri6sne +eri6squ +eri6sue +eri6sve +e3rité +er5itib +eri6tne +e5ritōt +e5ritṓt +eri6tqu +eri6tue +er5itui +er5ituī +er5ituí +er5ituú +eri6tve +2eriu +er6iue. +er3iué +er3iui +er3iuí +e5rium. +e5riumn +e5riumq +e5riumu +e5riumv +er3iun +e5riunt +e3rius +e3riúm +er3iún +e5riúnt +e3riús +2eriv +er3ivé +er3ivi +er3iví +e3riz +2e1rī +erī3ā +er3ī2b +e2rīn +er3īr +er3īss +er3īst +er3ī́4b +er3ī́r +er3í2b +er3í4ci +er3íer +e2r3íi +e4rí4men +e4rí4meq +erí4mer +e4rí4meu +e4rí4mev +er5í4mim +e5ríminī +er5í4mit +2erín +e4ríng +2eríq +er3ír +e4r5í4tib +erí6tio. +e4r5í4tui +e4r5ítuī +e4r5ítuu +2eríu +er3íui +2erív +er3ívi +2ern +ero2b +erod4 +erodi5ue +erodi5v +e3ron +ero4pu +e3ror. +ero4re +ero4ré +e3rorq +e3roru +e3rorú +e3rorv +er3o4sc +ero4s3t +3erot +e3rōq +erō4re +erō4rē +erō4ré +erō4rō +e3rōru +e3rōrú +er3ōsc +3erōt +erṓ4re +erṓ4rē +e5rṓru +er5ṓsc +3erṓt +e1rŏ +e2rób +e4ró4re +er3ó4sc +3erót +2erq +er5rue +e2r3ua +e2r3uā +e2r3uá +2erue +er5ue. +e4r3uen +e4r3ueq +e4r3ueu +er3uēm +er3uēn +er3uēs +er3uēt +er3uém +er3uén +er3ués +er3uét +e3rug +er3uīs +er3uía +2eru2m3 +er3unc +er3und +e5runto +e5runtō +e5runtó +e5runtú +e2r3uo +e2r3uō +e2r3uó +er3ur +er3uss +er3ust +eru4su +er5usur +er3u4sú +e2r3u2t +e2r3uu +e2r3uú +e3rūg +erū2r +erū́4r +e1rŭ +2erúm +er3únc +e4rúnd +erú2r +e2r3út +2erv +e1ry +e1rý +2es. +1e2sæ +1e2sǽ +e3s2că +es3cæ +es4cid +e3s2cī +e3s2cĭ +es4cíd +es2cr +e2scŭ +es2e +ese2i +3eséq +3esév +e3s2i +2esn +e1s2p +espe5r4i +espe5r4ī +esper4í +e2sph +2esq +4essat +4essát +3est. +es4tān +e3s2tă +e2s3tæ +e2s3tǣ +e2s3tǽ +es3te. +es3teq +es4ter +es3teu +es3tev +e3s2tĕ +e4s5tim +e4stĭb +e3s4tĭn +e3stĭt +es4tĭ́t +3es4tn +es4tol +3estot +es4tól +3estót +3es4tq +e4strā +es4tră +es3tre +es3trē +es3tré +es4tru +es4trū +e3s4trŭ +e4stry +e2stu +e2stŭ +3es4tv +es3ue. +e2suĕ +es2ué +e2s3ui +2esv +2et +e3ta +eta3g +et3eni +ete5ram +ete5ran +ete5rar +ete6reri +ete6reru +ete4r5ie +eter5iē +eter5ié +eter5iī +eteri6mini +eteri6miní +eter5i6ta +eter5i6tā +eter5i6tá +eteri6te. +eteri6ten +eteri6teq +eteri6teu +eteri6tev +eteri6to. +eteri6ton +eteri6toq +eteri6tot +eteri6tou +eteri6tov +eteri6tō. +eteri6tōn +eteri6tōq +eteri6tōu +eteri6tōv +eteri6tṓn +eteri6tṓq +eteri6tṓu +eteri6tṓv +eteri6tón +eteri6tóq +eteri6tót +eteri6tóu +eteri6tóv +ete4rīs +eterī́6u +eterī́6v +ete4ríe +ete6rí6mini +ete6rí6te +ete3ro +ete3rō +ete5run +etĕ4r3ī4 +etĕrī́4 +etĕ4rĭē +etĕ4r5ĭī +etĕ4rĭt +etĕr5ĭ6tā +etĕrĭ6tĕ +etĕ5rĭtĭ +etĕrĭ6tō. +etĕrĭ6tōn +etĕrĭ6tōq +etĕrĭ6tōu +etĕrĭ6tōv +etĕrĭ6tṓn +etĕrĭ6tṓq +etĕrĭ6tṓu +etĕrĭ6tṓv +etĕrĭ́4 +etĕ6rĭ́ĕ +etĕ6rĭ́t +etĕ3rŭ +etĕ́6rĕ6rĭ +etĕ́4rī +etĕ́6r5ĭī +etĕ́6r5ĭt. +etĕ́6r5ĭ6tā +etĕ́6rĭ6tĕ +etĕ́6rĭ6tō +eté6re6ri +eté4rie +eté4riē +eté4r5iī +eté6r5it. +eté6r5ita +eté6r5i6tā +etéri6te. +eté6ri6to. +eté6ri6tō +e2t3ip +e2t3íp +eto2i +etó2i +e3tr +etra3s +3ets +e4tue. +e2tuī +e3tur +e3tú +3etvi +e1u +2eu. +eua6ste +e4uasv +e4uāsv +e2uǣ́ +e2uǽ +e2u3b2 +eu2dă +eu4dis +eu2dī +2e3ue +e3uĕ +e4uīsv +2eum +eu3ma +1eun +e2und +2e2une +e2uni +e2uní +e2uno +e2unó +euol5ue +euol5ué +euol5ui +euol5uí +2euq +eu4rat +eu4rár +eu4rát +eu4reb +eu4rem +eu4ren +eu4rer +eu4réb +eu4rém +eu4rén +eu4rér +eu4rim +eu4rím +eu4rún +2eus +e4us. +e4usn +e4usq +eu2su +e4usv +2e2ut +eu4tami +eu4tamú +eu4tare +eu4tari +eu4tarí +eu4támi +eu4tánt +eu4táre +eu4tári +e3u4tem +e3u4ten +e5u4tere +e5u4teré +eu6teris +eu6terís +e3u4tém +e3u4tén +e5u4tére +e5u6téris +e3u4tét +eu4tim +eu4tit +e3u4tím +eutru4 +eu4tun +eu4tún +2euu +2e2uv +e2ux +e1ū2 +e2ū3m +e2ū́m +eū́2r +eū́2t +e1ŭ +e2ŭs +e3ŭt +e2ŭ́ +e3ŭ́mb +e2ú +e3úl +2eúm +e3úmb +1eún +e3úng +e3únx +eú2r +2eús +e3úse +e3úso +e3úss +e3úst +e3úsu. +e3úsum +e3úsus +e3ú2t +eútru4 +eva6ste +2e3ve +e3vĕ +ex2ă +e2x3ea +e2x3eā +e2x3eá +e2x3eo +e2x3eō +e2x3eó +ex3e2q +e2xeu +e2x3eú +e2xib +e2xiē +e2xié +exin3 +e2x3íe +exō2 +e3xṓ +exṓ4ra +exṓ4rā +exṓ4re +exṓ4rē +exṓ4rō +exó4ra +exó4re +exó4ri +exó4ro +ex5ter +2e2͞ +2e2͡ +2ē2a +ēad2 +ēa2m +2ē2ā +ēā2nu +2ē2ă +ēă3d2 +ēắ3d +2ē2á +2ē2æ +2ē2ǣ +2ē2ǽ +ēb2 +ēba2 +ēba3q +ēbá2 +ēbæ3 +ēbe3i +ēbī3u +ēbī3v +ēbo2 +1ēbr +ēbs3 +ēbu2 +ē2bul +3ē2bŭl +ē4bŭ́l +ē2búl +ēce1 +ē2ch +ēd2 +ēda2r +ēdá2 +ēdē2s +ēdi3m +ēd4it. +ēd4itu +ēd4ĭt. +ēd4ĭtn +ēd4ĭtq +ēd4ĭtu +ēd4ĭtv +ē3do +ēd4or +ēd3ue +ē3dŭ +2ē2e +2ē2ē +2ē2ĕ +ē3g2a +ēga2r +ē3g2æ3 +ē3g2ǣ +ē3ge. +ē3gen +ē3geq +ē3geu +ē3gev +ē3gĕ. +ē3gĕn +ē3gĕq +ē3gĕu +ē3gĕv +ē2g3n +ēgo2 +1ēgr +ēgu6ste +ēgŭ6stĕ +2ē1i2 +ē2ia. +ē2iaq +ēia2r +ē2iau +ē2iav +ē3ic +ē2id +ē4iḗne +ē6iḗque +ē4iḗue +ē4iḗve +ē2i3p +ē2ir +ē2is +ē2ium +ē3iŭ +2ē2ī +2ēĭ2 +ē1ĭc +ē2ĭē +ē2ĭĕ +ē2ĭ3p +ē3ĭ́2c +ē2ĭ́ĕ +ē2ĭ́p +ē1í2c +ē2íe +2ēj +ēja2r +ē2lab +ē3lā. +ē3lān +ē3lāq +ē3lār +ē3lās +ē3lāu +ē3lāv +ē3lā́n +ē3lā́q +ē3lā́r +ē3lā́s +ē3lā́u +ē3lā́v +ē3lă. +ē3lăm +ē3lăn +ē3lăq +ē3lău +ē3lăv +ē3lắ +2ē3lá +2ē3læ +2ē3lǣ +2ē3lǽ +ē2leg +ēle2r +ēlē2i +ē3lĕī +ē3lĕō +ē3lĕŭ +ēlé2 +ēli2n +2ē3lī +ēlí2n +2ēll +ēl2u +ē2l3ue +ē1m +ē4mani +ē4maní +ēma2r +ēmắ2 +ē4m3áni +1ēm2e +ē3me. +ē3mem +ē4mend +ē4ment. +ē6mentia +ē6mentía +ē4mentn +ē4mentq +ē4mentv +ē3meq +ē2m3es +ē3meu +ē3mev +3ē2mēr +ēmē2s +ē4m3ēse +ē4m3ēsē +ē4m3ēsĕ +ē4m3ēsī +3ē4mḗr +ēmḗ4s +ē4m5ḗse +ē4mḗsē +ē4m5ḗsĕ +ē4m5ḗsī +1ēmĕ +ē3mĕ. +ē3mĕm +ē4mĕnd +ē4mĕnt. +ē6mĕntĭă +ē6mĕntĭ́ă +ē4mĕntn +ē4mĕntq +ē4mĕntu +ē4mĕntv +ē3mĕq +ē2m3ĕs +ē3mĕu +ē3mĕv +ē3mĕ́m +ē4m3ĕ́s +ē2m3és +ēm2i1 +3ēmim +4ēminī +3ēmis +ē4miss +3ē4mit. +3ē4mitn +3ē4mitq +3ē4mitu +3ē4mitv +ēm2ĭ +3ēmĭc +ēmĭ3ĕ +3ēmĭm +3ēmĭnĕ +3ēmĭs +ē4mĭss +3ē4mĭt. +3ē4mĭtn +3ē4mĭtq +3ē4mĭtu +3ē4mĭtv +3ēmĭ́n +5ē4mĭ́ss +5ē4mĭ́st +3ēmĭ́t +1ēmí +ē4míss +ē4míst +1ēmo +ē3mo. +ē3mon +ēmo4nu +ē3moq +ē4mor. +ē4morn +ē4morq +ē4moru +ē4morv +ē3mou +ē3mov +1ēmŏ +ē4mŏr. +ē4mŏrn +ē4mŏrq +ē4mŏru +ē4mŏrv +ē4mŏ́rn +ē4mŏ́rq +ē4mŏ́ru +ē4mŏ́rv +ē4mórn +ē4mórq +ē4móru +ē4mórv +1ēmp +1ēmt +2ēmu +ē2m3ul +ē2mun +ēm3ū́ +2ēmŭ +ē2m3ŭl +ē2mŭn +ē4m3ŭ́l +ē4mŭ́n +2ēmú +ē2m3úl +ē2mún +ē2nat +ēn2ā +ēnā3nē +ēnā3nī +5ē4nārib +5ē4nārĭb +5ē6nā́rib +5ē6nā́rĭb +ē3nă. +ē3năm +ē3năn +ē3năq +3ēnăt +ē3nău +ē3năv +ē3nắ +2ēne +ē2n3ea +ē2n3eā +ē2n3eá +ē2n3eō +ē2neu +ē2neú +ē2n3ĕā +ē2n3ĕă +ē2n3ĕō +ē2nĕŭ +ē2n3ie +ē2n3iē +ē2n3ié +ē2n3ii +ē2n3ií +ē2n3ī2m +ē2n3ī2r +ēn3īss +ēn3īst +ē2n3ī2t +ēn3ī́4m +ēn3ī́4r +ēn5ī́ss +ēn5ī́st +ēn3ī́4t +ē2n3ĭē +ē2n3ĭĕ +ē2n3ĭĭ +ē4n3ĭ́ĕ +ē4n3ĭ́ĭ +ē2n3íe +ē2n3íi +ēn2sc +ēn3si +ēn4sn +ēn4sq +ēns4ué +ēn4sv +ē1n2u +ē2n3ue +ē3n4uen +ēn4ueq +ēn4ueu +ēn4uev +ēn2ŭ +ē1o +ē2on +ē2os +2ē2ō +ē1ŏ +ē2ŏn +ē2ŏs +ē2ŏ́ +ēó2 +ēpa2 +ēpar3 +ēpá2 +ēper4ē +ēperī4n +ēperī4q +ēperī4r +ēperī4u +ēperī4v +ēperī́6n +ēperī́6q +ēperī́6r +ēperī́6u +ēperī́6v +ēperí4 +ēpĕrī4n +ēpĕrī4q +ēpĕrī4r +ēpĕrī4u +ēpĕrī4v +ēpĕrī́6n +ēpĕrī́6q +ēpĕrī́6r +ēpĕrī́6u +ēpĕrī́6v +ēpĕ3rō +ē2ph +ēpo2 +2ēq +ē3qu +ē1r2 +ēra3g +ē3ră +ēræ2ă +ērǣ2ă +2ē3re +ē3rēm +ē3rēs +ē3rēt +ē3rēu +ē3rēv +ē3rḗm +ē3rḗs +ē3rḗt +2ē3rĕ +ē3ré2 +2ērī +2ērí +1ē2ro +ēro4s3 +ērō3d4 +ērō5dī +ērōdī5u +ērōdī5v +1ē2rŏ +ēró2 +ē2r3ue +2ērun +3ērŭd +2ērú +2ēs. +ē2sa. +ē2sae +ē2sam +ē2saq +ē2sav +1ēsā +1ēsă +ē2să. +ē2săm +ē2săq +ē2său +ē2săv +1ēsá +ē2sáe +ē2sám +1ē2sæ +1ē2sǣ +1ē2sǽ +ē2sca +ē2scă +ē2scá +ēs3cæ +ēs3cǣ +ē2scé +ē2sci +ēs3cī +ē2scĭ +ē2scí +ē2scu +ēs4cul +ēsc3ū +ē2scŭ +ē2scú +ēs2e +3ēsē. +ēsē2i +3ēsēn +3ēsēq +3ēsēv +ēs2ĕ +2ēsé +ēs2i +ēsi2n +2ēsn +ē2so2 +1ē2sō +ē2sŏ +ē2só +ēs2p +ēs3po +ēs3pŏ +ēs3pó +ēs3pū +2ēsq +3ēst. +ē2ste +ēs5ter +ē2stĕ +ēs5tĕr +ēs2ti +ēsti5t4 +ēs2tĭ +ēs4tíl +ēstí3t4 +3ēs4tn +3ē2stō +3ēs4tq +ēs2tr +3ē2stu +ēs4tue +3ē2stŭ +ē2stú +3ēs4tv +ē2s3ue +ē2s3uĕ +ēs3ui +3ēsum +3ē2sus +1ē2sū +1ēsŭ +ē2sŭs +1ē2sú +ē3sún +2ēsv +2ēt +ē3ta +ē3tă +ē3te +ēter4a +ēte5re +ēte3ri +ēte5rī +ēterī5u +ēterī5v +ē3tĕ +ētĕ3r4a +ētĕ3rǣ +ētĕ3rĕ +ētĕ5rī +ētĕrī5u +ētĕrī5v +ētĕ3rŭ +ēti4tu +ē3tī +ē3to2 +ē3tō +ētō2i +ē3tŏ +ē3tó2 +ē3tr +ē1u2 +ēuā6ste +ēuā6stĕ +2ē3ue +ē3uĕ +ē3uī. +ē3uīn +ē3uīq +ē3uīu +ē3uī́ +ē2um +1ēuo +ēuol3u +1ēuŏ +2ē2ŭ +2ē2ú +ēvā6ste +ēvā6stĕ +2ē3ve +ē3vĕ +ē3vī. +ē3vīn +ē3vīq +ē3vīv +ē3vī́ +1ēvo +1ēvŏ +ēx2 +ē2x3u +ē2́ +2ḗa +2ḗā +2ḗă +2ḗæ +2ḗǣ +ḗb2 +ḗ3bu +ḗ3bŭ +2ḗe +2ḗē +2ḗĕ +3ḗgr +ḗ4gre +ḗ4grĕ +2ḗi +ḗi2c +ḗ3iēn +ḗ4ir +2ḗī +ḗĭ2c +2ḗj +ḗ4loq +ḗ4lŏq +ḗ1m +ḗ4mar +ḗ4măr +ḗ4mēn +ḗ4mic +3ḗmim +4ḗminī +5ḗ4mit. +3ḗ4mĭc +3ḗmĭm +5ḗ4mĭt. +ḗ4mor. +ḗ4mŏr. +3ḗmp +3ḗmt +2ḗmu +ḗ4mŭn +2ḗn +ḗ4n3ea +ḗ4n3eā +ḗ4n3eō +ḗ4n3ĕā +ḗ4n3ĕă +ḗ4n3ĕō +ḗ4n3iē +ḗ4n3ii +ḗ4n3ĭē +ḗ4n3ĭĭ +2ḗō +2ḗq +2ḗr +ḗ3r2ă +ḗ3rĕ +3ḗ4sa +3ḗ2sā +3ḗ2să +3ḗ2sæ +3ḗ2sǣ +3ḗsē. +2ḗsn +ḗ2so +3ḗ2sō +ḗ2sŏ +2ḗsq +ḗ5s4tĭn +3ḗstn +3ḗstō +3ḗstq +ḗs4trŭ +3ḗstu +3ḗstŭ +3ḗstv +ḗ2su +3ḗsum +3ḗsus +3ḗsū +ḗ4sū. +ḗ3sūs +3ḗsŭ +ḗ4sŭs +2ḗsv +2ḗt +2ḗue +2ḗŭ +2ḗve +2ĕ2a +ĕ2ā +2ĕā. +2ĕān +2ĕāq +4ĕārŭ +2ĕāu +2ĕāv +4ĕā́n +4ĕā́u +4ĕā́v +2ĕă. +ĕ1ăm +ĕ2ăn +4ĕănĕ +2ĕ2ăq +ĕ2ăr +ĕ2ăt +2ĕ2ău +2ĕ2ăv +ĕ2ắ +ĕ3ắmb +2ĕ2á +2ĕ2æ +ĕæ2ă +ĕæ2ŭ +2ĕ2ǣ +ĕǣ2ă +ĕǣ2ŭ +2ĕ2ǽ +ĕb2 +ĕbĕ3d +ĕbī3u +ĕbī3v +ĕ3bŭ +2ĕc +ĕ4c3ĕnn +ĕ4c5ĕ́nn +ĕ2ch +ĕc4ĭm +ĕ2c3l +ĕcŭ3mā +ĕcŭ3mă +ĕcŭ3mĕ +ĕcŭ3m4ī +ĕcŭmī́5n +ĕcŭmī́5q +ĕcŭmī́5u +ĕcŭmī́5v +ĕcŭ3mŭ +ĕcŭpĕ3 +ĕ2c3ŭ2t +ĕ2d1a +ĕd3ā́c +ĕ2d1ă2 +ĕdă4m +ĕd5ămă +ĕd3áu +ĕdē2g +ĕd3ēmē +ĕdē2s +ĕdḗ4g +ĕ2dĕm +ĕ3dĕō +ĕdĕ6stĕ +ĕdī5uĕ. +ĕdī5vĕ. +ĕ2dĭa +ĕ2dĭá +ĕ2dĭæ +ĕ2dĭǣ +ĕ2dĭǽ +ĕ2d3ĭg +ĕ2dĭm +ĕ2d3ĭn +ĕ2dĭp +ĕdĭ4s +ĕ4d3ĭ4ta +ĕ4d3ĭ4tá +ĕ4d3ĭ4tæ +ĕ4d3ĭ4tǣ +ĕ4d3ĭ4tǽ +ĕ4d3ĭ4tī +ĕ4dĭtĭ +ĕd5ĭtĭō +ĕd5ĭtōr +ĕd5ĭtōs +ĕ4d3ĭ4tū +ĕd5ĭtŭm +ĕd5ĭtŭs +ĕ4d3ĭ́g +ĕd5ĭ́4tă +ĕd5ĭ́4tĭ +1ĕdō +ĕ2dōr +ĕ4dṓr +1ĕdŏ2 +ĕ2d3ŏl +ĕ2dŏp +3ĕdŏr +ĕ4d3ŏ́4l +ĕ4d3ŏ́p +ĕd2r +ĕd2ū +ĕdū3n +ĕ2d3ŭl +ĕ2d3ŭn +ĕ4d3ŭ́l +ĕ4dŭ́n +2ĕē +2ĕ1ĕ +ĕĕ2ă +ĕ2ĕm +ĕ2ĕq +ĕĕ2r +ĕĕ4rō +ĕ2ĕt +ĕĕ2x +ĕ2ĕ́2 +2ĕfă +2ĕfĕ +ĕ2gn +ĕ2gō +ĕ3gō. +ĕ3gōn +ĕ3gōq +ĕ3gōu +ĕ3gōv +ĕ3gṓn +ĕ3gṓq +ĕ3gṓu +ĕ3gṓv +ĕ1h +ĕ1i +ĕ3iē +2ĕī +ĕ1ī2b +ĕ1ī2m +ĕ2īq +ĕ1ī2r +ĕ1ī2t +ĕ2īu +ĕ2īv +ĕī́2b +ĕī́2m +ĕī́2r +ĕī́4t +ĕ1ĭ +ĕ2ĭc +ĕ2ĭnŭ +ĕĭ2t +ĕĭ3tā +ĕĭ3tĭ +ĕ2ĭu +ĕ2ĭv +ĕĭ́4tĕ +2ĕl +ĕlă3s2 +ĕllē3i +ĕllḗ5i +ĕ2l1u +2ĕm. +ĕ1ma +ĕ1mă +2ĕmn +1ĕmp +ĕm3pn +2ĕmq +2ĕ2mu +2ĕmv +2ĕn +ĕn2ā +ĕn3d2 +ĕnd4ŭ +ĕ3n2e +ĕ3n2ĕ +ĕnĕ3rŭ +ĕnĕ́s5 +ĕ2ni +ĕn2ŭ +ĕ2ōn +2ĕōr +2ĕ2ōs +ĕŏ2g3n +ĕ2ŏr +ĕŏ5rā́ +ĕ3ŏrs +ĕ2ŏ́ +ĕ3pĕ +ĕpĕ3r +ĕpĭ5str +ĕ3pŏ +2ĕps +ĕp2su +4ĕquĕ +2ĕr. +ĕr1a +ĕ3rae. +ĕ3raea +ĕ3raeā +ĕ3raeă +ĕ3raeá +ĕ3raeī +ĕ3raen +ĕ3raeu +ĕ3raev +ĕ5ra͞e. +ĕ5ra͞ea +ĕ5ra͞eā +ĕ5ra͞eă +ĕ5ra͞eī +ĕ5ra͞en +ĕ5ra͞eu +ĕ5ra͞ev +ĕ5rá͞ea +ĕ5rá͞eā +ĕ5rá͞eă +ĕ5rá͞eī +ĕ5ra͡e. +ĕ5ra͡ea +ĕ5ra͡eā +ĕ5ra͡eă +ĕ5ra͡eī +ĕ5ra͡en +ĕ5ra͡eu +ĕ5ra͡ev +ĕ5rá͡ea +ĕ5rá͡eā +ĕ5rá͡eă +ĕ5rá͡eī +ĕrās3 +ĕr4āt +ĕ1ră2 +ĕ3ră. +ĕr3ăc +ĕ2răd +ĕr5ămă +ĕr3ămī +ĕ3rănĕ +ĕr3ăng +ĕ3răq +ĕ2r3ăs2 +ĕ3rău +ĕ3răv +ĕrắ2 +ĕ4r3ắd +ĕ4r3ắg +ĕ4r3ắl +ĕ4r5ắmb +ĕrắs6tō +ĕr3áes +ĕ2r3áu +ĕr1æ2 +ĕ3ræ. +ĕ3ræā +ĕ3ræă +ĕ3rææ +ĕ3ræǽ +ĕ3ræī +ĕ3ræn +ĕ3ræu +ĕ3ræv +ĕr1ǣ2 +ĕ3rǣ. +ĕ3rǣā +ĕ3rǣă +ĕ3rǣǣ +ĕ3rǣī +ĕ3rǣn +ĕ3rǣu +ĕ3rǣv +ĕ3rǣ́ā +ĕ3rǣ́ă +ĕ3rǣ́ǣ +ĕ3rǣ́ī +ĕ3rǣ́n +ĕr3ǣ́s +ĕ3rǣ́u +ĕ3rǣ́v +ĕr3ǽ2s +ĕ3r2e +2ĕrē +ĕ2r3ē2d +ĕr3ē2g +ĕ5rēmĭnī +ĕ5rēmŭ +ĕ5rēnĕ +ĕ5rērĕ +ĕ5rērĭ +ĕr3ēss +ĕr3ēst +ĕ5rēuĕ +ĕ5rēvĕ +ĕr3ḗ4d +ĕ4r3ḗ4g +ĕ5rḗmĭnī +ĕ5rḗmŭ +ĕr5ḗnă +ĕ5rḗnĕ +ĕ5rḗq +ĕ5rḗrĕ +ĕ5rḗrĭ +ĕr5ḗss +ĕr5ḗst +ĕ5rḗt +ĕ5rḗuĕ +ĕ5rḗvĕ +2ĕ1rĕ +ĕ3rĕ. +ĕr3ĕăt +ĕr3ĕ4d4 +ĕ2rĕf +ĕrĕ2g +ĕrĕ2m +ĕr3ĕmā +ĕ4r3ĕmă +ĕr3ĕmē +ĕr3ĕmĕ +ĕr3ĕmī +ĕr3ĕmĭ +ĕ4r3ĕmō +ĕr3ĕmŏ +ĕr3ĕmŭ +ĕ2r3ĕ2q +ĕ5rĕquĕ +ĕ2r3ĕ2s +ĕ3rĕu +ĕ3rĕv +ĕr3ĕ́4d +ĕrĕ́4m +ĕr5ĕ́mĕ +ĕr5ĕ́mĭ +ĕ4r3ĕ́s +ĕr1i +2ĕ1rī +ĕrī3ā +ĕr3ī2b +ĕ2rīn +ĕr4īq +ĕr3ī́4b +ĕr4ī́q +ĕ4r3ĭ4cĕ +ĕr3ĭ4cĭ +ĕr3ĭ4dō +ĕ5rĭĕ. +ĕ5rĭĕn +ĕ5rĭĕq +ĕ5rĭĕu +ĕ5rĭĕv +ĕ4r3ĭ4mā +ĕ4r3ĭ4mă +ĕr5ĭ4mēb +ĕr5ĭ4mēm +ĕ4r5ĭ4mēn +ĕr5ĭ4mēr +ĕr5ĭ4mēs +ĕr5ĭ4mēt +ĕr5ĭ6mḗb +ĕr5ĭ6mḗm +ĕ6r5ĭ6mḗn +ĕr5ĭ6mḗr +ĕr5ĭ6mḗs +ĕr5ĭ6mḗt +ĕ4r3ĭ4mĕ +ĕ4r3ĭ4mī +ĕr5ĭ4mĭm +ĕr5ĭ4mĭs +ĕr5ĭ4mĭt +ĕr5ĭ4mĭ́ +ĕrĭ4mō. +ĕrĭ4mōq +ĕrĭ4mōu +ĕrĭ4mōv +ĕr3ĭ4mŏ +ĕr5ĭ4mŭn +ĕr5ĭ6mŭ́n +ĕr3ĭng +ĕr4ĭō +ĕr4ĭŏ +ĕr4ĭs +ĕ4r5ĭ4tĭb +ĕ5rĭtōt +ĕ5rĭtṓt +ĕ5rĭtŏ +ĕrĭ4tūs +ĕ4r5ĭ4tŭī +ĕ5rĭtŭr +ĕ4r5ĭ4tŭŭ +ĕ5rĭtŭ́r +ĕr4ĭŭ +ĕr5ĭ́4cĭ +ĕ4r3ĭ́ĭ +ĕ6r5ĭ́6mĕn +ĕ6r5ĭ́6mĕq +ĕr5ĭ́6mĕr +ĕ6r5ĭ́6mĕu +ĕ6r5ĭ́6mĕv +ĕr5ĭ́6mĭm +ĕr5ĭ́6mĭt +ĕrĭ́6tĭb +ĕ4r5ĭ́4tŭ +2ĕrn +ĕ1ro +ĕ1rō +ĕ3rōn +ĕr3ō4rē +ĕr3ō4rĕ +ĕr3ō4rō +ĕ3rōrŭ +ĕ3rōs. +ĕr3ōsc +ĕ3rōsn +ĕ3rōsq +ĕ3rōsu +ĕ3rōsv +3ĕrōt +ĕrṓ4rē +ĕrṓ4rĕ +ĕ5rṓrŭ +ĕr5ṓsc +3ĕrṓt +ĕr1ŏ +ĕr3ŏ́l +ĕ3rŏ́r +2ĕrq +2ĕ2r1u +ĕ3rūg +ĕrū2r +ĕr3ūt +ĕr3ū́4r +ĕr3ū́t +ĕ3rŭē +ĕ3rŭĕ +ĕ3rŭī +ĕ3rŭĭ +ĕ3rŭ2m3 +ĕ5rŭntō +ĕ5rŭntŏ +ĕ5rŭntŭ +ĕ3rŭs. +ĕ3rŭsn +ĕ3rŭsq +ĕr3ŭss +ĕr3ŭst +ĕ3rŭsu +ĕ3rŭsv +ĕr3ŭ2t +ĕ3rŭ́l +ĕ3rŭ́m +ĕ5rŭ́sn +ĕ5rŭ́sq +ĕr5ŭ́ss +ĕr5ŭ́st +ĕ5rŭ́su +ĕ5rŭ́sv +2ĕrv +1ĕ1sc +ĕs2cī +ĕs2cĭ +ĕs2cŭ +ĕ3s2ĕ +ĕ3sō +ĕ1sp +ĕspĕ5rī +ĕ2sph +ĕs2pl +ĕs2pō +ĕs2pŏ +ĕs2pŭ +ĕ2sq +ĕs2ta +ĕ4stēs +ĕ4stḗs +ĕ4s3tĕ. +ĕ4stĕm +ĕ4s5tĕnĕ +ĕ4s3tĕq +ĕ4s3tĕu +ĕ4s3tĕv +ĕ4stĕ́m +ĕ4s3tī. +ĕ4s5tīnĕ +ĕ4s3tīq +ĕ4s3tīs +ĕ4s3tīu +ĕ4s3tīv +ĕ6s5tī́nĕ +ĕ4s5tī́q +ĕ4s5tī́s +ĕ4s5tī́u +ĕ4s5tī́v +ĕ4stĭ́c +ĕs4tn +ĕ2s3tō +ĕs4tq +ĕs3trē +ĕs3trĕ +ĕ2s4tu +ĕs4tv +ĕ2su +ĕ3t2ă +ĕtă3g +ĕtĕ3rĕ +ĕtĕ5rī +ĕtĕrī5u +ĕtĕrī5v +ĕtĕ3rŭ +ĕtĭ4ă +ĕt3ĭp +3ĕts +ĕ2t1u +2ĕ1u +ĕ3uĕ +ĕ1ū2 +ĕ2ū3m +ĕ2ū́m +ĕū́2r +ĕū́4t +1ĕŭ2 +ĕ1ŭl +2ĕ2ŭm +ĕ1ŭr +2ĕŭs +ĕ1ŭt +2ĕ2ŭ́m +2ĕŭ́s +ĕ4ŭ́sq +ĕ3ŭ́t +2ĕv +ĕ3vĕ +ĕ2xă +ĕx3áu +ĕx3ĕ́m +ĕ2xi +ĕx3ĭī +ĕxō2 +ĕ3xṓ +ĕxṓ4rā +ĕxṓ4ră +ĕxṓ4rē +ĕxṓ4rĕ +ĕxṓ4rō +ĕx5tĕr +ĕ2xu +ĕ2́ +2ĕ́ă +ĕ́b2 +ĕ́2cl +ĕ́4dăm +ĕ́4dīs +ĕ́4dĭa +ĕ́4dĭæ +ĕ́4dĭǣ +ĕ́4d5ĭ4ta +ĕ́4d5ĭ4tæ +ĕ́4d5ĭ4tǣ +ĕ́4d5ĭ4tī +ĕ́4d5ĭ4tū +ĕ́2dŏ +2ĕ́ĕ +ĕ́3ĕō +ĕ́3ĕŏ +ĕ́3ĕ2r +1ĕ́f +ĕ́1i +ĕ́3iē +2ĕ́l +2ĕ́m +2ĕ́n +ĕ́nd4 +4ĕ́ps +ĕ́ră4g +ĕ́r5ĕăn +ĕ́r5ĕăt +ĕ́r3ī +ĕ́4rīs +ĕ́4r5ĭm. +ĕ́4r5ĭ4mā +ĕ́4r5ĭ4mă +ĕ́4r5ĭmĕ +ĕ́4r5ĭ4mī +ĕ́4r5ĭ4mō +ĕ́r5ĭ6tūs +ĕ́2ru +ĕ́4r3ŭt +3ĕ́sc +ĕ́3s4cī +ĕ́3sĕ +ĕ́3spŭ +4ĕ́stā +ĕ́5stĭtā +ĕ́5stĭtī +ĕ́5stĭtĭ +ĕ́5stĭtō +ĕ́4str +2ĕ́2t +ĕ́3tā +ĕ́3tă +ĕ́3tē +ĕ́3tĕ +ĕ́3tī +ĕ́3tō +ĕ́3tŏ +ĕ́3tr +3ĕ́ts +ĕ́3tŭ +ĕ́x3ĕā +ĕ́x3ĕă +ĕ́x3ĕō +ĕ́x3ĭī +2é2a +2éæ +2éb2 +éba3q +ébe3 +éb4ri +ébs3 +é3bu +éce1 +é2ch +é2c3l +éco1 +écu3m4 +é2c3u2t +éda2m +é4d3ama +é4damā +éd2i +é2diǣ +é2d3i2g +éd3ime +éd3i4mi +éd4is +éd3i4tǣ +éd3i4tī +éd3i4tū +é2d3o2l +éd3ue +2ée +é1ea +é1eā +é1eo +é1eō +é1e2r +é1es +éfe1 +1éff +é3g2a +é3gæ +é2gl +é2g3n +é1h +2éi +é3ian +é3iaq +é3iau +é3iav +é1i2c +é1ie +é3ieq +é3ieu +é3iev +é1iē +é3iit +é2in +é3ior +é3iou +é3iov +é2is +é3iul +é2leg +é3li +élu2 +é2l3ue +é2l3ut +é1m2a +ém2e1 +3é4mera +ém2i +é2mic +2émin +3é4mit. +2émn +é1mo1 +1émp +2émq +1émt +2ému +2émv +2én +énd2 +énd4u +é2n3ea +én2ex +én3iit +én3si +é3n2ua +é3n2uē +é3n2uī +én2ul +é3n2uo +2éo +épe1 +épe3r +2éps +ép4se. +ép4sen +ép4seq +ép4seu +ép4sev +ép2su +4é3que +é1r +2éra +é3ra. +é3rae +é2ra2g +ér2al +éra2m +é3ram. +ér3ama +é3ran +é3raq +éra2r +ér3ara +ér5are +ér3aro +é3ras +é3rau +é3rav +é3ra͡ +é3ræ +2ére +ér3ean +ér3eat +ér3e2d4 +ére2g +ére2m +é4r3ema +ér3emā +ér3eme +ér3emē +é4r3emi +ér3emī +é4r3emo +é4r3emō +é4r3emu +é4r3eru +é4rest +é2rh +é4riac +é3riar +2érib +ér5i4cit +2érie +ér3ier +é4r3iit +é4r3i4ma +é4r3i4mā +é4r3i4me +é4r3i4mē +é4r3i4mi +é4r3i4mī +é4r3i4mo +é4r3i4mō +ér5i4mun +é3rio +é3rip +é5ritor +é5ritur +éri4tūs +ér3ī +2érn +é3ro. +3é2rog +é2r3o2p +2érq +ér5rue +2éru +é2r3ua +é2r3uā +é2rue +é2r3uē +é3rul +é3rum +é3run +é2ruo +é2r3uō +é3rus +ér3u2t +é2ruu +2érv +1é2sa +1é2sæ +é3s2cī +és2i +2ésn +1é2so +éspe3 +és2pu +2és3q +4ésta +4éstā +és3tib +3éstn +3éstq +3éstv +3é2su. +é4s3ue +és3ui +3ésum +3ésus +2ésv +2ét +éte1 +3éts +2éu +é1ua +é2uam +é2uaq +é2uau +é1uā +é1uæ +é1uǣ +éub2 +é1ue +é2uel +é1uē +é1ui +é1uī +éu1m +é3unx +éute3 +éu4tra +é1ū +2év +é3ve +éx2a +é2x3ea +é2x3eā +é2x3eo +é2x3eō +éx2ib +é2xiu +éx2o +éx2ō +é2xue +éx4us +2é͞ +2é͡ 1f +f2a +fa4c3ue +fa1m +fa2ru +fas3 +fās3 +fá2c3u +fá1m +fá2ru +fece3 +fe2i +fe3li +fe3ra +fe3r2æ3 +fe3r2ǣ +fe3rē +fe3r4i +fe3rī +fe3ro +fe3rō +fe3ru +fes5tā +fes5te +fe2x +fē2i +fĕ3r2a +fĕ3ră +fĕ3r2æ +fĕ3r2ǣ +fĕ3rē +fĕ3r4ĕ +fĕ3rī +fĕ3rŏ +fĕ3rŭ +fĕ2s3 +fĕs5tĕ +fĕ́3ră +fĕ́5r4ī +fé2i +fér4ī +fé2ru +fé2x 2ff -f2l -2fn -f2r -2ft -2f. -.f2 +file2 +fi1s +fis2i +fĭĕ3 +fí1m +f2l2 +flo3 +flor2 +fons3 +fo3rī +fŏ3rī +fœ̄3d +f2r2 +fra3g +fră3g +fre3 +frem2 +fre5mi +fre5mo +fr4ē3n +frḗ5n +fr4ĕ́3 +fré1 +fré5na +fu1s +fú1s 1g -2gg +gab2 +2g1ae +g2aeq +g4aeue. +g4aeuĕ. +g4aeve. +g4aevĕ. +ga2i +gao3 +g2ar +ga3re +g2au +2g1a͞ +g4a͞eq +g6a͞eue. +g6a͞euĕ. +g6a͞eve. +g6a͞evĕ. +g4á͞eq +g6á͞eue. +g6á͞euĕ. +g6á͞eve. +g6á͞evĕ. +2g1a͡ +g4a͡eq +g6a͡eue. +g6a͡euĕ. +g6a͡eve. +g6a͡evĕ. +g4á͡eq +g6á͡eue. +g6á͡euĕ. +g6á͡eve. +g6á͡evĕ. +gā4iae. +gā6iaene +gā6iaeque +gā6iaeue +gā6iaeve +gā6ia͞e. +gā6ia͞ene +gā6ia͞eque +gā6ia͞eue +gā6ia͞eve +gā6iá͞ene +gā6iá͞eque +gā6iá͞eue +gā6iá͞eve +gā6ia͡e. +gā6ia͡ene +gā6ia͡eque +gā6ia͡eue +gā6ia͡eve +gā6iá͡ene +gā6iá͡eque +gā6iá͡eue +gā6iá͡eve +gā2iā +gā6iáene +gā6iáeque +gā6iáeue +gā6iáeve +gā4iæ. +gā4iæne +gā6iæque +gā4iæue +gā4iæve +gā4iǣ. +gā4iǣne +gā6iǣque +gā4iǣue +gā4iǣve +gā6iǣ́ne +gā6iǣ́que +gā6iǣ́ue +gā6iǣ́ve +gā4iǽne +gā6iǽque +gā4iǽue +gā4iǽve +gā4iīs. +gā6iīsne +gā6iīsque +gā6iīsue +gā6iīsve +gā6iī́sne +gā6iī́sque +gā6iī́sue +gā6iī́sve +gā2iu +gā2iú +găb2 +gă3rĕ +g4áeue. +g4áeuĕ. +g4áeve. +g4áevĕ. +gá2i +gá3ian +2g1æ2 +g2æ3q +g4æue. +g4æuĕ. +g4æve. +g4ævĕ. +2g1ǣ2 +g2ǣ3q +g4ǣue. +g4ǣuĕ. +g4ǣve. +g4ǣvĕ. +g2ǣ́3q +g4ǣ́ue. +g4ǣ́uĕ. +g4ǣ́ve. +g4ǣ́vĕ. +g2ǽ3q +g4ǽue. +g4ǽuĕ. +g4ǽve. +g4ǽvĕ. 2gd -2gf -g2l -2gm -2gn -g2r -2gs -2g. -1h -2hp -2ht -2h. -.hu1i2u -.h2 -1k +g2e +ge2e +ge2i +3gena +3genā +3gená +3genæ +3genǣ +3genǽ +3genen +3geneq +3geneu +3genev +3genē +3gené +3geni +3genī +3gení +3geno +3genō +3genó +3genu +3genú +ge1r +ger2æ3 +ger2ǣ +ge3rē +ge3rī +ges3t +ges5tā +ges5te +ges5tr +2getē +2geté +2getī +ge2un +3gēd +gē2i +g2ĕ +gĕ2ă +gĕ2ī +3gĕna +3gĕnā +3gĕnă +3gĕná +3gĕnæ +3gĕnǣ +3gĕnǽ +3gĕnē +3gĕnĕn +3gĕnĕq +3gĕnĕu +3gĕnĕv +3gĕnī +3gĕnō +3gĕnŭ +3gĕ3r2a +gĕ3ră +3gĕrá +3gĕ3r2æ +3gĕ3r2ǣ +3gĕrǽ +gĕ3rē +gĕ3r4ĕ +gĕ3rī +gĕ3rŏ +3gĕ3rŭ +gĕs3 +gĕs5tĕ +3gĕ́nă +3gĕ́nĕ +gĕ́3rĕ +gé2i +3géna +3génen +3géneq +3géneu +3génev +3géss +3gést +2gg2 +g3ga +g3gæ3 +g3gǣ +g2i +3gie +gig3 +gi4gn +gi2i +gi4lue +gim2 +gin2ā +gis3 +gi4sc +gis5ci +gispe3 +gis5te +g2ĭ +3gĭĕ +gĭ5mĭn +gĭn2ā +gĭn2ĕ +gĭs5tĕ +3gĭtī +gíg3 +gí2lu +gí1m +gí3tur +g2la +g2lā +g2lá +g2læ +g2lǣ +g2lǽ +g2les +g2lēs +2glĕ +g2lés +2gli +g2lī +2glĭ +g2lí +g2lo +g2lŏ +g2lu +g2lū +g2lú +2g1m2 +g1n2 +gn4an +gna5ni. +gna5nin +gna5niq +gna5nis +gna5niu +gna5niv +gna5nín +gna5níq +gna5nís +gna5níu +gna5nív +gnā3nī +gná5ni. +gná5nis +gnæ4uŭ +gnæ4vŭ +gnǣ4uŭ +gnǣ4vŭ +2gne +g3nem +g3nes +g3nĕm +gnĕ3rŭ +g3nĕ́ +2gné +g3ném +g3nés +g3nib +g4nitæ +g2no +g3non +gno2p +g3noq +g3nor. +3gnora +3gnorá +5gnorim +5gnorit +5gnorím +5gnorít +g3norn +3gnoro +3gnoró +g3norq +5gnorun +5gnorún +g3norv +3gnos +3gnou +3gnov +3g4nóra +5g4nóre. +5g4nórim +5g4nórin +5g4nóris +5g4nórit +3g4nóro +5g4nórun +3g4nósc +3g4nóss +3g4nóst +5g4nóuer +3g4nóui +5g4nóver +3g4nóvi +g2ob2 +3gog +go3n +go5ni5c +go4nn +go4nq +go4nue +go4nv +go2p +g1o2t +go3th +3gōg +g1ō2t +g3ṓ4t +g2ŏ +2gŏ. +gŏb2 +2gŏm +gŏ2p +2gŏq +2gŏu +2gŏv +3góg +g1ót +gó2ti +gœ̄3d +g2r2 +gra3d4 +3grae +gra4ia +gra4iá +gra4iæ +gra4iǽ +gra4ie +gra4ii +gra4ií +3gra͡ +grā6iāne +grā6iā́ne +grăd2 +3gráe +3græ +3grǣ +3grǽ +gre3d4 +gre5di +gre5dī +gres3 +grĕ3d4 +grĕ5dī +grĕ2s3 +grĕ́s3 +grés3 +gré6sti +gri3n +2grī +g2u +gumi3 +gus3 +gūn4e +gūn4ĕ +2gŭæ +gŭ4ĕ́ +2gŭīs +gŭ3m2ĭ +gý3t +h2a +hab2 +ha4c3ue +hae2c3 +ha2i +ha2ī +ha1m +h3ang +ha2o +ha3re +ha3rē +hā2c1 +hā2i +hā2ĭ +h2ă +hă3b2 +hă2ī +h3ăng +hă3ră +hă3rē +hă3rĕ +h3ắng +há2c3u +háe2c3 +há2i +h3áng +hæ2a +hæ2ă +hæ2á +hæ2c1 +hæ2i +hæ2ŭ +hǣ2a +hǣ2ă +hǣ2c1 +hǣ2ŭ +hǽ2c1 +h2e +he2a +hed2 +he2e +he3g +he2ia +he2iá +he2ic3 +he2ie +he2ié +he2ii +he2ií +he2io +he2ió +he2í +heíc3 +he2lu +he2nu +he2o +he3r2a +hera3g +he3rá +he3r2æ +he3r2e +he3r4i +heris3 +he3rī +he3ro +hero5d +he3se +he2s3p +hespe3 +he2sq +he2st +he2u +he2ū +heū3s +he2x +h2ē +hē2ia +hē2iā +hē2iá +hē2iæ +hē2iǣ +hē2iǽ +hē2ie +hē2iē +hē2iī +hē2iō +hēmĭ3s +hē2nu +hē3r +hē4rn +hē4rq +hē4ru +hē4rv +hē3se +hē3sĕ +hēs3t +h2ĕ +hĕ2ă +hĕ2ĭ +hĕ3r4ĕ +hĕ3rī +hĕ3rŭ +hĕ2sp +hĕ2ū +hĕū3s +hé2i +hé1m +hé3r2a +héra3g +hé2ru +hé2x +h2i +hi4c3ue +hi2i +hin2ā +hi2o +hio2s +hi3p2t +hi4s3t +his5ta +his5tā +his5te +hi3uu +h2ī +hī2cu +hī3p2 +hī3sŏ +hī́3p2 +hĭn2a +hĭn2ā +hĭn2æ +hĭŏ3p +hĭ3p2t +hĭ4st +hĭs5tā +hĭs5tă +hĭs5tĕ +hĭ́p4t +hí2c3u +híp2t +h2l +2h1m2 +hmĭ2ă +hmo4nu +h1n2 +hno3b2 +hnu3 +hn4us +hnū3 +h2o +ho2a +ho3b2 +hobī3u +hobī3v +ho2c3u +ho2e +ho2i +hoi3q +ho2ī +hoī3u +hoī3v +hoī́3u +hoī́3v +ho2í +hon3g4 +hongæ3 +hongǣ́5 +hongǽ3 +ho2o +ho2ō +ho2ó +ho5rén +ho3rī +ho2s +ho3se +ho3si +ho3sí +ho3spe +hō2cu +hōne4 +hō2nu +hō2sp +h2ŏ +2hŏ. +hŏ2ă +hŏ3b2 +hŏbī3u +hŏbī3v +2hŏd +hŏ2ī +hŏī3u +hŏī3v +hŏī́3u +hŏī́3v +hŏ2ĭ +hŏn3g4 +hŏngæ3 +hŏngǣ́5 +hŏngǽ3 +hŏ2ō +hŏ3rī +hŏ2s +hŏ́3rĭ +hŏ́4s +hób2 +hó2c1 +hó3l +hó2nu +hó2sp +2hœ +h2r2 +hras5t +hrăs3t +hu2cu +hu1i2 +huic3 +huí2 +huíc3 +hum2e +h2ū +hū2cu +hū3l +hū́3l +hŭ3mĭ +hú2c1 +hú3iu +iab2 +iabo3l +iab4u +1iac +3iact +iad2æ3 +iad2ǣ +iad2ǽ +ia3d2e +iad2ē +iad2é +iad2i +iad2ī +i2ae +ia3iú +i3alt +iamb2 +iam5bi +iambī5q +iambī5u +iambī5v +iambī́5q +iambī́5u +iambī́5v +3iamī +i3ang +i3ann +i1ap +i2aq +ia3re +ia4rid +ia4ríd +ia3s4pe +ia3spé +ias3t +ias5te +ias5tr +ia4tra +ia4trá +ia4tro +ia4tró +i2au +i1a2x +i2a͞ +i2a͡ +2iāc +i2ān2 +3iānĕ +3iāquĕ +i2āru +3iārŭ +3iāsnĕ +5iāsquĕ +3iāsuĕ +3iāsvĕ +iā4trā +3iāuĕ +3iāvĕ +i1ā2x +3iā́nĕ +5iā́quĕ +3iā́rŭ +5iā́snĕ +5iā́squĕ +5iā́suĕ +5iā́svĕ +3iā́uĕ +3iā́vĕ +1iă +iăd2 +iábo3 +3iácu +2iád +i2áe +i3ált +iám3b2 +i4áne +i3áng +2iáq +iá4rid +iá4tro +i1á2x +i2æ +iæ2a +iæ2á +iæ2i +i2ǣ +iǣ2a +i2ǽ +ib2 +i3biu +ibī3u +ibī3v +2iboe +2iboē +2iboé +ibo3l +i3bum +ib4un +i5bund +4ibu2s3 +i3bū +ib4ū́ +4ibús3 +2ic. +2i3ca +2i3cā +2i3cá +2i3cæ +2i3cǣ +2i3cǽ +2iceb +2icen +i4c3enn +2icet +i3cēn +2icén +i4c5énni +2icéq +2icéu +2icév +i3cia. +i3ciaq +i3ciau +i3ciav +i3cii +i3cií +i3cium +i3ciúm +2i3cīs +i3cī́s +i3cía +2icl +2icn +2i3co +2i3cō +2i3có +2icq +2ict +i2c3u2t +ic2ū +2icv +i3d2a +2i3d2e +ide3mé +ide2s +2i3dē +idē4iē +idē3m +idē2s +2i3dé +2i3d2i +idi3g +id3ips +idi4s +2i3dī +2i3dí +i3do +id4or +2i3d2u +2i3dú +2ie. +1iec +iece3 +ie2e +2ieg +ie4gn +2ieī +2ieí +i2em +2ieo +2ieō +2ieó +2i2eq +ie1r +ie3r2e +ie3rī +i3erm +ie2s +i3e4sa +i3esá +ies3c +i3ese +i3esé +i3e4si +i3esí +i3e4so +i3esó +ies5tā +i3esú +2iete +iete5re +2ietē +2ieté +2ietī +2i2eu +ie2un +2ieú +2i2ev +1iex +iex2i +ie2xu +2ie͞ +2ie͡ +2iē. +1iēc +2iēg +i2ēn +iē3na +2iē3ne +2iēq +3iēquĕ +iē2s +iē4sa +iē3sū +4iēta. +4iētae. +6iētaene +6iētaeque +6iētaeue +6iētaeve +4iētam +4iētan +4iētaq +4iētau +4iētav +6iēta͞e. +6iēta͞ene +6iēta͞eque +6iēta͞eue +6iēta͞eve +6iētá͞ene +6iētá͞eque +6iētá͞eue +6iētá͞eve +6iēta͡e. +6iēta͡ene +6iēta͡eque +6iēta͡eue +6iēta͡eve +6iētá͡ene +6iētá͡eque +6iētá͡eue +6iētá͡eve +2iētā +5iētānĕ +5iētāquĕ +5iētārŭ +5iētāsnĕ +5iētāsquĕ +5iētāsuĕ +5iētāsvĕ +5iētāuĕ +5iētāvĕ +5iētā́nĕ +5iētā́quĕ +5iētā́rŭ +5iētā́snĕ +5iētā́squĕ +5iētā́suĕ +5iētā́svĕ +5iētā́uĕ +5iētā́vĕ +6iētáene +6iētáeque +6iētáeue +6iētáeve +4iētám +4iētæ. +4iētæne +6iētæque +4iētæue +4iētæve +4iētǣ. +4iētǣne +6iētǣque +4iētǣue +4iētǣve +6iētǣ́ne +6iētǣ́que +6iētǣ́ue +6iētǣ́ve +4iētǽne +6iētǽque +4iētǽue +4iētǽve +4iētē. +4iētēn. +4iētēne +6iētēnne +6iētēnque +6iētēnue +6iētēnve +6iētēque +4iētēs. +6iētēsne +6iētēsque +6iētēsue +6iētēsve +4iētēue +4iētēve +6iētḗne +6iētḗnne +6iētḗnque +6iētḗnue +6iētḗnve +6iētḗque +6iētḗsne +6iētḗsque +6iētḗsue +6iētḗsve +6iētḗue +6iētḗve +4iētīs. +6iētīsne +6iētīsque +6iētīsue +6iētīsve +6iētī́sne +6iētī́sque +6iētī́sue +6iētī́sve +2i2ēu +3iēuĕ +2i2ēv +3iēvĕ +1iēx +3iḗc +2iḗg +iḗ2s +4iḗta +4iḗtā +4iḗtæ +4iḗtǣ +4iḗtē +4iḗtī +i2ḗu +i2ḗv +1iĕ +iĕ1r +iĕ3r4ĕ +iĕs3 +1iéc +2iég +ié4gn +i2é1m +2iéne +2iéq +i3érm +ié2s +ié4sa +i3ése +i3ési +2iéte +2iéu +2iév +1iéx +ié2xu +2ié͞ +2ié͡ +2if +ife6ste +ig2a +1ig2æ3 +1ig2ǣ +4igena +4igenā +4igená +4igenæ +4igenǣ +4igenǽ +4igenen +4igeneq +4igeneu +4igenev +4igenē +4igené +4igeni +4igenī +4igení +4igeno +4igenō +4igenó +4igenu +4igenú +4igéna +ig2l +i2gn +ig3nat +ig3nāt +ig5nā́t +ig3nát +ig3nē +i3gr +2i1h +i3ha +ihí3 +i1i2a +iiam3 +i1i2á +i1ie +i1iē +i1io +i1ió +i1iu +i2iue +i1iú +i2ī +3iīnĕ +3iīuĕ +3iīvĕ +1iĭ +2ij +2i3le +ilē3i +ilḗ3i +2i3lé +i3li +ili4g5n +ilí4g3 +4ille. +4illen +4illeq +6illeue. +6illeve. +4illi. +4illiq +4illis +4illiu +4illiv +2illī +6illíne. +4illíq +4illís +4illíu +4illív +2illo +2illō +2illó +4illum +4illus. +4illusn +4illusq +4illusu +4illusv +4illúm +4illúsn +4illúsq +4illúsu +4illúsv +2ilo +2iló +i2l3ua +i2luā +i2l3uá +i2l3uæ +i2luǣ +i2l3uǽ +il3ue. +il3ues +i2l3uē +il4uēr +il3ués +il5uis. +il5uisn +il5uisq +il5uisu +il3uīs +il5uī́s +il5uísn +il5uísq +il5uísu +i2luo +i2luō +i2l3uó +i2luu +i2luú +i1m +2im. +i3ma. +i2mad +ima4lu +im2am +im2an +i3maq +im2as +i3mau +i3mav +imás3 +i3mæ +i3mǣ +i3mǽ +im3b2 +im5biv +imbī3q +imbī3u +imbī3v +imbī́5q +imbī́5u +imbī́5v +im2e +2imed +ime5dá +ime5de +ime5dé +2imel +4imetr +2imēd +2imēl +4imḗd +4imḗl +2iméd +2imél +4i5métr +im2i +imi2a +i4micu +i4micú +3i2mie +3i2miē +3i2mié +3i2mii +i4minē +4i5minī +3i2mir +i4mitæ +i4mitǽ +i4mitu +3i2míc +3i2míi +3i2mír +imí5tur +1imm +2imn +imo4nu +i4m3ord +i4m3órd +1imp +impe5r6ii +impe5r6iī +impe5r6ií +impe5rin +impe5riue +impe5riv +impe5r4ī +2imq +2imue +2imv +i1n +i3na. +i3nae +in4al +i3nam +i3n4aq +i3nar +i3nas +i3nau +i3n4av +i3na͡ +i3náe +in4ál +i3nám +i3náq +i3nár +i3nás +i3náu +i3náv +i3næ +i3nǽ +indi5st +in4d3ue +in4d3ui +in4d3uī +in4d3uí +in4d3úe +2i3ne +ine2d +ine2l +ine2x +in3e͞ +in3e͡ +i3né +iné2d +1inf +i3ni. +i3nia +i3niá +i3nib +ini2c +in3ice +in3ici +i3nii +i3nií +ini2m +i3nin +i3nio +i3nió +i3nis +i3nit +i3niu +i3niú +i3niv +iní4ciā +iní4cie +iní4ciē +iní4ciō +i3nín +i3níq +i3nís +i3níu +i3nív +1inj +2i3no +2i3nō +2i3nó +in5réq +1in1s2 +insi5ti +instre5 +instré5 +4int. +in5ter +inte5ron +inte5rōn +inte5rṓn +inté6r5is +2inth +4intn +4intq +2intu +4intv +1in1u2 +inu4b +4inum +2i3nus +in1ū2 +inū́4b +inú2b +in3únd +1inv +io1 +io2a +iob2 +iobo3 +io2bó +iom2 +iome3 +iome5d +2ion +io3n2i +io5ni5c +3iono +3ionó +2iope +2iopē +2iopé +io3rī +2ios +io2st +iot4e +io5ten +iot4é +io5tén +i2ō +iō3d +3iōnĕ +3iōrŭ +3iōuĕ +3iōvĕ +1iŏ +i1ó2b +ióbo3 +2ióc +2ióni +2iós +2ipa +2ipā +2ipá +2i3pe +ipe3r +iper4a +iper4ā +iper4æ +iper4ǽ +iper4e +iper4ē +iper4o +iper4ó +2i3pē +2ipé +2iph +2i3pi. +2i3pib +2i3pin +2i3piq +4i3pis. +4i3pisn +4i3pisq +4i3pisu +4i3pisv +2i3piu +2i3piv +2ipī. +2i3pīn +2ipīq +2ipīu +2ipīv +4i3pī́n +4i3pī́q +4i3pī́u +4i3pī́v +2ipín +2ipíq +i4písc +4ipísn +4ipísq +4ipísu +4ipísv +2ipíu +2ipív +2ipl +ip2ne +ipo4s3 +2i3pu +ipu3l +2ipú +2ir. +i1r2a +irad2 +ira3g +iras7cen +iras5t +i1r2æ +iræ3d +i1r2ǣ +irǣ3d +i1re +i3re3d4 +ire5di +ir3e4me +ire4mér +ir5e4mim +ir5e4mis +ire4mít +i3r2ex2 +ire5xi +ir1ē +iré4mer +ir5é4mim +i1rh +i1r2i +i2r3i2b +iri4be +i2r3i2m +iri3n +i1rī +ir3í2b +i2r3í2m +i1ro +i1rō +1irr +ir5réq +2irrh +ir5rue +i1ru +i2rue +i1ry +i1rý +2is. +is2ad +i2s3al +is3a4tr +i2s3ā2 +isā́2 +is4ád +2i2sc +is3cæ +i5scendamus +i5scendamú +i5scendant +i5scendat +i5scendámus +i5scendánt +i5scendát +i6scende. +i6scendene +i6scendeq +i6scendeu +i6scendev +i5scendé +i5scendim +i5scendit +i5scendít +i5scendun +i5scendún +is7cens. +is7censn +is7censq +is7censv +i5scéndant +i5scéndat +i5scéndens +i5scéndent +i5scénder +i5scéndes +i5scéndet +i5scéndim +i5scéndit +i5scéndun +i5s6cénsa +i5s6cénsæ +i5s6cénse +i5s6cénsi +i5s6cénso +i5s6cénsu. +i5s6cénsum +i5s6cénsus +is4cid +i3s4cis +i4s5cis. +i4s5cisn +i4s5cisq +is5cisu +i4s5cisv +is3ciu +is3civ +is3cī +is4cíd +i5s4císs +2is2e +2isi +i2s3i2c +i2sie +i2siē +is4iue +2isí +i2s3í2c +2ism +2isn +2iso +3i2sod +2isó +3isód +i3spec +is3per +i5sperg +isperi6n +isperi6q +isper7i6u +isperi6v +isperī6n +isperī6q +isperī6u +isperī6v +isperī́6n +isperī́6q +isperī́6u +isperī́6v +isperí6n +isperí6q +isperí6u +isperí6v +i5spers +i3spex +i3spéc +i5spérg +i5s4pérn +i5spérs +i3spéx +is3pī +2i2s3q +i3s4tab +i3s4tan +i5s4taue +i5s4taué +i5s4tave +i5s4tavé +is4tāb +is4tāt +is4tāu +is4tāv +i3s4táb +i4s5táe +is5the +is5thé +i2sti +i3stil +i2stī +i2stí +i3s4tíl +i3stír +is3to +i5strin +2isu +i4sue +is3uis +is3uís +2isú +2isv +2it. +itas3t +ita6ste +4itatem +4itates +4itatém +4itatés +4iter. +ite3ra +ite5re +ite3ri +iteri5ue +iteri5v +4itern +ite3rō +4iterq +4iteru +ite5run +4iterv +i3tē. +i3tēn +i3tēq +i3tēu +i3tēv +i3téq +4itérn +4itérq +4itéru +4itérv +i3téu +i3tév +2ith +i4tial +i4tiál +2itn +4itōt +4i5tṓt +2itq +i3tr +it4ri +2itt +2itud +i4t3ue. +2itūd +2itúd +2itv +2iu. +2i1ua +2i1uā +2i1uá +2i1uæ +2i1uǣ +2i1uǽ +1iub2 +1iuc +1iud +2iud. +iu2d3u +i1ue +i3ue. +i4uerō +2i1uē +i1ué +1iug +i1ui +2iuia +3i2uiā +3i2uiá +3i2uiæ +3i2uiǣ +3i2uiǽ +iuid4 +iui3g4 +2iuii +2iuiī +2iuií +2iuio +2iuiō +2iuió +i5uis. +i5uisn +i5uisq +i5uisu +4iuium +4iuius +2iuiú +2i1uī +i1uí +2i3uía +iuí3g4 +i3uísn +i3uísq +i3uísu +3iulī +3iulu +i2um +iu3ma +i3und +3iung +3iunx +2iuo +2i1uō +2i1uó +1iur +iu2s3 +i4us. +3iusd +i4usn +3iusp +i4usq +i4usu +i4usv +3iuua +3iuue +2i3uum +3iuuo +2i3uus +2i1uú +1iuv +1iu2x3 +1iū +iūn4e +iūn4ĕ +i2ūr +iū3rē +iū2s +iū2x3 +1i2ŭ +iŭ2s +iŭ́3b +i2ú +iúb2 +1iúd +iú2du +1iúg +iú3lu +2iúm +i3únd +3iúng +3iúnx +1iúr +iú2s3 +1iú2x +2iva +2ivá +2ivæ +2ivǽ +i3ve. +2ivia +3i2viā +3i2viá +3i2viæ +3i2viǣ +3i2viǽ +ivi3g4 +2ivii +2iviī +2ivií +2ivio +2iviō +2ivió +i5vis. +i5visn +i5visq +i5visv +2iviu +2iviú +2ivī +2i3vía +iví3g4 +i3vísn +i3vísq +i3vísv +2ivo +2ivó +2ivu +2ivú +2ix2 +ix4eu +ixo3r +ixu3 +i2x3ue +ix4us +2iz +ī2a +īa2m +īa2t +ī2ā +īā2tr +īā́4tr +ī2ă +ī2á2 +ī2æ +ī2ǣ +ī2ǽ +īb2 +ība2 +ī3bas +ī3băs +ībá2 +ī3bás +ībe3rō +ībĕ3rŭ +ībī3u +ībī3v +ībo2 +2īc +īca2r +ī5cene +ī4c3enn +ī3cē +ī5cĕnĕ +ī4c3ĕnn +īc3énn +ī3ci +ī3cī +ī3cĭ +ī3cí +ī2c3ue +ī2c3u2t +ī2c3ŭt +ī3cú +2īd2 +īda2r +īde2s +īdē2s +ī3do +īd4or +ī3du +īdū2 +ī2e +īe2t +ī2ē +ī2ĕ +īé2 +īg2 +ī3ga2 +īgá2 +ī3gæ3 +ī3gǣ +ī3gn +īg4ne +īg4nu +īgo2 +2ī1h +ī3ha +ī3hă +ī1i +ī2ī +2īl +īle2i +īle2r +īlé2 +īlo2 +ī1m +īm2a +īm2e +īm2i +īm2ĭ +īmo3 +ī1n +īn2ā +īne2r +īn2ĕ +īné2 +1īnf +īno2 +1īn1s2 +īn2u +ī2n3ue +īn2ŭ +2īo +īo3n +īo4nn +īo4nq +īo4nv +2ī2ō +2īŏ +2īó +2ī2p +ī3pa +ī3pā +ī3pă +ī3pá +ī3pæ +ī3pǣ +ī3pǽ +ī3pe3 +īper2 +ī3pē +ī3pĕ +īpĕ3r4 +īpĕ́3 +ī3pé +ī3ph +ī3pi +ī3pī +ī3pĭ +ī3pō +ī3pu +ī3pū +ī3pŭ +ī3pú +ī1r +īr2a +īra3g +īra2r +īrās3 +ī3r2ă +īræ2ă +īrǣ2ă +ī3rēu +ī3rēv +īro2 +īró2 +īsa2r +īsá2 +īs3cæ +īs3cǣ +īs3cī +2īs2e +2ī3s2ĕ +īs2i +2īsī +1ī2so +2īsō +1ī2sŏ +1īsó +ī2sq +īs4tíl +īs3tr +ī2sue +ī2suĕ +2īsŭ +2īsú +īta2r +īta6ste +ītăs5t +ītă6stĕ +īte5re +2ītē +ītĕ3rĕ +ī1u2 +2īua +2īuā +2īuă +2īuá +2īuæ +2īuǣ +2īuǽ +īuid4 +īui3g4 +īuĭ3g2 +īuĭ́3g4 +īuí3g4 +ī2um +ī2un +īuo2 +2īuō +2īuu +2īuŭ +2īuú +2īū +ī2ŭ +ī2ú +2īva +2īvā +2īvă +2īvá +2īvæ +2īvǣ +2īvǽ +īvi3g4 +īvĭ3g2 +īvĭ́3g4 +īví3g4 +2īvō +2īvu +2īvŭ +2īvú +īx2 +īx4eu +īxo4r +ī2x3ue +īx4us +īxū3r +ī2́ +ī́b2 +2ī́c +ī́3ce +ī́3cĕ +ī́3cī +ī́3cĭ +2ī́d2 +ī́3g2 +ī́g4n +2ī́h +ī́5hai +ī́5hăĭ +ī́1i +ī́3lu +ī́1m2 +ī́3met +ī́3mĕt +3ī́n3s2 +ī́3r2ă +ī́3sĕ +ī́4s3t +ī́s5tr +2ī́ū +2ĭa +2ĭā +ĭā4trā +ĭ1ā2x +4ĭā́n +ĭ3ā́2x +2ĭă +ĭăb2 +ĭă4cĕ́ +ĭ2ăcŭ +ĭăd2a +ĭă2dă +ĭăd2æ +ĭăd2ǣ +ĭăd2ǽ +ĭăd2ē +ĭă3d2ĕ +ĭăd2ī +ĭămb2 +ĭămbī5n +ĭămbī5u +ĭămbī5v +ĭămbī́5n +ĭămbī́5u +ĭămbī́5v +ĭăm5bŭ +ĭă2m3ĭ +ĭ3ăng +ĭă2nĭ +ĭ2ănt +ĭ1ă2p +ĭ2ăq +ĭ2ăr +ĭă3rĕ +ĭă3s4pĕ +ĭăs3t +ĭăs5tĕ +ĭăs5tr +ĭ2ăt +ĭ2ău +ĭ2ăv +ĭ2ắc +ĭắ3d +ĭ3ắl +ĭ2ắm +ĭắm3b4 +ĭắ2n +ĭ3ắng +ĭ2ắr +2ĭá +2ĭæ +ĭæ2ă +ĭæ2ŭ +2ĭǣ +ĭǣ2ă +ĭǣ2ŭ +2ĭǽ +ĭbĕ3rŭ +ĭb2ī +ĭbī3u +ĭbī3v +ĭb2ĭ +ĭb2ō +ĭbŏ3l +ĭb2r +ĭ3b2ū +ĭb4ū́ +ĭ3bŭm +2ĭ3ca +2ĭ3cā +2ĭ3că +2ĭ3cá +2ĭ3cæ +2ĭ3cǣ +2ĭ3cǽ +ĭ3cēn +2ĭ3cīs +ĭ3cī́s +2ĭ3cō +2ĭ3cŏ +ĭ2cu +ĭc2ū +2ĭd +ĭ3dă +ĭ3dē +ĭdē3m +ĭdē2s +ĭ3d2ĕ +ĭ3dī +ĭ3dĭ +ĭdĭ3g +ĭdĭ́3g +ĭd3ĭ́p +ĭ2d1u +ĭ3d2ŭ +ĭd4ŭĕ +2ĭ2e2 +2ĭē. +2ĭēg +4ĭēnĕ +2ĭēq +ĭē2s +ĭ3ēsa +ĭ3ēsē +ĭ3ēsĕ +ĭ3ēsī +ĭēs3p +ĭēs3t +2ĭēu +2ĭēv +2ĭḗg +4ĭḗq +ĭḗ2s +ĭ3ḗsē +ĭ3ḗsĕ +ĭ3ḗsī +4ĭḗu +4ĭḗv +2ĭĕ. +2ĭ1ĕg +2ĭĕī +2ĭ2ĕm +2ĭĕō +2ĭĕq +ĭĕ3r2ĕ +ĭ3ĕrm +2ĭĕtē +2ĭĕtĕ +2ĭĕtī +2ĭĕtĭ +2ĭĕtŭ +2ĭĕu +2ĭ2ĕŭ +2ĭĕv +2ĭ3ĕ́g +ĭĕ́3rĕ +4ĭĕ́tĕ +4ĭĕ́tĭ +2ĭé +ĭfĕ6stĕ +1ĭg2a +1ĭgá +1ĭg2æ3 +1ĭg2ǣ +1ĭgǽ +4ĭgĕna +4ĭgĕnā +4ĭgĕnă +4ĭgĕná +4ĭgĕnæ +4ĭgĕnǣ +4ĭgĕnǽ +4ĭgĕnē +4ĭgĕnĕn +4ĭgĕnĕq +4ĭgĕnĕu +4ĭgĕnĕv +4ĭgĕnī +4ĭgĕnō +4ĭgĕnŭ +3ĭgĕs +4ĭgĕ́nă +4ĭgĕ́nĕ +3ĭgĭă +3ĭgĭb +3ĭgĭŭ +ĭ2gn +ĭg3nāt +ĭg5nā́t +ĭg3nē +ĭg3nĭ +ĭ3gr +ĭ1h +ĭhĭ́3 +ĭ1i +2ĭī +ĭ3ĭ2ă +ĭĭăm3 +2ĭle +2ĭ3lē +ĭlē3i +ĭlḗ3i +2ĭ3lĕ +2ĭlé +2ĭ3lī +2ĭ3lĭ +2ĭllĕ +2ĭllī +2ĭllō +2ĭllŭ +ĭ2l1u +ĭ1m +ĭ2măd +ĭmăs3 +ĭm3b2 +ĭmbī3n +ĭmbī3u +ĭmbī3v +ĭmbī́5n +ĭmbī́5u +ĭmbī́5v +4ĭ5mĕtr +4ĭmĕ́tr +ĭm2ĭ +ĭmĭ2ă +3ĭ2mĭē +3ĭ2mĭĕ +3ĭ2mĭĭ +2ĭmĭn +ĭ4mĭnē +ĭ4mĭnĕ +1ĭmm +1ĭmp +ĭmpĕ5rī +ĭ2mu +2ĭmŭr +ĭn1a +2ĭ3nă +ĭn4ăn +ĭn4ăq +ĭn4ău +ĭn4ăv +ĭn1æ +ĭndĭ5st +ĭn4d3ŭĕ +ĭn4d3ŭī +ĭn4d3ŭĭ +ĭn4d5ŭ́ĕ +ĭn4dŭ́ĭ +ĭn3e +2ĭ3nĕ +ĭnĕ2d +ĭn4ĕn +ĭn4ĕu +ĭn4ĕv +ĭnĕ2x +ĭnĕ́4d +3ĭngr +1ĭ2n1i +2ĭnī +ĭ3n4ĭb +ĭn5ĭbĭ +ĭnĭ2c +ĭ3n4ĭs +ĭnĭ2t +ĭnĭ́4cĭ +ĭ3nĭ́s +1ĭnj +2ĭ3nō +ĭnŏ4p +ĭnŏ3s2 +4ĭnt. +3ĭntĕ +ĭntĕ5rōn +4ĭntn +4ĭntq +4ĭntu +4ĭntv +1ĭnu +ĭn1ū2 +ĭnū́4b +1ĭnŭ +1ĭnv +2ĭō +2ĭŏ +ĭŏb2 +ĭŏ2bŏ +ĭŏm2 +ĭ2ŏn +ĭ2ŏr +ĭŏ3rī +ĭŏ2s +ĭŏ́2b +ĭ2ŏ́n +ĭ2ŏ́r +2ĭpā +2ĭpē +2ĭpĕ +ĭpĕ3rĕ +ĭpĕ3rō +ĭpĕ3rŏ +2ĭpī. +2ĭ3pīn +2ĭpīq +2ĭpīu +2ĭpīv +4ĭ3pī́n +4ĭ3pī́q +4ĭ3pī́u +4ĭ3pī́v +2ĭ3pĭ +2ĭpl +ĭp2n +2ĭps. +2ĭpsn +2ĭpsq +2ĭp2su +2ĭpsv +2ĭpŭ +2ĭq +ĭ3qu +ĭ1r2a +ĭ1ră +ĭ1r2æ3 +ĭ1r2ǣ +ĭrǣ3d +ĭr1ē +ĭ1rh +ĭ1rī +ĭ2r1ĭ2 +ĭrĭ́2 +ĭ1rō +ĭ1rŏ +2ĭrrh +ĭ1rŭ +ĭr4ŭn +ĭ1ry +2ĭs +ĭ2s3ā2 +ĭsā́2 +ĭ2s1ă +ĭs2ăd +ĭ2sc +ĭs3cī +ĭ3s4cĭs +ĭ5s6cĭ́ss +ĭ2si +ĭs1ĭ +ĭsĭ2c +ĭsĭ́4c +ĭ3spĕc +ĭs3pĕr +ĭ5spĕrg +ĭspĕrī6n +ĭspĕrī6q +ĭspĕrī6u +ĭspĕrī6v +ĭspĕrī́6n +ĭspĕrī́6q +ĭspĕrī́6u +ĭspĕrī́6v +ĭspĕ4r5ĭ +ĭ5spĕrs +ĭ3spĕx +ĭ5spĕ́c +ĭspĕ́4r5 +ĭ5spĕ́rg +ĭ5spĕ́rn +ĭ5spĕ́rs +ĭ5spĕ́x +ĭs3pī +3ĭssĭs +ĭs4tāb +ĭs4tāns +ĭs4tāt +ĭs4tāu +ĭs4tāv +ĭs4tā́b +ĭ3s4tăn +ĭ3s4tĕm +ĭ5s4tĕ́m +ĭ3s4tĭm +2ĭt. +ĭ3tē. +ĭ3tēn +ĭ3tēq +ĭ3tēu +ĭ3tēv +ĭ3tōt +ĭ3tṓt +2ĭtŏ +ĭ3tr +ĭ2tu +2ĭ3tŭr +ĭ3tŭ́r +ĭ1u +ĭ3uĕ +2ĭuī +ĭ1ūs +2ĭŭ2 +ĭ1ŭb +ĭ3ŭnd +ĭ3ŭ́nd +ĭ3vĕ +2ĭvī +ĭx2a +ĭx2ā +ĭx2ă +ĭx2ǣ +ĭx2ĕ +ĭx2ī +ĭx2ĭ +ĭx2ō +ĭx2ŏ +ĭ2xu +ĭx2ŭ +ĭ2́ +2ĭ́ă +ĭ́b2ī +ĭ́bŏ3l +ĭ́b2r +2ĭ́d +ĭ́2d3u +ĭ́2ĕ +2ĭ́ĕt +3ĭ́gĭă +3ĭ́gĭb +3ĭ́gĭŭ +2ĭ́l +ĭ́5lĭn +ĭ́l3u +ĭ́m3b2 +3ĭ́mĭĭ +ĭ́4mĭnē +ĭ́5mĭnī +3ĭ́mm +ĭ́n4d5ŭī +ĭ́n4dŭĭ +ĭ́n3ĕs +ĭ́n3ī +3ĭ́nj +ĭ́nŏ4p +3ĭ́ntĕ5 +ĭ́n5ŭīs +ĭ́n5ŭōs +ĭ́n5ŭŭm +ĭ́n5ŭŭs +ĭ́ŏ1 +ĭ́rĭ4m +2ĭ́s +ĭ́4spĕr +5ĭ́ssĭs +ĭ́5s4tān +ĭ́s4tĕm +2í2a +íad2 +ía3g +ía1m +ía1s +íb2e +íbe3r +íb2i +íb2ī +íb2o +íbo3l +íb2r +íb2u +í3bum +2íc. +2íca +2íce. +2ícem +2íces +2ícet +2í3ci. +2í3cis +2ícl +2ícn +2íco +2ícq +2íct +í2c3u2t +2ícv +2íd +í3d2e +íd2i +íd2u +í3duu +í2e1 +2íei +2íeī +2íen +2íeo +2íeō +2íeq +2íet +2íeu +2íev +2íf +ífe1 +íg2a +í3gæ +4ígena +4ígenā +4ígenæ +4ígenǣ +4ígenē +4ígeni +4ígenī +4ígeno +4ígenō +4ígenu +í2giī +í2giō +í2gn +2í1h +í3ha +í1i +2íi. +í2im +2í2is +í2it +í3li +2ílle +4ílli. +4íllis +2íllī +2íllo +2íllō +2íllu +íl1u +í2lua +í2luā +í2luæ +í2luǣ +í4luis +íl4uit +í4luiu +í4luīs +í2luu +2í1m2a +2ím3b2 +ím2e +2ímet +ím2i +í4minē +í5minī +1ímm +2ímn +í1mo +ímpe3 +2ímq +ím2uī +2ímv +ín2a +ín3de +ín4d3i4g +índo4 +ín4d3ol +ín4due +ín4d3ui +ín4d3uī +2íne +íni4cit +ín1ī +1ínj +ín3o4p +1ín1s2 +ín2t +ínte3 +ínte5r +2ínth +2íntn +ín3to +2íntq +2íntu +2íntv +í1nu +ín2ua +ín2uā +ín2uē +ín2ul +í3nus +2í2o1 +2íp +ípe3 +í3pi +í2pn +ípte3 +ípu3l +í1r +ír2a +íra3g +ír3i4be +ír3i4bē +ír3i4ma +ír3i4mā +ír3i4me +ír3i4mē +ír3i4mi +ír3i4mī +ír3i4mo +ír3i4mō +1írr +ír5rue +í2rue +2ís +í2s3c +ís4cid +ís2i +í2s3i2c +í4sper +ís3pī +ís3q +ís4tans +í3s4tān +ís4tem +ís5tim +ís5tin +ís3to +ís3uis +íte1 +í2tu +í3tu. +í3tui +4ítuis +4ítuīs +í3tum +2ítuo +2ítuō +í3tus +2ítut +í1u2 +2íu. +í3ub +2íud +2íuia +3í2uiā +3í2uiæ +3í2uiǣ +2íuii +2íuiī +2íuio +2íuiō +2íuiu +2í2um +í2un +íuo1 +2ívia +3í2viā +3í2viæ +3í2viǣ +2ívii +2íviī +2ívio +2íviō +2íviu +ívo1 +2íx +íx2a +íx4eu +íx2i +íx2ī +íx2o +íx2ō +í2xue +íx4us +1j +j2a +jab2 +jad2 +jadæ3 +ja2x3 +jān2 +2jāx +jăd2 +já2x +jece3 +je1r +jes5tā +jex2i +je2xu +jē3sū +jĕ1r +jĕ3r4ĕ +jĕs3 +jé2xu +jo1 +jo2a +jon2 +jo2s +jón2 +jub2 +ju3ma +ju3ri +ju2s3 +ju2x3 +j2ū +jūn4e +jūn4ĕ +jū3rē +jū2s +jū2x3 +j2ŭ +jŭ2s +jŭ́3b +júb2 +jú2s3 +jú2x 1l -2lb +l2a +la3b2 +lab4a +labī3u +labī3v +lab4u +la3cr +la4c3ue +la3cū +lad2 +lae4s5t +la3g +la2i +la3s4pe +la3spé +las3t +las5tr +late4i +latē2 +la3tr +la5trí +la͞e4st +la͡e4st +l2ā +lā3cr +lā3g +lā2ia +lā2ic +lā4iīs. +lā6iīsne +lā6iīsque +lā6iīsue +lā6iīsve +lā6iī́sne +lā6iī́sque +lā6iī́sue +lā6iī́sve +lā2iu +lā2iú +lā2ĭ +lā́3cr +l2ă +lă3b2 +lăbī3u +lăbī3v +lă3cū +lăs3t +lăs5tă +lăs5tr +lă5trĭ +l2á +láb2 +lá4c3ue +láe2c3 +láes5t +lá3g +lá2i +læ2a +læ2ă +læ2á +læ3d +læ2i +læ3q +læ2st +læ3ue +læ3uĕ +læ2ŭ +læ3v +lǣ2a +lǣ2ă +lǣ3d +lǣ3q +lǣ2st +lǣ3ue +lǣ3uĕ +lǣ2ŭ +lǣ3v +lǽ2c1 +lǽ2st +2lb2 +l3bi +lbī3u +lbī3v +l3bu +l3bŭ 2lc +lce1 2ld +lda1 +lde3 +l2e +le3br +le3bu +le2e +le3go +le3gō +le2iá +le2ii +le2ií +le2io +le2ió +le2iu +le2iú +le3l +lelu3 +le1r +ler2æ3 +lere3ā +ler4i +le3rī +2l3ers +2l3ert +les3c +le2s3p +les3t +le2un +le2ur +leu5rá +leu5re +leu5ré +lex2 +le3x4e +le3xi +lexu3r +lexū3r +l2ē +lē3bu +lē3bŭ +lē2iá +lē2ie +lē2iō +lē2iu +lē2iú +lē3ne +lē3nĕ +lē2sp +lēs3t +3lēx +l2ĕ +lĕ2ă +lĕ3gō +lĕ2ĭ +2lĕp +lĕ3r4ĕ +lĕrĕ3ā +lĕ3rī +lĕ3rŏ +2l3ĕrs +2l3ĕrt +lĕ3rŭ +lĕs3 +lĕx2 +lĕxū3r +l3ĕ́rs +l3ĕ́rt +lĕ́s3 +lé3br +3lég +lé3iō +2l3érs +2l3ért +lés3t +lé3uō +léx2ī 2lf -l3f2t -2lg -2lk -2ll -2lm -2ln +2lg2 +l3ga +l3gæ3 +l3gǣ +l2i +li2a +3libe +li3g4ni +li2i +3liī +lin2ā +lino3s +li3q +li4s3c +lis5ci +li4st +lis5ta +lis5tā +li3u2b +4liud +2lix +lī3q +lī2xu +lī́3q +l2ĭ +lĭ4ắ +3lĭbĕ +lĭ4ēn +3lĭĕ +3lĭī +3lĭm +3lĭn +lĭn2a +lĭn2ā +lĭn2æ +lĭn2ĕ +lĭnĭ5tĕ +lĭnĭ5tō +lĭs3 +lĭ4st +lĭs5tā +lĭs5tă +2lĭŭd +lí4c3ue +lí3q +lí3tur +2lj +2ll2 +lle2i +lle2x +llē2i +lli4c3u +llu2d3 +llū2 +l3lŭ +llú2 +2l1m2 +2l1n2 +l2o +lo2a3 +lo2ā +lo2á +lo3b2 +lo4bn +lo4cue +lo2e +logæ3 +longǣ4u +longǣ4v +lo3ni +lo5ni5c +lo5níc +lo4rn +lo4rq +lo4rv +lo2sp +los3t +lo2x3 +lō3d2 +lōe2 +lō3r +lṓr2 +lṓ4s5t +l2ŏ +lŏ2ā +lŏb2 +lŏngǣ4u +lŏngǣ4v +lŏ2s +ló2x 2lp +lpe3r2 +lpĕ3rĕ +l3pi +l3pĭ +lpo4s3 2lq -2lr -2ls +2l1s2 +l2s3t 2lt -2l. -.l2 -1m -2mm +lte1 +lter4a +lte5re +lte5ré +lteri5ue +lteri5v +lte5rī +lterī5ue +lterī5v +ltĕ3r4a +ltĕ3rǣ +ltĕ5rī +ltĕrī5u +ltĕrī5v +ltéri5t +l1uā +l1uă +l1uǣ +l2u3b2 +lu3do +l3uea +l3ueā +l3ueá +l3uee +l3uei +l3ueī +l3ueí +l3ueo +l3ueō +l3ueó +2lues +lue6ste +l3ueú +2l3uĕ +luĕ6stĕ +l3uée +2l3uia +2l3uiā +2l3uiá +2l3uiæ +2l3uiǣ +2l3uiǽ +2l3uic +2luif +2l3uii +2l3uiī +2l3uií +2l3uio +2l3uiō +2l3uió +l3uium +l3uius +2l3uiú +l1uĭ +2l3uía +2luíc +2luíf +l3uína +l5uínen +l5uíneq +l5uíneu +l2um +lumi3 +3l2un +l1uō +lu1r +luru3 +lusa4t +lu2s3ā2 +lu2tī +lu3xo +lū3d +lūru3 +lŭ3b2 +2lŭc +2l1ŭ2t +lŭ́4s +lŭ́s5t +lŭ́3u +lŭ́3v +lúb2 +lú3ia +lú1r +2lv2 +lve6ste +lvĕ6stĕ +2l2x2 +lx3u +lý2c +2lz +1ma. +1mab2 +m1ad +ma2du +3m2ae +ma2ga +ma2gā +ma2gá +ma2ge +ma2gé +ma2gī +ma4g3n +ma2gō +ma2gu +ma2gú +ma1i +ma4ia. +ma4iae +ma4iam +ma4ian +ma4iaq +ma4iar +ma4ias +ma4iau +ma4iav +ma4ia͞ +ma4ia͡ +ma4iā. +ma4iān +ma4iāq +ma4iār +ma4iās +ma4iāu +ma4iāv +ma4iā́n +ma4iā́q +ma4iā́r +ma4iā́s +ma4iā́u +ma4iā́v +ma4iáe +ma4iám +ma4ián +ma4iár +ma4iás +ma4iáu +ma4iáv +ma2iæ +ma2iǣ +ma2iǽ +ma4iis +ma4iīs +ma4iī́s +ma4iís +ma3io +ma3ió +ma2iq +ma4iue +ma3iú +ma2iv +1mal +mali3g4 +malí3g4 +mal4ui +ma4l3uī +m1am +mam4b3i4 +mambī4 +mambī́4 +mam4b3í4 +m2ami +1man +ma3ni. +ma3nin +ma3niq +ma3nis +ma3niu +ma3niv +ma3nín +ma3níq +ma3nís +ma3níu +ma3nív +man3s +man5s4i +mansi5u +mansi5v +man5s4í +1m2a3q +ma2rā +m2aru +3masi +3masí +mas2p +mas3t +1mat +ma3tr +1m2au +1mav +3m2a͞ +3m2a͡ +1m2ā +m3āc +mān3sa +mān3să +mān5s4i +mān3s4ī +mānsī5n +mānsī5q +mānsī5u +mānsī5v +mān5s4ĭ +2m3ā2x +m3ā́c +mā́n5s6i +mā́n5s6ĭ +2m3ā́2x +1mă. +m1ăd +mă2gā +mă2gă +mă2gī +mă2gō +mă2gŏ +mă2gŭ +mămbī4 +mămbī́4 +măm4b3ĭ +1m2ăn +3mănĕ +2m3ănĭ +mă4nĭ́ +3măntē +3m2ă3q +m3ă2rā +mă4răn +mă4răt +mă4rĕr +mă4rĕt +m3ă2rŏ +măs2p +1m2ăt +3m2ău +3m2ăv +1m2ắ +4m3ắnĭ +1má +3m2áe +má4gn +má1i +má4iīs +má3io +má4luī +mám4b3i +m2án +mán3s4i +m2ár +2máræ +m2áu +1m2æ +mæ2a +mæ2ă +mæ2á +mæ2i +mæ2st +mæ2ŭ +1m2ǣ +mǣ2a +mǣ2ă +mǣ2st +mǣ2ŭ +1m2ǽ 2mb -2md -2ml -2mn +m2b3ag +mb2al +m4baru +m4barv +m2bă +m3bắr +mb2ác +mbæ3 +m3be. +m3bea +m3beá +m2be4d +m3ben +m3beo +m3beó +m3b2eq +mb3es +m3beu +m3beú +m3bev +m2b3ēs +m2bĕd +m3bĕn +mb3ĕ́4d +m2bé2d +m2bés +m4b3iam +m4b5iant +m4b3iar +m4b3ias +m4b5iat. +m6b5iatis +m6b5iatís +m4b5iatn +m4b5iatq +m4b5iatu +m4b5iatú +m4b5iatv +m4b3iām +m4b3iār +m4b3iās +m4b5iāti +m4b5iātí +m4b5iātu +m4b5iātú +mb3iā́ +m4biā́m +m4biā́r +m4biā́s +m4biā́t +m2b3iá +mb2i3c +m2bie +mbi3eg +m2biē +m2bié +mbi3ég +mb6igene +m2bii +m2b3iī +m2b3ií +m4b3i4mi +mbi4mur +mbi4múr +m4b3io. +m4b3ion +m4b3ioq +m4b5ior. +m4b5iorn +m4b5iorq +m4b5ioru +m4b5iorv +m4b3iou +m4b3iov +m2b3iō +m2b3ió +m4b3iss +m4b3ist +m4b3i4ta +m4b3i4tá +m4b3i4tæ +m4b3i4tǽ +m4b3iti +mbi4ti. +mbi4tib +mbi4tin +mbi4tió +mbi4tiq +mbi4tiu +mbi4tiv +mbi4tín +mbi4tíq +mbi4tíu +mbi4tív +mb3ito +mbi4tor +mbi4tos +mbi4tór +mbi4tós +m4b5i4tu. +m4b5i4tum +m4b5i4tun +m4b5i4tuq +m4b5i4tur +m4b5i4tus +m4b5i4tuu +m4b5i4tuv +m4b3i4tū +mb3i4tú +m2b3iú +m4bive +m2bī2 +mbī́2 +mbī́4t +m4b3ĭām +m4b3ĭār +m4b3ĭās +m4b5ĭātĭ +m4b5ĭātŭ +mb3ĭā́ +m4bĭā́m +m4bĭā́r +m4bĭā́s +m4bĭā́t +m2b3ĭă +mb2ĭ3c +m2bĭē +m2bĭĕ +mb6ĭgĕnĕ +m2b3ĭī +m2bĭĭ +m2b3ĭō +m4b5ĭŏr. +m4b5ĭŏrn +m4b5ĭŏrq +m4b5ĭŏru +m4b5ĭŏrv +m4b3ĭŏ́ +m4b3ĭtĭ +m4b3ĭ4tū +m4b5ĭ4tŭm +m4b5ĭ4tŭs +mbĭ6tŭ́m +mbĭ6tŭ́s +m2b3ĭŭ +m4b3ĭ́ĕ +m4b3ĭ́ĭ +m4b5ĭ́4tĭ +mb1í +mb2í3c +m2bíe +mb4ígen +m2bíi +m4bí4mi +m4b3íss +m4b3íst +mbí2t +mbí4tu. +mb4ítui +mb4ítuī +mbí4tum +mbí4tus +mb2l +mb2o +mbo3r +mb2ō +m3b2r +m3bu +m5bus. +m5busn +m5busq +m5busu +m5busv +m2b3ūs +m3bŭ +2mc2 +2md2 +mde3d +mde2s +mdē2s +mdĕ3d +m3do +md4or +1me +mea3p2 +meá3p2 +m2eb +med2 +me4dam +me4dan +me4dat +2me2dā +me4dám +me4dán +me4dár +me4dát +me4deb +me4den +me4der +me4det +2me2dē +me4déb +me4dén +me4dér +me4dét +med4i +me4dim +2me2dī +me4dím +me4dít +med4o +me4dor +me4dō. +me4dōq +me4dōu +me4dōv +me4dór +me4due +me4dún +me2e +mee3ri +mee3rí +m1eg +me2ge +me2gé +me2gi +me3go +me3iá +me3ie +me3io +me3ió +me2it +me3iú +me3íp +m2em +m2en +3mena +3mená +men2e +me3neu +3mené +3meni +3mení +me3p2 +m1eq +m2er +me3ra +me3rē +me3ri +4merim +me3rī +2m3erm +me3ro +me3rō +me3r2u +2m3eso +me4so. +me4son +me4soq +me4sor +me4sou +me4sov +2m3e2só +me2sp +2m3ess +5messat +5messát +mes3t +me2su +m4esue +4m3esum +4m3esus +2m3e2sú +3mete +mete3r +meteri5ue +meteri5v +3meté +2mets +me2un +m2ev +m2e2x +1mē +mē4der +mē4dēr +mē4dĕr +mē4dér +mē4dim +mē4dit +mē4dĭm +mē4dĭt +mē4dít +mē2du +m1ēg +mē2ge +mē2gē +mē2gĕ +mē2gé +mē2gi +mē2gĭ +mē2gí +mē3i +m2ēl +m2ēm +m2ēn +mē3ne +mē3p2 +3mēq +m2ēr +2m3ē4sa +2mē2sā +2mē2să +2mē2sá +2mēsæ +2mēsǣ +2mēsǽ +2mēsō +mēs3t +mē2su +4mēsum +4mēsus +2mē2sŭ +2mēsú +3m2ēu +3m2ēv +mḗ4der +mḗ4dĕr +mḗ4dim +mḗ4dit +mḗ4dĭm +mḗ4dĭt +mḗ4gi +mḗ4gĭ +mḗ3i +mḗ3p2 +4mḗsa +4mḗsā +4mḗsă +4mḗsæ +4mḗsǣ +4mḗsō +4mḗsum +4mḗsus +4mḗ4sŭ +m2ḗu +m2ḗv +1mĕ +mĕ2ă +m1ĕd2 +2mĕ2dā +2mĕ4dă +2mĕ2dē +2mĕ2dĕ +2mĕ2dī +2mĕd4ĭ +mĕ4dĭs +mĕ4dō. +m2ĕdŏ +mĕ4dŏr +2mĕ2dŭ +mĕ2ĕ +2mĕg +mĕ2ĭ +mĕ3ĭp +m2ĕm +m2ĕr +4mĕrăm +mĕ3rē +mĕ3r4ĕ +mĕ3rī +4mĕrĭm +4mĕrĭn +2m3ĕrm +3mĕ3rŏ +mĕ3rŭ +mĕ2sp +m2ĕt +mĕ2t3ĭ +2mĕts +m2ĕ́ +m3ĕ́2d +5mĕ́ntĕr +5mĕ́ntĭŏ +5mĕ́ntĭŭs +m3ĕ́2q +mĕ́r6ĕă +4m3ĕ́rm +5mĕ́tr +4mĕ́ts +1mé +mé4der +mé4dim +mé4dit +mé2du +mé3i +mé4is +m2ém +5ménter +5méntio +5méntius +mé3p2 +m2ér +mér4e +4mérim +2m3érm +mér4ui +mér4uī +4mérun +2mésæ +2méso +2m3éss +4méste +4méstn +4mésto +4méstq +4méstu +4méstv +mé2su +4mésu. +m4ésue +4mésum +4mésus +2méts +3méu +3mév +mé2x +2mf +mge6ste +mgĕ6stĕ +2m1h +1mi +m2ia. +mi3ad +m2iae +mi3a2g +mi3al +m2iam +miam4b3 +mia2p +m2ias +mi3ass +mi3atr +m2ia͞ +m2ia͡ +m2iā +mi3ātr +mi3ā́x +mi3áss +m2iæ +m2iǣ +mi2be +mi2bé +m3ict +m2id +3mie. +3mieq +3mieu +3miev +m2ig +m2iīs +m2il +mi3n4a +min2ā +min4e +min2i +mini3m +min4in +min4iq +min4is +min4iu +min4iv +mi3n4ī +miní4ci +min4ín +min4íq +min4ís +min4íu +min4ív +m2i3n4u +minu3d +min2ū +minū3d +mi3nú +m2io +mio2s +m2iō +m2ió +m2is +mi3sa +mi3sá +mi4s5ci +mi3scr +mis2i +mi4sn +mi3s2p +mi4sq +mi4s5ta +mis5tā +mis5te +mi4sv +m6itate. +5mitatem +m6itatene +m6itateq +5mitates +m6itateu +m6itatev +5mitatém +5mitatés +m4itati +m4itatí +m6itatum +m6itatúm +m4itáte +5mitátem +5mitátes +m4itáti +m6itátum +mi2tū +mi4um +2miur +m2i1ū +m2iú +mi3úst +1mī +2mīc +m2īn +mī3nĕ +m2ī3q +m2īs. +mī2sc +m2īsn +mī3so +mī3sŏ +m2īsq +m2īsu +m2īsv +mī3ue. +mī3uĕ. +mī3ve. +mī3vĕ. +mī́4ba +mī́4bā +mī́4bă +mī́4be +mī́4bĕ +mī́4bo +mī́4bō +mī́4bŏ +mī́4bu +mī́4bŭ +2mī́c +m2ī́n +m2ī́q +1mĭ +3mĭa +3mĭā +mĭ3ātr +mĭ1ă +3mĭă. +mĭă2g +3mĭăm +2mĭăr +3mĭá +3mĭæ +3mĭǣ +3mĭǽ +3m2ĭb +mĭ4cĭt +2mĭcŏ +3mĭĕ. +mĭ4ĕn +3mĭ4ĕq +3mĭ4ĕu +3mĭ4ĕv +3mĭīs +3m2ĭl +mĭn2ā +mĭn4ĕ +4mĭnĕŏ +mĭ3n4ī +mĭn2ū +mĭnū3d +mĭnū3t +3m2ĭ3n4ŭ +3mĭō +mĭ3r +mĭ3s4ă +mĭ3scr +mĭ3s2p +mĭs5tā +mĭ4s5tă +mĭs5tĕ +m3ĭ2tū +mĭ1ū +3mĭŭ +3mĭ́ă +mĭ́4cĭ +mĭ́3d +mĭ4́n +mĭ́3sp +mĭ4́t +1mí +mí2ba +mí2be +mí2bu +m3íct +mí1m +mí3n4u +mí3s2p +mí4tiō +mí4tiu +mí3tuu +2ml2 +m3lu +2m1m2 +mmi6sta +2m1n2 +m3ne +m3nē +m3né +1mo. +2mob +mob3r +1moc +modes3 +m2oe +mo2ī +1mol +1m2on +mo3ni +monó3 +mon4s3 +mo3n2u +1moq +1m2or +mo3rī +3m2os +1mou +1mov +1mox +m2o͡ +1mō +m2ōn +mōn4s3 +2mōrd +m2ōs +mōs3t +mṓn4s +4mṓrd +1mŏ +3mŏ. +mŏ2c +mŏ2ī +3mŏn +3mŏq +m2ŏr +mŏ3rĕ +mŏ3rī +3mŏs +mŏs2p +3mŏu +3mŏv +mŏ́b3 +m2ŏ́r +mŏ́3rĭ +1mó +2m1ób +mó2c +m2óe +món4s3 +m2ór +3m2ós +m2œ 2mp +mpe4ior +mpe4iór +mpe4iu +mpe4iú +mpe3r4a +mper4ā +mpe5rem +mpe5r4er +mpere5ra +mpere5ri +mpere5rō +mpe5res +mper4ē +mperi4b +mpe6riens +mper6iere +mper6ieris +mper6ierís +mper6iēn +mper6iēre +mper6iḗn +mper6iḗre +mper6iére +mper4im +mpe5rimi +mpe5rimur +mperi6mus +mpe5rimúr +mperi6mús +mper4ir +mperi6re. +mperi6rem. +mpe5riremi +mperi6remn +mperi6remq +mperi6remue +mpe5riremur +mperi6remus +mpe5riremúr +mperi6remús +mperi6remv +mperi6rene +mperi6rent. +mperi6rentn +mperi6rentq +mperi6rentue +mpe5rirentur +mpe5rirentú +mperi6rentv +mperi6req +mpe5rirer +mperi6res +mperi6ret +mperi6reu +mperi6rev +mpe5rirémi +mperi6rémn +mperi6rémq +mperi6rémue +mpe5rirémur +mperi6rémus +mperi6rémv +mperi6réntn +mperi6réntq +mperi6réntue +mpe5riréntur +mperi6réntv +mpe5rirér +mperi6rés +mperi6rét +mpe5riri +mpe5rirí +mpe6risse +mpe6rissé +mpe6risti +mpe6ristí +mper4it +mperi6te +mperi6ti +mperi6tí +mperi6to. +mperi6ton +mperi6toq +mpe5ritor +mperi6tot +mperi6tou +mperi6tov +mperi6tón +mperi6tóq +mpe5ritór +mperi6tót +mperi6tóu +mperi6tóv +mperi6tu +mperi6tú +mpe5riú +mpe6rī6mus +mpe6rī6mús +mper4īr +mpe6rī6re. +mpe6rī6rem +mpe6rī6rene +mpe6rī6rent. +mpe6rī6rentn +mpe6rī6rentq +mpe6rī6rentue +mpe6rī6rentv +mpe6rī6req +mpe6rī6ret +mpe6rī6reu +mpe6rī6rev +mpe6rī6rēmus +mpe6rī6rēmús +mpe6rī6rēs +mpe6rī6rēt +mpe6rī6rḗmus +mpe6rī6rḗs +mpe6rī6rḗt +mpe6rī6rém +mpe6rī6réntn +mpe6rī6réntq +mpe6rī6réntue +mpe6rī6réntv +mpe6rī6rét +mpe4rīs +mpe6rī6te +mpe6rī6ti +mpe6rī6tí +mpe6rī6tō +mpe6rī6tu +mpe6rī6tú +mpe6rī́6mus +mper6ī́r +mpe6rī́6re. +mpe6rī́6rem +mpe6rī́6ren +mpe6rī́6req +mpe6rī́6ret +mpe6rī́6reu +mpe6rī́6rev +mpe6rī́6rē +mpe6rī́s +mper6ī́sn +mper6ī́sq +mper6ī́su +mper6ī́sv +mpe6rī́6te +mpe6rī́6ti +mpe6rī́6tō +mpe6rī́6tu +mper6ī́u +mper6ī́v +mpe4ríe +mper4ím +mpe6rí6mus +mper4ír +mpe6rí6re. +mpe6rí6rem +mpe6rí6ren +mpe6rí6req +mpe6rí6res +mpe6rí6ret +mpe6rí6reu +mpe6rí6rev +mpe6rísse +mpe6rísti +mpe4rít +mperí6te +mperí6ti +mperí6to. +mpe5rítor +mper4íu +mper4ív +mpe3r4o +mpe3rō +mper4ó +mpe6ste +mpē4iē +mpĕ4rĕā +mpĕ4rĕă +mpĕ4r5ĕō +mpĕ6rī6mŭs +mpĕ6rī6mŭ́s +mpĕ6rī6rēmŭs +mpĕ6rī6rēmŭ́s +mpĕ6rī6rēs +mpĕ6rī6rēt +mpĕ6rī6rḗmŭs +mpĕ6rī6rḗs +mpĕ6rī6rḗt +mpĕ6rī6rĕ. +mpĕ6rī6rĕm +mpĕ6rī6rĕnĕ +mpĕ6rī6rĕnt. +mpĕ6rī6rĕntn +mpĕ6rī6rĕntq +mpĕ6rī6rĕntu +mpĕ6rī6rĕntv +mpĕ6rī6rĕq +mpĕ6rī6rĕt +mpĕ6rī6rĕu +mpĕ6rī6rĕv +mpĕ6rī6rĕ́m +mpĕ6rī6rĕ́ntn +mpĕ6rī6rĕ́ntq +mpĕ6rī6rĕ́ntu +mpĕ6rī6rĕ́ntv +mpĕ6rī6rĕ́t +mpĕ4r5īs +mpĕr6īs. +mpĕr6īsn +mpĕr6īsq +mpĕr6īsu +mpĕr6īsv +mpĕ6rī6tĕ +mpĕ6rī6tĭ +mpĕ6rī6tō +mpĕ6rī6tŭ +mpĕ6rī́6mŭs +mpĕ6rī́6rē +mpĕ6rī́6rĕ. +mpĕ6rī́6rĕm +mpĕ6rī́6rĕn +mpĕ6rī́6rĕq +mpĕ6rī́6rĕt +mpĕ6rī́6rĕu +mpĕ6rī́6rĕv +mpĕ6rī́s +mpĕr5ī́ss +mpĕr5ī́st +mpĕ6rī́6tĕ +mpĕ6rī́6tĭ +mpĕ6rī́6tō +mpĕ6rī́6tŭ +mpĕ6rĭēn +mpĕ6rĭērĕ +mpĕ6r5ĭērŭ +mpĕ6rĭḗn +mpĕ6rĭḗrĕ +mpĕ6r5ĭḗrŭ +mpĕ6r5ĭĕr +mpĕ6r5ĭĕ́r +mpĕ6rĭtn +mpĕ6rĭtq +mpĕ6rĭtu +mpĕ6rĭtv +mpĕ6r5ĭ́ĕ +mpĕ6rĭ́t +mpĕ3rō +mpĕ3rŏ +mpĕ6stĕ +mpĕ́6r5ĕā +mpĕ́6r5ĕă +mpĕ́6r5ĕō +mpĕ́6rĭēn +m3pé +mpé4r5ea +mpé4r5eā +mpé4r5eo +mpé4r5eō +mpére5r +mpé4ri. +mpé6riens +mpé6riēn +mpé4rit +m2pn +mp2ne +mp2su 2mq -2mr -2ms +m3qu +m1r +mro3 +mrod4 +mro5di +mrodi5u +mrodi5v +mrō3d4 +mrō5dī +mrōdī5u +mrōdī5v +2m1s2 +msed4 +mse5di +msēd4 +msē5di +msē5dĭ +mso3 +m2s3q +m3st +m2s3u 2mt -2m. -.m2 -1n -2nb +mte3r4 +mte5re +mter6it +mteri5tur +mteri5u +mteri5v +mte5rī +mterī5u +mterī5v +mtĕ3r4 +mtĕ5rĕ +mtĕrĕ5r +mtĕ5rī +mtĕrī5u +mtĕrī5v +mto1 +mto2s +m1ua +m1uā +m1uă +m1uá +2m1ue +4m3ue. +m1uē +m1uĕ +m1ué +m1ui +m2ui. +2mui2c3 +m2uim +m2uin +m2uiq +2muir +m2uit +m2uiu +m1uī2 +m2uī. +muīc3 +m2uīn +m2uīq +m2uīu +m1uĭ +2m3uír +1m2ul +3m2um +2m3unc +muol3u +m1uó +1m2ur +1mus +2m3ust +1mū +m3ūnc +2m1ūs +mū2su +1mŭ +m2ŭl +3m2ŭm +m2ŭs +m2ŭ́ +3mŭ́m +1mú +3m2úm +2m3únc +m2ús +2m3úst +2mv2 +m3ve +mvi2c3 +mvī2 +mvīc3 +m2x2 +1m2y +my2s +1mý +2mz +1na +nab2o +na2br +na2cr +n1ad +n2ada +nae2s +n2aeu +n2aev +na3ge +na3gr +na2i +nai4m +na2ī +3nal +na2ni +n3a2ní +na2o +na3q +n2ar +nas7cend +n4aue +na2x3 +n2á͞ +n2á͡ +1nā +nā5bun +3nāc +nā2i +nā2ĭ +n1ā2n +nās3 +nā́4ni +nā́4nĭ +1nă +n1ăb +nă2br +n1ăd +n2ădă +n2ăg +nă3gĕ +nă3gr +nă2ī +nă2nĭ +n2ăp +nă3q +năs2p +2năth +nắ2n +1ná +n2áb +ná2i +3nál +ná2ni +n2ár +ná2x +1næ +næ2a +næ2ă +næ2á +næ2i +n2æu +næ2ua +næ2uā +næ2uă +næ2uá +næ2uæ +næ2uǽ +næ4uen +næ4ueq +næ4ueu +næ2uē +næ4uĕn +næ4uĕq +næ4uĕu +næ2ué +næ2ui +næ2uī +næ2uí +næ2uo +næ2uō +næ2uó +næ4uum +næ4uus +næ4uŭm +næ4uŭs +næ4uúm +næ4uús +næ2ŭ +n2æv +næ2va +næ2vā +næ2vă +næ2vá +næ2væ +næ2vǽ +næ4ven +næ4veq +næ4vev +næ2vē +næ4vĕn +næ4vĕq +næ4vĕv +næ2vé +næ2vi +næ2vī +næ2ví +næ2vo +næ2vō +næ2vó +næ4vum +næ4vus +næ4vŭm +næ4vŭs +næ4vúm +næ4vús +1nǣ +nǣ2a +nǣ2ă +nǣ2ua +nǣ2uā +nǣ2uă +nǣ2uá +nǣ2uǣ +nǣ4uen +nǣ4ueq +nǣ4ueu +nǣ2uē +nǣ4uĕn +nǣ4uĕq +nǣ4uĕu +nǣ2uī +nǣ2uō +nǣ4uum +nǣ4uus +nǣ4uŭm +nǣ4uŭs +nǣ4uúm +nǣ4uús +nǣ2ŭ +nǣ2va +nǣ2vā +nǣ2vă +nǣ2vá +nǣ2vǣ +nǣ4ven +nǣ4veq +nǣ4vev +nǣ2vē +nǣ4vĕn +nǣ4vĕq +nǣ4vĕv +nǣ2vī +nǣ2vō +nǣ4vum +nǣ4vus +nǣ4vŭm +nǣ4vŭs +nǣ4vúm +nǣ4vús +nǣ́4ua +nǣ́4uā +nǣ́4uă +nǣ́4uǣ +nǣ́4uen +nǣ́4ueq +nǣ́4ueu +nǣ́4uē +nǣ́4uĕn +nǣ́4uĕq +nǣ́4uĕu +nǣ́4uī +nǣ́4uō +nǣ́4uum +nǣ́4uus +nǣ́4uŭm +nǣ́4uŭs +nǣ́4va +nǣ́4vā +nǣ́4vă +nǣ́4vǣ +nǣ́4ven +nǣ́4veq +nǣ́4vev +nǣ́4vē +nǣ́4vĕn +nǣ́4vĕq +nǣ́4vĕv +nǣ́4vī +nǣ́4vō +nǣ́4vum +nǣ́4vus +nǣ́4vŭm +nǣ́4vŭs +1nǽ +nǽ2ua +nǽ2uā +nǽ2uă +nǽ2uæ +nǽ4uen +nǽ4ueq +nǽ4ueu +nǽ2uē +nǽ4uĕn +nǽ4uĕq +nǽ4uĕu +nǽ2ui +nǽ2uī +nǽ2uo +nǽ2uō +nǽ4uum +nǽ4uus +nǽ4uŭm +nǽ4uŭs +nǽ2va +nǽ2vā +nǽ2vă +nǽ2væ +nǽ4ven +nǽ4veq +nǽ4vev +nǽ2vē +nǽ4vĕn +nǽ4vĕq +nǽ4vĕv +nǽ2vi +nǽ2vī +nǽ2vo +nǽ2vō +nǽ4vum +nǽ4vus +nǽ4vŭm +nǽ4vŭs 2nc +n3cr +n2c3ue +n2c1ū 2nd +n2d3ág +nd2e +nde4sc +nde3un +nde3ún +ndē4sc +ndĕ3ŭn +ndi4ger +n4d3igi +n4d3igí +ndi4g3n +ndi3m +n2di2p +n4d3ĭgĭ +nd2ĭn +n2dĭp +ndĭ4sp +n4d5ĭ́gĭ +n4d3í4gi +n3do +ndo3l +n4d5o4le. +ndo4lem +n6d5o6lene +n4d5o4leq +ndo6les. +ndo6lesn +ndo6lesq +ndo6lesu +ndo6lesv +n4d5o4leu +n4d5o4lev +ndo6lēs. +ndo6lēsn +ndo6lēsq +ndo6lēsu +ndo6lēsv +ndo6lḗsn +ndo6lḗsq +ndo6lḗsu +ndo6lḗsv +ndo4lém +ndo6lésn +ndo6lésq +ndo6lésu +ndo6lésv +n4d3o4li +n4d3o4lī +n4d3o4lí +nd4or +ndŏ6lēs. +ndŏ6lēsn +ndŏ6lēsq +ndŏ6lēsu +ndŏ6lēsv +ndŏ6lḗsn +ndŏ6lḗsq +ndŏ6lḗsu +ndŏ6lḗsv +n4d5ŏ4lĕ. +n6d5ŏ6lĕnĕ +n4d5ŏ4lĕq +n4d5ŏ4lĕu +n4d5ŏ4lĕv +n4d3ŏ4lī +n4d3ŏ4lĭ +n4d5ŏ́4lĕ +ndó2l +n4d3óle +ndó3lu +nd2r +n2d3ua +n2d3uā +n2d3uá +nd3ue. +nd3ueq +nd3ueu +nd3uev +n2duē +n2dué +nd3uit +n2d3uo +n2d3uō +n2d3uó +n2d3uú +n2d3ŭā +n2d3ŭă +n2dŭē +nd3ŭĕ. +nd3ŭĕq +nd3ŭĕu +nd3ŭĕv +nd3ŭĭt +n2d3ŭō +n2d3ŭŏ +n2d3ŭŭ +nd3ŭ́ĭ +nd3úen +nd3úeq +nd3úeu +nd3úev +n2d3úi +1ne +3ne. +ne2a +ne3bu +ne2cl +ne2co +ne4c3u4t +ned2 +ned4i +ne2e +nee3ri +nee3rí +n1ef +ne2gl +3nei +ne2ia +ne2iá +ne2ie +ne2ié +ne2ii +ne2ií +ne2io +ne2ió +ne2it +ne2iu +ne2iú +3neí +ne2lu +ne2na +n4ene +ne2nu +3neo +3neó +3nep +nepo5t +ne1r +nera5b +nerab6u +ner2æ3 +ner2ǣ +ne3rē +ne3rī +ne4ss +nes5tā +nes5te +nes5tr +n4et. +n4etn +n4etq +2nets +n4eue +2ne2un +ne2ur +neu5re +neu4ter +neu4tér +ne3u4tr +2neún +n4eve +n1ex +n2ex. +nex2a +ne3x2i +nexi3u +nexi3v +nex2ī +n2exn +ne2xo +ne2xō +nex2ó +n2exq +n2ex2u +nexu3r +nex2ū +nexū3r +nex2ú +n2exv +1nē +nē2br +n1ē2d +nē3du +nē2i +n1ēl +nē2lă +nē2lĕ +nē2lu +nē2me +nē2mĕ +nē2mo +nē2mŏ +nē2nā +nē2nu +nēs3t +nē2uī +nē2vī +nḗ4br +nḗ2d +1nĕ +3nĕa +nĕ2ă +3nĕæ +3nĕǣ +nĕ2cŏ +nĕd2 +3nĕē +3nĕ2ĕ +n1ĕf +nĕ2gl +3nĕī +nĕ2ĭ +3nĕp +nĕ3r2a +nĕ3r2æ +nĕ3r2ǣ +nĕ3rē +nĕ3r4ĕ +nĕ3rī +nĕ3rŏ +n3ĕrs +n3ĕrŭn +nĕs3t +nĕs5tĕ +n4ĕt. +n4ĕtn +n4ĕtq +4nĕts +2n3ĕŭn +n1ĕx +n2ĕx. +nĕx2a +nĕx2ă +nĕx4ĕ́ +nĕx2ī +nĕx2ĭ +n2ĕxn +nĕ2xō +n2ĕxq +n2ĕxu +nĕx2ū +nĕxū3r +nĕx2ŭ +n2ĕxv +3nĕ́p +nĕ́3rĕ +nĕ́3s4c +1né +né2i +3n1ép +né3q +2néts +néu4ter +né3u4tr +néx2ī +néx4ui 2nf 2ng -2nl -2nm -2nn -2np +n3gae. +n3gaen +n3gaeq +n4gani +n4ganí +n5ga͞e. +n5ga͞en +n5ga͞eq +n5gá͞en +n5gá͞eq +n5ga͡e. +n5ga͡en +n5ga͡eq +n5gá͡en +n5gá͡eq +n4gă4nĭ +n4g5ắnĭ +n2gáe +n3gáen +n3gáeq +ng3áeu +ng3áev +n4g3áni +n3gæ. +n3gæn +n3gæq +n3gǣ. +n3gǣn +n3gǣq +ngǣ́2 +n3gǣ́n +n3gǣ́q +n2g1ǽ2 +n3gǽn +n3gǽq +ngu6ste +ngŭ6stĕ +n1h +nhe3 +1ni +ni2a +n2ia. +n2ian +n2iaq +nia6ste +n2iau +n2iav +2niă +2n3i2ba +2n3i2bá +ni2be +ni2bé +2n3i2bi +2n3i2bí +2n3i2bo +2n3i2bó +4n3i4bun +4n3i4bún +nic4e +4ni4cer +n2i3cē +4ni4cér +ni4cim +4ni4cím +4ni4cít +n2i3cu +n2i3cú +3nid +2niec +2niex +2niēc +2niēx +2niéc +2niéx +n2i3g2 +nig4n +n2il +ni3mam +ni3man +ni3mar +ni3mas +ni3mā +ni3má +ni3me +ni3mē +ni3mé +ni3mi. +ni3mie +ni3mii +ni3min +ni3miq +ni3mis +ni3miu +ni3miv +ni3mī. +ni3mīn +ni3mīq +ni3mīs +ni3mīu +ni3mīv +ni3mín +ni3míq +ni3mís +ni3míu +ni3mív +2nimm +ni3mo +ni3mō +ni3mó +ni3mu +ni3mú +2nins +n2i2o +n2ió +n2ip +n3i4qua +n3i4quá +n3i4quæ +n3i4quǽ +n5i4quen +n5i4queq +n5i4queu +n5i4quev +n3i4qué +n3i4qui +n3i4quí +n3i4quo +n3i4quó +n3i4quu +n3i4quú +n2is +ni4sc +nis5ci +nise4r3 +nisé2 +nis2i +3ni3sp +n2iue +n2iué +2niug +n2ium +2niux +2niū +2niŭ +2niúd +2niúg +2niúr +2niúx +1nī +2n1ī2b +2nīns +2n3ī́2b +4nī́ns +1nĭ +3nĭa +nĭă6stĕ +3nĭæ +3nĭǣ +n3ĭ2bĭ +nĭ3cē +4n3ĭ4cĕr +nĭ4cĭm +nĭ4cĭŏ +nĭ4cĭs +nĭ4cĭt +nĭ3cŭ +3nĭd +3nĭī +nĭ3mĭĕ +2nĭmŏ +nĭ2ŏ +nĭ3s2p +nĭ3tĕr +nĭ3tĕ́ +nĭ3tĭs +nĭ5tĭ́s +nĭ3tŏ +n3ĭ4tūs +4n5ĭ́4cĕr +nĭ́4cĭm +nĭ́4cĭŏ +nĭ́4cĭt +n4ĭ́s +nĭ́3sp +nĭ́4s5t +1ní +2n1í2b +4ní4cer +ní4cian +ní4ciar +ní4ciat +ní4cim +ní5cis +ní4cit +ní4ciun +3níd +n2í3g2 +níg4n +n2íl +ní1m +2nímm +2níns +4n3í4qua +4n3í4quæ +n5í4quen +n5í4queq +n5í4queu +n5í4quev +4n3í4qui +4n3í4quo +4n3í4quu +3ní3sp +ní3tur +2nj +2n1n2 +n3ne +n3nu +nn4ue +1no +no2a +no2á +no2æ3 +no2ǣ +noǣ́3 +no2ǽ3 +no2ba +nob2ī +nobī3u +nobī3v +nob2í +no2bó +3noc +noc5te +no2e +no2ē +no2i +no2ī +no2í +no3l4u +nom2 +n2on +no3ni +3nop +n2ope +no2pi +no2pu +no2pú +n2or +no3rī +n2os +nos3c +no4sn +no4sq +nos3t +nos5te +no4sue +no4sv +no2xu +1n2ō +nōs3t +1nŏ +nŏ2a +nŏ2á +nŏ2æ3 +nŏ2ǣ +nŏǣ́3 +nŏ2ǽ3 +nŏb2ă +nŏb2ī +nŏbī3u +nŏbī3v +nŏc5tĕ +nŏ2ē +nŏ2ī +nŏ2ĭ +n1ŏp +nŏ4pī. +nŏ4pĭ +nŏ2pŭ +nŏ3rī +nŏ4sn +nŏ4sq +nŏ4su +nŏ4sv +nŏ3t +nŏ2u3ĕ +nŏ2v3ĕ +nŏ́4p +1nó +nób2i +nó3l2u +nóp2 +n2ór +n2ós +nó2xu +1nœ +npo3 +npó1 2nq -2nr +n3qu +n1r2 +n3rĕ +nr4ĕ́3 2ns -2nh -n2s3m -n2s3f +n3sa. +ns3a2c +n3s4ae +n3s4am +ns4an +n3s4aq +n3sar +n3sas +n3s4av +n3să. +ns3ăc +n3săm +n3săn +n3săq +n3său +n3săv +nsắ2 +ns3ắb +ns3ắl +n2sál +n1sc +ns2ce +ns2cē +ns2cĕ +ns2cé +ns2ci +ns2cĭ +ns2cr +n2scu +n2scŭ +n2scú +n2se2g +n2seú +n2s3ég +nsér4ui +nsér4uī +n2s3i2c +n2sie +n2siē +n2sié +ns3iér +nsi2g +ns3ige +n2s3ii +n2sií +ns3iís +nsi3l4u +nsi4mur +nsi4múr +nsi2r +ns5i4ta͞ +n4s3i4tǣ +nsi4ti +n4s3i4tī +ns3i4tō +n4s3i4tū +n2siu +nsi4ui +nsi4vi +nsī2r +nsī́4r +nsī́4to +nsī́4tŏ +nsī́4ui +nsī́4uĭ +nsī́4vi +nsī́4vĭ +n2s3ĭ2c +n2sĭē +ns3ĭēn +ns3ĭēr +n2s3ĭĕ +ns3ĭgĕ +n4s3ĭ4ta +ns5ĭ4tă. +ns5ĭ4tăm +ns3ĭ4tá +n4s3ĭ4tæ +n4s3ĭ4tǣ +ns3ĭ4tǽ +ns5ĭ4tĕ. +n4s3ĭ4tī +ns3ĭ4tĭ +ns3ĭ4tō +n4s3ĭ4tū +n4s3ĭ4tŭ +n4s3ĭ́4c +nsĭ́4g +nsĭ́4t +n4s5ĭ́tă +n4s5ĭ́tĕ +n4s5ĭ́tĭ +n4s5ĭ́tŭ +n2s3í2c +ns3íer +nsí2g +ns3íge +n2s3íi +nsíl4u +nsí4mi +nsí2r +ns5ítuī +ns5ítuu +nsí4uer +nsí4uim +nsí4uit +nsí4ver +nsí4vim +nsí4vit +n1sp +ns2pa +ns2pă +ns2pá +n3spec +n3spĕc +n5spĕ́c +n3spéc +n3s2pi +n3s2pĭ +n3s2pí +n2sq +n3s2ta +n3s2tā +n3s2tă +n3s2tá +n3s2te +n3s2tē +n3s2tĕ +n3s2té +n3sti5t4 +n3stĭt +nstí3t4 +n3s2to +n3s2tō +ns2tó +nstren6u +nstrē5n4 +nstrḗ5n6 +nstrén6u +ns2tu +n3s2tŭ +n4s3ue. +n3s2uī 2nt +n3ta +nta3g +n3tā +n3tæ +n3te +n4t3eā +nte4ia +nte4iá +nte3ī4 +nteī́4 +nte5ram. +nte5ramne +nte5ramq +nte5ramu +nte5ramú +nte5ramv +nte5rant +nteri4 +nter5ib +nter5ic +nte4r5ie +nter5iē +nter5ié +nter5ii +nter5iī +nter5ií +nte4rim +nter5im. +nte5ri5min +nte5ri5mur +nte5ri5múr +nter5ita +nter5itā +nter5itá +nte5ri5tor. +nte5ri5torn +nte5ri5torq +nte5ri5torue +nte5ri5torv +nte5ri5tórn +nte5ri5tórq +nte5ri5tórue +nte5ri5tórv +nte4r3ī4 +nterī́4 +nte4r5í4c +nte4ríe +nte6r5í6mu +nte6r5í6ti +nte4rí4u +nte4rí4v +nte4ron +nte5rō. +nte5rṓq +nte5rṓu +nte5rṓv +nte4rós +nte5runt +nt4es +nte5stas +nte5stās +nte5stātí +nte5stā́s +nte5stás +nte5sto. +nte5ston +nte5stoq +nte5stou +nte5stov +nte5s4tō +nte5stón +nte5stóq +nte5stóu +nte5stóv +ntē4ia +ntē4iā +ntē4iá +ntē4iæ +ntē4iǣ +ntē4iǽ +n2t3ĕā +ntĕ3ă +ntĕ3ī4 +ntĕī́4 +ntĕ4r3ī4 +ntĕrī́4 +ntĕ4r5ĭ4c +ntĕ4rĭē +ntĕ4r5ĭī +ntĕ6r5ĭm. +ntĕ6r5ĭ6tā +ntĕ6r5ĭ́6c +ntĕ6rĭ́ĕ +ntĕ4rōn +ntĕ4rōs +ntĕ5rŭnt +ntĕ5rŭ́ +nt4ĕs +ntĕ5stās +ntĕ5stā́s +ntĕ5stō +ntĕ́4rī +ntĕ́6r5ĭ6c +ntĕ́6r5ĭī +ntĕ́6r5ĭt. +ntĕ́6r5ĭ6tā +ntĕ́5stās +ntĕ́5stō +nté4r5es +nté4ri. +nté4r5i4c +nté4rie +nté4riē +nté4r5ii +nté4r5iī +nté6r5it. +nté6r5ita +nté6r5i6tā +nté5stas +nté5stās +nté5sto. +nté5s4tō +n3th +n3ti +ntis4t +nti5stá +nti5sti +nti5stí +n3tī +n3tĭ +ntĭs4tā +ntĭs4tă +ntĭ5s4tĭ +ntĭ́5s6tā +ntĭ́5s6tă +ntí5s4ta +ntí5s4tā +ntí5sti +nto2s3 +n3tō +ntŏ́2 +n4t3ŏ́p +n2t3óp +ntó2s3 +n3tr +ntra3e +ntrān4 +ntrá3e +ntro3i4 +ntro3í4 +ntró3i +n3tum +n3tus3 +ntús3 +n1ua +n2uam +n2uan +n2uar +n2uat +1n1uā +n2uām +n2uār +n2uāt +n1uă +n2uám +n2uán +n2uár +n2uát +1nuæ +1nuǣ +1nub2 +nu3bi +n3ud +n4udæ +n4udǽ +n4udi +n4udí +n4u3du +n4udú +n1ue +2n3ue. +n2ueb +3n4uel +3n2uem +3nueq +3n2ues +n2uet +3nueu +3nuev +n1uē +n2uēb +n2uēm +n2uēn +n2uēr +n2uēs +n2uēt +2n3uĕ +n2uéb +n2uém +n2ués +n2uét +1nui +n2uim +n2uis +n1uī +n1uĭ +1nuí +n2uím +n2uís +1n1ul +n2u3la +n2u3lā +n2u3lá +n2u3le +nule4i +n2u3lé +n2u3li +n2u3lī +n2u3lí +3num +n4um. +n4u4mn +n4u4mq +n4u4mu +n4u4mv +1n1u2n +1nuō +n1uó +n3u2r +1nu2s +n3usi +nu4sn +nu4sq +n3uss +n3ust +nu4su +nu4sv +n2u3ta +n2u3tá +n2u3tæ +n2u3tǽ +n2u3te +nu3ti. +nu3tin +nu3tiq +nu3tis +nu3tiu +nu3tiv +nu3tín +nu3tíq +nu3tís +nu3tíu +nu3tív +n2u3to +n2u3tó +nu3tr +n2u3tu +n2u3tú +1nuu +n2uun +n2uún +n1u2x +1nū +n1ūd +nū2n +nū3nĕ +n1ū2r +n1ū2s +n2ū3ta +n2ū3tā +n2ū3tă +n2ū3tá +n2ū3tæ +n2ū3tǣ +n2ū3tǽ +n2ū3te +n2ū3tĕ +n2ū3tī +n2ū3tō +n2ū3tu +n2ū3tū +n2ū3tŭ +n2ū3tú +nū́2m +nū́2r +nū4́s +1nŭ +n1ŭl +n2ŭlā +n2ŭlă +n2ŭlī +n4ŭm. +nŭ3mĭ +n4ŭmn +n4ŭmq +n4ŭmu +n4ŭmv +n1ŭn +n1ŭr +nŭ2s +nŭ́3mĕ +1nú +núb2 +n2úla +n2úle +nú2mi +n4úmn +n4úmq +n4úmu +n4úmv +2n3úng +n1ú2r +2nv +n3ve 2nx2 -2n. -.n2 +n3xi +n2x3u +1ny +2nyma +2nymā +2nymæ +2nymǣ +1ný +2o1a2 +o2a3b +oad3 +oade4 +oadé2 +oadi4 +oadí2 +oadṓ4 +oadó2 +oadú2 +oa3ne +oa3né +oa3ru +o2as +oas3t +oa3t +oau6ste +o1ā +o2ān +o2ār +2o1á +oá2d3 +oáde2 +o2án +2o1æ2 +o2æ3q +o1ǣ2 +o2ǣ3q +oǣ́2 +oǣ́3q +2o1ǽ2 +o2ǽ3q +1ob1 +ob2ab +o3bam +o3ban +o3b2a3q +o3bar +o3b2as +obe4ra +obe4rā +obe4rá +obe4ro +obe4rō +obe4ró +ob2ēr +obé2q +obi2b +ob3i4c +obi2m +ob2iq +ob3it. +ob3itn +ob3itq +ob3itv +o2bi2u +obi2v +obī2m +ob2īn +ob2īq +ob2īt +obí2b +obí2c +obí2m +ob2íq +ob3íss +ob3íst +o2bl +o2bo +ob4ole. +ob6olene +ob4oleq +ob4oleu +ob4olev +o2br +ob3rá +obri3 +ob5rue +obs2 +ob3st +ob5ste +obur3 +o3ca +o3cá +1occ +2o3ce +o3cē +2o3cé +2o3ci +o3cī +2o3cí +oco2i +ocoi3q +oco2í +oco5me +oco3m4ē +ocomi5te +ocomi5té +oc4ten +oc3ue. +o3cú +o3dam. +o3dami +o3damq +o3damu +o3damú +o3damv +o3dan +o3dar +o3das +o3dat +o2d3ác +2ode +o4d5eam. +o4d5eamn +o4d5eamq +o4d5eamu +o4d5eamú +o4d5eamv +o4d3ean +o4d3eas +o4d3eat +o4d5eámn +o4d5eámq +o4d5eámu +o4d5eámv +o4d3eán +o4d3eás +o4d3eát +ode4cé +ode2g +ode2i +od3eo. +od3eon +od3eoq +od3eou +od3eov +o2d3eó +ode4st +ode4u5t +o2deú +odē2i +odé2g +od2i +o4d3ibi +o4d3ibí +o2d3i2g +od4iue. +o5dium +o5dius +od4ive. +2o3dī +2odí +o2dí2b +odí5ci +o2d3í2g +od6íue. +od6íve. +2o3do +od4or +2odō +2odó +2odu +od3ue +od3ui +od3uī +od3uí +2odú +2oea +o3eat +2oeā +o3eām +o3eāt +2oe2ă +2oeá +o3eát +oe3b +oecu3 +oe3d2 +oe2e +o1e2g +2oe2i +2oeī +oe2ĭ +2oeí +o2el +o3e2le +o4e3leu +o4e3lev +o1e2m +o5e4mēti +o5e4mētí +o5e4mētu +o5e4mētú +o3emu +o3emú +oepe3 +o1er +oe3ro +oete5r +o1e2u +o4eue +oe2ŭ +o1eú +o1e2x3 +2o1ē2 +o2ēn3 +o2ēs +o2ēu +o2ēv +oḗ2g +oḗ2m +2o1é +oé2g +oé2m +o2éq +o2és +1off +ofo1 +og2 +o3ga +o3gæ +ogæ3v +o3gǣ +o1h +oho4s +ohó2 +2o1i2 +o2iad2 +o2iā +o2iǣ +o3ic +o2id +o4iene +o2iī +o2io +oio2s +o2iō +o2ió +o1ī +oī2b +oī2m +oī2r +oī2t +oī2u +oī2v +oī́2b +oī́2m +oī́2r +oī́2t +oī́2u +oī́2v +2o1í +oí2b +oí2c +oí2m +oí2r +o3íss +o3íst +oí2ta +oí2te +oí2to +oí4tu +oí2ui +oí2vi +o3la +o3lā +o3lá +o3læ +o3lǣ +o3lǽ +ole3ii +ole3ií +ole3io +ole3ió +ole5ium +ole3iú +olé3ia +olé3ii +olé3io +olé3iu +2o3li. +o3lia +o3lii +o3lií +2o3lin +o3lio +o3liō +o3lió +2o3liq +2o3lis +2o3liu +2o3liv +2o3lī +o3lía +2olín +2olíq +2olís +2olíu +2olív +2oll +2o3lo +2o3lō +2o3ló +o2l3ua +o2luā +o2l3uá +o2l3uæ +o2luǣ +o2l3uǽ +ol3ue. +ol3ueb +ol3uem +ol3uen +ol3ueq +ol5uerē +ol5ueré +ol3ues +ol3uet +ol3ueu +o2l3uē +o2lué +ol3uéb +ol3uém +ol3uén +ol5uéris +ol3ués +ol3uét +ol5uimi +ol5uimur +ol5uimúr +ol5uis. +ol5uisn +ol5uisq +ol5uisu +ol3uit +ol3uīs +ol5uī́s +ol3uím +ol5uísn +ol5uísq +ol5uísu +ol5uíte +2o3l4um +o2luo +o2luō +o2l3uó +2o3l4u2s3 +o2l3uu +o2l3uú +2o3lúm +2o3lús +o1m2a +om2á +omb2 +ombu3r +ombú3r +ome4da +ome4dá +om2eq +ome4sa +ome4sá +ome4so +om1ē +o3mēt +o3mḗt +o4mé4sa +om2i2a +om2ib +om2ic +om2im +om2in4 +omini5c +om2iq +omi2t +o5mit. +om6itas. +om6itasn +om6itasq +om6itasu +om6itasv +om6itásn +om6itásq +om6itásu +om6itásv +om4ite. +om6itene +om4iteq +om4iteu +om4itev +om6itis. +om6itisn +om6itisq +om6itisu +om6itisv +om6itísn +om6itísq +om6itísu +om6itísv +o5mitn +om4ito +o5mi5tot +om4itó +o5mi5tót +o5mitq +o5m4itue +o5m4i5tur +o5m4i5túr +o5mitv +om2iu +om2iv +om2ī +om2íc +om2ím +om2íq +om4íte +o4mí4ti +om4ítn +om4ítq +om4ítu +om4ítv +om2íu +om2ív +o1mo +omo4nu +o1mœ +ompere5r +ompe6ri. +omperi6n +ompe6ri6q +ompe6ris. +ompe6risn +ompe6risq +ompe6risu +ompe6risv +omperi6u +omperi6v +ompe6rī. +omperī6n +ompe6rī6q +ompe6rī6u +ompe6rī6v +ompe6rī́6n +ompe6rī́6q +ompe6rī́6u +ompe6rī́6v +ompe6rí6n +ompe6rí6q +ompe6rísn +ompe6rísq +ompe6rísu +ompe6rísv +ompe6rí6u +ompe6rí6v +ompē4ia +ompē6iā. +ompē6iāq +ompē6iās +ompē6iā́q +ompē6iā́s +ompē4iá +ompē4iæ +ompē4iǣ +ompē4iǽ +ompē4iī +ompē4iō +ompé6r5ii +ompé6r5iī +ompé6r5is +o1m2u +om3ue +o3m2ū2 +om2ú +o3n2a +o3n2ā +o3n2á +3onc +on3d +on2e +2one. +one4u5t +2o3n2é +2oni +o5nia. +o5nian +o5niaq +o5niau +o5niav +o4ni4ci +on4ier +on4iér +on2ii +on2ií +on2im +on2in +on2iq +on2it +o2niu +o3niue +o3niué +o3n4iui +o3n4iuí +o3nium +o5niúm +on2iv +on2ī +2oní +o4ní4ci +on2íe +on2íq +on2ít +on2íu +on2ív +on2o +ono3pi +ono3s4t +on2ó +onós4t +ons2c +on5sci +on3s2i +onsi5u +onsi5v +on3s4p +ons2u +on3t2 +onte4i +ontes5 +ontē4i +2onu +o4nue. +on2uī +on2ul +2on2ú +2o1o2 +o2o3n +oo3ru +o2os +oo3u +oo3v +o1ō +o2ōn +o2ōs +2oó +o1ór +oó2re +oó2ri +1ope1 +o2pem +oper4a +oper4æ +oper4ǣ +oper4ǽ +ope3r4e +oper4ē +oper4i +ope3r4ī +oper4í +operí5tur +oper4o +oper4ó +oper4u +o2pém +o2pér +opér4u +o3pic +1opī +o3pīs +opo4s3 +1opp +op2su +2oq +o3qu +2or. +o1ra +or3ang +o3r2ā +o3ræ +o1rǣ +o3rǽ +2orc +o1r2e +2o3re. +2o3rea +2o3reá +2o3reæ +2o3reǽ +2o3ree +2o3reé +2o3rei +2o3reí +4o3rene +2o3reo +2o3reó +2o3req +2o3reu +2o3reú +2o3rev +o3rē +2o3réa +2o3rée +o1r2i +o3riæ +o3riǽ +2o3rib +oric4 +ori5ce +o3rii +o3rií +ori3ni +4oris. +4orisn +4orisq +4orisu +4orisv +o3ría +o3ríc +o2rír +4orísn +4orísq +4orísu +4orísv +orí5tur +4orne. +o1r2o +o3ron. +o3ronn +o3ronq +o3ronu +o3ronv +o3rorú +2o3ros +oro4s3t +2o1rō +o3rónn +o3rónq +o3rónu +o3rónv +2o3rós +2orq +ort2 +or3tu +2o1ru +o2rue +or3ue. +o3rum +o3rus +2o3rú +2orv +o1ry +2os. +os2a +os2cǽ +os4ch +os3cit +o4sco +o4scó +os2cr +o4scu +o4scú +os2e +ose2i +os2i +osíl2 +o1s2m +2osn +o1sp +o2spa +o2spá +os2pe +ospe5ri +ospe5r4ī +osper4í +os2pé +os2pl +2o2sq +2ost +os4t3ea +os4t3eā +os4t3eá +ost5ill +osti5t4 +os4t5íll +ostí3t4 +os3to +os4to. +os4ton +os4toq +os4tou +os4tov +os5tri +os5trī +os3trí +os3tru +os3trú +os4tué +2osue +o4s3ue. +os2ué +os2uī +2osv +o3ta +o4t3ann +o4t3ánn +o4t3enn +o5ter. +o4t3e4ra +o4t3e4rā +o4t3e4rá +o5te5re +ote5rii +ote5rií +o4t5erim +ote5rin +o4t5erit +ote5riu +oteri5ue +ote5ri5v +ote5rī +oterī5u +oterī5v +o4t5e4rít +o5tern +o5terq +o5terue +o4t5erun +o4t3e4rú +o5terv +o4t5este +o4t5esti +o4t5estí +o4t5esto +o4t5estó +o4t3énn +o4t5é4rim +o4t5é4rit +o4t3ést +o2tl +o3t2u +2o1u2 +ou3enn +ouē5nī +ou3énn +o2um +ou4st +o1ū2 +oū́2 +2oú2 +o1út +2ov +ov3enn +ovē5nī +ov3énn +2ox2 +ox4eu +o3xi +oxu3 +o2x3ue +o͞e2i +o͡e2i +ō2a +ōab2 +ōa2m +ōăb2 +ōb2 +ōba3q +ōbæ3 +ōbe3 +ōbī3u +ōbī3v +ōbo3 +ōbŏ3r +ōbŏ́3 +ō3bu +ō3bŭ +2ōc +ō2ch +ō2c3ue +ō2d1a2 +ō3dam. +ō3damq +ō3damu +ō3damv +ō3d2an +ō3d2ar +ō3dat +ō2dāc +ō4d3ā́c +ō2d1ă +ō3dăm. +ō3dămq +ō3dămu +ō3dămv +ō3d2ăn +ō3dăr +ō3dăt +ō5dắmn +ō5dắmq +ō5dắmu +ō5dắmv +ō3dắn +ō3dắr +ō3dắt +ōdá2 +ō4d5eam. +ō4d5eamn +ō4d5eamq +ō4d5eamu +ō4d5eamv +ō4d3ean +ō4d3eat +ō2d3eā +ō4d5eámn +ō4d5eámq +ō4d5eámu +ō4d5eámv +ō4d3eán +ō4d3eát +ō2d3eō +ō4d3e4ru +ō4d3e4rú +ō2d3e2s +ō2deu +ō3deue +ō2deú +ōdē2g +ōdē2s +ōdḗ4g +ō2d3ĕā +ō4d5ĕăm. +ō4d5ĕămn +ō4d5ĕămq +ō4d5ĕămu +ō4d5ĕămv +ō4d3ĕăn +ō4d3ĕăt +ō6d5ĕắmn +ō6d5ĕắmq +ō6d5ĕắmu +ō6d5ĕắmv +ō4d5ĕắn +ō4d5ĕắt +ō2d3ĕō +ō4d3ĕrŭ +ō2d3ĕs +ō4d3ĕ́s +ō2d3és +ō2d3i2g +ōd4īue. +ōd4īuĕ. +ōd4īve. +ōd4īvĕ. +ōd6ī́ue. +ōd6ī́uĕ. +ōd6ī́ve. +ōd6ī́vĕ. +ō2d3ĭg +ō4d3ĭ́g +ō2d3í2g +ō3do +ōd4or +ō2e +ōe2m +ō2ĕ +ōg2 +ōga2 +ōgá2 +ōgo2 +ō1h +ō1i2 +ō2iad2 +ō2i3b +ō3ic +ō2ien +ō2iēn +ō2is +ō1ĭ2 +ō2ĭ3b +ō2ĭē +ō2ĭĕ +ōĭ́2 +ō2ĭ́ĕ +ō1í2 +ō2íe +ōle3i +ōle2r +ōlé3i +ōl3ue. +ō1m2 +ōma2r +ōna2r +ōn2ā +ōná2 +1ōnc +2ō3n2e +ōneu5t +2ōnē +2ō3n2ĕ +2ō3né +2ōn2i +2ōnī +2ōnĭ +2ōní +ōno2 +ōns2c +ōns4i +ōnsi5t +ōns4ĭ +ōnsĭ5t +ōn3s4p +2ō1n2u +ō2n3ue +2ōn2ŭ +2ōnú +ōp2 +ō3pi +ō3pĭ +ō3pt +2ōq +ō3qu +ō1r +2ō3ra. +4ō3rane +2ō3raq +2ō3rau +2ō3rav +2ō3ră. +4ō3rănĕ +2ō3răq +2ō3rău +2ō3răv +1ōrd +ōr2e +2ō3re. +2ō3rea +2ō3reā +2ō3reá +2ō3reæ +2ō3reǣ +2ō3reǽ +2ō3ree +2ōreē +2ō3reī +4ō3rene +2ō3reō +2ō3req +2ō3reu +2ō3reú +2ō3rev +ōrē2i +ō3rēu +ō3rēv +ōr2ĕ +2ō3rĕ. +2ō3rĕa +2ō3rĕā +2ō3rĕă +2ō3rĕá +2ō3rĕæ +2ō3rĕǣ +2ō3rĕǽ +2ōrĕē +2ō3rĕĕ +2ō3rĕī +4ō3rĕnĕ +2ō3rĕō +2ō3rĕq +2ō3rĕu +2ō3rĕŭ +2ō3rĕv +4ō3rĕ́ă +4ō3rĕ́ĕ +ōré2 +2ō3réa +2ō3rée +2ō3ri +2ō3rī +2ō3rĭ +2ō3rí +1ōrn +ōro2 +2ō3ron +2ō3ros +2ō3rōr +2ō3rōs +ō3rṓr +ō3rṓs +ōrŏ2 +2ō3rŏn +2ō3rŏs +ō3rŏ́n +ō3rŏ́s +ōró2 +2ō3rón +2ō3rós +2ō3r2u +ōr3ue. +ō4ruĕ +2ō3rŭ +ōr4ŭn +2ō3rú +2ōs. +ōs2cǽ +ō3s4ch +ōs3cit +ōs3cī +ōs3cŭ +ōsē2i +ōs4ēm +ōs2i +ōsi3l4 +ōsi2n +ōsíl2 +2ōsn +ō1s2p +ōspe3r +ōsper4ī +ōspĕ5rī +2ō2s3q +2ōst +ōs2ta +ōs2tā +ōs2tă +ōs2tá +ōs2te +ōs2tē +ōs2tĕ +ōs2té +ōs2ti +ōsti5t4 +ōs2tĭ +ōstí3t4 +ōs2tō +ōs5tri +2ō2s3ue +2ō2s3uĕ +2ōsv +ōt2 +ō3ta +ō3tă +ōté2 +ō2th +ōtó2 +ō3tu +2ō1u +ō3ue +ō3uĕ +ō2um +2ōv +ō3ve +ō3vĕ +ō2x +2ō2́ +ṓb2 +ṓ3bu +ṓ3bŭ +ṓ4d3ea +ṓ4d3eā +ṓ4d3eō +ṓ4d5eru +ṓ4d3es +ṓ4d3ĕā +ṓ4d3ĕă +ṓ4d3ĕō +ṓ4d3ĕs +ṓ2ĕ +ṓ3g2 +ṓi2 +ṓ3ic +ṓĭ2 +ṓ3ĭc +ṓ3lo +ṓ3lŏ +ṓ3luī +ṓm2 +ṓ3mu +3ṓnc +ṓns4i5 +ṓns4ĭ5 +ṓ3p2 +3ṓrd +ṓ3rĕ +3ṓrn +ṓ3spe +ṓ3s4pĕ +ṓ3spi +ṓ3spĭ +ṓ3s4ta +ṓ3s4tā +ṓ3s4tă +ṓ3s4te +ṓ3s4tē +ṓ3s4tĕ +ṓ3s4tō +ṓ5s4trē +ṓ4s5tru +ŏ1a +ŏau6stĕ +ŏ1ā +ŏ2ān +ŏ2ār +2ŏ1ă2 +ŏăd3 +ŏădĕ4 +ŏădĕ́4 +ŏădṓ4 +ŏ2ăs +ŏắ2 +ŏắd3 +ŏắdĕ4 +ŏ1á +ŏ1æ2 +ŏ2æ3q +ŏ1ǣ2 +ŏ2ǣ3q +ŏǣ́2 +ŏ1ǽ2 +ŏ2ǽ3q +1ŏb1 +ŏ2ba +ŏbă2 +ŏb2ăb +ŏb2ăq +ŏb2ău +ŏb2ăv +ŏbắ2 +ŏb2ēr +ŏbĕ4r +ŏbĕ́2 +ŏ2bi +2ŏbī +ŏbī2m +ŏb2īn +ŏb2īq +ŏb2īt +ŏbĭ2 +ŏbĭ4c +ŏb3ĭt +ŏbĭ́2 +ŏ2bl +ŏ2bo +ŏ2bó +ŏ2br +ŏbs2 +ŏb5stĕ +ŏ3că +1ŏcc +ŏ3cē +ŏ3cĕ +ŏ3cī +ŏ3cĭ +ŏcŏ3m4ē +ŏcŏ3mĕ +ŏcŏmĭ5tĕ +ŏc4tĕn +ŏ2cu +ŏ3cŭ +2ŏdĕ +ŏdĕ4c3ĕ +ŏdĕs3 +2ŏ3dī +ŏd2ĭ +2ŏdō +ŏ2d1u +2ŏdŭ +ŏ1ē2 +ŏ2ēn +ŏē3nĕ +ŏ2ēs +ŏ2ēu +ŏ2ēv +ŏḗ2g +ŏḗ2m +ŏ1ĕ2 +ŏ2ĕ3q +ŏ3ĕ́2 +ŏfŏ1 +ŏg2 +ŏ3ga +ŏ3gæ +ŏgæ3u +ŏgæ3v +ŏ3gǣ +ŏ1h +ŏ1i +ŏ1ī +ŏī2b +ŏī2m +ŏī2r +ŏī2t +ŏī2u +ŏī2v +ŏī́2b +ŏī́2m +ŏī́2r +ŏī́4t +ŏī́2u +ŏī́2v +ŏ1ĭ +ŏ2ĭu +ŏ2ĭv +ŏ3la +ŏ3lā +ŏ3lá +ŏ3læ +ŏ3lǣ +ŏ3lǽ +ŏ3lēn. +2ŏ3lĕ. +4ŏ3lĕnĕ +2ŏ3lĕq +2ŏ3lĕu +2ŏ3lĕv +2ŏ3lī +2ŏll +2ŏ3lō +2ŏ3lŏ +ŏ2l1u +2ŏ3lŭm +2ŏ3lŭs +4ŏ3lŭ́m +4ŏ3lŭ́s +ŏ1ma +ŏ3m2ă +ŏmb2 +ŏmbū3r +ŏmbū́3 +ŏm1ē +ŏ3mēt +ŏ3mḗt +ŏ3mĕ. +ŏ3mĕm +ŏ3mĕn +ŏ3m2ĕq +ŏ3mĕu +ŏ3mĕv +ŏ3m2ī +ŏ3mĭă +ŏm2ĭn +ŏmĭnĭ5c +ŏ3mĭs +ŏmĭ2t +ŏm3ĭtŏ +ŏ3mĭ́s +ŏm3p2 +ŏmpḗ5i +ŏmpĕ6rī. +ŏmpĕrī6n +ŏmpĕ6rī6q +ŏmpĕ6rī6u +ŏmpĕ6rī6v +ŏmpĕ6rī́6n +ŏmpĕ6rī́6q +ŏmpĕ6rī́6u +ŏmpĕ6rī́6v +ŏmpĕ6r5ĭī +ŏmpĕ6rĭt +ŏmpĕ́6r5ĭī +ŏ3m2ū2 +ŏ3n2ā +ŏn3d2 +ŏn2gá +ŏ2n1i +ŏn5ĭ4cĕ́ +ŏ4n3ĭ4cĭ +ŏ4n5ĭ́4cĭ +ŏn2ŏ +ŏnŏ3s2 +ŏntĕs5 +ŏn2ŭ +ŏ1ō +ŏ2ōn +ŏ2ōs +ŏ1ŏ2 +ŏŏ́4r +2ŏpa +2ŏpā +2ŏpæ +2ŏpǣ +ŏpe2 +ŏ2pĕ +ŏpĕ3r4a +ŏpĕ3r4æ +ŏpĕ3r4ǣ +ŏpĕ3rĕ +ŏpĕ3rī +ŏpĕ3rŏ +ŏpĕ3rŭ +1ŏpī +ŏ3pīs +2ŏ3pŏ +ŏpŏ3t +ŏp2su +ŏptĕ4 +ŏptĕ́4 +2ŏr. +ŏ1ra +ŏ3r2ā +2ŏ1ră +ŏ1ræ +ŏ1rǣ +2ŏrc +ŏ1re +ŏ3rē +ŏ1r2ĕ +2ŏ3rĭb +2ŏ3rĭs +4ŏ3rĭ́s +2ŏrn +2ŏ1rō +ŏ1r2ŏ +2ŏrq +ŏr2su +2ŏru +2ŏ3rŭ +2ŏrv +ŏs2ă +ŏ3s2ĕ +ŏ1s2m +ŏ1sp +ŏ2spă +ŏs2pĕ +ŏspĕ5rī +ŏ2s3pĭ +ŏs2pl +ŏs3q +ŏs4t3ĕā +ŏs5tĕr +ŏst5ĭll +ŏs6t5ĭ́ll +ŏs5trī +ŏ3strŏ +ŏs3u +ŏ4t3ănn +ŏtĕ2 +ŏ2t3ĕr +ŏtĕ3rĕ +ŏtĕ5rī +ŏtĕrī5u +ŏtĕrī5v +ŏ4t3ĕs. +ŏ4t3ĕsn +ŏ4t3ĕsq +ŏ4t5ĕstĕ +ŏ4t5ĕstĭ +ŏ4t3ĕsu +ŏ4t3ĕsv +ŏ4t5ĕ́rĭ +ŏ4t3ĕ́s +ŏ2tl +ŏ1u +ŏuē5nī +ŏ3u4ĕm +ŏ1ū2 +ŏū́2 +ŏū́4t +ŏ1ŭ +ŏ2ŭm +ŏ2ŭs +ŏ2ŭ́ +ŏvē5nī +ŏ3v4ĕm +2ŏx2 +ŏx4eu +ŏ2xu +ŏxŭ3 +ŏxŭ́3 +ŏ2́ +ŏ́3ă +ŏ́b3ĕŏ +ŏ́b3ĕ4r +ŏ́bĭ2 +ŏ́b3ĭt +ŏ́b5ŏlē +3ŏ́2br +ŏ́bs2 +2ŏ́c +3ŏ́cc +2ŏ́d +ŏ́2d3u +ŏ́1ĕ +ŏ́ĕ2m +ŏ́1i +ŏ́ĭ2 +ŏ́3ĭē +ŏ́3ĭt +4ŏ́lĕn +4ŏ́lĕq +4ŏ́lĕu +4ŏ́lĕv +2ŏ́ll +ŏ́l3u +ŏ́4m3ĕs +ŏ́mĭ4tĭ +ŏ́mĭ4tŏ +ŏ́m3p2 +ŏ́3nĭb +ŏ́3ŏ +ŏ́4pĕr +ŏ́4pī +ŏ́2r +2ŏ́3ră +ŏ́3rē +ŏ́3rĕ +ŏ́3rī +ŏ́3rĭa +ŏ́3rĭæ +ŏ́3rĭǣ +4ŏ́3rĭb +ŏ́3rĭc +ŏ́3rĭd +ŏ́3rĭī +ŏ́3rĭs +2ŏ́rn +ŏ́3rō +2ŏ́rq +2ŏ́ru +ŏ́3rŭ +2ŏ́rv +ŏ́3sĕ +ŏ́3s4pĕ +ŏ́3sph +ŏ́s4t5ĕā +ŏ́t5ĕ4rā +ŏ́t5ĕ4ră +ŏ́t5ĕ4rĭ +ŏ́t5ĕrŭ +2ŏ́x +ó1ad +ób1 +ób2ab +ób2a3q +ób3a2r +ób2a͡ +ób2eq +óbe4r +ób3es +óbi4c +ób3i2t +ób2iu +ób2o1 +ób5olen +ób5oles +ób3olē +óbo3r +1ó2br +ób2ri +ób3ru +ób5rue +1ób3s2 +ób5ste +ó3b2u +1ócc +óco3m +óco5me +ó2c3ue +2ód +ód2a +ó2d3ea +ó4d3eo +ó4d3e4ru +ó4dest +ó2d3i2g +ó3ear +ó3eat +óe2ă +óe3b +óed2 +óe2e +óe2i +ó1e2m +óepe3 +óe2ŭ +ófe1 +ófo1 +óg2o3 +ó1h +ói2 +ó3ian +ó3iaq +ó3iau +ó3iav +ói3b +ó1ic +ó3ien +ó1iē +ó3iit +ó2in +ó2i3q +ó3it +ó1iu +ó2i3ue +ó2i3v +2ólen +2óleq +2óleu +2ólev +2óll +ó2l1u +ó3lub +ó3lum +ó3lus +ó1m +óm2a +óm2e +ó2m3e2d +óm2i +ó5mit. +óm5i4tan +óm5i4tat +ómi4tān +óm5i4tem +óm5i4ten +óm5i4tes +óm5i4tet +ómi4tēs +ómi4tor +ó5mitur +ómpe3 +ómpe5r +óm2ui +óm2uī +ó3m2ū +2ó1n +3ónc +ón3g2 +ón5i4cit +ón3t2 +ó2nue +ón2uī +ón2ul +ó3nus +óo2 +ó1or +ópe1 +ó2pe3r +ó3pi +óp2su +ópu3 +2óq +ó3qu +ó1ra +4órane +2óraq +2órau +2órav +ó1ræ +ó1re +2óre. +2órea +2óreæ +2óree +2órei +4órene +2óreo +2óreq +2óreu +2órev +ó1ri +2óri. +ó4riat +2órib +2óris +ó1rī +3órna +4órne. +3órnem +3órnen +3órner +3órnes +3órnet +3órno +ó1ro +ó1rō +2órq +órt2 +ór3tu +2óru +ó2rue +ó3r2ui +ó3run +2órv +ós4ch +ós2i +2ósn +ó1sp +ós2pe3 +2ós3q +2óst +óste3 +ós4t3ea +ós4t3eā +ós5tri +2ósue +ós3uis +ó3s2uī +2ósv +ó5ter. +ót3e4ra +ót3e4rā +ót3eru +ó4test +ó2tl +2ó1u2 +ó2um +2óv +2óx +óx4eu +ó3x2i +óxu3 +ó2xue +2œa +œa2m +2œā +2œă +2œá +2œæ +œæ2i +œæ2ŭ +2œǽ +œb2 +œ3bi +œbī3u +œbī3v +œ3bu +œ3bŭ +œce2 +œcu3 +œde3 +œdĕ3r +œen3 +œēn3 +œén3 +2œi +2œī +2œí +œ1m +œ1n2 +œno3b2 +œó1r +œpe3 +œper2 +œpĕ3r +œpĕ5rĭ +œ1r +œte5re +œ́3b2 +œ́2i +œ́3l +œ́1n +œ́2s 1p -p2h2 -p2l -2pn -2pp -p2r -2ps -2pt -3p2tr -2pz -2php +p2a +pab2 +3pa3d2 +pada3 +pae4nī +pan3sa +pan5s4i +pansi5u +pansi5v +pans4í +2parg +2pars +par2u +pa4ruī +pa3tr +p2ā +pān3sa +pān3să +pān3s4ī +pānsī5n +pānsī5q +pānsī5u +pānsī5v +3pă3d2 +pă3ră +2părg +pă3rŏ +2părs +păs3t +păs5tă +2păth +pắ3rē +4pắrg +4pắrs +p2á +pán3si +2párg +2párs +pá4ruī +pæ2a +pæ2ă +pæ2á +pæ2i +pæ2nī +pæ2ŭ +pǣ2a +pǣ2ă +pǣ2nī +pǣ2ŭ +p2e +3pe. +3pe2a +pe4ae +pe4am +pe4as +pe4a͞ +pe4a͡ +pe4ās +pe3d2 +pe2e +3pei +pe4ia. +pe4iae +pe4iam +pe6iane. +pe4iaq +pe4iar +pe4ias +pe4iau +pe4iav +pe4iáe +pe4iám +pe6iáne. +pe4iár +pe4iás +pe4iáu +pe4iáv +pe4ien +pe2ié +pe2ii +pe2ií +pe4io. +pe4ioq +pe4iou +pe4iov +pe4ión +pe4ióq +pe4ióu +pe4ióv +pe4is +pe4ium +pe2ī +pe4īs +3pe2í +pe4mn +pe4mq +pe4mv +3pen +pe4nt +pe2nu +3pe2o +pe4os +pe2ō +pe4ōs +3peó +pepe3 +peper4 +pepere5 +3peq +per1 +per5a6b5únd +pe5ram. +pe5ramn +pe5ramq +pe5ramu +pe5ramú +pe5ramv +pe3ran +per6ane +pe5ras. +pe5rasn +pe5rasq +pe5rasu +pe5rasv +pe5rat. +pe5rati +pe5ratí +pe5ratn +pe5ratq +pe5ratv +pe4rāc +pe5rāt +per5ā́c +pe5rā́t +pe4r3ác +pe2re +pere4s +pere4x3 +perexi4 +perexí4 +pe5rē. +pe4rēb +pe5rēq +perē4s +pe5rēt +perḗ4s +pe4r5énn +peré4s +peré4x3 +per5i4ce +peri4cī +peri4cí +peri4mo +peri4mō +peri4mó +perin5i4 +peri4n5í4 +per5i6ta͞ +peri6tā. +peri6tān +peri6tāq +peri6tār +peri6tāu +peri6tāv +peri4tǣ +peri4tī +peri4tō +peri6tū. +peri6tūn +peri6tūq +peri6tūr +peri6tūu +peri6tūv +pe4rí4ce +pe4rn +pero4s +per5osa +per5osá +per5osæ +per5osǽ +per5ose +per5osé +per5osi +per5osí +per5oso +per5osó +per5osú +pe3rō. +pe3rōn +perō4s +pe3rōu +pe3rōv +pe5rṓn +pe5rṓq +perṓ4s +pe5rṓu +pe5rṓv +pe4róp +peró4s +perpe5t4 +perpé5t4 +pe4rq +pe4rt +pe4rv +3pes +pe4sn +pe4sq +pes3t +pes5te +pe4su +pe4sv +3pet +pete5r +pete7rer +pe4tn +pe4tq +pe3tuī +pe4tv +3peu +pe4um +pe2un +pe2uo +pe2uō +pe2uó +pe4us +3peú +3pev +pex2 +pe3x4e +pexu3 +pexū3r +3pe͞ +3pe͡ +p2ē +pē4iam +pē4ian +pē6iāne. +pē4iāru +pē4iārú +pē4iāue +pē4iāve +pē6iā́ne. +pē6iā́ru +pē6iā́ue +pē6iā́ve +pē4iám +pē4iæne +pē4iæue +pē4iæve +pē4iǣne +pē4iǣue +pē4iǣve +pē4iǽne +pē4iǽue +pē4iǽve +pē4ien +pē4iīne +pē4iīue +pē4iīve +pē4iōne +pē4iōru +pē4iōrú +pē4iōue +pē4iōve +pē2iu +pē2iú +pē2nu +pē3r +p2ĕ +3pĕ. +3pĕā +3pĕ2ă +3pĕ3d2 +3pĕf +3pĕn +pĕ4nt +3pĕō +3pĕq +pĕ4r3ā4c +pĕ5rāt +pĕr5ā́c +pĕ5rā́t +pĕ5rē. +pĕr3ēb +pĕ5rēq +pĕrē4s +pĕ5rēt +pĕrḗ4s +pĕr3ĕā +pĕr3ĕă +pĕ4r3ĕŏ +pĕ6r5ĕ́nn +pĕ4r5ĭ4cī +pĕr6ĭĕ. +pĕr6ĭĕn +pĕr6ĭĕq +pĕr6ĭĕu +pĕr6ĭĕv +pĕr5ĭmĭ +pĕ4r5ĭ4mō +pĕ4rĭn +pĕ5rĭō +pĕ5rĭŏ +pĕ5rĭs +pĕ4r5ĭ4ta +pĕr5ĭtā. +pĕr5ĭtān +pĕr5ĭtāq +pĕr5ĭtār +pĕr5ĭtāu +pĕr5ĭtāv +pĕ4r5ĭ4tă +pĕ4r5ĭ4tá +pĕ4r5ĭ4tæ +pĕ4r5ĭ4tǣ +pĕ4r5ĭ4tǽ +pĕr5ĭtĕ. +pĕr5ĭtĕn +pĕr5ĭtĕq +pĕr5ĭtĕu +pĕr5ĭtĕv +pĕ4r5ĭ4tī +pĕ4r5ĭ4tō +pĕr5ĭtū. +pĕr5ĭtūn +pĕr5ĭtūq +pĕr5ĭtūr +pĕr5ĭtūu +pĕr5ĭtūv +pĕ4r5ĭ4tŭ +pĕ5rĭŭ +pĕ6r5ĭ́6cĕ +pĕr5ĭ́mĭ +pĕ5rĭ́s +pĕrĭ́4t +pĕr5ĭ́tă +pĕr5ĭ́tĕ +pĕ2rō +pĕ3rō. +pĕ3rōq +pĕrō4s +pĕ3rōu +pĕ3rōv +pĕ5rṓn +pĕ5rṓq +pĕrṓ4s +pĕ5rṓu +pĕ5rṓv +pĕr5ŏ́p +pĕr3ū́ +pĕr5ŭ́n +3pĕ2s +pĕs5tĕ +3pĕt +3pĕu +3pĕv +2pĕx2 +pĕxū3r +pĕ́4r3ē +pĕ́6rĕăn +pĕ́6r5ĕăr +pĕ́6rĕăt +pĕ́4r5ĕŏ +4pĕ́rg +pĕ́4rī +pĕ́6r5ĭ6cĕ +pĕ́6r5ĭ6cī +pĕ́6r5ĭt. +pĕ́6r5ĭ6ta +pĕ́6r5ĭ6tă +pĕ́6r5ĭ6tæ +pĕ́6r5ĭ6tǣ +pĕ́6r5ĭ6tī +pĕ́6r5ĭ6tō +pĕ́6r5ĭ6tū +pĕ́6r5ĭ6tŭ +6pĕ́rnān +6pĕ́rnăr +6pĕ́rnăt +6pĕ́rnĕr +6pĕ́rnĕt +4pĕ́rnĭ +4pĕ́rnŏ +3pĕ́4s +pĕ́s5t +3pĕ́t +3péa +2péc +3péi +3péo +pér5ear +pér5eor +pé2r3ē +2pérg +pér5i4ce +pér5i4ci +pér5i4cī +pé4r5it. +pér5i4tæ +pér5i4tǣ +pér5i4tī +pér5i4to +pér5i4tō +pér5i4tu +pér5i4tū +pé2rī +2pérm +4pérnān +4pérner +pér4ui. +pér4uī. +3pés +3pét +3péu +pé2uo +péx2ī +3pé͞ +3pé͡ +2ph. +phe2i +phē2i +2phēx +phi6sta +2phn +3pho +3phŏ +3phó 2pht -2p. -.p2 -1qu2 -1r -2rb -2rc -2rd +p2i +3pi2a +piad2 +3piā +3piá +3piæ +3piǣ +3piǽ +2pic +pic4e +pi5cen +3pid +3pie +3piē +3pié +pig3n +3pi2i +3piī +3pií +3pil +pin2ā +pin4i +pini3c +3pio. +3pion +3pioq +pio2s +3piou +3piov +3pión +3pióq +3pióu +3pióv +pi3r2 +pirí3t +pi4s3c +pis5ci +pi4s3tr +3pit +pi5ter +3pium +3piúm +pi2x3 +3pī. +3pīm +3pīq +pīrí3t +pīs3 +3pīu +3pīv +3pĭă +2pĭc +pĭn2a +pĭn2ā +pĭn2æ +pĭr2 +pĭ4str +3pĭt +pĭ5tĕr +pĭ́3d +pĭ́4s5t +3pĭ́t +3pía +3píd +3píe +píg3n +3píl +pí1m +pí4s3t +3pít +pí3tur +pí2x +p2l2 +p1n2 +p3nem +p3nen +p3ner +p3nes +p3net +2pni +2pní +p2o +3po. +2pond +po3ni +3poq +3por +pos3c +posí3t +po3s2u +po4t5e4ro +po4t5e4rō +po4t5e4ró +3pou +3pov +3pō. +3pōq +3pōr +3pōs +3pōu +3pōv +3pṓs +p2ŏ +pŏ3ĭ +2pŏn +3pŏny +pŏ3rĕ +pŏ3rī +pŏs4trŏ +pŏtĕ4r +pŏtĕ́4 +pŏ́3rĭ +pŏ́4t5ĕ4r +3póq +3pór +pó3s4tr +pó4te4r +pót5eri +pót5ero +pót5erō +3póu +3póv +2pp +ppule4 +p2r2 +prae3 +prae5s4 +praete6ris +praete6rís +praeté6r5is +pra3s2 +pra͞e5 +pra͞es4 +prá͞e5 +prá͞es6 +pra͡e5 +pra͡es4 +prá͡e5 +prá͡es6 +prā1 +prās2 +práe3 +práes4 +prá3s4t +præ3 +præs4 +prǣ3s +prǣ3ŭ +prǣ́3 +prǣ́s4 +prǽ3 +prǽs4 +pre3d +pre5mi +pre5mo +prē3m +pr4ĕ́ +pri5mi +pri4s3 +prĭ4s +3pro +pro6de6ri +pro6de6rí +pro4des +pro4dés +pro4di. +pro6di6mus +pro6di6mús +pro4di4n +pro4di4q +pro4dis +pro6dit. +pro6di6te +pro6di6tis +pro6di6tís +pro6ditn +pro6di6to. +pro6di6ton +pro6di6toq +pro6di6tot +pro6di6tou +pro6di6tov +pro6di6tón +pro6di6tóq +pro6di6tót +pro6di6tóu +pro6di6tóv +pro6ditq +pro6ditue +pro6di6tur. +pro6di6turn +pro6di6turq +pro6di6turue +pro6di6turv +pro6di6túrn +pro6di6túrq +pro6di6túrue +pro6di6túrv +pro6ditv +pro4dí4n +pro4dí4q +pro4dís +pro6dí6te +pro6dítn +pro6dítq +pro6dítu +pro6dítv +pro4d5í4u +pro4d5í4v +pro4li +3prō1 +prō6de6ri +prō6de6rí +prō6dĕ6rĭ +prō6dit. +prō6ditn +prō6ditq +prō6ditue +prō6ditv +prō4dī. +prō4dī4n +prō4dī4q +prō6dī́6n +prō6dī́6q +prō6d5ī́s +prō6d5ī́6u +prō6d5ī́6v +prō6dĭt. +prō6dĭtn +prō6dĭtq +prō6dĭtu +prō6dĭtv +prō6dĭ́tn +prō6dĭ́tq +prō6dĭ́tu +prō6dĭ́tv +prō6dítn +prō6dítq +prō6dítu +prō6dítv +prō4li +prō4lĭ +prōs2 +prō3s4t +prṓ6de6ri +prṓ6dĕ6rĭ +prṓ6dit. +prṓ4d5ī +prṓ6dĭt. +prṓ5s4t +3pró +pró6de6ri +pró4des +pró4di. +pró4dis +pró6dit. +pró4li +prós2 +pró3st +2p1s2 +psa3c +p3sá +p2s3q +p2s3ue +p2s3uĕ +2pt2 +p4t3enn +pte3r4a +pte3rǣ +pte5re +pte6rea +pte6reā +pte5ré +pte3ri +pteri5u +pteri5v +pte5rī +pterī5u +pterī5v +pte3ro +pte3rō +p4t3ĕnn +ptĕ3r4a +ptĕ3rǣ +ptĕ3rĕ +ptĕ5rī +ptĕrī5u +ptĕrī5v +ptĕ3rŭ +p5tĕ́nd +pt5ĕ́nn +p4t3énn +pti4s +ptis5t +pti6sta +ptĭ4s +ptĭs5t +p3tr +p3tu +p2u +2pua +2puā +2puá +3pu3b2 +pu4gn +pu2lu +pul3ue +pul3ué +pu3lum +pu1m +2puo +2puō +2puó +2puu +2puú +3pūb +pū2s +2pūt +p2ŭ +2pŭā +2pŭă +3pŭg +2pŭō +2pŭŏ +2pŭr +2pŭŭ +3púb2 +pú4gn +2pút +1q +q2u2 +qu4ắ +qu4ám +quás3 +qu4át +que6ste +3quĕ +quĕ6stĕ +qu4ia +qui4d5ue +qui4d5ui +qui4d5uī +qui4d5uí +2quit +quí4d5ue +quí4d5ui +quí4d5uī +quo2s3 +quó2s3 +ra3a2 +rab4a +r2ab2e +ra3bib +rabi3c +r4abis +ra3biu +rab2ī +rabī3u +rabī3v +r2abí +rab2o +ra3bu +ra4b5und +ra3ci +ra3cí +ra2cr +rad2a +rad2e +rad2ē +rad2é +rad2ī +radō5rō +rad2ó +ra3eat +ra3eāt +ra3eát +raes2 +r2aeu +r2aev +r1ag +ra2gā +ra2gá +ra3g2n +ra2gr +2rah +ra1i2 +ra3ic +ra3i4n +ra2io +ra2ió +ra3is +ra3it +rai4u +ra4ium +ra4ius +ra4iús +rai4v +ra1ī2 +raī4n +raī́4 +ra1í2 +ra3í4n +ra3ís +r1al +r2a3li +ra3mam +ra4man +ra3mas +ra4mán +ra4már +ram3b2 +ram5bi +rambī5q +rambī5u +rambī5v +rambī́5q +rambī́5u +rambī́5v +ram5bu +r2a3me +r2a3mé +r3amna +r3amnā +r3amná +r3amni +r3amnī +r3amní +ra5ne. +4rang +ran4si. +ran4si4m +ran4s5i4n +ran4si4q +ran4s5is +rans5it +ran4s5í4n +ran4sí4q +ran4s5ís +ran4sí4u +ran4sí4v +r2ant +ra1o +ra1ō +r2aq +ra5que +ra4rab +r4aram +ra4rar +ra4rau +ra4rav +ra2rā +ra4ráb +ra4rár +ra4ráu +ra4ráv +rar5ch +r4arem +r4aret +r3a2rē +ra4rid +4ra4ríd +r2aro +r3aror +r3a2rō +r2aró +r3arór +ra4rue +ra4rué +ra4rui +ra4ruí +ra5rum +r3a4rúe +r3a4rúi +ra5rúm +rasce5u +ra4sn +ra4s2p +ra4sq +ra4ss +ras4ta +ras4tá +ras4te +ras4tém +ras4tén +ras4tés +ras4tét +ras4tic +ras4tíc +ras5tra +ra4sui +ra4suí +ra4sv +ra5te. +ra5ten +ra5teq +ra5teu +ra5tev +ra5ti. +ra5tic +ra5tim +ra5tin +ra5tiq +ra5tis +ra5tiu +ra5tiv +ra5tíc +ra5tín +ra5tíq +ra5tís +ra5tíu +ra5tív +ra5to. +ra5ton +ra5toq +ra5tor +ra5tos +ra5tou +ra5tov +ra5tón +ra5tóq +ra5tór +ra5tós +ra5tóu +ra5tóv +ra3tr +r3att +ra5tum +ra5tus +ra5túm +ra5tús +ra5ue. +ra5ve. +ra2xu +r4a͞eu +r4a͞ev +r4á͞eu +r4á͞ev +r4a͡eu +r4a͡ev +r4á͡eu +r4á͡ev +1rā +rā5bun +rā4cer +rā4cĕr +rā4cér +2rācr +2rāct +rāi2 +rā4iae. +rā6iaene +rā6iaeque +rā6iaeue +rā6iaeve +rā6ia͞e. +rā6ia͞ene +rā6ia͞eque +rā6ia͞eue +rā6ia͞eve +rā6iá͞ene +rā6iá͞eque +rā6iá͞eue +rā6iá͞eve +rā6ia͡e. +rā6ia͡ene +rā6ia͡eque +rā6ia͡eue +rā6ia͡eve +rā6iá͡ene +rā6iá͡eque +rā6iá͡eue +rā6iá͡eve +rā4iā. +rā4iāru +rā4iārú +rā4iās. +rā6iāsne +rā6iāsque +rā6iāsue +rā6iāsve +rā6iā́ru +rā6iā́sne +rā6iā́sque +rā6iā́sue +rā6iā́sve +rā6iáene +rā6iáeque +rā6iáeue +rā6iáeve +rā4iæ. +rā4iæne +rā6iæque +rā4iæue +rā4iæve +rā4iǣ. +rā4iǣne +rā6iǣque +rā4iǣue +rā4iǣve +rā6iǣ́ne +rā6iǣ́que +rā6iǣ́ue +rā6iǣ́ve +rā4iǽne +rā6iǽque +rā4iǽue +rā4iǽve +rā3ic +rā4iīs. +rā6iīsne +rā6iīsque +rā6iīsue +rā6iīsve +rā6iī́sne +rā6iī́sque +rā6iī́sue +rā6iī́sve +rāĭ2 +rāĭ́2 +rā1í2 +r2ān +rānsī4 +rānsī́4 +rān6s5ĭ́t +rān4s5ít +4rārēsc +6rārḗsc +rā4rue +rā4ruē +rā4rué +rā4rui +rā4ruī +rā4ruí +r3ā4rŭē +r3ā4rŭĕ +r3ā4rŭī +r3ā4rŭĭ +rā4rŭ́ĕ +rā4rŭ́ĭ +r3ā4rúe +r3ā4rúi +rā́4cer +rā́4cĕr +r3ā́cr +4rā́ct +rā́i2 +rā́3ic +rā́ĭ2 +rā́3ĭc +rā́n4s5ī +rā́r2 +r5ā́4rui +r5ā́4ruī +rā́4rŭī +rā́4rŭĭ +r4ā́t +2r1ăb +răb2ă +răb2ē +răb2ĕ +răb2ī +răbī3u +răbī3v +răb2ĭ +răbĭ3c +2răc +r1ăd +răd2ē +răd2ĕ +răd2ī +rădō5rō +ră3d2ŏ +2răf +2răg +ră3g2n +ră4gŏr +ră4grē +ră4grĕ +ră4grō +ră4grŏ +2răh +ră1ī2 +răī4q +răī́4 +ră3ĭē +ră3ĭī +2r1ăl +2rămā +2r3ă4mă +2răm3b2 +rămbī5n +rămbī5u +rămbī5v +rămbī́5n +rămbī́5u +rămbī́5v +răm5bŭ +2rămī +4rămna +4r3ămnā +4r3ămnă +4rămná +4rămnæ +4rămnǣ +4rămnǽ +4r3ămnī +2rămo +2rămó +2rămœ +2rămp +2răng +2rănh +ră1ō +2răpĕ +2răpp +r2ă3q +2r1ă2r +răr3c +r4ăsĭ +ră4sn +ră4sp +ră4sq +răs5trī +ră4su +ră4sv +2rătt +r2ău +r2ăv +2rắb +rắb4ĭ +rắbĭ5c +2rắf +rắ3gn +rắm3b4 +4rắmna +4r5ắmnā +4r5ắmnă +4rắmnæ +4rắmnǣ +4r5ắmnī +4rắpĕ +r3ắrd +r3ắrm +4r5ắs4tā +4r5ắs4tă +4r5ắstē +4rắstĕ +4rắs4tĭ +4rắstō +4rắtt +1r2á +ráb2i +rábi3c +2rábl +rá4cer +2r3á2cr +2ráct +4ráequa +4ráequā +4ráequă +r5áequen +4ráequē +4ráequo +4ráequō +4ráequŏ +2ráes +2r3áf +rá3g2n +r4ágr +rá3ian +rá3iā +rá3iǣ +rá3i2c +rá3ien +rá3iē +rá2iu +rá3li +2ráll +rám3b2 +4r3ámna +4r3ámnā +4rámnæ +4rámnǣ +4r3ámni +4r3ámnī +2rámp +ráns5is +2rápe +2r3árd +4rá4rid +2r3árm +4r3á4r4ui +2r3ásp +4r3ás4ta +4r3ás4tā +4ráste +rás4tem +rás4tes +rás4tet +4r3ástē +rá5s4tic +4rástit +4rásto +4rástō +2rátt +2ráud +rá2xu +ræa2 +ræă2 +ræs2 +ræ5sci +ræ5stō +r2æu +ræ3ue +ræ3uĕ +r2æ3v +rǣa2 +rǣă2 +rǣs2 +rǣ5stō +r2ǣu +rǣ3ue +rǣ3uĕ +r2ǣ3v +r2ǣ́ +1rǽ +4rǽqua +4rǽquā +4rǽquă +rǽ4quen +4rǽquē +4rǽquo +4rǽquō +4rǽquŏ +2rǽs2 +r2ǽu +r2ǽv +2rb2 +rba3q +rba3r +rbæ3 +rbe1 +r3bi +rbi3c +rbi3r +rbi5ti +rbī3r +rbī3u +rbī3v +rbī́3m +rbī́3r +rbĭ3c +rbĭ5tĭ +r3bí +rbí3m +rbí3r +rbí3to +rbí5tur +rbo3ri +rbs3 +r3bu +r3bŭ +2rc2 +r4chan +r2chă +rci6sta +rcum3 +rcumi4 +rcumī4 +rcumí4 +rcŭm3 +rcŭmī4 +rcú2m3 +2rd2 +rde4sc +rdē4sc +r3di +rdi4g3 +r3do +rd4or +r3du +rd4ue +r3dŭ +rd4ŭĕ +re3a4tr +re3ā4tr +reā́4tr +re3á4tr +rec4e +re5cen +rec4é +re5cén +2red +re2da2 +red7aman +re2dā +re4d3ea +re4d3eā +re4d3eá +re4d3eo +re4d3eō +re4d3eó +re4deú +re2dē +re4d3ii +re4d3iī +red5iít +re4d3i4r +re4diss +re4dist +red5i4tā +red5iti +redi4u +red5iuer +red5iué +red5iui. +red5iuim +red5iuin +red5iuiq +red5iuis +red5iuit +red5iuín +red5iuíq +red5iuís +red5iuít +re4di4v +red5iver +red5ivé +red5ivi. +red5ivim +red5ivin +red5iviq +red5ivis +red5ivit +red5ivín +red5ivíq +red5ivís +red5ivít +re4dīm +re4d3ī4r +re4d3īs +re4dīt +red5ī4te +red5ī4tō +red5ī4tu +red5ī4tú +re4d3ī4u +re4d3ī4v +re4dī́m +re4d5ī́4r +re4dī́s +red5ī́ss +red5ī́st +re4dī́t +red5ī́6te +red5ī́6tō +red5ī́6tu +red5ī́6ui +red5ī́6uī +red5ī́6vi +red5ī́6vī +re4d3íe +re4d3íi +re4d3í4r +re4díss +re4díst +red5í4to +redí4tu +red5í4ui +red5í4vi +re4dúl +re2er +ree3ri +ree3rí +re2es +3reē +r1ef +2r1eg +reg2l +re4gn +re3go +re3gō +re2ia +re2iā +re2iá +re3ic +re4ien +re2ii +re2iī +re2ií +re2io +re2iō +re2ió +re2iu +re2iú +re2ī +2r1el +re2le +re2lo +2remā +2reme +2remē +2remé +re4mic +4remim +re4mine +re4miné +4remis +2remī +4remím +re4míss +re4míst +4remít +4remo. +4remoq +4re4mor +4remou +4remov +4remō. +4remōq +4remōu +4remōv +4remóq +4remór +4remóu +4remóv +2remp +2remt +4remún +re5nar +re5nas +re5nau +re5nav +re1o +re1ō +repe3r +r2ere +r2eri +re3rin +re3riu +re3riv +3rerī +r2erí +re4rn +re4rq +2r3err +re4rv +re4sa +re2sá +re4so +re2só +re2sq +2ress +res2t +4rest. +4reste +re4ste. +re6stem. +re6stemn +re6stemq +re6stemue +re6stemv +re6s5tene +re4steq +re4stes +re4steu +re4stev +re4stēs +re6stḗs +re6stémn +re6stémq +re6stémue +re6stémv +re4stés +4resti +re4s5ti. +re6s5tine +re4s5tiq +re4stis +resti5t4 +re4s5tiv +re4s5tī. +re6s5tīne +re4s5tīq +re4s5tīs +re4s5tīu +re4s5tīv +re6s5tī́ne +re6s5tī́q +re6s5tī́s +re6s5tī́u +re6s5tī́v +4restí +re6s5tíne +re4s5tíq +re4stís +restí5t4 +re4s5tíu +re4s5tív +4restn +4r3esto +4r3es3tō +4r3estó +4restq +4r3estu +4restv +re4su. +r4esue +re4sum +re4sun +re4suq +re4suu +re4suv +re4súm +re4sún +re4súq +re4súu +re4súv +rete5re +2reun +re4uol +reu5sum +reu5sus +2reún +re3únc +re4vol +2r1ex +r2exé +rexi4t +re4xiu +re4xiv +re2x3ī4 +rexī́4 +rexí4t +rexí4ui +rexí4vi +re2xu +1rē +2rēbu +2rēbŭ +2rēg +rē2gr +rē2iā +rē2iu +rē2iú +2r1ē2l +r2ē3la +r2ē3lă +2rē2me +rē3men +4rēmēr +2rē2mĕ +rē3mĕn +4r3ē4mér +4rē4mic +4rē4mim +rē4mine +rē4minē +rē4miné +4rē4mis +4rēmit. +4rēmitn +4rēmitq +4rēmitu +4rēmitv +4rē4mĭc +4rē4mĭm +r5ē4mĭnē +rē4mĭnĕ +4rē4mĭs +4rēmĭt. +4rēmĭtn +4rēmĭtq +4rēmĭtu +4rēmĭtv +rē4mĭ́n +4rē4mĭ́t +4rē4mín +4rē4mít +2rē2mo +2rē2mŏ +2rē2mó +2rēmp +2rēmt +2rēna +2rē2nă +rē3ne +rēpe3r +rēpĕ3r +r2ēri +2rēro +2rērŏ +2r3ē4sa +2rē2sā +2rē2să +2rē2sá +2rēsæ +2rēsǣ +2rēsǽ +r2ēsc +2rē2se +2r3ē2sĕ +2rēsō +2rēss +2rēst +rēs3tĭ +r2ē2su +2rēsū +2rē2sŭ +2rēsú +2rēu +rē2uo +rē2uŏ +2rēv +rē2vo +rē2vŏ +rḗ3b +rḗ3ic +rḗ3ĭc +4rḗ4le +4r3ḗ4lĕ +r3ḗlŏ +4r5ḗ4mer +4r5ḗ4mĕr +4rḗ4mim +rḗ6mine +rḗ6minē +6rḗmit. +4rḗ4mĭm +r5ḗ6mĭnē +r5ḗ6mĭnĕ +6rḗmĭt. +4rḗ4mo +4r3ḗ4mŏ +4rḗmp +4rḗmt +rḗ4nat +rḗ4năt +4r3ḗro +4r3ḗrŏ +r4ḗsc +rḗ4se +r3ḗ4sĕ +4rḗss +4rḗst +r4ḗsu +rḗ4sŭ +4rḗ4uo +4r3ḗ4uŏ +4rḗ4vo +4r3ḗ4vŏ +r4ĕān +r4ĕāq +rĕ3ā4tr +r4ĕāu +r4ĕāv +rĕā́4tr +rĕ2ă +r4ĕă. +r4ĕăq +r4ĕău +r4ĕăv +2rĕd +rĕ2dā +rĕ2dá +rĕ2dē +rĕ4d3ĕā +rĕ4d3ĕă +rĕ4d3ĕō +rĕ4dīm +rĕ4d3ī4r +rĕ4d3īs +rĕ4dīt +rĕd5ī4tĕ +rĕd5ī4tō +rĕd5ī4tŭ +rĕ4d3ī4u +rĕ4d3ī4v +rĕ4dī́m +rĕ4d5ī́4r +rĕ4dī́s +rĕd5ī́ss +rĕd5ī́st +rĕ4dī́t +rĕd5ī́6tĕ +rĕd5ī́6tō +rĕd5ī́6tŭ +rĕd5ī́6uī +rĕd5ī́6uĭ +rĕd5ī́6vī +rĕd5ī́6vĭ +rĕ4d3ĭ4c +rĕd5ĭĕr +rĕ4d3ĭī +rĕ4d3ĭĭ +rĕd5ĭtā +rĕd5ĭtă +rĕ4d5ĭ́ĕ +rĕ4d5ĭ́ĭ +rĕ4dĭ́t +3rĕē +r1ĕf +2r1ĕg2 +rĕ3gō +rĕ2ī +rĕ2ĭĕ +2rĕmā +2rĕmē +2rĕmĕ +2rĕmī +2rĕmĭ +4r3ĕmnē +4r3ĕmnī +4r3ĕmnĭ +2rĕmŏ +2rĕmŭ +rĕ5nĕ. +2r3ĕnn +rĕ1ō +r2ĕq +rĕ5quĕ +r2ĕr +rĕ3r4ĕ +2r3ĕrr +2r3ĕrŭ +rĕ1s +rĕs3cĭ +rĕs2p +rĕs2t +r2ĕt +rĕ5uĕ. +2rĕŭ +rĕ5vĕ. +2r1ĕ2x3 +rĕ4xă +rĕxī4 +rĕxī́4 +2rĕ́d +rĕ́4d5ĕā +rĕ́4d5ĕă +rĕ́4d5ĕō +rĕ́4d3ī +rĕ́4d5ĭī +rĕ́4d5ĭĭ +2rĕ́f +4rĕ́mĕ +4rĕ́mĭ +4r5ĕ́mnē +4r5ĕ́mnī +4r5ĕ́mnĭ +4r5ĕ́nnā +4r5ĕ́nnă +4r5ĕ́nnē +4r5ĕ́nnĕ +4r5ĕ́nnī +4r5ĕ́nnō +2r3ĕ́2q +4r3ĕ́rr +rĕ́3sp +rĕ́5s4tā +rĕ́5s4tă +rĕ́5s6tĕnt +rĕ́5s6tĕt +rĕ́5strŭ +2r3ĕ́2x3 +1ré +2réd +ré4d3ea +ré4d3eā +ré4d3eo +ré4d3eō +ré4d3iī +ré2d3ī +ré2e +2r1éf +2ré2le +2ré2lo +4rémer +4rémic +4rémim +4r5é4mine +4rémit. +4rémiti +4rémito +4rémitō +4rémitu +4r3émnē +4r3émni +4r3émnī +2rémo +ré4mor +2rémp +2rémt +ré4nat +4r3énna +4r3énnā +4rénne +4r3énnē +4r3énnī +4r3énno +4r3énnō +4réqui +r2ér +2réro +2r3érr +ré2ru +2ré4sa +2résæ +4ré4se. +2réso +ré3sp +2réss +ré3s4ta +ré3s4tā +4réste +ré5s6tent +ré5s4tet +4résti +ré5stit +4réstn +4r3ésto +4r3éstō +4réstq +rés4tru +4r3éstu +4réstv +r2é2su +4résu. +4résum +4résus +2r3é2uo +2r3é2vo +ré4xeu +ré4xiē +ré4x3is +ré2xī +ré2xu 2rf -2rg -r2h -2rl -2rm -2rn +2rg2 +r3ge +r3gĕ +r1h +r2hy +r2hý +ri2a +r2ia. +r2iae +r2iam +r2ian +r2iaq +r2iar +r2ias +r2iat +ri3atr +r2iau +r2iav +r2ia͞ +r2ia͡ +r2iā +2riă +r2iáe +r2iám +r2ián +r2iár +r2iás +r2iát +ri3átr +r2iáu +r2iáv +r2iæ +r2iǣ +r2iǽ +2ribe +2ribē +ri4bē. +3riboe +3riboē +3riboé +ri5bus +ri5bús +ri4cie +ri4ciē +ri4cié +ri4cim +ri4cio +ri4ciō +ri4ció +4ricit +r3i4cím +r3i4cít +3ricl +r2icu +r2icú +2rido +ri4don +2ridō +ri4dōn +2ridó +r2ieb +3riei +3rieí +r2iem +r2ien +ri3enn +r2ies +r2iet +r2iēb +3riēī +r2iēm +r4iēri +r4iērí +r2iēs +r2iēt +r4iḗb +r4iḗm +r4iḗne +r4iḗq +r4iḗri +r4iḗs +r4iḗt +r4iḗu +r4iḗv +2riĕ +r2iéb +3riéi +r2iém +r2ién +ri3énn +r4iéris +r2iés +r2iét +ri3ga +ri3gæ +ri3gǣ +ri4g3n +r4iis. +r4iisn +r4iisq +r4iisu +r4iisv +r2iīs +r4iī́s +r4iísn +r4iísq +r4iísu +r4iísv +2rij +r1il +3rile +3rilé +5rille. +5rillen +5rilleq +5rilli. +5rilliq +5rillis +5rilliu +5rilliv +3rillī +5rillíq +5rillís +5rillíu +5rillív +3rillo +3rillō +3rilló +5rillum +5rillus. +5rillusn +5rillusq +5rillusu +5rillusv +5rillúm +5rillúsn +5rillúsq +5rillúsu +5rillúsv +3rim. +3rimed +3rimel +5rimetr +3rimēd +3rimēl +5rimḗd +5rimḗl +3ri5méd +3ri5mél +5rimétr +ri3min +3rimn +3rimq +4rimun +ri3mur +r4i3mus +r2imú +ri3múr +ri3mús +3rimv +ri2ni +rin3ic +ri2n3ī2 +rinī́4 +ri4n3í4c +r3inq +rinte5r6 +rinteri5 +rinterī5n +rinterī5q +rinterī5u +rinterī5v +rinterī́5 +rinterí5u +rinterí5v +3rinth +ri2nu +ri4nún +r2i2o +r2iō +r2ió +r2ip +ri3pi +r2iq +ri2ra +ri2rá +ri3r4e +rir6emi +ri3r4ē +ri5rē5m +3rirrh +1r2is +ri3sa +ri4sat +ri3sá +ri4sát +ri4s3p +ris5pe +ris5pé +ris5ti +ri6stri +ri4sui +ri4suí +r2ita +r4itāt +r2itá +r4i5ter +r2ité +ri5tér +3rith +r2iti +3ritia +3ritiá +3ritiæ +3ritiǽ +3ritii +3ritií +5ritior +r5itiō. +r5itiōn +r5itiōq +r5itiōu +r5itiōv +5ritiór +5ritiss +5ritius +3ritiú +r2ití +3ritía +5ritíss +ri5tōt +3ritt +r4itue +r4iue. +2riug +r4ium. +r4iumn +r4iumq +r4iumu +r4iumv +r4iunt +r2ius +2riŭ +r4iúnt +r2iús +r4ive. +rī3āt +2rīb +rī4c5ĕ́n +rī4cén +2rīg +r2īm +rīmi3 +r2īne +r4īnĕ +r2īq +2r3ī2rā +r2īs. +r2īsn +r2īsq +r2īsu +r2īsv +r2īt +r2īu +r4īue. +r4īuĕ. +r4īus +r2īv +r4īve. +r4īvĕ. +2rī́b +rī́3d +r2ī́m +r4ī́ne +r4ī́nĕ +r2ī́q +r2ī́t +r4ī́uĕ. +r4ī́vĕ. +1rĭ +rĭ4bē. +r2ĭc +rĭ3cē +rĭ3cĕ +rĭ3cī +2rĭcĭ +rĭ4cĭă +rĭ4cĭē +rĭ4cĭĕ +rĭ4cĭm +rĭ4cĭō +rĭ4cĭŏ +rĭ4cĭŭ +rĭ3cŭ +2rĭdă +2rĭdō +rĭ4dōn +r2ĭē +r4ĭē. +r4ĭēq +r4ĭēu +r4ĭēv +r2ĭĕ +r4ĭĕ. +r4ĭĕn +rĭ3ĕnn +r4ĭĕq +r4ĭĕu +r4ĭĕv +rĭ5ĕ́nn +rĭ3ga +rĭ3gæ +rĭ3gǣ +2rĭi +2r1ĭĭ +2rĭj +2r1ĭl +3rĭle +3rĭlé +3rĭllĕ +3rĭllī +3rĭllō +3rĭllŭ +4rĭmăr +4rĭmăt +2r3ĭmb +4rĭmēb +4rĭmēm +4rĭmēr +4rĭmēs +4rĭmēt +4rĭmḗb +4rĭmḗm +4rĭmḗr +4rĭmḗs +4rĭmḗt +4rĭmĕt +5rĭmĕtr +5rĭmĕ́tr +4rĭmĭm +4rĭmĭs +4rĭmĭt +4rĭmĭ́ +2rĭmm +2rĭmŏ +2rĭmp +4rĭmŭn +4rĭmŭ́n +rĭ2n1 +rĭ3nā +2r3ĭnc +2r3ĭnd +2rĭni +2r3ĭnī4 +rĭnī́4 +2r3ĭnĭ +rĭnĭ́4 +2rĭnj +2r3ĭnq +rĭntĕ5r +rĭntĕrĕ5r +rĭntĕrī5n +rĭntĕrī5q +rĭntĕrī5u +rĭntĕrī5v +rĭntĕrī́5 +5rĭnth +2rĭnu +2rĭnŭ +2rĭnv +rĭ2ŏ +2rĭpē +2r1ĭr +rĭ3r4ē +rĭ5rē5m +3rĭrrh +rĭ3s4ă +rĭ4sp +rĭs5pĕ +rĭs5tĭ +rĭ5strŏ +r2ĭt +4r5ĭ4tĭō. +4r5ĭ4tĭōn +4r5ĭ4tĭōq +4r5ĭ4tĭōu +4r5ĭ4tĭōv +2rĭu +2rĭv +r2ĭ́c +rĭ́3cĕ +4r5ĭ́4cĕr +4rĭ́cĭ +rĭ́4cĭā +rĭ́4cĭă +rĭ́4cĭē +rĭ́4cĭĕ +rĭ́4cĭm +rĭ́4cĭō +rĭ́4cĭŏ +rĭ́4cĭŭ +4rĭ́mĕr +4rĭ́mĭm +4rĭ́mĭt +rĭ́2n +r3ĭ́nc +4r3ĭ́nd3 +r3ĭ́n3ĭ4 +2r3ĭ́r +r4ĭ́s +4r5ĭ́4tĭō +1rí +2ríb +4r3í4cer +2ríci +rí5ci. +rí4ciā +rí4ciē +rí4cim +rí4cio +rí4ciō +rí5cis +r2ícu +rí3d +2rída +rí3ga +rí4g3n +2ríj +4rílli +4rímer +4rímim +rí3min +4rímit +2rímm +r2ímu +2rínc +2rín2d3 +4rí4n3i4c +2rínj +2ríns +4rínte +r2íq +2rírr +rís3t +rí4sui +r2ít +4rítio. +4r3í4tiō +rí2xu +2rj +2rl2 +r3lu +2r1m2 +rmĭ2ă +rmí5tur +2r1n2 +r3ne +rne3g +r3nĕ +rnĕ3g +rn4i3m +rn4ĭ3m +rní5ci +1ro. +ro3áq +rob2a +rob2e +rob2ē +rob2é +ro3b2i +rob2ī +rob2í +ro3b2o3 +rob2ó +rob3r +r1oc +ro2da +ro4deo +ro4d5e4ra +ro4d5e4rá +rod5e6rim +rod5e6rit +rod5e6rít +ro4d5e4ro +ro4d5e4ró +ro4d5e4ru +ro4d5e4rú +rod5est +ro6d5é6rim +ro6d5é6rit +rod5ést +ro4d3ie +ro4d3ié +ro4d3ii +ro4d3ií +ro4dio +ro4diō +ro4dió +ro4d3i4r +rod5iss +rod5ist +ro4d3i4u +ro4d3i4v +ro4d3íe +ro4d3íi +ro4d5í4mu +ro4d3í4r +rod5íss +rod5íst +rod5í6te. +ro6d5í6tis +ro4d5í4to +rodí4tu +rod5ítur +rod5í4ui +rod5í4vi +ro4em +ro4en +ro3eo +ro3eō +ro3eó +ro4eq +ro4es +ro4ev +ro2ē +ro2é +ro4ia. +ro4iae +ro4iam +ro6iane. +ro4iaq +ro4iar +ro4ias +ro4iau +ro4iav +ro4ia͡ +ro4iáe +ro4iám +ro6iáne. +ro4iár +ro4iás +ro4iáu +ro4iáv +ro2iæ +ro2iǽ +ro4iis. +ro4iisn +ro4iisq +ro4iisu +ro4iisv +ro3iī +ro4iísn +ro4iísq +ro4iísu +ro4iísv +ro3it +ro4ium +ro4ius +ro4iús +roī4n +roī2q +roī́4n +roī́4q +roí2t +roí2u +roí2v +2r1ol +ro2le +ro2lē +ro2lé +ro4li. +ro4lin +ro4liq +ro4lis +ro4liu +ro4liú +ro4liv +ro2lí +ro2l4u +ro2lú +r2on +ro3ni +rons3 +ro2pe3 +ro2pé +1roq +ro2ra +ro2rá +r3ord +ro4rer +ro4ret +ro4rén +ro4rér +ro4rét +ro4ro. +ro4ron +ro4roq +ro4ror +ro4rou +ro4rov +ro4rón +ro4róq +ro4rór +ro4róu +ro4róv +r2os +ro3s2c +ro2s3m +ro3só +ro3s2t +ro4s3ui +ro4s3uí +1rou +1rov +1ro͞ +1ro͡ +rō4d5e4ra +rō4d5e4rā +rō4d5e4rá +rōd5e6rim +rōd5e6rit +rōd5e6rít +rō4d5e4rō +rō4d5ĕ4rā +rō4d5ĕ4ră +rōd5ĕ6rĭm +rōd5ĕ6rĭt +rōd5ĕrĭ́t +rō4d5ĕ4rō +rō6d5ĕ́6rĭ +rō4d5é4ri +rō4d3ie +rō4d3iē +rō4d3ié +rō4d3ii +rō4d3iī +rō4d3ií +rō4d3ī4m +rō4d3ī4r +rō4d3īs +rō4d5ī4te +rō4d5ī4tĕ +rō6d5ī6tis +rō6d5ī6tĭs +rō6d5ī6tĭ́s +rō6d5ī6tís +rō4d5ī4tō +rō4d5ī4tu +rō4d5ī4tŭ +rō4d5ī4tú +rō4d3ī4u +rō4d3ī4v +rō4d5ī́4m +rō4d5ī́4r +rōd5ī́ss +rōd5ī́st +rō6d5ī́6te +rō6d5ī́6tĕ +rō6d5ī́6tis +rō6d5ī́6tĭs +rō6d5ī́6tō +rō6d5ī́6tu +rō6d5ī́6tŭ +rōd5ī́6ui +rōd5ī́6uī +rōd5ī́6uĭ +rōd5ī́6vi +rōd5ī́6vī +rōd5ī́6vĭ +rō4d3ĭē +rō4d3ĭĕ +rō4d3ĭī +rō4d3ĭĭ +rō4d5ĭ́ĕ +rō4d5ĭ́ĭ +rō4d3íe +rō4d3íi +rō4ia. +rō4iae. +rō6iaene +rō6iaeque +rō6iaeue +rō6iaeve +rō4iam +rō4ian +rō4iaq +rō4iau +rō4iav +rō6ia͞e. +rō6ia͞ene +rō6ia͞eque +rō6ia͞eue +rō6ia͞eve +rō6iá͞ene +rō6iá͞eque +rō6iá͞eue +rō6iá͞eve +rō6ia͡e. +rō6ia͡ene +rō6ia͡eque +rō6ia͡eue +rō6ia͡eve +rō6iá͡ene +rō6iá͡eque +rō6iá͡eue +rō6iá͡eve +rō4iā. +rō6iāne. +rō6iāque +rō4iāru +rō4iārú +rō4iās. +rō6iāsne +rō6iāsque +rō6iāsue +rō6iāsve +rō4iāue +rō4iāve +rō6iā́ne. +rō6iā́que +rō6iā́ru +rō6iā́sne +rō6iā́sque +rō6iā́sue +rō6iā́sve +rō6iā́ue +rō6iā́ve +rō6iáene +rō6iáeque +rō6iáeue +rō6iáeve +rō4iám +rō4iæ. +rō4iæne +rō6iæque +rō4iæue +rō4iæve +rō4iǣ. +rō4iǣne +rō6iǣque +rō4iǣue +rō4iǣve +rō6iǣ́ne +rō6iǣ́que +rō6iǣ́ue +rō6iǣ́ve +rō4iǽne +rō6iǽque +rō4iǽue +rō4iǽve +rō4iī. +rō4iīn +rō4iīq +rō4iīs. +rō6iīsne +rō6iīsque +rō6iīsue +rō6iīsve +rō4iīu +rō4iīv +rō4iī́n +rō4iī́q +rō6iī́sne +rō6iī́sque +rō6iī́sue +rō6iī́sve +rō4iī́u +rō4iī́v +rō2iō +rō4ium +rō4ius +rō4iús +rō2le +rō2lē +rō2lĕ +rō2lé +rō4lis +rō4liu +rō4liú +rō2lī +rō4lĭs +rō4lĭŭ +rō4lĭ́ +rō2lí +r2ōn +rō2ra +r3ō2rā +r3ō2ră +rō2rá +2rōrd +rō4rer +rō4ret +rō4rēm +rō4rēr +rō4rēt +rō4rĕr +rō4rĕt +rō4rén +rō4rér +rō4rét +rō2ro +rō4rō. +rō4rōn +rō4rōq +rō4rōu +rō4rōv +r3ō2rŏ +rō2ró +2rōs2c +2rōt +rṓ6d5e6ra +rṓ6d5e6rā +rṓd5e6rit +rṓ6d5e6rō +rṓ6d5ĕ6rā +rṓ6d5ĕ6ră +rṓd5ĕ6rĭt +rṓ6d5ĕ6rō +rṓ4d5iē +rṓ4d5ii +rṓ4d5iī +rṓ4d5ĭē +rṓ4d5ĭī +rṓ4d5ĭĭ +rṓ2l +rṓ4lĕ +r3ṓ4ra +r3ṓ4rā +r3ṓ4ră +4rṓrd +rṓ4rer +rṓ4ret +rṓ4rĕr +rṓ4rĕt +r3ṓ4ro +r3ṓ4rō +r3ṓ4rŏ +4rṓsc +rṓ5stĭ +2rṓt +rŏb2ē +rŏb2ĕ +rŏb2ī +rŏb2ŏ +rŏ2bŭ +r1ŏc +r1ŏd +rŏ2dĭ +rŏ2ē +rŏī2n +rŏī4q +rŏī́4n +rŏī́4q +rŏ3ĭ2 +rŏĭ́4 +2r1ŏl +rŏ2lē +rŏ2lĕ +rŏ2lŭ +rŏm2ĕ +r2ŏn +rŏ2pŭ +1r2ŏr +r2ŏs +r2ŏ́ +rŏ́3ĭ +rŏ́4lĕ +rŏ́4lŭ +rŏ́m2 +4rŏ́t +1ró +rób2e +2rócc +ró4d5e4ra +ród5e6rit +ró4d5e4ro +ró4d3ie +ró4d3ii +ró3eo +ró3eō +ró3iī +ró3in +ró4ium +ró4ius +2ról2 +ró2le +ró4li. +ró4lis +ró4liu +ró3m +róm4e +ró1r +2ró2ra +2r3órd +ró4rer +ró4ret +4rórna +4rórno +2ró2ro +2ró3sc +ró3sta +ró3ste +ró3sti +ró3sto +rós3ue +ró4sui +2rót +1rœ +rœ̄3d 2rp +rpe2i +rpe3r +rper4e +rper4ē +rpĕ3ră +rpĕ3rĕ +rpo1 2rq -2r3r -2rs +r3qu +2r1r2 +rra3d4 +r3ră +r3re +rre2o +rre3r +rres3t +rrex2 +rre5xi +r3rē +r3rĕ +rrĕ4s3t +rr4ĕ́ +rrĕ́3q +r3ru +2r1s2 +r3se +rsed4 +rse5di +rse2i +rsēd4 +rsē5di +rsē5dĭ +rsē2i +r3sĕ +r3si +rs4ig +rsĭ3gĕ +r2s3q +r3st +r2s3ue +r2s3uĕ 2rt -2rz -2r. -2r1x -.r2 -1s -2s3s -2sb -2sc +r3ta +rta3g +r3tā +rte3r +rte5re +rtĕ3rĕ +r3ti +r3tī +rtran4 +rtrān4 +rtrāns5 +rua6ste +ruā6ste +ruā6stĕ +2r1uă +2ruæ +2r1uǣ +2ruǽ +ru3b2 +rubī3q +rubī́3 +2ru3d +r1ue +4rue. +r4uera +r4uerā +r4uerá +r4ueri +r4uerī +r4uerí +r4uero +r4uerō +r4ueró +r4ueru +r4uerú +ruete5 +r4uēru +r4uērú +2r3uĕ +ru4gn +r1ui +rui4g3n +r2uim +r4uiss +r4uist +r2uit +r1uī +2ruīs +r4uīv +2r1uĭ +ruí4g3n +r2uíq +r4uíss +r4uíst +r2uít +1r2ul +1r2um +rum2e +ru3m2ī +ruol6uere. +ruol6uerene +ruol6uereq +ruol6uereu +ruol6uēre +ruol6uēru +ruol6uērú +ruol6uḗre +ruol6uḗru +ruol6uit. +ruol6uitn +ruol6uitq +ruol6uitue +2ruŏ +ruól6ui. +ruól6uit. +ruól4uī +rupe3r +ruperi5mus +ruperi5mú +ruperi5ti +ruperi5tí +r1u2r +ru4rs +1rus +ru2sp +2russ +2rust +4rusur +2rusú +ru2tr +ru3tu +r1uu +2ruŭ +ru2xu +rū3d +r1ūn +r1ūr +rū2ra +rū2rā +rū2ră +rū2rá +rū2rē +rū2rī +rū2ro +rū2rō +rū2rŏ +rū2ró +rū2ru +rū2rŭ +rū2rú +rū4sp +rū2ti +rū2tĭ +rū2tí +rū3tu +rū2xu +r4ū́g +rū́4ra +rū́4rā +rū́4ră +rū́4re +rū́4rē +rū́4rĕ +rū́4rī +rū́4ro +rū́4rō +rū́4rŏ +rū́4ru +rū́4rŭ +rŭb2 +rŭ3bī +rŭ2bĭ +2rŭd +1rŭl +r2ŭm +rŭ3mă +rŭm2ĕ +rŭ3m2ī +r3ŭnd +r3ŭng +r1ŭr +3rŭsī +3rŭsĭ +rŭs2p +rŭ4tĕr +2rŭtr +r2ŭ́ +rŭ́3b +r3ŭ́ng +r3ŭ́r +3rŭ́sĭ +rŭ́3sp +1rú +r2úe +rú4gn +r2úi +r2úl +r2úm +2rúnc +2rúng +2rúnx +2r1úr +rú2ra +rú2re +rú2ro +r2úsi +r2úsq +2rúss +2rúst +rú2tr +rú2xu +2rv2 +rva6ste +rvā6ste +rvā6stĕ +r3ve +rvete5 +r3vĕ +rvi4g3n +rví4g3n +2r2x +1sa +2saa +sab4a +sab3ea +sab3eā +sab3eá +sab3eo +sab3eō +sab3eó +sab3iī +sab3i4n +sab3i4q +sabi4te +sabi4to +sabi4tó +sabi4u +sabi4v +sa2bī4 +sabī́4 +sab3í4n +sab3í4q +sabí4t +sab3í4u +sab3í4v +sab2o +s1ac +sa2ci +2s1a2d3 +sa3do +s2ae +sa2i +sali4g5 +salí4g3 +s3alp +sa2l3u +s2am +sa3ma +3s2an +s2a3q +s2ar +sa3re +s2as +sa4tro +sa4tró +sa4tru +sa4trú +s4aue +s3aus +s4a͞e +s4á͞ +s4a͡e +s4á͡ +1sā +sā5bun +2s1āc +sā2i +2s3ā́c +sā́4tr +1să +2săă +2s1ăb +săb2ă +să2bĕ +să2bī4 +săbī́4 +să2b3ĭ +s1ăc +să2cĭ +2s1ă2d3 +să3g +s3ălp +să3rĕ +sắb3ĕ +sắb3ĭ +s3ắd +1sá +sá4b3ea +sáb3eā +sá4b3eo +sáb3eō +sá4bi. +2sá2bī +2s1ác +2s1á2d1 +s2áe +sá2lu +s2ám +s2án +s2ár +s3átr +sá4tri +sá4tro +sá4tru +s2áu +1s2æ +sæ2a +sæ2ă +sæ2á +sæ2i +sæ2ŭ +1sǣ +sǣ2a +sǣ2ă +sǣ2ŭ +1s2ǽ +2sb2 +s3bi +sbī3u +sbī3v +s3bu +s3bŭ +2scam +2scas +2scā +2scám +2scás +1s2cæ +1s2cǣ +2sce. +2sceb +2scem +s6ce6naria. +s6ce6narian +s6ce6nariaq +s6ce6nariau +s6ce6nariav +s6ce6narium +s6ce6nariúm +s6ce6naría +s6ce6nária. +s6ce6nárium +s6cendamus +s6cendamú +s6cendant +s6cendat +s6cendámus +s6cendánt +s6cendát +s6cendeb +s6cendem +s6cender +s6cendes +s6cendet +s4cendē +s4cendé +s6cendim +5s6cendiss +5s6cendist +s6cendit +s6cendím +5s6cendíss +5s6cendíst +s6cendít +s6cendun +s6cendún +s4c5enna +s4c5enná +6scens. +6scensn +6scensq +6s7censue +6scensv +2sceq +2scer +2sces +2scet +2sceu +2scev +2scēb +2scēm +s6cē6nāria. +s6cē6nārian +s6cē6nāriaq +s6cē6nāriau +s6cē6nāriav +s6cē6nārium +s6cē6nāriúm +s6cē6nārĭă. +s6cē6nārĭăn +s6cē6nārĭăq +s6cē6nārĭău +s6cē6nārĭăv +s6cē6nārĭŭm +s6cē6nārĭŭ́m +s6cē6nārĭ́ă +s6cē6nāría +s6cē6nā́ria. +s6cē6nā́rium +s6cē6nā́rĭă. +s6cē6nā́rĭŭm +2scēs +2scēt +2scĕ. +2scĕq +2scĕr +2scĕt +2s3cĕu +2s3cĕv +2scéb +2scém +s6céndant +s6céndar +s6céndat +s6céndens +s6céndent +s6cénder +s6céndes +s6céndet +s4céndē +s6céndim +s6céndit +s6céndor +s6céndun +2scér +2scés +2scét +2s3ch +3s4cho +3s4chŏ +3s2cia +3s2ciā +s2ciá +3s2ciǣ +3scid +5s6ciderā +5s6ciderī +5s6ciderō +5s4cidē +s7cidis. +s7cidisn +s7cidisq +5scidissē +5scidistī +s7cidisu +s7cidisv +5s4cidī +5scidíssē +5scidístī +3s2cie +3s2ciē +s2cié +3s2cii +3s2ciī +s2cií +3scind +3s2cio +3s2ciō +s2ció +s2cir +4scisa +4scisá +4scisæ +4scisǽ +4scise +4scisé +4scisi +4scisí +4sciso +4scisó +4scisu +4scisú +s4citæ +s4citǽ +s2ciu +s2ciú +s2civ +2scīd +s2cīm +s2cīr +s2cīt +s2cīu +s2cīv +3s2cĭā +3s2cĭă +3s2cĭǣ +3s2cĭd +3s2cĭē +3s2cĭĕ +3s2cĭī +3s2cĭĭ +3scĭnd +3s2cĭō +3s2cĭŏ +4s5cĭs. +4s5cĭsn +4s5cĭsq +4s5cĭsu +4s5cĭsv +3s2cĭŭ +3s4cĭ́d +5scĭ́nd +s2cía +3scíd +5s6cíderā +5s6cíderī +5s6cíderō +s2cíe +s2cíi +s4címu +3scínd +s2cír +4scísa +4scísæ +4scíse +4scísi +4scíso +s4cíta +s4cítæ +s4cíti +s4cíto +s4cíui +s4cívi +2s3c2o +sco3p +2scō +2sc2ŏ +scŏ3p +2s3có +2s3cœ +3s4crib +3scrip +s5cris +3scrīb +3scrīp +s3crīs +5scrī́b +5scrī́p +s5crī́s +s2crí +3scríb +3scríp +s3crís +2scun +s2cū +2scún 2sd -2sf -2sg -s2l -2sm -2sn -s2r -2sp -2sq -2st -3s2th -3s2ph -3s2ch -2s2t3l -2s3tn -2st3p -2s2t3q -2s2t3s -2s2t3t -2s. +sde3d +sde2s +sdē2s +sdĕ3d +s3do +sd4or +1se +se3b +3sec +se3d2 +sed4i3m +se4d3i4t +se5dit. +se5ditn +se5ditq +se5d4itu +se5ditv +sedí4t +se4d5íti +sed4o +sed4u +se2e +s1eg +se2gi +se2gí +se2gn +se2iā +se2ie +se2ié +se4in +se4iq +se4ir +se4iv +se3íp +3sem +semi5as +semi5ás +se4m5iss +se4m5íss +se4mul +s2en +3sep +s2e3q +s2e1r +ser2a +ser2æ3 +ser2ǣ +se3rē +ser4i +seri5c +se3rī +se3rō +ser2u +3ses +ses3q +2se2un +se2ur +s1eú +s2ev +se2xe +se2xé +se2xi +se3x4ie +se3x4iē +1sē +sēdĕ4c3 +sēdi2 +sē4d3it +sē5dit. +sē5ditn +sē5ditq +sē5ditu +sē5ditv +sēdĭ2 +sē4d3ĭt +sē5dĭt. +sē5dĭtn +sē5dĭtq +sē5dĭtu +sē5dĭtv +sēdĭ́4 +sē6d5ĭ́tĭ +sēdí2 +sē4d5íti +2s1ē2g +sē2ie +sē2iē +sē4ir +s2ēm +sēmi5ās +sēmi5ā́s +sē4m5is. +sē4m5isn +sē4m5isq +sēm5iss +sē6m5isue +sē4m5isv +sēmĭ5ās +sēmĭ5ā́s +sē4m5ĭs. +sē4m5ĭsn +sē4m5ĭsq +sēm5ĭss +sē4m5ĭsu +sē4m5ĭsv +sē6m5ĭ́sn +sē6m5ĭ́sq +sēm5ĭ́ss +sē6m5ĭ́su +sē6m5ĭ́sv +sē4m5ísn +sē4m5ísq +sēm5íss +sē4m5ísu +sē4m5ísv +sē2mū +sē3ne +sēs4cō +sēs3q +sēs3t +2s3ḗ2g +sḗmi3 +sḗ4m5is +sḗmĭ3 +sḗ4m5ĭs +1sĕ +sĕ2ă +sĕ3d +sĕd4ĭ3 +sĕp4tĕ́ +sĕ3r2a +sĕ3ră +sĕ3r2æ +sĕ3r2ǣ +sĕ3rē +sĕ3r4ĕ +sĕ3rī +sĕ3rō +sĕ3rŏ +sĕ3rū +sĕ3rŭ +sĕ2s +2sĕŭ +sĕ2x3ĕ +sĕx2ĭ +sĕ́3ră +sĕ́x4ĭ +1s2é +s1é2g +sé4ir +3sém +sémi3 +sé3q +3sés +sé3x4ie +séx4iē +sg2 +s3ga +s3gæ3 +s3gǣ +1si +s2i2a +2si2ba +2si2bá +2si2be +2si2bé +si3bi +si4bis +si4bit +si4bís +si4bít +2si2bo +2si2bó +si4bun +si4bún +s1ie +3sie. +s1iē +3siē. +2siĕ +2siéc +2s3i2ga +2s3i2gā +2s3i2gá +2s3i2gē +2s3igé +2s3i2gi +2s3i2gī +2s3i2gí +si4g3n +2s3i2go +2s3i2gō +2s3i2gó +2s3i2gu +2s3i2gú +s3iít +3s2il +si5lum +si5lus +3sim +si3mus +s2in +sin2ā +sino3p +si2o +sio2s +2s1ir +si2re +si2ré +si2rí +si4s3t +sis5ta +sis5tā +sis5ti +s1iu +3s2ium +2siun +2s3iur +s2ius +s2i3uu +2s3iū +2siŭ +2s3iún +1sī +2s1ī2b +s3ī2mi +s3ī2mĭ +2s1īr +sī2re +sī2rē +sī2rĕ +sī2ré +sī2rī +sī2rí +sī4st +s3ī́2b +sī́4mi +sī́4mĭ +sī́4mur +sī́4mŭr +s3ī́r +sī́4re +sī́4rē +sī́4rĕ +sī́4rī +sī́4tur +sī́4tŭr +1sĭ +3sĭa +3sĭā +3sĭă +3sĭæ +3sĭǣ +s2ĭb +3sĭē. +3s4ĭĕ. +s4ĭĕn +s4ĭĕq +s4ĭĕu +s4ĭĕv +sĭ2g +2s3ĭgā +2s3ĭgă +2s3ĭgē +2s3ĭgī +2s3ĭgĭ +2s3ĭgō +2s3ĭgŏ +2s3ĭgŭ +3sĭī +2s1ĭĭ +s2ĭn +sĭn2a +sĭn2ā +sĭn2æ +sĭs3 +sĭ4st +sĭs5tā +sĭs5tă +sĭs5tĭ +sĭ4́g +4s3ĭ́4gĭ +2s3ĭ́ĭ +s2ĭ́n +sĭ́s3 +1sí +2sí2ba +2sí2be +sí3bi +sí4bis +sí4bit +2sí2bo +sí4bun +2s3í2gi +síg3n +s2íl +sí4mur +sí2nu +2s1ír +sí2re +sí4s3t +2sj +s1m2 +2s3me +2s3mé +2s1n2 +s3ne +s3nĕ +snŭ́3 +1s2o +so3b2 +so4l3ue +sol3ué +so4l3ui +so4l3uī +so4l3uí +3so1n +so3ni +son2u +3so3p +sos2p +1sō +sō4lue +sō2s3p +sṓ4s +1s2ŏ +sŏ3b2 +sŏl4lĕ +3sŏn +sŏs2 +1s2ó +2sód +sól2l +só2s +sp2 +3sparg +3spars +3spărg +3spărs +5spắrg +5spắrs +3spárg +3spárs +spár4ui +4spe. +s2pec +4s3pem +4spen +4speq +spe3r4a +speras7c +sper4ā +spe3r4æ +spe3r4ǣ +sper4ǽ +spe5rem +spe5req +spe5rer +spe5r4es +spe3r4ē +sper4é +s4perg +speri4b +sper5i4m +speri4r +spe5r4it +spe4r5ī4m +spe4rī4r +sperī́6m +sperī́6r +spe4r5í4m +spe4rí4r +3s4pern +spe3r4o +spe3rō +sper4ó +s4pers +spe3rū +2spes +4speu +4spev +s2pex +4spĕ. +s2pĕc +4s3pĕm +4spĕn +4spĕq +spĕ3r4a +spĕ3r4æ +spĕ3r4ǣ +spĕ3rē +spĕ4rĕā +spĕ4rĕă +spĕ4r5ĕō +spĕ5rĕq +s4pĕrg +spĕ4r5ī4m +spĕ4r5ī4r +spĕrī́6m +spĕrī́6r +spĕ4r5ĭĕ +3s4pĕrn +spĕ3rō +spĕ3rŏ +s4pĕrs +spĕ3rū +spĕ3rŭ +2spĕs +4spĕu +4spĕv +s4pĕ́c +4spĕ́n +s6pĕ́rnē +s6pĕ́rnō +s6pĕ́rnŭ +s4pĕ́rs +4spĕ́s +s4pĕ́x +4s3pém +2spén +spé4r5ea +spé4r5eā +spé4r5eo +spé4r5eō +spé4ri. +s4pérno +s4pérs +4spés +s2péx +s2phæ +s2phǣ +s2phǽ +4sphen +4sphén +s2phr +s3pi. +4spia +s3pib +s3pin +s3pio +s3piō +s3pió +s3piq +s2pir +2spit +s3piu +s3piú +s3piv +s2pī +4spĭă +s3pĭb +2spĭt +s3pĭŭ +4spĭ́t +s2píc +s3pín +s3píq +2spít +s3píu +s3pív +2spn +s2pod +3s2pol +3spond +2s3pos +2spōs +1spŏ +s2pŏd +s2pŏl +2spŏr +2spŏs +s4pŏ́l +4spŏ́s +s2pód +3s2pól +2s3pós +2spub +s2pue +s2puē +s2pué +s2pui +s2puī +s2puí +s3pus +s2pŭē +s2pŭĕ +s2pŭī +s2pŭĭ +s3pŭm +s3pŭs +2spúb +s2púe +s2púi +s3pús +s2qua +s2quā +2s3que +2squĕ +s3qui +s1r2 +2s1s2 +s3sa +s3sā +s3să +s3sá +s3sæ +s3sǣ +s3sǽ +s3se +ssed4 +sse5di +s3sē +ssēd4 +ssē5di +ssē5dĭ +ss4ēm +s3sĕ +s3sé +ssér4ui +ssér4uī +s3si +ssi3l4 +s3sī +s3sí +ssíl2 +s3su +ssupe5rí 2st. -.s2m +4s5taté +s5tatib +4s5tātē +4s5tāté +s5tātib +s5tātĭb +st2ă +s2tág +st4án +s5tátib +ste2ī +4stemí +ste3r4a +ste3rǣ +ste5re +ste5ré +4sterg +ste3r4i +ster6i5c +steri5ue +steri5v +ste5rī +sterī5u +sterī5v +5s4terne +5sternē +5sterné +5s4terno +5s4ternō +5s4ternó +5s4ternu +5s4ternú +ste3ro +ste3rō +4sterr +4sters +3s4tete +3steté +5s4teti. +5stetim +5s4tetin +5s4tetiq +5stetit +5s4tetiu +5s4tetiv +5s4tetín +5s4tetíq +5stetít +5s4tetíu +5s4tetív +4stēmí +3s4tēte +3stētē +3s4tētĕ +3stēté +5stētim +5stētit +3stētī +5stētĭm +5stētĭt +5stētít +5s4tḗte +5stḗtĕ +5stḗtim +5stḗtit +5stḗtī +5stḗtĭm +5stḗtĭt +stĕ2ī +stĕ3r4a +stĕ3rǣ +stĕ3rĕ +4stĕrg +stĕ5rī +stĕrī5u +stĕrī5v +stĕ5r4ĭ +stĕrĭ5c +5stĕrnē +5s4tĕrnĕ +5s4tĕrnĭ +5s4tĕrnō +5stĕrnŏ +5s4tĕrnŭ +4stĕrr +4stĕrs +stĕ3rŭ +3s2tĕs +6stĕ́nta +6stĕ́ntā +6stĕ́ntă +6stĕ́ntæ +6stĕ́ntǣ +6stĕ́ntĕ +6stĕ́ntī +6stĕ́ntō +6stĕ́ntū +4stĕ́rg +5s6tĕ́rnē +5s6tĕ́rnĭ +5s6tĕ́rnō +5stĕ́rnŏ +5s6tĕ́rnŭ +4stĕ́rr +4stĕ́rs +4stérg +stéri5t +5s4térnē +5s4térni +5s4térno +5s4térnō +5s4térnu +4stérr +4stérs +3s4téte +5stéti. +5stétim +5stétit +s2t1h +2s3tia +2s3tiā +2s3tiá +s2tib +sti4bi. +sti4bī +4s3tibu +4s3tibú +2stic +2s3tim +3s4timu +3s4tinā +3s4tinc +3s4ting +3s4tinō +3s4tinx +2s3tio +2s3tiō +2s3tió +s2tip +3s2tir +s3tis +s2tit +3stitǣ +3stitū +2s3tiu +2s3tiú +3s4tīnc +3s4tīnx +s4tī́nc +2s3tĭā +s3tĭă +stĭ4bī +4s3tĭbŭ +2stĭc +2s3tĭm +3stĭnā +4stĭnāx +3s4tĭnă +4stĭnē. +4stĭnēn +3s4tĭng +3s4tĭnō +3s4tĭnŏ +2s3tĭō +s2tĭp +3stĭr +2s3tĭs +s2tĭt +3stĭta +5stĭtā. +5stĭtān +3stĭtă +3stĭtá +3stĭtæ +3stĭtǣ +3stĭtǽ +5stĭtĕm +5stĭtĕt +5stĭtīs +5stĭtŭm +2s3tĭŭ +4s3tĭ́m +5stĭ́mŭ +5s4tĭ́ng +3s4tĭ́r +4s3tĭ́s +s3tía +2stíc +2s3tím +3s4tínc +3s4tíng +3s4tínx +s2típ +s3tís +s2tl +2stn +2stoc +2stor +2s3tot +2stōr +s3tōt +st4ṓ +4stṓr +2stŏc +4stŏ́c +2stóc +4stóre +4stóri +2s3tót +2stq +4strac +4strah +stra3p4 +4strax +4stra͞ +4stra͡ +4strāx +4strā́x +4s5tră. +4s5trăm +s5trănĕ +4s5trăq +4s5trău +4s5trăv +s5trắm +4strác +4stráh +4stráx +s3træ +s3trǣ +s3trǽ +s3tri. +5strict +3strig +s5trine +s3triq +4s3tris +s3triu +s3triú +s3triv +4striz +s3trī. +s3trīq +4s3trīs +s3trīu +s3trīv +5strĭct +3s4trĭē +3s4trĭĕ +3strĭg +3strĭn +4strĭz +5strĭ́ct +5strĭ́gĭ +5strĭ́gŭ +5strĭ́n +5stríct +5strígi +5strígu +5stríng +5strínx +s3tríq +4s3trís +s3tríu +s3trív +4stríz +2stro +3s4trom +3strop +2strō +3s4trōm +5strṓm +2stró +3stróm +4strud +4strus +4strūd +4strūs +4strū́d +4strū́s +s5trŭm +s5trŭ́m +4strúd +4strús +2strȳ +2strý +s4tue. +s4tuĕ +2stul +3s2tup +s3tur +2stū +4stŭl +3s2tŭp +3s4tŭ́p +2stúl +2stún +s2túp +2stúq +2s3túr +2stúu +2stúv +2stv +1s2ty +1stȳ +1s2tý +s1u +1su. +3s2uam +3s2uan +3s2uar +3s2uas +3s2uat +1s2uā +1s2uá +1s2u2b1 +su5ber. +sube4ra +su5bera. +su5berane +su5beraq +su5berau +su5berav +sube4rá +su5beren +su5beri. +su5berib +su5beriq +sube6ris +su5beriu +su5beriv +su5beríq +sube6rís +su5beríu +su5berív +su5bern +sube4ro +sube4ró +su5berq +su5berue +su5berv +sub3es +sub3ē +subḗ4 +su5bérib +su5bérn +su5bérq +su5béru +su5bérv +sub3és +subi4 +sub3is +sub3it +subí4 +sub3ís +sub3ō +1su3d +2sue. +3s2ueb +3s2uem +3s2uen +3s2ueq +3s4uera +3s4uerā +3s4uerá +3s4uere +3s4uerē +3s4ueré +3s4ueri +3s4uerī +3s4uerí +3s4uero +3s4uerō +3s4ueró +3s4ueru +3s4uerú +3s2ues +3s2uet +3s2ueu +3suev +1s2uē +2suēx +4suḗx +3s2uĕn +3s2uĕq +3s2uĕu +3suĕv +1sué +s2uéb +2suéc +2suéh +s2uém +s2uén +4suérb +s4uére +s4uéri +4suérs +4suért +s4uéru +s2ués +s2uét +s2uéu +2suéx +1sug +1s2ui +s3uir +s2uī. +3s2uīn +3s2uīq +3s2uīu +3suīv +1s2uí +1s2ul +2sulm +1s2um +su3ma +sum2e +su3mun +1s2un +3s2uo. +3s2uon +3s2uoq +3s4uor. +3s4uorn +3s4uorq +3s4uoru +3s4uorv +3s2uou +3s2uov +1s2uō +3s2uón +3s2uóq +3s4uórn +3s4uórq +3s4uóru +3s4uórv +3s2uóu +3s2uóv +3sup +supere6ri +supe6re6rí +supe6res +supe4rē +supe6rés +supe6ri. +super5im +supe6riq +super5it +superī́6 +supe4rí4 +super5ím +super5ít +supé6r5es +1suq +1s2ur +1sus +su3spi +su3spí +1s2ut +1s2uu +1s2uŭ +1s2uú +1s2uv +1sū +sūbe3 +sū3d +2sūri +2sūrĭ +2sūrí +sū2su +sū3sum +1sŭ +sŭ2b1 +sŭb3ē +sŭbḗ4 +sŭbī4 +sŭbī́4 +sŭbĭ2 +sŭbĭ́4 +sŭb3ō +2sŭlm +sŭpĕ4rē +sŭ5pĕ́ +sŭs4pĭ +sŭ́b3 +sŭ́bĭ4 +sŭ́5bĭă +sŭ́5bĭīs +sŭ́5bĭō +sŭ́5bĭŭ +sŭ́3sp +1s2ú +sú2b1 +sú5ber. +sú5bera. +súbe6ran +súbe6ras +súbe6rat +sú5bere +sú5beri. +súbe6ris +súbe4ro +súb3es +súbi2 +súb3is +súb3it +sú3lui +sú3luī +súm2i +sú1r +sú3sp +2sv +s3ve +s3vĕ +1sy +sy2lu +1sȳ +1sý 1t -2tb +t2a +tab2 +ta4c3ue +tad2 +2ta2g +ta4g3n +ta3go +ta2i +ta3ma +ta3q +tasce4 +tascé4 +ta3s2p +tas5te +ta2s3u +5tatem +5tates +3tatém +3tatés +t2ā +tā5bun +2tāg +5tātem +5tātĕm +5tātĕ́ +5tā́tē +tăd2 +2tă2g +tă4gĭ +tă3gŏ +tămĕ4n +t2ăn +tă3rĕ +t2ăs +tă3s2p +tăs3pĕ +tăs3pĭ +tăs3t +tăs5tĕ +tăs4trŏ +tá4c3ue +tá2ge +tá2s3u +5tátem +5tátes +t2æ +t2ǣ +tǽ2cu 2tc -2td +t2e +te1a +te2a͞ +te2a͡ +te4gn +te3go +te3gō +te3gr +te3iss +te3it +te2iu +te1ī +te3íp +te3íss +te3í2t +te4nim +te4nt +te5ra. +te3rab +te5rami +ter3ap +te5raq +te5rara +te5rará +te5rarem +te5raren +te5rarer +te5rares. +te5raresn +te5raresq +te5raresu +te5raresv +te5raret +te5rarém +te5rarén +te5rarér +te5rarésn +te5rarésq +te5rarésu +te5rarésv +te5rarét +te5rari +te5raro +te5raró +te5raru +te5rarú +te3ras +te3rat +te5rau +te5rav +ter3a͞ +ter3a͡ +ter5ā́c +te3r4æq +te3r4ǣq +te4r3ea +te4r3eā +te4r3eá +te6r5e6mi. +te6r5emine +te6r5e6miq +te6r5e6miu +te6r5e6miv +te4r5e4mí +te4r5e4mo +te4r5e4mō +te4r5e4mó +te4r3eo +te4r3eō +te4r3eó +te4r3eq +te4re4ra +te4re4rā +te4re4rá +te6r5erim +te6r5erit +te6r5e6rít +te4re4ro +te4re4rō +te4re4ró +te6r5erun +te4re4rú +ter5est +te4rēmē +te4r5ē4mī +te4rēmí +te3rēu +te3rēv +te6r5ḗ6mī +te4r5é4me +te6r5é6mi. +te6r5é6mit +te4r3éq +te6r5é6rim +te6r5é6rit +ter5ést +ter5ibo +ter5ibun +ter5ibún +ter5ice +te3rid +ter5iēn +ter5ime +ter5imē +ter5imé +ter4imi +ter5imo +ter5imō +ter5imó +ter4imu +ter4imú +ter4ine +teri5ni +ter4iq +teri4r +ter4is. +ter4isn +ter4isq +te4r5iss +te4r5ist +ter4isu +ter4isv +ter4it. +ter5i6ta. +ter5i6tae +ter5i6tam +ter5i6tan +ter5i6taq +ter5i6tar +ter5i6tau +ter5i6tav +ter5i6ta͞ +ter5ita͡ +ter5i6tā. +ter5i6tān +ter5i6tāq +ter5i6tār +ter5i6tāu +ter5i6tāv +ter5i6táe +ter5i6tám +ter5i6tán +ter5i6táq +ter5i6tár +ter5i6táu +ter5i6táv +ter5itæ +ter5i4tǣ +ter5itǽ +ter4ite +ter5i6ti. +ter5i6tin +ter5itio +ter5itiō +ter5itió +ter5i6tiq +ter6itis +ter5i6tiu +ter5i6tiv +ter5i4tī +ter5i6tín +ter5i6tíq +ter6itís +ter5i6tíu +ter5i6tív +ter4itn +ter6ito. +ter6iton +ter6itoq +ter6itor. +ter6itorn +ter6itorq +ter6itorue +ter5itorum +ter5i6torú +ter6itorv +ter5i6tos +ter6itot +ter6itou +ter6itov +ter6itō. +ter6itōn +ter6itōq +ter5i6tōr +ter5i6tōs +ter6itōu +ter6itōv +ter6itṓn +ter6itṓq +ter5i6tṓr +ter5i6tṓs +ter6itṓu +ter6itṓv +ter6itón +ter6itóq +ter6itórn +ter6itórq +ter6itórue +ter5itórum +ter6itórv +ter5i6tós +ter6itót +ter6itóu +ter6itóv +ter4itq +teri4tu +ter5itu. +ter5itum +ter5itun +ter5ituq +ter5itur +ter6itur. +ter6iturn +ter6iturq +ter6iturue +ter6iturv +ter5itus +ter5ituu +ter5ituv +ter5i4tū +ter5i6túm +ter5i6tún +ter5i6túq +ter5i6túra +ter5itúræ +ter5i6túre +ter5i6túri +ter6itúrn +ter5i6túro +ter6itúrq +ter6itúrue +ter5itúrum +ter5itúrus +ter6itúrv +ter5i6tús +ter5i6túu +ter5i6túv +ter4itv +teri4u +ter5iue +ter3i4v +te4r5ī4mi +te3r4īn +ter6īne +ter4īq +ter6īqu +te4rī4r +te4r5ī4te +te4r5ī4to +te4r5ī4tō +te4r5ī4tó +te4r5ī4tu +te4r5ī4tú +te4r3ī4u +ter6īue. +te4r3ī4v +ter6īve. +terī́6mi +ter6ī́n +ter6ī́q +te4rī́4r +terī́6te +terī́6to +terī́6tō +terī́6tu +ter6ī́ue. +terī́6ui +terī́6uī +ter6ī́ve. +terī́6vi +terī́6vī +te4r5íme +te6r5í6mur +te4rí4r +te4r5íss +te4r5íst +te4r5í4ta +te6r5í6te. +ter5ítio +te4r5í4to +te6r5ítur +ter6íue. +ter5í6uer +te4rí4ui +ter6íve. +ter5í6ver +te4rí4vi +te4rn +4ternām +4ternē +4terné +4ternim +4terním +4ternít +te3rop +te5rorn +4terot +4terōt +te3rōu +te3rōv +te4róni +4terót +te4rq +te4rr +te4rt +ter3uē +ter3uí +ter3ū2 +te4rv +te2sq +2t3ess +4test. +te5s4ta. +te5stabam. +te5stabamn +te5stabamq +te5stabamue +te5stabamus +te5stabamús +te5stabamv +te5stabant. +te5stabantn +te5stabantq +te5stabantue +te5stabantv +te5stabas +te5stabat. +te5stabati +te5stabatí +te5stabatn +te5stabatq +te5stabatue +te5stabatv +te5stabámn +te5stabámq +te5stabámue +te5stabámus +te5stabámv +te5stabántn +te5stabántq +te5stabántue +te5stabántv +te5stabás +te5stabáti +te5stabátn +te5stabátq +te5stabátue +te5stabátv +te5stabimus +te5stabimús +te5stabis +te5stabit. +te5stabiti +te5stabití +te5stabitn +te5stabitq +te5stabitue +te5stabitv +te5stabís +te5stabít +te5stabo. +te5stabon +te5staboq +te5stabou +te5stabov +te5stabón +te5stabóq +te5stabóu +te5stabóv +te5stabunt. +te5stabuntn +te5stabuntq +te5stabuntue +te5stabuntv +te5stabúntn +te5stabúntq +te5stabúntue +te5stabúntv +te5stamus +te5stamús +te5stane +te5stant. +te5stantn +te5stanto. +te5stanton +te5stantoq +te5stantou +te5stantov +te5stantō +te5stantón +te5stantóq +te5stantóu +te5stantóv +te5stantq +te5stantue +te5stantv +te5s4taq +te5starem. +te5staremn +te5staremq +te5staremue +te5staremus +te5staremús +te5staremv +te5starent. +te5starentn +te5starentq +te5starentue +te5starentv +te5stares +te5staret. +te5stareti +te5staretí +te5staretn +te5staretq +te5staretue +te5staretv +te5starémn +te5starémq +te5starémue +te5starémus +te5starémv +te5staréntn +te5staréntq +te5staréntue +te5staréntv +te5starés +te5staréti +te5starétn +te5starétq +te5starétue +te5starétv +te5stat. +te5statn +te5statot +te5statót +te5statq +te5statue +te5statv +te5s4tau +te5s4tav +te5s4tā. +te5stābam +te5stābant. +te5stābantn +te5stābantq +te5stābantue +te5stābantv +te5stābat +te5stābāmus +te5stābāmús +te5stābās +te5stābāti +te5stābātí +te5stābā́mus +te5stābā́s +te5stābā́ti +te5stābám +te5stābántn +te5stābántq +te5stābántue +te5stābántv +te5stābát +te5stābimus +te5stābimús +te5stābis +te5stābit. +te5stābiti +te5stābití +te5stābitn +te5stābitq +te5stābitue +te5stābitv +te5stābís +te5stābít +te5stābō +te5stābunt. +te5stābuntn +te5stābuntq +te5stābuntue +te5stābuntv +te5stābúntn +te5stābúntq +te5stābúntue +te5stābúntv +te5stāmus +te5stāmús +te5stāne +te5s4tāq +te5stārem +te5stārent. +te5stārentn +te5stārentq +te5stārentue +te5stārentv +te5stāret +te5stārēmus +te5stārēmús +te5stārēs +te5stārēti +te5stārētí +te5stārḗmus +te5stārḗs +te5stārḗti +te5stārém +te5stāréntn +te5stāréntq +te5stāréntue +te5stāréntv +te5stārét +te5stātōt +te5stātṓt +te5s4tāu +te5s4tāv +te5stā́bam +te5stā́ban +te5stā́bat +te5stā́bā +te5stā́bimus +te5stā́bis +te5stā́bit. +te5stā́biti +te5stā́bō +te5stā́bu +te5stā́mus +te5stā́ne +te5stā́q +te5stā́rem +te5stā́rent +te5stā́ret +te5stā́rē +te5stā́u +te5stā́v +te5stábam +te5stában +te5stábas +te5stábat +te5stábimus +te5stábis +te5stábit. +te5stábiti +te5stábo. +te5stábu +te5stámus +te5stáne +te5stántn +te5stánto. +te5stántō +te5stántq +te5stántue +te5stántv +te5s4táq +te5stárem +te5stárent +te5stáres +te5stáret +te5státn +te5státq +te5státue +te5státv +te5s4táu +te5s4táv +te5stemus +te5stemús +te5stent. +te5stentn +te5stentq +te5stentue +te5stentv +te6ster +te5stet. +te5steti +te5stetí +te5stetn +te5stetq +te5stetue +te5stetv +te5stēmus +te5stēmús +tes4tēt +te5stēti +te5stētí +te5stḗmus +te5stḗti +te5stémus +te5sténtn +te5sténtq +te5sténtue +te5sténtv +te5stéti +te5stétn +te5stétq +te5stétue +te5stétv +tes3ti +4testn +4t3estō +4testq +4t3estu +4testv +te2su +tete5r +2teté +4tetim +4tetit +4tetít +te2un +te3x4e +tex2i +tex2ī +tex2o +tex2ó +tex2u +tex2ú +t2ē +tē2ie +tē2iē +tē3ne +tēte3 +2tētē +2tēté +4tētim +4tētit +2tētī +4tētĭm +4tētĭt +4tētít +4tḗtī +t2ĕ +3tĕa +3tĕă +3tĕæ +3tĕǣ +3tĕē +3tĕĕ +tĕ3gō +tĕ3gr +3tĕ1ī +tĕ3ĭ +3tĕl +t3ĕ2nĭ +3tĕō +3tĕ1ŏ +tĕ3q +t4ĕr. +tĕr5ā́c +tĕ5ră. +tĕ3răr +tĕr5ắp +tĕ3r4æq +tĕ3r4ǣq +tĕ4rēmē +tĕ4r5ē4mī +tĕ6rēmĭ́ +tĕ3rēu +tĕ3rēv +tĕ6r5ḗ6mī +t4ĕrĕ +tĕ4r3ĕā +tĕ4r3ĕă +tĕ3rĕn +tĕ4r3ĕō +tĕ4r3ĕŏ +tĕ4r5ĕ4rā +tĕ4r5ĕ4ră +tĕ4rĕ4rĭ +tĕr5ĕrĭm +tĕr5ĕrĭt +tĕr5ĕrĭ́t +tĕ4r5ĕ4rō +tĕ6r5ĕ́6rĭ +t4ĕrī +tĕ3rī. +tĕ3rīn +tĕ3rīq +tĕ4r3ī4r +tĕ3rīs +tĕ4r3ī4u +tĕ4r3ī4v +tĕrī́4r +tĕr3ĭē +tĕ4r3ĭĕ +tĕ4r5ĭ4mē +tĕ4r5ĭ4mō +tĕ4r5ĭ4ta +tĕr5ĭ6tā. +tĕr5ĭ6tān +tĕr5ĭ6tāq +tĕr5ĭ6tār +tĕr5ĭ6tāu +tĕr5ĭ6tāv +tĕ4r5ĭ4tă +tĕ4r5ĭ4tá +tĕ4r5ĭ4tæ +tĕ4r5ĭ4tǣ +tĕ4r5ĭ4tǽ +tĕ4r5ĭ4tī +tĕ6r5ĭ6tĭō +tĕ6r5ĭ6tōr +tĕ6r5ĭ6tōs +tĕ6r5ĭ6tṓr +tĕ6r5ĭ6tṓs +tĕ4r5ĭ4tū +tĕ6r5ĭ6tŭm +tĕ6r5ĭ6tŭs +tĕ6r5ĭ6tŭ́m +tĕ6r5ĭ6tŭ́s +tĕr5ĭ́ĕr +tĕ6r5ĭ́mĕ +tĕ6r5ĭ́6tă +tĕ6r5ĭ́tĭ +t4ĕrn +4tĕrnām +4tĕrnăr +4tĕrnăt +4tĕrnē +4tĕrnŏ +4tĕrōt +t4ĕ3rŏ +t4ĕrq +t4ĕru +tĕr3ū2 +tĕ3rŭs +t4ĕrv +2t3ĕss +4t3ĕst. +tĕ5stā. +tĕ5stābāmŭs +tĕ5stābāmŭ́s +tĕ5stābās +tĕ5stābātĭ +tĕ5stābā́mŭs +tĕ5stābā́s +tĕ5stābā́tĭ +tĕ5stābăm +tĕ5stābănt. +tĕ5stābăntn +tĕ5stābăntq +tĕ5stābăntu +tĕ5stābăntv +tĕ5stābăt +tĕ5stābắm +tĕ5stābắntn +tĕ5stābắntq +tĕ5stābắntu +tĕ5stābắntv +tĕ5stābắt +tĕ5stābĭmŭs +tĕ5stābĭmŭ́s +tĕ5stābĭs +tĕ5stābĭt. +tĕ5stābĭtĭ +tĕ5stābĭtn +tĕ5stābĭtq +tĕ5stābĭtu +tĕ5stābĭtv +tĕ5stābĭ́s +tĕ5stābĭ́t +tĕ5stābō +tĕ5stābŭnt. +tĕ5stābŭntn +tĕ5stābŭntq +tĕ5stābŭntu +tĕ5stābŭntv +tĕ5stābŭ́ntn +tĕ5stābŭ́ntq +tĕ5stābŭ́ntu +tĕ5stābŭ́ntv +tĕ5stāmŭs +tĕ5stāmŭ́s +tĕ5stānĕ +tĕ5stāq +tĕ5stārēmŭs +tĕ5stārēmŭ́s +tĕ5stārēs +tĕ5stārētĭ +tĕ5stārḗmŭs +tĕ5stārḗs +tĕ5stārḗtĭ +tĕ5stārĕm +tĕ5stārĕnt. +tĕ5stārĕntn +tĕ5stārĕntq +tĕ5stārĕntu +tĕ5stārĕntv +tĕ5stārĕt +tĕ5stārĕ́m +tĕ5stārĕ́ntn +tĕ5stārĕ́ntq +tĕ5stārĕ́ntu +tĕ5stārĕ́ntv +tĕ5stārĕ́t +tĕ5stātōt +tĕ5stātṓt +tĕ5stāu +tĕ5stāv +tĕ5stā́bā +tĕ5stā́băm +tĕ5stā́băn +tĕ5stā́băt +tĕ5stā́bĭmŭs +tĕ5stā́bĭs +tĕ5stā́bĭt. +tĕ5stā́bĭtĭ +tĕ5stā́bō +tĕ5stā́bŭ +tĕ5stā́mŭs +tĕ5stā́nĕ +tĕ5stā́q +tĕ5stā́rē +tĕ5stā́rĕm +tĕ5stā́rĕnt +tĕ5stā́rĕt +tĕ5stā́u +tĕ5stā́v +tĕ5stănt. +tĕ5stăntn +tĕ5stăntō +tĕ5stăntq +tĕ5stăntu +tĕ5stăntv +tĕ5stăt +tĕ5stắntn +tĕ5stắntō +tĕ5stắntq +tĕ5stắntu +tĕ5stắntv +tĕ5stắt +tĕ5stēmŭs +tĕ5stēmŭ́s +tĕ5stētĭ +tĕ5stḗmŭs +tĕ5stḗtĭ +tĕ5stĕnt. +tĕ5stĕntn +tĕ5stĕntq +tĕ5stĕntu +tĕ5stĕntv +tĕ6stĕr +tĕ5stĕt +tĕ5stĕ́ntn +tĕ5stĕ́ntq +tĕ5stĕ́ntu +tĕ5stĕ́ntv +tĕ5stĕ́t +4t3ĕstn +4t3ĕstō +4t3ĕstq +4t3ĕstu +4t3ĕstv +2tĕtr +3tĕŭ +tĕx2ă +tĕx2ĕ +tĕx2ī +tĕx2ĭ +tĕx2ŏ +tĕx2ŭ +tĕ́3ĭ +tĕ́5răr +tĕ́4r5ĕā +tĕ́4r5ĕă +tĕ́4r5ĕō +tĕ́4r5ĕŏ +tĕ́6r5ĕ6rā +tĕ́6r5ĕ6ră +tĕ́6r5ĕ6rĭt +tĕ́6r5ĕ6rō +tĕ́6r5ĭēn +tĕ́6r5ĭ6ta +tĕ́r5ĭ6tā. +tĕ́6r5ĭ6tă +tĕ́6r5ĭ6tæ +tĕ́6r5ĭ6tǣ +tĕ́6r5ĭ6tī +tĕ́6r5ĭ6tōs +tĕ́6r5ĭ6tū +tĕ́6r5ĭ6tŭm +tĕ́6r5ĭ6tŭs +6tĕ́rnăr +6tĕ́rnăt +6tĕ́rnĕr +6tĕ́rnĕt +4tĕ́rnŏ +5tĕ́stā +tĕ́5stā. +tĕ́5s4tă +tĕ́5stĕnt +tĕ́5stĕt +tĕ́x4ĭ +té4gn +té3iī +té4r3ea +té4r3eā +té4r3eo +té4r3eō +té4r5era +té4r5e4rā +té6r5erit +té4r5e4ro +té4r5erō +tér5ien +tér5iēn +té4r5im. +téri4ta +tér5ita. +tér5itae +tér5itam +tér5ita͞ +tér5ita͡ +tér5i6tā. +té4r5i4tæ +té4r5i4tǣ +té6r5i6ti. +té4r5i4tī +té6r5i6tos +té6r5i6tōs +té6r5i6tu. +té6r5i6tum +té6r5i6tus +té4r5i4tū +té2rī +4térnar +4térnat +4térner +4térnes +4térnet +té2ru +2t3éss +5tésta +té5s4ta. +té5stant +té5s4tat +5téstā +té5s4tā. +té5stent +té5s4tet +4téti. +4tétim +4tétit +téx2i +téx2u 2tf 2tg -t2h2 +2th. +3t2he +the2i +3t2hē +thē2i +3t2hĕ +3t2hé +3thī +3thĭă +3thĭī +3thĭō +3thĭŭ +3thl +2thm +2thn +3tho +tho3sp +3thō +thŏ3sp +3thó +2thp +3thr +3thu +3thú +t2i +tiad2 +3tiae +3tia͞ +3tia͡ +ti2á +ti4ám +3tiæ +3tiǣ +3tiǽ +ti3b +tibe3 +t3ibi. +t3ibī +3tic +tic4e +ti5cen +4tiche +ti4c3ue +ti4d3ea +ti4d3eā +ti4d3eo +ti4d3eō +2tigi +2till +3tilo +3tiló +ti3m2 +ti4mn +ti4mq +ti4mv +tin2ā +5tināx +tin2u +ti2o +ti3q +ti2s +ti3s2p +ti4sper +ti3sta +ti3stā +ti3s4te +ti3s4tē +ti3s4té +ti3s4to +ti3s4tō +ti3s4tó +ti3s4tr +ti3t2 +ti4tn +ti4tq +ti4tv +ti3uu +2tīgi +2tīgĭ +2tīp +tī3q +tī́3q +t2ĭ +3tĭa +3tĭá +3tĭæ +3tĭǣ +3tĭǽ +2t3ĭbī +4tĭchĕ +3tĭcŭ +tĭ4d3ĕā +tĭ4d3ĕō +2tĭll +3tĭlŏ +tĭn2ā +tĭ2ŏ +2tĭr +tĭ3rĭ +tĭ3s2p +tĭ4spĕr +tĭ3stā +tĭs4tām +tĭs4tār +tĭ3stă +tĭs4tăt +tĭ3s4tē +tĭ3s4tĕ +tĭ3s4tō +tĭ3s4tŏ +tĭ3s4tr +3tĭt. +3tĭ́cŭ +tĭ́4d5ĕā +tĭ́4d5ĕō +4tĭ́mŭ +tĭ́3sp +tĭ́5s6tăt +tĭ́5s4tē +tĭ́5s4tĕ +tĭ́5stĭt +tĭ́5s4tō +tĭ́5s4tŏ +tĭ́5str +4tĭ́tă +4tĭ́tŭ +tí3b +3tíc +4tíche +tí4c3ue +tí4d3ea +tí4d3eā +tí4d3eo +tí4d3eō +4tígie +3tílo +tí1m +4tímul +tín4uī +tí3q +2tírp +tí2s +tí3sp +tís4tat +tí3s4te +tí3s4tē +tí3s4to +tí3s4tō +tí3s4tr +tís3u +4títer +4títib +4títim +4títua +4títuā +4títuē +4títui +4tí3tuī +4títuo +4títuō +tí3tur +4títuu t2l -t2r -2tm -2tn +t3li +t3lī +t3lĭ +t3lí +2t1m2 +tme1 +tmĭ2 +2t1n +t3ne +t2o +to3b2 +to4cue +to2ia +to2iá +to2iæ +to2iǽ +to2ie +to2ié +to2ii +to2ií +to2í +2tola +tom2 +ton3g4 +tongæ3 +tongǣ́5 +tongǽ3 +to3ni +to5ni5c +tons3t +ton2u +2t3o2pe +to3rī +tos3t +t2ō +tō3d +tō2ia +tō2iā +tō2iá +tō2iæ +tō2iǣ +tō2iǽ +tō2ie +tō2iē +tō2iī +tō2iō +tō2ĭ +2tōl +2tṓl +t2ŏ +tŏb2 +tŏm2 +tŏn3g4 +tŏngæ3 +tŏngǣ́5 +tŏngǽ3 +2t3ŏpĕ +tŏ3rĕ +tŏ3rī +tŏ́3rĭ +tó2cu +2tólo +tó2pe 2tp +tpo3 +tpó1 2tq -2tt -2t. -.t2 -x1 -2x. -.x2 -1x2a -1x2e -1x2i -1x2it. -1x2o -1x2y -xy3s2t -1xu2a -1xu2e -1xu2i -1xu2o -1xu2u -1x2u. -1x2um. -1x2us. -y3c2n +t3qu +t2r2 +trab2 +tra3d4 +tradi5ce +tradi5cé +tradi5ci +tradi5cí +trado3 +tra3e4t +tra3g +tra3i4 +3tral +tra5ma +tra5má +4trang +4tratē +trā3ĭ +tră3bŭ +trăd2 +tră3g +4trăng +tră3s2 +3trăt +4trătē +4trắng +trắ5st +trá3i +3trál +4tráng +trá3p2 +trá2s3 +træ2ă +trǣ2ă +3tre. +tre2i +tre5mi +tre5mo +2trep +3treq +3treu +3trev +trē2i +trē3m +trĕ2ĭ +2trĕp +4trĕ́p +2trép +3tria +3trib +tri5ci +4trict +4trida +4tridá +4tride +4tri5do +4tridó +2trig +3trige +3trigé +3trii +3triī +3trií +2tr4in +tri3ni +3trio +3triō +3trió +3trit +2trīd +2trīg +4trīnx +tr4ī́ +4trī́d +4trī́g +4trī́nx +3trĭă +3trĭb +4trĭct +4trĭgĭ +4trĭgŭ +2tr4ĭn +3trĭs +3trĭt +3trĭŭ +4trĭ́ct +4trĭ́gĭ +4trĭ́gŭ +4trĭ́n +3tría +4tríct +4trída +4trído +4trídu +4trígi +4trígu +4tríng +4trínx +trí5tur +tro3e +4troph +trō4iē +4trṓm +4trŏph +trŏ2s +tró3ea +tró3eā +2tróm +4tróph +4truct +3trud +3trus +2trux +4trūct +3trūd +3trūs +2trūx +3trū́d +3trū́s +4trū́x +2trŭĭ +2trŭŏ +2trúc +3trúd +2trúi +3trús +2trúx +2t1s2 +2tt2 +tte2i +tte5re +ttē2i +ttĕ3r +3tua +3tuā +3tuá +tu2cu +tu2d3u +2t1ue +t2uea +t2ueā +t2ueá +t2ueb +3t2uem +3t2uen +tu3enn +t2ueo +t2ueó +3t2ueq +t2uer +3tuer. +3tuere +3tueri +3tuerí +3tuern +3tuerq +3tueru +3tuerv +3t2ues +3t2uet +3t2ueu +3tuev +3tuē +2t1uĕ +3tué +tu3énn +2t3uic +3tuīs +3tul +tule4i +tu3ma +tum2e +tu3m2ī +3t2uo +tuo2r +3tuō +3tuó +tupe3r4 +ture5ia. +ture5iaq +ture5iau +ture5iav +ture5ii +ture5ií +ture5io +ture5ió +turé3 +tu2sp +3tut +3tuun +tū2c1 +tū2su +tū3sum +tū3sus +3tŭa +3tŭā +3tŭă +3tŭæ +3tŭǣ +3tŭc +3tŭē +3tŭĕ +3tŭl +tŭ3mă +tŭm2ĕ +tŭ3m2ī +tŭ3mĭ +tŭ3mŏ +3tŭō +3tŭŏ +tŭpĕ3r +tŭ2s +tŭ́3mĭ +tú2cu +tú2du +túm2i +2tv +t3ve +2tȳ +tý3l +uab2 +uab4u +1uac +ua3d2 +uad4o +uae4st +2uaev +u2a3g +ual4u +u2a1m +u2an +ua3p2 +u2a3q +u2ar +u2as +uas3p +uas3t +uas5te +uas5tr +ua4sui +ua4suí +u2au +2uav +ua2x3 +ua͞e4st +ua͡e4st +u2ā +1uād +2uāv +2uā́v +u2ă +uă3d2 +uă3g +uă2m1 +uăs3p +uăs5tr +2uăv +uắs3 +1uác +1uád2 +u2ág +u2ám +u2án +uá3p2 +u2ár +uás3p +uá4sui +u2áu +2uáv +uá2x +2uæd +uæ2dī +uæ2dí +u2æq +uæ2s3t +u2æu +2u2æv +u2ǣq +uǣ2s3t +u2ǣu +2u2ǣv +uǣ́2d +uǣ́3r +2u1ǽ2d +u2ǽq +uǽ2s3t +u2ǽu +u2ǽv +uba3g +uba4i +ub2ă +ubá3g +ube2i +ube4rā +u5bere. +u5bereq +u5bereu +u5berev +ub4eris +ub4erís +ube4rō +u5berum +ubē2r +ubé4ia. +ubé4iae +ubé4iam +ubé4ias +ubé4ia͡ +ubé4iæ +ubé4ii +u3bére +2ubi +ubi2b +ub3ice +ub4ii. +ub4iin +ub4iiq +ub4iiu +ub4iiv +ub4iín +ub4iíq +ub4iíu +ub4iív +u3biō +u3bió +ub2iq +ubi2u +ub4iue. +u3bium +u3biú +ubi2v +ub4ive. +u2bī2 +ub2ī4n +ub2īq +ub4īue. +ub4īve. +ubī́2 +ub4ī́4n +ub4ī́q +ub6ī́ue. +ub6ī́ve. +2ubí +ubí2b +ubí2c +ub2íq +ub3íss +ub3íst +ub4íue. +ub4íve. +u2bl +ubo2 +u2bō +ubŏ3 +u3b2œ +u2b1r +ub3s2 +ub5ste +u3b2ul +u2b1ū +u3búl +2uc +u3ca +u3cá +u3ce +u3cé +u3ci +u3cí +u3c2o +uco2i +uco5n4i5 +ucon4í +u3có +u3cr +u2c3ue +u3cun +u3cú +2ud +ud2ac +u3dam. +u3damq +u3damv +u2d3ap +u3da͡ +ud2ā +u2dăp +u3dámn +u3dámq +u3dámv +u3dæ +u3dǽ +u3de. +u3dene +u3deq +ude2s3 +ude6ste +u3deu +u3dev +udē2s +u3déne +u3déq +u3déu +u3dév +u3d2i +udi4g3 +u4diso +u4disó +u3dí +ud2o +ud4or +u3dorú +u3dos +ud2ŏ +udŏ3p +u3dós +ud2u +u3dú +u2e1 +ue2a +ue3b +ue3d2 +ued4i +ue2e +2uef +ue2ī +ue2í +4uel. +2ueln +2uelq +2uelu +2uelú +2uelv +ue2ma +ue2má +ue4mui +ue4m3uí +ue4n3ea +ue4n3eá +ue4n3eo +ue4n3eó +ue4n3ii +ue4n3ií +ue4n3íi +2uenn +ue2o +ue2ō +uer2æ3 +ue3r4e +ue5rem +uere5me +uere5mé +uer6e5mi +uere5mí +ue3r4ē +ue5rē5m +ue3rī +3uert +ue2s +ue3sá +ues3c +ue3sí +ue4s3p +ues5pe +ue4s3t +ues5tā +ues5te +ues5tr +uete5re +uete5ri +ueteri5u +uete5rī +ueterī5u +ueterī́7 +ue2un +2uev +ue3x2 +uex4e +uē3b +3uēnē +3uēné +3uēni +uē4n3iī +3uēnī +uē4nīs +uē4n3ĭī +3uēní +uē3r +uēs3t +3uēx +uḗ4n5iī +uḗ4n5ĭī +3uḗx +u2ĕ +uĕ2ă +uĕ2ĭ +uĕ2m3ă +uĕ3ră +uĕ3r4ē +uĕ5rē5m +uĕ3r4ĕ +uĕ3rī +uĕ3rŏ +uĕ3rŭ +uĕ2s3 +uĕ4sp +uĕs5pĕ +uĕs5tĕ +2uĕv +uĕ3x2 +uĕ́3ră +uĕ́3rĕ +uĕ́x2 +u2é +1uéc +2uéf +1uéh +ué1i +1uél +ué4n3eo +3uéni +ué4n3ii +2uénn +2uéra +2uéro +3uérs +3uért +ués3 +2uév +1uéx2 +2uf +2ug +u3g2a +u3g2æ3 +u3g2ǣ +u3g2l +u2g3n +u1h +u3hœ +ui2a +u2ic +3uice +ui4c5énn +1uif +uile3i +uilé3i +u2in +uin2ā +ui3oc +ui3o2p +ui3óp +ui3p2t +ui3r4i +ui3r4í +u2is +3uisc +ui3s2i +2uisv +uiu2 +ui3ul +ui3uu +2uiv +u2ī +1uīc +uī4cen +uī4cĕn +uīc5ĕ́n +uī4cén +uī2ni +uī2n3ĭ +uī2ní +uī3p2 +uī3q +uī3so +uī3sŏ +uī3u +2uī3v +uī́3p2 +2uī́v +u2ĭ +uĭ3ăl +uĭn2a +uĭn2ā +uĭn2æ +uĭn2ĕ +uĭnĭ3t +uĭ1ŏ +uĭŏ2p +uĭŏ́2 +uĭ3ŭl +uĭ́3ŏ4 +u2í +1uíc +1uíf +1uíg +uí1m +uí3o2p +uí3p2t +3uísa +3uísæ +3uíse +3uísi +3uíso +uí3tur +2uív +1uíx +2u3læ +2u3lǣ +2u3lǽ +ule4ie +ule6ine +ule6iqu +ule6iue +ule6ive +ulē2i +3ulix +3u2líx +3ulm +ul3ua +ul3uá +ul3uæ +ul3uǽ +u4l3ue. +ul3uīs +ul3uó +u3lus +2um. +2uma +u3ma. +uma2g +u3m2an +u3maq +uma4tr +u3mau +u3mav +u3mā. +u3mān +u3māq +u3mār +u3mās +umā4tr +u3māu +u3māv +2u1mă +2umá +umá2g +u3mán +u3máq +u3már +u3máu +u3máv +u3mæ +u3mǣ +u3mǽ +um3b2 +umb4e +umb4ē +umb4i +um5bit +umb6itu +umbi5tur +umbi5tú +umbí5te +2ume +u3me. +ume3d +ume5de +ume2g +ume2q +u3mev +umē2g +umḗ4g +umé2g +umi2b +umi2c +umi2n3 +uminí4c +umi2r +umi2u +u2m3iū +umi2v +u2m1ī2 +umī́4b +umī́4m +umī́4r +umī́4t +umí2b +umíni4c +umí2r +2umn +2umo +u3mo. +u3mon +u3moq +u3mor +u3mou +u3mov +u3m2ō +2umŏ +2umó +u3món +u3móq +u3mór +u3móu +u3móv +umpe3r +2umq +2umu +u4mue +um3uí +u3mus +u3mús +2umv +un3áni +un3d2 +3undab +3undáb +une3b +une3d +une6ste +un2ē +2un2ĕ +un2é +uné3b +2unī +2unĭ +u3nos +2unō +u3nós +un3s +uns4i +un4sn +un4sq +un4sue +un4sv +2unt +unte5io +unte5ió +unte5iu +unte6iue +unte5iú +untē3i +untḗ5i +unté3i +u1n2u +1u2o +uob2 +uo2du +2uoe +uo3i +uo4in +uo4i3q +uo4iue +uo4iv +uo4lue +uol5uere +uo4lui +uo4luī +uo4luí +uom3p2 +uo3ni +uo4n3ia +uo3p2 +uo3rī +uo2sp +uos3t +uos5te +uo3u +uo1ú +2uo͞ +2uo͡ +u2ō +uō3d +uō3i +uō2sp +uōs3t +uṓ3i +1u2ŏ +uŏ2ĭ +2uŏn3 +uŏ2nĭ +uŏ3rī +uŏ4t5ắn +uŏ2t3ĕ +uŏ3ŭ +uŏ́2n3 +u2ó +uód1 +uó2du +uó1i +uó3io +1uól +uóm3p2 +uó4n3ia +uó3p2 +uó2sp +2uœ +2up +upe5raeq +upe5r6ara +upe5r6ará +upe5r6are +upe5raré +upe5raro +upe5raró +uperas6c +upe5ra͞eq +upe5r6á͞ +upe5ra͡eq +upe5r6á͡ +upe5ræq +upe5rǣq +upe5rǣ́ +uper4ǽ +upe5remn +upere6ra +upere6rā +upere6rá +uper5erim +uper5erit +uper5e6rít +upere6ro +upere6rō +upere6ró +upere6rú +upe6r5é6rim +upe6r5é6rit +upe6résc +uperi4 +upe4r5ie +uper5ié +upe4rī4 +uper5īm +uper5īt +uper5ī́6m +uperī́6r +uper6ī́s +uper5ī́6t +uper6ī́u +uper6ī́v +upe4rí4r +uper5íte +uper5íto +uper4íu +uper4ív +upe5rorn +upe5ros +upe5rōs +upe5rṓs +upĕ3rĕ +upĕ3rī +upĕ3rŭ +u3pé +upé4r5ea +upé4r5eā +upé4r5eo +upé4r5eō +upé4r5e4r +upé4ri. +upé4r5ie +upé4r5iē +upo4s3 +u3pŏ +2uq +u3qu +2ur. +u1r2a +u3ra. +urad2 +u3rae +u3rane +u3raq +u3rarú +u3rau +u3rav +u3ra͡ +2urā +2u3r2ă +u3ráe +u3ráne +u3ráq +u3ráu +u3ráv +2u3ræ +2u1rǣ +2u3rǽ +u1r2e +ure3d +ure2i +ure5iae +ure5iam +ure5iar +ure5ias +ure5ia͡ +ure5iáe +ure5iám +ure5iáq +ure5iár +ure5iás +ure5iáu +ure5iáv +ure3iæ +ure3iǽ +ure5ium +ure3iú +ures3t +2u3rē +urē3ia +urē5iā. +urē5iāq +urē5iār +urē5iās +urē5iāu +urē5iāv +urē5iā́q +urē5iā́r +urē5iā́s +urē5iā́u +urē5iā́v +urē3iu +urē3iú +urḗ3i +2u1rĕ +ur2é +u3réf +u1rh +u1r2i +u3ria +u3riá +u3riæ +u3riǽ +u3rii +u3rií +ur4in +uri3ni +2urio +2urió +2u1rī +2urĭ +ur2í +u3ría +2urío +urí5tur +2urn +2u1r2o +2u1rō +2u1r2ŏ +ur2ó +u3rós +2urq +ur3ua +ur3uā +ur3uá +ur3uē +ur2ui +u3rum +ur3uō +ur3uó +u3rus +2u1rŭ +ur2ú +u3rúm +u3rús +u1ry +u1rý +2us +us2a +usa3b2 +u3s2ă +usă3b2 +usá4tr +u2s3c +use2i +us2i +u2sm +u1sp +us5per +u2spē +us2pĕ +us4pit +us2pĭ +us2pí +us4pít +u2s3q +u2sta +u2stā +u2stă +u2stá +u2stæ +u2stǣ +u2stǽ +u2ste +us5ter +u2stē +u2stĕ +us5tĕr +u2sté +u2sti +u2stī +u2stí +u3s4tom +u2stō +u3s4tŏm +u5s4tŏ́m +u3s4tóm +u2s3tr +us5tro +u2stu +u2stŭ +u2stú +us2ua +4u2sue +u2suĕ +u2sui +u2suí +1ut. +3u4tar. +3u4tarn +3u4tarq +3u4tarv +3u4tárn +3u4tárq +3u4tárv +3u2teb +ute2ī +ute3r4a +ute3rǣ +ute5re +ute3ri +uteri5ue +uteri5v +ute5rī +uterī5u +uterī5v +ute3ro +ute3rō +utĕ1 +utĕr4a +utĕ5rī +utĕrī5u +utĕrī5v +utĕ5r4ĭ +3u2téb +2utia +2utiá +2utiæ +2utiǽ +2utii +2utií +u2til +2utio +u2tíl +3u2trā +3u2træ +3u2trǣ +3u2trǽ +ut4ri +3u2trī +3u2trō +3u2tru +3u2trú +ut2u +ut3ut +u1u +2u3ue +2uuĕ +1u2ul +uul3ui +uul3uī +uul3uí +u2um1 +u2un +u2u1r +u2uu +u2uv +uū2s +1uŭ +1uúl +uúl3u +uú1r +2u3ve +ux2 +u3xe +ux4eu +u3xé +u3xi +uxi3n +u3xí +u2xo3 +u2xō +uxu3 +u2x3ue +ux4us +uy2s +ū1 +ūb2 +ūba2 +ūbā6iāne +ūbā6iāru +ūbā6iārú +ūbā6iæne +ūbā6iæue +ūbā6iæve +ūbā6iǣne +ūbā6iǣue +ūbā6iǣve +ūbā6iǽne +ūbā6iǽue +ūbā6iǽve +ūbá2 +ūbe3ri +ūbe3rō +ūbĕ3rŭ +ūbī3u +ūbī3v +ūbo2 +ūca2r +ūco2 +ū3cr +ū2c3ue +ūd2 +ū3da. +ū3dam +ū3dane +ū3daq +ūda2r +ū3dau +ū3dav +ū3da͞ +ū3da͡ +ū3dă. +ū3dăm +ū3dănĕ +ū3dăq +ū3dău +ū3dăv +ū3dắm +ūdá2 +ū3dám +2ū3dæ +2ū3dǣ +2ū3dǽ +ū3de. +ū3dene +ū3deq +ūde2s3 +ūde6ste +ū3deu +ū3dev +ū3dē. +ū3dēn +ū3dēq +ūdē2s +ū3dēu +ū3dēv +ū3dḗn +ū3dḗq +ū3dḗu +ū3dḗv +ū3dĕ. +ū3dĕnĕ +ū3dĕq +ūdĕ6stĕ +ū3dĕu +ū3dĕv +2ū3dī +ūdo2 +ūd4or +ū3dōr +ū3dōs +ū3dṓr +ū3dṓs +ūdó2 +2ū3du +2ū3dŭ +2ū3dú +ū2ē +2ūg +ū3g2a +ū3g2æ3 +ū3g2ǣ +ū2gn +ū3iú +1ūl +ū2la +ū2lā +ū2lă +ū2lá +ūle3i +ūle2r +ūlé3i +ū2lo2 +ū2lŏ +ū2ló +ū2l3ue +ūm2a +ūma2r +ūmá2 +ūm2e +ūm2ĕ +ūm2i +ūm2ĭ +ūmo2 +ūna2 +ūn2ā +ūnă2 +ūná2 +ūn3áni +ūne3b +ūne6ste +ūn3et +ūnĕ6stĕ +ūn3ĕt +ūn2é +ūné3b +2ūni +2ūnĭ +2ūní +ūno2 +ū3nōr +ū3nōs +2ūns +ūn3s2i +ūn3s4ĭ +ūn2u +ūn2ŭ +ūpe3r2 +ūpĕ3r +ūpĕ5rĭ +2ūq +ūr2a +ūra2r +ūr2ă +2ūræ +ūræ2ă +2ūrǣ +ūrǣ2ă +2ūrǽ +ūr2e +ūres3 +ū3rēu +ū3rēv +ūr2ĕ +ūrĕ2ĭ +ūrĕ2s3 +ūr2é +ū3réf +ūr2i +ūr4in +ūr2ĭ +ūr4ĭn +ūrí2n +ūro2 +ūró2 +ūr2u +ū2sc +ūs2ie +ūs2iē +ūs2iu +ūso2 +ū2sp +ūs5per +ūs5pĕr +ū2s3q +ū2s3t +ūs5ter +ūs5tĕr +ū2sue +ū2suĕ +ūs2uī +ūt2 +ūta2r +ūtá2 +ūte5re +ūtĕ3rĕ +2ū3tia +2ū3tiā +2ū3tiá +2ūtiæ +2ūtiǣ +2ūtiǽ +2ū3tiī +2ūtĭa +2ū3tĭā +2ūtĭá +2ūtĭæ +2ūtĭǣ +2ūtĭǽ +2ū3tĭī +ūtí2n +ūto2 +2ūu +2ūv +ūx2 +ūx4eu +ū2x3ue +ūx4us +ūxū3r +ū2́ +ū́b2 +ū́3cr +ū́d2 +2ū́g +ū́1i +ū́2lā +ū́4lă +ū́4lĕr +ū́4lĕt +ū́2lo +ū́2lŏ +ū́3mu +ū́n3si +2ū́q +ū́rĭ5m +ū́r2u +ū́2sp +ū́s5pe +ū́4st +ū́s5tr +4ū́tia +4ū́3tiā +4ū́tiæ +4ū́tiǣ +4ū́3tiī +ū́4til +4ū́tĭa +4ū́tĭā +4ū́tĭæ +4ū́tĭǣ +4ū́tĭī +ū́4tĭl +2ū́u +2ū́v +ŭă3p2 +ŭắ3p2 +ŭbē2r +ŭbĕ2 +ŭbĕ4r +ŭbĕ́2 +ŭ2bi +ŭ2bī2 +ŭb2īn +ŭb2īq +ŭb4īuĕ. +ŭb4īvĕ. +ŭbī́2 +ŭb4ī́n +ŭb4ī́q +ŭbī́4t +ŭb6ī́uĕ. +ŭb6ī́vĕ. +ŭ3bĭă +ŭbĭ3cŭ +ŭ3bĭīs +ŭ5bĭī́s +ŭ3bĭō +ŭb3ĭt. +ŭ3bĭŭ +ŭ3bĭ́ă +ŭbĭ́4c +ŭbĭ́4g +ŭ2bl +ŭ2bō +ŭ2bŏ2 +ŭ2b1r +ŭbs2 +ŭb5stĕ +ŭ2b1ū +ŭ3b2ŭl +ŭ2cu +ŭdē2s +ŭ2du +ŭ3d2ŭ +ŭd4ŭĕ +ŭĕ2ă +ŭ3ĕnn +ŭĕ3r4ĕ +ŭĕ3rī +ŭĕ3rŭ +ŭ3ĕ́nn +ŭ3g2a +ŭ3g2æ3 +ŭ3g2ǣ +ŭ2gn +ŭ1i +ŭī3p2 +ŭī́3p2 +ŭ2ĭ +ŭĭn2 +2ŭĭs +2ŭla +2ŭlá +2ŭlæ +2ŭlǣ +2ŭlǽ +ŭlē3i +ŭlḗ3i +1ŭlm +ŭ2l1u +ŭm1 +2ŭm. +ŭ3ma +ŭ3mā. +ŭ3mān +ŭ3māq +ŭ3mār +ŭ3mās +ŭmā4tr +ŭ3māu +ŭ3māv +ŭmă2 +ŭ3mă. +ŭ3măn +ŭmắ2 +ŭ3má +ŭ3mæ +ŭ3mǣ +ŭ3mǽ +1ŭm3b +ŭmb4ē +ŭmb4ĭ +ŭm5bĭt +ŭmē2g +ŭm2ēs +ŭm2ḗ +ŭmḗ4g +ŭ3mĕ. +ŭ3mĕn +ŭmĕ2q +ŭ3mĕu +ŭ3mĕv +ŭ2m3i +ŭ2mī2 +ŭmī́4b +ŭmī́4m +ŭmī́4r +ŭmī́4t +ŭ2mĭ2 +ŭmĭn3 +ŭmĭnĭ́4 +ŭm3ĭt +ŭmĭ́4c +ŭmĭ́nĭ6c +ŭmĭ́4t +2ŭmn +ŭ3m2ō +ŭ2mŏ +ŭmpĕ3r +2ŭmq +2ŭmu +ŭ3mŭs +2ŭmv +ŭn3d2 +ŭndĕ3ŭ +ŭn2ē +ŭn2ĕ +ŭnĕ3d +2ŭnt +ŭntḗ5i +ŭŏ2r1 +ŭpĕ5raeq +ŭpĕ5ra͞eq +ŭpĕ5r6á͞ +ŭpĕ5ra͡eq +ŭpĕ5r6á͡ +ŭpĕr5ắs +ŭpĕ5ræq +ŭpĕ5rǣq +ŭpĕ5rǣ́ +ŭpĕrĕ4 +ŭpĕ4rĕā +ŭpĕ4rĕă +ŭpĕ4r5ĕō +ŭpĕ6r5ĕrā +ŭpĕ6r5ĕră +ŭpĕ6r5ĕrĭ +ŭpĕ6r5ĕrō +ŭpĕrĕ́4 +ŭpĕ6r5ĕ́rĭ +ŭpĕ4r3ī4 +ŭpĕr4īs +ŭpĕrī́4 +ŭpĕr6ī́s +ŭpĕ4r3ĭ4 +ŭpĕrĭ́4 +ŭpĕ5rṓs +ŭpĕ́6r5ĕā +ŭpĕ́6r5ĕă +ŭpĕ́6r5ĕō +ŭpĕ́6r5ĕ6r +ŭpĕ́6r5ĭē +ŭr1 +ŭ1r2a +ŭr2ā +ŭ1r2ă +ŭ1r2æ +ŭ1r2ǣ +ŭr2ǽ +ŭ3r2ē +ŭrē3i +ŭrḗ3i +ŭ1r2ĕ +ŭ1r2ī +ŭ3r2ĭ +ŭ1r2ō +ŭ1rŏ +ŭ1rŭ +2ŭs. +ŭ2s3ā2 +ŭsā́2 +ŭ2s3c +ŭ2si +2ŭsn +ŭ1sp +ŭ2spē +2ŭsq +ŭs3t +ŭs5tĕr +ŭs4trĭ +ŭs5trŏ +2ŭsu +2ŭsv +1ŭt. +ŭtĕ2ī +ŭtĕ3rĕ +ŭtĕ5rī +ŭtĕrī5u +ŭtĕrī5v +ŭtĕ3rŭ +ŭ2tĭ. +1ŭ2tr +ŭ2tu +ŭ1u +1ŭ2x2 +ŭ́2 +ŭ́bĕ2 +ŭ́b4ĭī +ŭ́bs2 +ŭ́3bŭ +ŭ́3cĕ +ŭ́3cī +ŭ́3cĭ +ŭ́3cl +ŭ́3dē +ŭ́3dĕ +ŭ́3dĭ +ŭ́3g +ŭ́4gn +ŭ́3i +ŭ́3j +2ŭ́lă +ŭ́3lī +ŭ́3lĭ +ŭ́l3u +ŭ́3lŭī +ŭ́3lŭĭ +ŭ́m3ă4r +ŭ́m3b4 +ŭ́m5bĭ +ŭ́m3ĕā +ŭ́m3ĕă +ŭ́3mĕn +ŭ́m3ĕō +ŭ́m3ĕŏ +ŭ́3mĕq +ŭ́3mĕu +ŭ́3mĕv +ŭ́m3ī +ŭ́m3ĭ4c +ŭ́m3ĭē +ŭ́m3ĭĭ +ŭ́3mĭn +ŭ́m3ĭ4t +2ŭ́mn +2ŭ́mq +2ŭ́mu +ŭ́3mŭ +2ŭ́mv +ŭ́3nē +ŭ́3nĕ +ŭ́3nĭ +ŭ́3pĕ +ŭ́3ră +ŭ́3rĕ +ŭ́3r2ĭ +ŭ́3rŏ +ŭ́3sĭ +2ŭ́sn +ŭ́3spĕ +ŭ́s3t +ŭ́s4trĭ +2ŭ́su +2ŭ́sv +ŭ́3tă +ŭ́3tĕ +3ŭ́4tr +1ŭ́u +ŭ́3uā +ŭ́3uă +ŭ́3uē +ŭ́3uĕ +ŭ́3uō +ŭ́3uŏ +1ŭ́v +ŭ́3vā +ŭ́3vă +ŭ́3vē +ŭ́3vĕ +ŭ́3vō +ŭ́3vŏ +úbe4ram +úbe4rā +úb4eris +ú5berum +úb4ii. +ú3b4iis +ú3biō +ú3b2iu +úbi5ui +úbi5vi +ú2bī +úb2o +úb3s2 +úb5ste +ú3b2u +2úc +ú2c3ue +úd2i +úd3ue +úe1 +úe2a +úe2o +2úg +ú3g2a +ú3gæ +ú3gǣ +ú2g3n +ú1iæ +ú1ii +ú2in +ú2la. +ú2lat +ú2let +ú2lu +úl3ua +úl3uæ +úl3ue +úl3uis +úl3uīs +ú3lum +úm1 +ú1ma +úma2g +ú3m2an +ú3maq +úma2r +ú3mau +ú3mav +úm3b2 +úmb4e +úmb4ē +úmb4i +úm5bi5t +úmb6itu +úm2e +ú2m3eā +ú2m3eō +úmi2c +úm2im +úm2in +úm2iu +ú2m3ī +2úmn +ú1mo +2úmq +2úmu +ú3mun +2úmv +5úndans +3úndān +2úni +ún3s4i +2únt +ú1n2u +úpe1 +úpe3r +2úq +úr1 +ú1r2a +2ú1ræ +ú1r2e +ú1r2i +2úrn +ú1r2o +2úrq +ú3r2ui +úru3m +ú2run +ú2s3c +ús2i +2úsn +ús3q +ús3t +2úsu +ú2sui +2úsv +ú2tar +úte3r +2ú3tia +2útiæ +2ú3tii +ú2til +ú1u +2úue +ú2um +ú2un +2úve +2úx +úx2a +úx4eu +úx2i +úx2o +ú2xue +úx4us +1v +vab2 +va3d2 +vad4o +va3g +val4u +vas3p +vas5te +v2ă +vă3d2 +vă3g +văs3 +vắs3 +v3áed +vás3p +2væ2d +vǣ2d +vǣ́2d +2v1ǽ2d +vb2 +vbi2 +ve1 +ve2a +ve2ia +ve2iá +ve4iene +ve2ii +ve2ií +ve4io. +ve4ioq +ve4ior +ve6ioue. +ve6iove. +ve4ión +ve4ióq +ve4iór +ve6ióue. +ve6ióve. +ve2iu +ve2iú +ve2ī +ve2í +ve2lu +ve4n3ea +ve4n3eá +ve4n3eo +ve4n3eó +ve4n3ii +ve4n3ií +ve4n3íi +2venn +ve2o +ve2ō +ver2æ3 +ve3rē +ve2s +ve3sá +ve3sí +ve4s3p +ves5pe +ve4s3t +ves5te +ves5tr +vete5re +vete5ri +veteri5v +vete5rī +veterī5v +veterī́7 +ve2u +vex2 +vex4e +vē4iae. +vē6iaene +vē6iaeque +vē6iaeue +vē6iaeve +vē4iam +vē4ian +vē6ia͞e. +vē6ia͞ene +vē6ia͞eque +vē6ia͞eue +vē6ia͞eve +vē6iá͞ene +vē6iá͞eque +vē6iá͞eue +vē6iá͞eve +vē6ia͡e. +vē6ia͡ene +vē6ia͡eque +vē6ia͡eue +vē6ia͡eve +vē6iá͡ene +vē6iá͡eque +vē6iá͡eue +vē6iá͡eve +vē4iā. +vē4iāne +vē6iāque +vē4iāru +vē4iārú +vē4iās. +vē6iāsne +vē6iāsque +vē6iāsue +vē6iāsve +vē4iāue +vē4iāve +vē6iā́ne +vē6iā́que +vē6iā́ru +vē6iā́sne +vē6iā́sque +vē6iā́sue +vē6iā́sve +vē6iā́ue +vē6iā́ve +vē6iáene +vē6iáeque +vē6iáeue +vē6iáeve +vē4iám +vē4iæ. +vē4iæne +vē6iæque +vē4iæue +vē4iæve +vē4iǣ. +vē4iǣne +vē6iǣque +vē4iǣue +vē4iǣve +vē6iǣ́ne +vē6iǣ́que +vē6iǣ́ue +vē6iǣ́ve +vē4iǽne +vē6iǽque +vē4iǽue +vē4iǽve +vē4iene +vē4iī. +vē4iīne +vē6iīque +vē4iīs. +vē6iīsne +vē6iīsque +vē6iīsue +vē6iīsve +vē4iīue +vē4iīve +vē6iī́ne +vē6iī́que +vē6iī́sne +vē6iī́sque +vē6iī́sue +vē6iī́sve +vē6iī́ue +vē6iī́ve +vē4iō. +vē4iōne +vē6iōque +vē4iōru +vē4iōrú +vē4iōs. +vē6iōsne +vē6iōsque +vē6iōsue +vē6iōsve +vē4iōue +vē4iōve +vē6iṓne +vē6iṓque +vē6iṓru +vē6iṓsne +vē6iṓsque +vē6iṓsue +vē6iṓsve +vē6iṓue +vē6iṓve +vē2iu +vē2iú +vē4n3iī +vē4nīs +vē4n3ĭī +vē3r +vḗ4n5iī +vḗ4n5ĭī +v2ĕ +vĕ2ă +vĕ3rē +vĕ3r4ĕ +vĕ2s3 +vĕ4sp +vĕs5pĕ +vĕs5tĕ +vĕ3x2 +vĕ́3rĕ +vĕ́x2 +vé2lu +vé4n3eo +vé4n3ii +2vénn +vés3 +véx2 +v2i +vi2a +vi4c5énn +vid4u +vin2ā +vi3r4i +v2ī +vī4cen +vī4cĕn +vīc5ĕ́n +vī4cén +vī3so +vī3sŏ +v2ĭ +vĭn2a +vĭn2ā +vĭn2æ +ví3d +ví3tu +2vj +2voe +vo3l4u +vo1n +vo3rī +vos3t +vos5te +2vo͞ +2vo͡ +vōs3t +vŏ3rī +vó3l2u +vó3ru +2vœ +vr2a +vri2 +v̄2 +v̆2 +v̆́2 +v̆́4t +v́2 +1x1 +xab2 +xae2 +x2aeq +xaes3 +x2aeu +x2aev +x2ag +2xal +xam4b3i4 +xambī4 +xambī́4 +xam4b3í4 +x2ami +x2an +x2aq +x2are +x2aru +xas3 +x2āg +x2ān +x2āri +x2āru +x3ā́c +3xă. +3xăm +xămbī4 +xămbī́4 +xăm4b3ĭ +3x2ăn +3x2ăq +3x2ăr +xăs3 +3x2ăt +3x2ău +3x2ăv +3xắ +x2ắn +x2ắr +x2á +x3ác +x3áes3 +2x3ál +x3ámb +xám4b3i +x3árs +xás3 +x3áud +xæ2 +x2æ3q +xæs3 +x2æ3u +x2æ3v +xǣ2 +x2ǣ3q +xǣs3 +x2ǣ3u +x2ǣ3v +x2ǣ́q +xǣ́s3 +x2ǣ́u +x2ǣ́v +x2ǽq +xǽ2s3 +x2ǽu +x2ǽv +2xc2 +xcí3 +x2e1 +xe2a +xe2e +x3e4ger +x3e4gér +x3e2gi +x3e2gí +xe2i +xe2ī +xe2í +x3emp +x3enn +xe2o +xe2ō +xe4qui +xe4quī +x3erc +xe2s +x3e2u +3x4eue +x2ē +x3ē2ge +x3ē4gēr +x5ē4gḗr +x3ē2gĕ +x3ē2gé +x3ē2gi +x3ē2gī +x3ē2gĭ +x3ē2gí +x3ḗ2g +xĕ2ă +x3ĕăr +x3ĕăt +2x2ĕd +x3ĕnn +2x3ĕŏ +x3ĕ4quī +xĕ4quĭ +x2ĕrā +x2ĕră +xĕ3r4ĕ +x2ĕrĭ +x2ĕrō +x2ĕt +x3ĕŭn +x2ĕ́d +xĕ́2q +x2é +x3é2g +x3émp +x3énn +xé4qui +x3érc +2xh +x2ia +x2iā +x2iæ +x2iǣ +xi2ba +xi2bá +xi2be +xi2bé +xi2bi +xi2bí +xi2bo +xi2bó +xi4bun +xi4bún +x2ic +2xie +3x2ies +3x2iēs +2xi2g +xi2i +x2im +xi2n +xin3ā +xinā́4 +xi3ni +xi3nī +xi3ní +xi3nu +xi4nue +xi3nú +x2io +x2iō +x2iq +2xi2r +x2iss +xi2tæ +xi2tǣ +xi2tǽ +xi2tī +xi2tū +xi4uer +xi4uér +2xi2ui +xi2uí +x2i3uu +2x3iŭ +xi4ver +xi4vér +2xi2vi +xi2ví +2xī2b +2xī2m +x2īn +xīō2 +x2īq +2xī2r +2xī2t +xī2ué +xī2ui +xī2uĭ +xī2uí +xī2vé +xī2vi +xī2vĭ +xī2ví +xī́2b +xī́2m +xī́2r +xī́4t +xī́4ui +xī́4uĭ +xī́4vi +xī́4vĭ +x2ĭb +x2ĭc +x2ĭēs +2xĭ2g +2xĭĭ +x2ĭm +xĭ2n +xĭn3ā +xĭnā́4 +xĭn2ĕ +xĭ3nī +xĭ3nŭ +xĭ2ta +xĭ4tā. +xĭ2tă +xĭ2tá +xĭ2tæ +xĭ2tǣ +xĭ2tǽ +x2ĭtĕ +xĭ2tī +x2ĭtĭ +xĭ4tōs +xĭ2tū +xĭ4tŭm +xĭ4tŭs +xĭ́2g +x2ĭ́m +xĭ́4tă +x2í +2x3í2b +2x3í2g +x3íi +2x3í2mu +2x3í2r +x3í2ta +x3í4te. +2x3í2ti +2x3í2to +x3ítur +x3í4uer +x3í4uim +x3í4uit +x3í4ver +x3í4vim +x3í4vit +2xj +x2l2 +2xn +x3ne +x3nĕ +xo2 +3xo. +x2o3d +3xon +3xoq +xorí3t +xo4rn +xo4rq +xo3ru +xo4rv +3xos +xo4sa +xo4sn +xo4so +xo4sq +xo4su +xo4sv +x2o3t +3xo3u +3xo3v +3xō. +3x2ōn +3xōq +3xō2s +xō4sa +x2ō3t +3xōu +3xōv +xṓ4rat +xṓ4rān +xṓ4răt +xṓ4rer +xṓ4ret +xṓ4rĕr +xṓ4rĕt +x3ṓ4ro +x3ṓ4rŏ +x3ṓrs +xṓ4s +x3ṓsa +x3ṓsā +x3ṓsă +x3ṓsæ +x3ṓsǣ +x3ṓsc +x3ṓse +x3ṓsē +x3ṓsĕ +x3ṓsī +x3ṓsō +x5ṓsum +x5ṓsus +x3ṓsŭ +xŏ2 +2x2ŏ3d +xŏ́2n +xó4ner +xó4rat +xó4rer +xó4ret +xó4riē +xó4ror +xó2s +xó4sa +x2ót +2xp +x3pé +2xq +x3qu +2xs2 +x3sp +xs4pe +xsu4lu +xsupe3 +2xt +x3ta +x3tā +x3tă +x3tá +x3tæ +x3tǣ +x3tǽ +x3te1 +xter4a +xte5re +xte5ré +xteri5ue +xteri5v +xte5rī +xterī5u +xterī5v +x3tĕ +xtĕ3r4a +xtĕ3rǣ +xtĕ3rĕ +xtĕ5rī +xtĕrī5u +xtĕrī5v +xtĕ3rŭ +xtéri5t +x3ti1 +x3tī +x3tĭ +x3tí +x3to +x3tō +x3tó +x3tr +x3tu +x3tū +x3tŭ +x3tú +xu2 +3xu. +2x3ue. +x3uev +2x3uĕ +x2ui. +x2uis +x2uī +x2uís +3x2um +xum2e +xum2ī +xu4mn +xu4mq +xu4mv +x2une +xu1r +xu3ro +3x3us +x4us. +x4u4sn +x4u4sq +x4u4su +x4u4sv +x2uum +x2uúm +xū2b +xūbe3 +x2ūne +x2ūnĕ +xū2re +xū2rē +xū2rĕ +xū2ré +xū2ri +xū2rĭ +xū2rí +xū2ro +xū2rŏ +xū2ró +x2ū2s +xū2t +xū́2b +xū́4rē +xū́4ri +xū́4rĭ +xū́4ro +xū́4rŏ +x2ū́s +xū́2t +xŭ2 +2xŭā +2xŭă +x2ŭī +2xŭl +x2ŭm +xŭ3mā +xŭ3mă +xŭ3mē +xŭ3m2ĕ +xŭ3m2ī +xŭ3mŭ +2xŭō +2xŭŏ +x2ŭŭm +xŭ́4l +x2ŭ4́m +xú2b +xú2l +x2úm +x2úne +xú1r +x2úsq +xú2t +xú2ui +xú2vi +2xv +x3ve +x3vĕ +x2x2 +y2a +yad2 +ya1m +ya2nu +yā2nu +yá2nu +yb2 +ybe2 +ybē2 +ybé2 +ybé4i +yd2 +yda3m +yde2s +ydē2 +ye2 +yes3 +yē2 +yé2 +yés3 +y2g3n +y2i +yi2i +yin2 +yio2s +yis3 +yi4sc +yis5ci +yl3ui +yl3uí +y1m +ym2a +ym2e +yme3d +yme5de +y1n +yn2ā +yne2 +yn2i +yo3ne +yo3ni +yó1 +yper4í +y1r +yr2a +y3rá +yr4ás +ys2i +ysta4 +yste3 +y1su +yte3r +yteri5ue +yteri5v +yte5rī +yterī5u +yterī5v +yx4eu +y2xu +ȳ1 +ȳ2a +ȳad2 +ȳ2ă +ȳăd2 +ȳ2á +ȳ2i +ȳ2ĭ +ȳ2í +ȳló2 +ȳmo3 +ȳn2 +ȳne2 +ȳ3rē +ȳré2 +ȳro2 +ȳró2 +ȳs2 +ȳso2 +ȳsó2 +ȳ2́ +ȳ́3l +ȳ́1n +ý2a1 +ýb2 +ýd2 +ýda3 +ý2g3n +ý2i +ý2l1u +ý1m +ým2e +ý1nu +ý1r +ýs2i +ýste3 +ýte1 +ý2th +ýx4eu +ý2xu 1z -2z. -.z2 -a2m3ui -a2n1u2a -a2n1u2e -a2n1u2i -a2n1u2o -a2n1u2u -e2n1u2a -e2n1u2e -e2n1u2i -e2n1u2o -e2n1u2u -ge3n2ua -i2n1u2a -i2n1u2e -i2n1u2i -i2n1u2o -i2n1u2u -ti3n2ui -o2n1u2a -o2n1u2e -o2n1u2i -o2n1u2o -o2n1u2u -u2n1u2a -u2n1u2e -u2n1u2i -u2n1u2o -u2n1u2u -a2r1u2a -a2r1u2e -a2r1u2i -a2r1u2o -a2r1u2u -e2r1u2a -e2r1u2e -e2r1u2i -e2r1u2o -e2r1u2u -i2r1u2a -i2r1u2e -i2r1u2i -i2r1u2o -i2r1u2u -o2r1u2a -o2r1u2e -o2r1u2i -o2r1u2o -o2r1u2u -u2r1u2a -u2r1u2e -u2r1u2i -u2r1u2o -u2r1u2u -.a2b1auu -.a2b1ali -.a2b1ic -.a2b1iec -.a2b1in1 -.a2b1iu -.a2b1ol -.ab2s -.ab3si2 -.ab3so -.ab3s2te -.ab3su2 -.a2b1es2 -.a2b1er2 -.a2bfu -.a2b3ru -.ab5s2cin -.a2d1 -.adsu2 -.a2d1es2 -.ad3si2 -.a2d1er2 -.a2dfu -.ad3s2t -.a3g2nas -.a3s2c -.a3s2p -.a3s2t -.ape3r2u -.ci2s3 -.co1e -.co1i -.co1i2e -.coi3u -.co2e1n -.co3e2lec -.co3e2lig -.co3emen -.co3e2r -.co3e2x3 -.coex3s2 -.co3g2no -.co2n1 -.con3ic -.co3n2if -.co3n2ig -.co3n2it -.co3n2i3ue -.coni2a -.coni2e -.coni2i -.coni2u -.con3s2cr -.con3s2p2 -.con3s2t -.de3s2c -.de3s2p -.de3s2q -.de3s2t -.di3g2nosc -.di2s1i2 -.di3s2ce -.di4s3cep3t -.di3s2p -.di3s2qua -.di3s2cr -.di3s2t -.di4s3ten1d -.di4s3ti4nc -.i2dci -.i3di2og -.i2n1 -.in3s2p -.in3s2t -.i3n2an -.ina2b3r -.inab3s2 -.i3n2it -.ina2cr -.ina2df -.i3n2ers -.i3n2ert -.ine2x3 -.inexs2t -.ino2b -.inob3s2c -.ino3b2oe -.inpe2r3iur -.i3n2ul -.i4n3ulc -.inu2a -.inu2e -.inu2i -.inu2o -.inu2u -.iu2s3i2ur -.o2b1 -.o3b2ed -.o3b2el -.o3b2es -.o3b2ic -.obi2a -.obi2e -.ob3i2u -.ob3s2cu -.ob3l -.ob3r -.o3b4ruz -.ob3s2c -.ob3s2t -.ob3tr -.obu2a -.obu2e -.obu2i -.obu2o -.pe2r1absu -.pe2r1ac -.pe2r1a2d1u -.pe2r1a2dp -.pe2r1ae -.pe2r3ag -.pe2r3err -.pe2r3or -.pe2r3u -.pe2r1ar -.pe2r1a2u -.pe2r1ed -.pe2r1eff -.pe2r1egr -.pe2r1el -.pe2r1em -.pe3r2enn -.pe2r1eru -.pe2r1e2x3 -.pe2r3h -.pe2r1i2ac -.pe2r1i2ec -.peri3p2s -.peri3p2t -.peri3s2c -.peri3s2t -.pe2r1o2b3s2c -.pe2r1od -.pe2r1of -.pe2r1ol -.pe2r1op -.perse2u -.perse2i -.perse2o -.pe2r3s2c -.pe2r3s2p -.pe2r3s2t -.pe2r3tran2s1 -.pe2r1u2a -.pe2r1u2e -.pe2r1u2i -.pe2r1u2o -.prae1 -.praea2u -.prae3s2c -.prae3s2p -.prae3s2t -.praeu2a -.praeu2e -.praeu2i -.praeu2o -.praete2r1 -.praeteru2e -.praeteru2o -.primi1 -.primi3s2c -.pro2d1es3s -.pro2d1ig -.pro1de1amb -.pro2d1eo -.pro2d3is -.pro2d1it -.pro2d1im -.pro2d1eun -.pro2d1ir -.pro2d1ib -.pro2d1ier -.pro2d1ea -.pro3d2ito -.pro3d2iti -.pro3d2itr -.pro3g2n -.pro3in -.pro3s2c -.pro3s2p -.pro3s2t -.quo2t1an -.quo2t1en -.quo2t1i2e -.quo2t3li -.re2d1ac -.re2d1ad -.re2d1am -.re2d1an -.re2d1ar -.re2d1a2u -.re2d1em -.re2d1eo -.re2d5is -.re2d5it -.re4d3imi -.re2d1eu -.re2d1ier -.re2d1ib -.re2d1ien -.re3d2ic -.re3d2ig -.re3d2im -.re2d1in -.re2d1ol -.re2d1op -.re3d2orm -.re2d1orn -.re2d1ul -.re2d1ord -.re2d1arg -.re2d1amb -.ree2x -.re1ie -.re1in -.repa2u -.re3s2cr -.re3s2p -.re3s2tag -.re3s2ta2u -.re3s2tib -.re3s2tic -.re3s2til -.re3s2tip -.re3s2tr -.sati2s1 -.sa2t1ag -.ses2c1u4n -.si2c1u4t2 -.si3s2ten -.su2b1ic -.su2b1ingr -.su2b1odo -.su2b3s2t -.supe2r1ab -.supe2r1ad -.supe2r1ad3s2t -.supe2r1ae -.supe2r1ag -.supe2r1am -.supe2r1arg -.supe2r1a3s2p -.supe2r1a3s2t -.supe2r1att -.supe2r1bib -.supe2r1bif -.supe2r1bil -.supe2r1c -.supe2r1d -.supe2r1ed -.supe2r1eff -.supe2r1eg -.supe2r1em -.supe2r1en -.supe2r1er -.supe2r1eu -.supe2r1e2x3 -.supe2r3h -.supe2r3i2 -.supe2r1il -.supe2r1im -.supe2r1in -.supe2r1ir -.supe4r5i4ume -.supe3r4i3o -.supe3r4i3u -.supe2r1o2b1d -.supe2r1o2b3r -.supe2r1oc -.supe2r1or -.supe2r3s2c -.supe2r3s2p -.supe2r3s2t -.supe2r1sub3s2t -.supe2r3u2 -3r4us. -.supra3s2c -.su3s2c -.su3s2p -.suss2cr -.tetra3e2t -.tetra3g2n -.tetra3s2t -.te2r1i2u -.te2r1un -.terp2s -.the2o -.theo3g2n -.the3s2p -.the3s2t -.thi3s2b -.tra1i2a -.tra1i2e -.tra1ii -.tran2s -.transa2 -.trans1a2b1i -.trans1a2b1e2 -.trans1act -.trans1a2d1 -.trans3i -.trans1a2u -.tran3s2c -.tran3s2en -.trans1e -.transe2u -.trans1o2 -.trans1u2 -.tran3s2um -.tra2n1ue -.tri3en -.u2n1i2us -.ute2r3ui -.za2i3eu -.zeu3g2m} \ No newline at end of file +z2a +zab2 +za3r +ză3r +zá1m +ze3b +zé2ru +z2i +zmă3 +zo1 +zo2s +zū2 +̄1 +̄2a +̄a2m +̄2ā +̄2ă +̄2á +̄2ǣ +̄ǣ2ŭ +̄b2 +̄be3 +̄bī3u +̄bī3v +̄3bu +̄3bŭ +̄ce2 +̄2cl +̄2cū +̄de3 +̄dĕ3r +̄2dī +̄2e +̄2ē +̄ēn3 +̄2ĕ +̄2f +̄2i +̄2ī +̄2ĭ +̄2í +̄n2 +̄no3 +̄2ō +̄pe3 +̄per2 +̄pĕ3r +̄pĕ5rĭ +̄r2 +̄2s +̄to2 +̄2u +̄2ŭ +̄2ú +̄2́ +̄́3b2 +̄́2cl +̄́3l +̄́1n +̄́2s +̆ăd2 +̆b2 +̆d2 +̆dă3m +̆dē2 +̆ĕs3 +̆2gn +̆2ĭ +̆ĭ2ă +̆ĭn2 +̆ĭs3 +̆2lu +̆1ma +̆1mă +̆m2e +̆m2ĕ +̆1n +̆n2ā +̆1ra +̆3r2ă +̆1ræ +̆1rǣ +̆1rī +̆1rō +̆1rŏ +̆rsĭ3 +̆1rŭ +̆stă4 +̆tĕ5rī +̆tĕrī5u +̆tĕrī5v +̆tĕ3rŭ +̆2th +̆3thĭ +̆x2 +̆2xu +̆́b2 +̆́d2 +̆́dă3 +̆́m2ĕ +͞e1 +͞ea2b3 +͞eắ2 +͞eá2 +͞e3ác +͞e3áp +͞e3b +͞e4cue +͞e3d2 +͞ed4o +͞e2eō +͞e3es +͞eé2 +͞e3és +͞e3g2 +͞ei2 +͞e2iā +͞e3ic +͞e2iī +͞e2ī +͞e2ō +͞eó2 +͞epe3 +͞epote4 +͞epot5er +͞epot5es +͞epo6t5és +͞epó4t5e +͞e3q +͞e3r +͞es4ca +͞es4cá +͞es4ci +͞es4cí +͞e4scu +͞e4scú +͞e4spō +͞e2sq +͞es4ta +͞es4tā +͞es4tá +͞es4te +͞es4tē +͞es4té +͞es4tin +͞esti5t4 +͞es4tī +͞estí3 +͞es4tít4 +͞es4tō. +͞es4tōn +͞es4tōq +͞es4tōs +͞es4tōu +͞es4tōv +͞es4trú +͞e5ter +͞etere6ri +͞ete6re6rí +͞ete6r5es +͞ete6r5és +͞ete5rim +͞ete5riti +͞ete5rití +͞ete5rito +͞ete5ritó +͞ete5r6i5tur +͞ete5ritúr +͞ete4r5ī4 +͞eterī́6 +͞ete6rít +͞e5tĕr +͞eté6r5es +͞eté6rite +͞e3ut +͞ex2 +͞e2xu +͞2u1 +͞u2a +͞u2ǣ +͞u3b2 +͞u3do +͞uō2 +͞upe5re +͞upe5ri +͞upe5r4ī +͞uperī5n +͞uperī5q +͞uperī5u +͞uperī5v +͞u2su +͞u3sum +͞u3sus +͞u2xu +́͞2 +͡e1 +͡ea2b3 +͡eắ2 +͡e3ác +͡e3áp +͡e3b +͡e4cue +͡e3d2 +͡ed4o +͡e2eo +͡e2eō +͡e2eó +͡e3es +͡eé2r +͡e3és +͡e3g2 +͡ei2 +͡e2iā +͡e3ic +͡e2ii +͡e2iī +͡e2ií +͡e2ī +͡e2o +͡e2ō +͡epe3 +͡epo6tés +͡epó6tes +͡e3q +͡e3r +͡er4i +͡es4ca +͡es4cá +͡e5s4ci +͡es4cí +͡e4scu +͡e4scú +͡e4spō +͡e2sq +͡es4ta +͡es4tā +͡es4tá +͡es4te +͡es4tē +͡es4té +͡es4ti. +͡es4tig +͡es4tin +͡es4tiq +͡es4tis +͡esti5t4 +͡es4tiv +͡es4tī +͡es4tíg +͡es4tín +͡es4tíq +͡es4tís +͡es4tí5t4 +͡es4tíu +͡es4tív +͡es4to. +͡es4ton +͡es4toq +͡es4tos +͡es4tou +͡es4tov +͡es4tō. +͡es4tōn +͡es4tōq +͡es4tōs +͡es4tōu +͡es4tōv +͡es4tón +͡es4tóq +͡es4tós +͡es4tóu +͡es4tóv +͡es4trú +͡e5ter +͡etere6ri +͡ete6re6rí +͡ete4ri4 +͡eter5ii +͡eter5ií +͡ete4r5ī4 +͡eterī́6 +͡ete4rí4 +͡eter5ímu +͡eter5íti +͡e5tĕr +͡eté6ri. +͡eté6r5ii +͡eté6r5is +͡eté6rite +͡eté6ri6ti +͡e3ust +͡e3ut +͡ex2 +͡e2xu +͡2u1 +͡u2a +͡u3b2 +͡u3do +͡uō2 +͡uó2 +͡upe5re +͡upe5ri +͡uperi5n +͡uperi5q +͡uperi5ue +͡uperi5v +͡upe5r4ī +͡uperī5n +͡uperī5q +͡uperī5u +͡uperī5v +͡u2xu +́͡2 +́2ă +́ăd2 +́ă3g +́b2a +́ba3q +́3bas +́b2ă +́4băc +́bă2r +́b3ărā +́b3ără +́b3ărē +́b3ărĕ +́b3ărō +́3băs +́b2e +́be3r +́b2ē +́b4ĭă +́bĭ4cŭ +́b4ĭēs +́2bĭĭ +́b4ĭō +́b4ĭŭ +́b2o3 +́b2ŏ1 +́b5ŏlĕn +́2bri +́b2rī +́b2sq +́b5s4tĕ +́b2su +́b2u +́3bŭm +́2by +́3că +́ce1 +́3cē +́3ci +́cŏ3 +́2cre +́2crē +́2cri +́2c3ue +́2c3u2t +́cŭ3m +́2c3ŭ2t +́dă2m +́d3ămă +́de4run +́2d3ĕ2d +́d4ĕp +́d3ĕst +́2d3i2g +́d2in +́d2ĭ +́2d3ĭg +́4d3ĭmĭ +́d3ŏ2l +́d2rē +́d2rŏ +́2d3ue +́2dū +́d2ŭ +́e2ă +́e3b +́e4cue +́e3d2 +́e2eo +́e2eō +́e3es +́e3g2 +́ei2 +́e4ia. +́e4iam +́e4ias +́e4ia͞ +́e2iā +́e2ii +́e2iī +́epe3 +́e3q +́e1r +́er4i +́e3s4ca +́e3s4ci +́e3s4ta +́e5s4tā. +́e5stān +́e3s4te +́e3s4tē +́e5s4ti. +́e5s4tin +́e5s4tis +́e5stit +́e3s4tī +́e5s4to. +́e5s4tos +́e3s4tō +́es5tră +́e5stru +́es3tu +́ete3r +́etĕ5r +́e3ut +́e2ŭ +́e2x +́ĕ1 +́1ĕā +́1ĕ2ă +́ĕ2mŏ +́2ĕq +́4ĕr. +́1ĕ2s +́ĕ2ŭ +́fe1 +́2fē +́fĕ1 +́fŏ1 +́3g2a +́3gă +́3gæ +́3gǣ +́gĕ1 +́2gl +́2gn +́g3no +́2gŭa +́2gŭā +́2gŭă +́2gŭǣ +́2gŭē +́2gŭĕ +́2gŭō +́2gŭŭ +́1h +́2he +́3ian +́3iaq +́3iar +́3iat +́3iau +́3iav +́i2ā +́i3b +́i2ci +́3iem +́3ien +́3ieq +́3iet +́3ieu +́3iev +́3iēs +́1ii +́1io +́3iun +́3iuu +́ĭ3b +́ĭ2cĭ +́1ĭĭ +́2ĭn2 +́3ĭn. +́3lă +́2leg +́3lĕ +́4lĕg +́4lĕp +́3lix +́2lu +́3lub +́l3ue +́l3uē +́3lui +́3lum +́3lus +́1m2a +́1mă +́mă2g +́m3ără +́m3ă4rō +́m3bă +́m4bĭā +́m4b3ĭŏ +́m2e +́4mera +́4merā +́mĕ4dĭ +́4mĕdŏ +́m2in +́4minē. +́4minēn +́m2ĭ +́4mĭăn +́4mĭăt +́4mĭēn +́4mĭēs +́4mĭĕn +́4mĭĕt +́2mĭĭ +́4mĭnē. +́4mĭnēn +́4mĭŭn +́1mo1 +́mŏ1 +́mpĕ5r +́mpĕr6ī +́2mun +́3m2ū +́n2ā +́n2ă +́n3dĕ +́n4d3ĭg +́n4d3ŏ4l +́n4dŭĕ +́nd3ŭĭ +́n2ĕ +́n3ĕst +́n3g2 +́4n3ĭcĭ +́n2o +́nŏ1 +́ns2c +́n4sig +́ns5i4tæ +́ns5i4tu +́n4sĭg +́ntĕ3r +́nt5ĕrōs +́3n2ua +́n2uā +́3n2uē +́3n2uī +́n2ū +́n2ŭ +́o1 +́2ŏ +́ŏ3p +́3pă +́pe1 +́pe3r +́pĕ3r +́pĕ5rĭ +́3pi +́3pĭ +́3pl +́2pn +́pŏ3 +́3pr +́pu3l +́3pŭī +́3pŭĭ +́1r +́r2a +́ra3g +́4r2ăb +́ră4gā +́ră4gă +́ră4gĭ +́r2ăl +́r3c +́r2e +́3rē. +́r3ĕ2d4 +́rĕ2g +́rĕ2m +́r3ĕmā +́4r3ĕmă +́r3ĕmē +́r3ĕmĕ +́r3ĕmī +́r3ĕmĭ +́4r3ĕmō +́r3ĕmŏ +́r3ĕmŭ +́2r3ĕs +́2rh +́rĭ4bē +́rĭ4bĕ +́r3ĭ4cĭ +́rĭ4măn +́rĭ4măr +́rĭ4măt +́4r3ĭ4mē +́rĭ4mĕ +́4r3ĭ4mĭ +́r3ĭ4mŏ +́r5ĭ4mŭn +́3rĭŭ +́2rog +́2rŏg +́2r3ŏp +́r3ua +́r3uā +́r3uæ +́2rue +́r3uē +́r2ui +́ru3m +́r3uō +́3rū +́2sc +́s4cid +́s3cr +́s2ĕ +́s4ĕr +́3sĕŭ +́s2i +́2s3ĭ2c +́s4per +́spĕ3 +́s5pĕs +́s3pī +́s3q +́s4tes +́s3tib +́3s4tin +́3stit +́5stĭtē +́5stĭtĕn +́s4trat +́s4tret +́s5tri +́3s4trŏ +́3s4tru +́s5trum +́s4trŭā +́s4trŭă +́s4trŭē +́s4trŭĕ +́s4trŭī +́s4trŭō +́s4trŭŭ +́s3ui +́3sumu +́3sun +́4tăg +́te3r +́tĕ2ī +́tĕ3ra +́t6ĕră. +́2t3ĕs +́3tha +́3thā +́3thă +́3thæ +́3thǣ +́3tĭ +́4tĭq +́2tl +́to1 +́tŏ1 +́5trīx +́1u +́2u1m +́2un +́uŏ1 +́upe3 +́upe5r +́u1r +́u2xu +́1ūn +́ŭ2 +́1ŭb +́1ŭt +́vŏ1 +́x2a +́x2ă +́x4eu +́x2ĕ +́x3ĕăn +́x2i +́2xia +́2xiā +́2xiæ +́2xiǣ +́2xiē +́2xiī +́2xiō +́2xiu +́x2ī +́x2ĭn +́x2o +́x2ō +́x2ŏ +́xtĕ3 +́2xu +́x4us +́x2ŭĭ +́x3ŭĭs} \ No newline at end of file diff --git a/tex/context/patterns/mkii/lang-eo.hyp b/tex/context/patterns/mkii/lang-eo.hyp new file mode 100644 index 000000000..5a16071a1 --- /dev/null +++ b/tex/context/patterns/mkii/lang-eo.hyp @@ -0,0 +1,8 @@ +% generated by mtxrun --script pattern --convert + +% for comment and copyright, see lang-eo.rme + +% used: + +\hyphenation{ +} \ No newline at end of file diff --git a/tex/context/patterns/mkii/lang-eo.pat b/tex/context/patterns/mkii/lang-eo.pat new file mode 100644 index 000000000..5e3acc646 --- /dev/null +++ b/tex/context/patterns/mkii/lang-eo.pat @@ -0,0 +1,98 @@ +% generated by mtxrun --script pattern --convert + +% for comment and copyright, see lang-eo.rme + +% used: a b d e f g i j k l m n o p r s t u v ŝ + +\patterns{ +a1 +e1 +i1 +o1 +u1 +2aj. +2ajn. +2an. +2as. +en. +is. +2oj. +2ojn. +2on. +2os. +2us. +a3a +e3a +i3a +o3a +u3a +a3e +e3e +i3e +o3e +u3e +a3i +e3i +i3i +o3i +u3i +a3o +e3o +i3o +o3o +u3o +a3u +e3u +i3u +o3u +u3u +e2sper +2jn. +2lp. +2lt. +2nk. +2ns. +2nt. +2st. +.bl4 +.br4 +.dr4 +.dl4 +.fl4 +.fr4 +.gl4 +.gn4 +.gr4 +.kl4 +.kn4 +.kr4 +.kv4 +.pl4 +.pr4 +.ps4 +.pt4 +.sf4 +.sk4 +.skl4 +.skr4 +.skv4 +.sl4 +.sm4 +.sn4 +.sp4 +.spl4 +.spr4 +.st4 +.str4 +.sv4 +.ŝl4 +.ŝm4 +.ŝn4 +.ŝp4 +.ŝr4 +.ŝpr4 +.ŝt4 +.ŝtr4 +.ŝv4 +.tr4 +.vr4} \ No newline at end of file diff --git a/tex/context/patterns/mkii/lang-es.pat b/tex/context/patterns/mkii/lang-es.pat index 55e09b49e..b285650a4 100644 --- a/tex/context/patterns/mkii/lang-es.pat +++ b/tex/context/patterns/mkii/lang-es.pat @@ -13,7 +13,7 @@ 2bd 2bf 2bg -2b1h +2bh 2bj 2bk 2bm @@ -56,7 +56,7 @@ 2dd 2df 2dg -2d1h +2dh 2dj 2dk 2dl @@ -79,7 +79,7 @@ 2fd 2ff 2fg -2f1h +2fh 2fj 2fk 2fm @@ -101,7 +101,7 @@ 2gd 2gf 2gg -2g1h +2gh 2gj 2gk 2gm @@ -121,7 +121,7 @@ 2hd 2hf 2hg -2h1h +2hh 2hj 2hk 2hl @@ -145,7 +145,7 @@ 2jd 2jf 2jg -2j1h +2jh 2jj 2jk 2jl @@ -169,7 +169,7 @@ 2kd 2kf 2kg -2k1h +2kh 2kj 2kk 2km @@ -191,7 +191,7 @@ 2ld 2lf 2lg -2l1h +2lh 2lj 2lk 2lm @@ -214,7 +214,7 @@ 2md 2mf 2mg -2m1h +2mh 2mj 2mk 2ml @@ -238,7 +238,7 @@ 2nd 2nf 2ng -2n1h +2nh 2nj 2nk 2nl @@ -262,7 +262,7 @@ 2pd 2pf 2pg -2p1h +2ph 2pj 2pk 2pm @@ -284,7 +284,7 @@ 2qd 2qf 2qg -2q1h +2qh 2qj 2qk 2ql @@ -308,7 +308,7 @@ 2rd 2rf 2rg -2r1h +2rh 2rj 2rk 2rl @@ -331,7 +331,7 @@ 2sd 2sf 2sg -2s1h +2sh 2sj 2sk 2sl @@ -355,7 +355,7 @@ 2td 2tf 2tg -2t1h +2th 2tj 2tk 2tm @@ -374,7 +374,7 @@ 2vd 2vf 2vg -2v1h +2vh 2vj 2vk 2vm @@ -396,7 +396,7 @@ 2wd 2wf 2wg -2w1h +2wh 2wj 2wk 2wl @@ -420,7 +420,7 @@ 2xd 2xf 2xg -2x1h +2xh 2xj 2xk 2xl @@ -444,7 +444,7 @@ 2yd 2yf 2yg -2y1h +2yh 2yj 2yk 2yl @@ -468,7 +468,7 @@ 2zd 2zf 2zg -2z1h +2zh 2zj 2zk 2zl @@ -1057,6 +1057,8 @@ v2r 4ts. san4c5t plan4c5t +com4p3t +prom4p3t o1eu2 a1ae2 a1aó2 @@ -1474,6 +1476,29 @@ e5r4a3dor. e5r4a3dora. e5r4a3dores. e5r4a3doras. +.a4 +.abre1h +.abre1a2 +.abre1e2 +.abre1i2 +.abre1o2 +.abre1u2 +.abre1á2 +.abre1é2 +.abre1í2 +.abre1ó2 +.abre1ú2 +.acro1h +.acro1a2 +.acro1e2 +.acro1i2 +.acro1o2 +.acro1u2 +.acro1á2 +.acro1é2 +.acro1í2 +.acro1ó2 +.acro1ú2 acto1h acto1a2 acto1e2 @@ -1485,6 +1510,18 @@ acto1é2 acto1í2 acto1ó2 acto1ú2 +adeno1h +adeno1a2 +adeno1e2 +adeno1i2 +adeno1o2 +adeno1u2 +adeno1á2 +adeno1é2 +adeno1í2 +adeno1ó2 +adeno1ú2 +4i3ditis. aero1h aero1a2 aero1e2 @@ -1507,54 +1544,34 @@ afro1é2 afro1í2 afro1ó2 afro1ú2 -.a2 -.an2a2 -.an2e2 -.an2i2 -.an2o2 -.an2u2 -.an2á2 -.an2é2 -.an2í2 -.an2ó2 -.an2ú2. -ana3lí -.aná3li -.ana3li -.an3aero +agro1h +agro1a2 +agro1e2 +agro1i2 +agro1o2 +agro1u2 +agro1á2 +agro1é2 +agro1í2 +agro1ó2 +agro1ú2 .an3e2pigr -.ane3xa -.ane3xá -.ane3xe -.ane3xé -.ane3xio -.ane3xió -.an3h -.ani3mad -.ani3mád -.ani3dar -.ani3ll -.ani3m -.aniña -.ani3q -.an3i2so -.an3i2só -.ani3vel -.ano5che -.ano5din -.ano5mal -.ano5nad -.anó3nim -.anó5mal -.ano5nim -.ano5ta -.ano3tá -.anua3l -.anua4lm -.anu3bl -.anu3da -.anu3l -asu3b2 +.an3a2lcoh +.an3amnio +.an3i4so +.an3i4só +.an3aero +andro1h +andro1a2 +andro1e2 +andro1i2 +andro1o2 +andro1u2 +andro1á2 +andro1é2 +andro1í2 +andro1ó2 +andro1ú2 anfi1h anfi1a2 anfi1e2 @@ -1566,6 +1583,8 @@ anfi1é2 anfi1í2 anfi1ó2 anfi1ú2 +4o3xo. +4o3xos. anglo1h anglo1a2 anglo1e2 @@ -1594,6 +1613,10 @@ acante2 4ísmos. 4ísta. 4ístas. +4ismo. +4ismos. +4ista. +4istas. 4ístico. 4ísticos. 4ística. @@ -1604,6 +1627,10 @@ mante4a e4a3miento e4ándo tras3antea +2huelo. +2huela. +2huelos. +2huelas. .anti1h .anti1a2 .anti1e2 @@ -1617,6 +1644,17 @@ tras3antea .anti1ú2 ti2o3qu ti2o3co +apico1h +apico1a2 +apico1e2 +apico1i2 +apico1o2 +apico1u2 +apico1á2 +apico1é2 +apico1í2 +apico1ó2 +apico1ú2 archi1h archi1a2 archi1e2 @@ -1628,6 +1666,39 @@ archi1é2 archi1í2 archi1ó2 archi1ú2 +.atto1h +.atto1a2 +.atto1e2 +.atto1i2 +.atto1o2 +.atto1u2 +.atto1á2 +.atto1é2 +.atto1í2 +.atto1ó2 +.atto1ú2 +audio1h +audio1a2 +audio1e2 +audio1i2 +audio1o2 +audio1u2 +audio1á2 +audio1é2 +audio1í2 +audio1ó2 +audio1ú2 +austro1h +austro1a2 +austro1e2 +austro1i2 +austro1o2 +austro1u2 +austro1á2 +austro1é2 +austro1í2 +austro1ó2 +austro1ú2 auto1h auto1a2 auto1e2 @@ -1644,6 +1715,7 @@ auto1ú2 .bi1ox .bi1ó2x .bi1un +bi1u2ní biblio1h biblio1a2 biblio1e2 @@ -1656,20 +1728,29 @@ biblio1í2 biblio1ó2 biblio1ú2 bien2 +bien3b +bien3c +bien3d +bien3f +bien3g bien3h -bien3v -bien3q +bien3l bien3m +bien3p +bien3q +bien3s bien3t -b4ien3do. -.su3b4ien -b4ien3das. +bien3v +bien3z .bie4n3and .bie4n3a4pa .bie4n3a4ve .bie4n3est .bie4n3int .bie4n3o4lie +b4ien3do. +.su3b4ien +b4ien3das. bio1h bio1a2 bio1e2 @@ -1681,7 +1762,17 @@ bio1é2 bio1í2 bio1ó2 bio1ú2 -bi1u2ní +busca1h +busca1a2 +busca1e2 +busca1i2 +busca1o2 +busca1u2 +busca1á2 +busca1é2 +busca1í2 +busca1ó2 +busca1ú2 cardio1h cardio1a2 cardio1e2 @@ -1715,6 +1806,30 @@ centi1é2 centi1í2 centi1ó2 centi1ú2 +cian1h +ciano1h +ciano1a2 +ciano1e2 +ciano1i2 +ciano1o2 +ciano1u2 +ciano1á2 +ciano1é2 +ciano1í2 +ciano1ó2 +ciano1ú2 +cibe2r3r +cibe2r1h +cibe2r1a2 +cibe2r1e2 +cibe2r1i2 +cibe2r1o2 +cibe2r1u2 +cibe2r1á2 +cibe2r1é2 +cibe2r1í2 +cibe2r1ó2 +cibe2r1ú2 centi5área ciclo1h ciclo1a2 @@ -1727,16 +1842,6 @@ ciclo1é2 ciclo1í2 ciclo1ó2 ciclo1ú2 -o4i3dea. -o4i3deas. -o4i3dal. -o4i3dales. -4o2i3de. -4o2i3des. -4i2dal. -4i2dales. -4i3deo. -4i3deos. cito1h cito1a2 cito1e2 @@ -1748,6 +1853,17 @@ cito1é2 cito1í2 cito1ó2 cito1ú2 +clepto1h +clepto1a2 +clepto1e2 +clepto1i2 +clepto1o2 +clepto1u2 +clepto1á2 +clepto1é2 +clepto1í2 +clepto1ó2 +clepto1ú2 cnico1h cnico1a2 cnico1e2 @@ -1759,6 +1875,7 @@ cnico1é2 cnico1í2 cnico1ó2 cnico1ú2 +.co1h .co2a2 .co2e2 .co2i2 @@ -1769,12 +1886,16 @@ cnico1ú2 .co2í2 .co2ó2 .co2ú2 +.co3acer .co3acree .coá3gul .co3agen .coa3gul +.co3apóst +.coa3lesc .coa3lic .co3arrend +.coa3xial .co3auto .co3edic .co3edit @@ -1782,8 +1903,15 @@ cnico1ú2 .co3efici .coe3tá .co3exis +.co6hib +.co4hech +.co4hesi +.co4heso +.co4herent +.co4het .co3imput .coi3to +.co4o5ki .co4o3per .co4o3pér .co4orden @@ -1792,6 +1920,40 @@ cnico1ú2 .co4opt .co4ópt .co2nurb +cou3lomb +corta1h +corta1a2 +corta1e2 +corta1i2 +corta1o2 +corta1u2 +corta1á2 +corta1é2 +corta1í2 +corta1ó2 +corta1ú2 +cosmo1h +cosmo1a2 +cosmo1e2 +cosmo1i2 +cosmo1o2 +cosmo1u2 +cosmo1á2 +cosmo1é2 +cosmo1í2 +cosmo1ó2 +cosmo1ú2 +crio1h +crio1a2 +crio1e2 +crio1i2 +crio1o2 +crio1u2 +crio1á2 +crio1é2 +crio1í2 +crio1ó2 +crio1ú2 cripto1h cripto1a2 cripto1e2 @@ -1825,6 +1987,28 @@ contra1é2 contra1í2 contra1ó2 contra1ú2 +cuadru1h +cuadru1a2 +cuadru1e2 +cuadru1i2 +cuadru1o2 +cuadru1u2 +cuadru1á2 +cuadru1é2 +cuadru1í2 +cuadru1ó2 +cuadru1ú2 +cuasi1h +cuasi1a2 +cuasi1e2 +cuasi1i2 +cuasi1o2 +cuasi1u2 +cuasi1á2 +cuasi1é2 +cuasi1í2 +cuasi1ó2 +cuasi1ú2 deca1h deca1a2 deca1e2 @@ -1836,20 +2020,46 @@ deca1é2 deca1í2 deca1ó2 deca1ú2 -4e3dro. -4e3dros. -4é3drico. -4é3dricos. -4é3drica. -4é3dricas. -4í3ble. -4í3bles. -.de2sa2 +dento1h +dento1a2 +dento1e2 +dento1i2 +dento1o2 +dento1u2 +dento1á2 +dento1é2 +dento1í2 +dento1ó2 +dento1ú2 +dermato1h +dermato1a2 +dermato1e2 +dermato1i2 +dermato1o2 +dermato1u2 +dermato1á2 +dermato1é2 +dermato1í2 +dermato1ó2 +dermato1ú2 +dermo1h +dermo1a2 +dermo1e2 +dermo1i2 +dermo1o2 +dermo1u2 +dermo1á2 +dermo1é2 +dermo1í2 +dermo1ó2 +dermo1ú2 +.de2s1h +.de2s3a2 .de2se2 .de2si2 .de2so2 .de2su2 -.de2sá2 +.de2s3á2 .de2sé2 .de2sí2 .de2só2 @@ -1859,216 +2069,98 @@ deca2i3mient 3sas. de2s3órde de2s3orde -de2s3abast -de2s3aboll -de2s3aboto -de2s3abr -des4a3brid -de2s3abroch -de2s3aceit -de2s3aceler -desa3cert -desa3ciert -de2s3acobar -de2s3acomod -de2s3acomp -de2s3acons -de2s3acopl -de2s3acorr -de2s3acostum -de2s3acot -desa3craliz -de2s3acredit -de2s3activ -de2s3acuart -de2s3aderez -de2s3adeud -de2s3adorar -de2s3adormec -de2s3adorn -de2s3advert -de2s3aferr -de2s3afic -de2s3afil -de2s3afin -de2s3afor -de2s3agu -desa3gú -desa3garr -de2s3agraci -de2s3agrad -de2s3agravi -de2s3agreg -de2s3agrup -des4a3guis -de2s3aherr -de2s3ahij -de2s3ajust -de2s3alagar -de2s3alent -de2s3alfom -de2s3alfor -de2s3alien -de2s3a4line -de2s3a4liné -de2s3aliñ -desa3liv -de2s3alm -de2s3almid -de2s3aloj -de2s3alquil -de2s3alter -de2s3alumbr -desa3marr -desa3mobl -de2s3amold -de2s3amort -de2s3amuebl -de2s3ampa -de2s3and -de2s3angel -de3sangr -de2s3anid -de2s3anim -de2s3aním -de2s3anud -desa3pañ -desa3pacib -de2s3apadr -de2s3apare -de2s3aparec -de2s3aparic -de2s3apeg -de2s3apercib -de2s3apes -de2s3aplic -de2s3apolill -de2s3apoy -de2s3aprend -de2s3apret -de2s3apriet -de2s3aprob -de2s3apropi -de2s3aprovech -de2s3arbol -de2s3aren -de2s3arm -des4arme -de2s3arraig -de2s3arregl -de2s3arrend -de2s3arrim -desa3rroll -de2s3arrop -de2s3arrug -de2s3articul -de2s3asent -de2s3asist -de2s3asn -de2s3atenc -de2s3atend -de2s3atiend -de2s3atent -desa3tin -de2s3atorn -de2s3atranc -de2s3autor -de2s3avis -desa3yun -desa3zón -desa3zon -de2s3embal -de2s3embál -de2s3embar -de2s3embár -de2s3embarg -de2s3embols -de2s3emborr -de2s3embosc -de2s3embot -de2s3embrag -de2s3embrág -de2s3embrave -de2s3embráve -de2s3embroll -de2s3embróll -de2s3embruj -de2s3embrúj -de3semej -de2s3empañ -de2s3empáñ -de2s3empac -de2s3empaquet -de2s3empaquét -de2s3emparej -de2s3emparéj -de2s3emparent -de2s3empat -de2s3empé -de2s3empedr -de2s3empeg -de2s3empeor -de2s3emperez -de2s3empern -de2s3emple -de2s3empolv -de2s3empotr -de2s3empoz -de2s3enam -de2s3encab -de2s3encad -de2s3encaj -de2s3encáj -de2s3encall -de2s3encáll -de2s3encam -de3sencant -de2s3encap -de2s3encar -de2s3encár -de2s3ench -de2s3encl -de2s3enco -de2s3encr -de2s3encu -de2s3end -de3senfad -de3senfád -de2s3enfi -de2s3enfo -de2s3enfó -de3senfren -de2s3enfund -de2s3enfur -de3sengañ -de3sengáñ -de2s3enganch -de2s3engar -de2s3engas -de2s3engom -de2s3engoz -de2s3engra -de2s3enhebr -de2s3enj -de2s3enlad -de2s3enlaz -de2s3enlo -de2s3enm -de2s3enr -de2s3ens -de2s3enta -de3sentend -de3sentien -de3sentién -de2s3enter -de2s3entier -de2s3entiér -de2s3ento -de2s3entr -de2s3entu -de2s3envain -de3senvolvim +de3s4a3brid +de3s4a3bor +de3s4a3craliz +de3s4a3cralic +de3s4a3fia +de3s4a3fía +de3s4a3fiá +de3s4a3fíe +de3s4a3fié +de3s4a3fío +de3s4a3fió +des5a4gua +de3s4ahuci +de3s4áhuci +de3s4a3guis +des4ala +des4ála +de3s4a3liv +de3s4a3liniz +de3s4a3liníz +de3s4a3linic +de3s4a3liníc +de3s4angr +de3s4angel +de3s4a3prensiv +de3s4a3rroll +desa4sa +desa4se +des5a4tes +de3s4astr +de3s4a3yun +de3s4a3zón +de3s4a3zon +.des3em +de3s4e3meja +de3s4e3méja +de3s4e3mejá +de3s4e3meje +de3s4e3méje +de3s4e3mejé +de3s4e3mejo +de3s4e3méjo +de3s4e3mejó +de3s4empeñ +de3s4empéñ +.des3en +de3s4enfren +de3s4enfrén de3seo +de3sea +de3sean +de3seán +de3sear +de3seár +de3seab +de3seáb +de3sead +de3seád +de3seam +de3seám +de3seas +de3seás +de3se3co +de3se3ca +de3se3cá +de3se3có +de3s4e3que +de3s4e3qué +de3se3can +de3se3cán +de3se3car +de3se3cár +de3se3cab +de3se3cáb +de3se3cad +de3se3cád +de3se3cam +de3se3cám +de3se3cas +de3se3cás +de3se3cha +de3sé3cha +de3se3chá +de3se3ché +de3se3che +de3sé3che +de3se3chó +de3se3cho +de2s3edif +de2s3educ +de2s3eduq +de2s3escombr de2s3eq de3s4erci de3s4ert @@ -2076,15 +2168,24 @@ de3s4ért de2s3espa de3sesperac de2s3esperanz +de2s3espin +de2s3espum de2s3estabil +de2s3estaci +de2s3estalin de2s3estim +de2s3estres +de2s3estruc de3sider de3sidia +de2s3ideol de3sidio de3siert de3sign -de3sigual -de3silusi +de2s3igual +de2s3iguál +de2s3ilusion +de2s3ilusión de2s3imagin de2s3iman de2s3impon @@ -2093,11 +2194,13 @@ de2s3incent de2s3inclin de2s3incorp de2s3incrust -de3sinenc +de3si3nenc +de3si3nent de3sinfec de3su3dar de3su3das de3su3dan +de2s3infart de2s3inflam de2s3infl de2s3inform @@ -2109,23 +2212,41 @@ iní3ci de3s4integr de3s4inter de2s3intox +de2s3intub de2s3inver de3sisten de3isti de2s3obedec +de2s3obedez +de2s3obedien de2s3oblig de2s3obstr -de3socup +de3so3cas +de2s3ocup +de2s3ocúp de2s3odor +de3so3la +de3só3la +de3so3lá +de3so3le +de3so3lé +de3so3lo +de3so3ló de3solac de3solad de3soll +de2s3oprim de2s3orej +de2s3orill de2s3orient de3sortij de2s3organi +de2s3ornam de3suell de3sonce +de2s3ova +de2s3ová +de2s3ové de2s3ovi de2s3oxi de2s3oye @@ -2134,10 +2255,30 @@ de3s4ubstan de3s4ustan de3s4oseg de2s3ub4ic +de2s3ub4iq de2s3unir +de2s3unan +de2s3unas +de2s3une +de2s3unid +de2s3unien +de2s3uniera +de2s3unies +de2s3unién +de2s3uniér +de2s3uniés +de2s3unió +de2s3uno +de2s3uná +de2s3uní +de2s3unía de2s3unier de2s3unim +de2s3uña +de2s3uñá +de2s3urbani .diecio2 +.diecio3ch ecano1h ecano1a2 ecano1e2 @@ -2160,6 +2301,17 @@ eco1é2 eco1í2 eco1ó2 eco1ú2 +ecto1h +ecto1a2 +ecto1e2 +ecto1i2 +ecto1o2 +ecto1u2 +ecto1á2 +ecto1é2 +ecto1í2 +ecto1ó2 +ecto1ú2 ectro1h ectro1a2 ectro1e2 @@ -2171,6 +2323,7 @@ ectro1é2 ectro1í2 ectro1ó2 ectro1ú2 +.e2n1h .e2n2a2 .e2n2e2 .e2n2i2 @@ -2181,6 +2334,8 @@ ectro1ú2 .e2n2í2 .e2n2ó2 .e2n2ú2 +.ena3mor +.en3amór .ene3mist .ene3míst .eno3jar @@ -2188,7 +2343,18 @@ ectro1ú2 .enu3merá .enu3mere .en3aceit +.ena3jen +.ena3jén +.eno3ja +.eno3já +.eno3je +.eno3jé +.eno3jo +.eno3jó +.enó3j .en3arb +en1hebr +.en2hest 4emboca 4o3lógico. 4o3lógica. @@ -2212,6 +2378,28 @@ endo1é2 endo1í2 endo1ó2 endo1ú2 +enea1h +enea1a2 +enea1e2 +enea1i2 +enea1o2 +enea1u2 +enea1á2 +enea1é2 +enea1í2 +enea1ó2 +enea1ú2 +entero1h +entero1a2 +entero1e2 +entero1i2 +entero1o2 +entero1u2 +entero1á2 +entero1é2 +entero1í2 +entero1ó2 +entero1ú2 ento1h ento1a2 ento1e2 @@ -2234,6 +2422,39 @@ entre1é2 entre1í2 entre1ó2 entre1ú2 +esclero1h +esclero1a2 +esclero1e2 +esclero1i2 +esclero1o2 +esclero1u2 +esclero1á2 +esclero1é2 +esclero1í2 +esclero1ó2 +esclero1ú2 +estereo1h +estereo1a2 +estereo1e2 +estereo1i2 +estereo1o2 +estereo1u2 +estereo1á2 +estereo1é2 +estereo1í2 +estereo1ó2 +estereo1ú2 +etno1h +etno1a2 +etno1e2 +etno1i2 +etno1o2 +etno1u2 +etno1á2 +etno1é2 +etno1í2 +etno1ó2 +etno1ú2 euco1h euco1a2 euco1e2 @@ -2256,6 +2477,7 @@ euro1é2 euro1í2 euro1ó2 euro1ú2 +.e2x1h .e2x2a2 .e2x2e2 .e2x2i2 @@ -2266,6 +2488,15 @@ euro1ú2 .e2x2í2 .e2x2ó2 .e2x2ú2 +.ex2hal +.ex2hál +.ex2haus +.ex2hib +.ex2híb +.ex2hort +.ex2hórt +.ex2hum +.ex2húm 3gono. 3gonos. 3gonal. @@ -2276,6 +2507,7 @@ exé3ge exó3ti exa3cerb exa3ger +ex3alum exa3min exe3cr exe3géti @@ -2289,10 +2521,6 @@ exi3gi exi3gí exi3jo exí3jo -3gua. -3guas. -3guo. -3guos. exi3lia exi3liá exí3lia @@ -2316,6 +2544,7 @@ exi3mó exí3mo exi3tos exi3lar +exo3bió exo3ner exo3crin exo3tér @@ -2323,6 +2552,8 @@ exo3tic exo3tiq exo3tism exo3gami +exo3esq +exo3plan exo3gámi exu3ber exu3dar @@ -2342,6 +2573,61 @@ extra1ú2 u4teri .cau5t .deu5t +femto1h +femto1a2 +femto1e2 +femto1i2 +femto1o2 +femto1u2 +femto1á2 +femto1é2 +femto1í2 +femto1ó2 +femto1ú2 +ferro1h +ferro1a2 +ferro1e2 +ferro1i2 +ferro1o2 +ferro1u2 +ferro1á2 +ferro1é2 +ferro1í2 +ferro1ó2 +ferro1ú2 +filo1h +filo1a2 +filo1e2 +filo1i2 +filo1o2 +filo1u2 +filo1á2 +filo1é2 +filo1í2 +filo1ó2 +filo1ú2 +fisio1h +fisio1a2 +fisio1e2 +fisio1i2 +fisio1o2 +fisio1u2 +fisio1á2 +fisio1é2 +fisio1í2 +fisio1ó2 +fisio1ú2 +fito1h +fito1a2 +fito1e2 +fito1i2 +fito1o2 +fito1u2 +fito1á2 +fito1é2 +fito1í2 +fito1ó2 +fito1ú2 fono1h fono1a2 fono1e2 @@ -2364,6 +2650,28 @@ foto1é2 foto1í2 foto1ó2 foto1ú2 +galo1h +galo1a2 +galo1e2 +galo1i2 +galo1o2 +galo1u2 +galo1á2 +galo1é2 +galo1í2 +galo1ó2 +galo1ú2 +gastero1h +gastero1a2 +gastero1e2 +gastero1i2 +gastero1o2 +gastero1u2 +gastero1á2 +gastero1é2 +gastero1í2 +gastero1ó2 +gastero1ú2 gastro1h gastro1a2 gastro1e2 @@ -2386,6 +2694,28 @@ geo1é2 geo1í2 geo1ó2 geo1ú2 +geronto1h +geronto1a2 +geronto1e2 +geronto1i2 +geronto1o2 +geronto1u2 +geronto1á2 +geronto1é2 +geronto1í2 +geronto1ó2 +geronto1ú2 +gineco1h +gineco1a2 +gineco1e2 +gineco1i2 +gineco1o2 +gineco1u2 +gineco1á2 +gineco1é2 +gineco1í2 +gineco1ó2 +gineco1ú2 giga1h giga1a2 giga1e2 @@ -2408,6 +2738,39 @@ gluco1é2 gluco1í2 gluco1ó2 gluco1ú2 +grafo1h +grafo1a2 +grafo1e2 +grafo1i2 +grafo1o2 +grafo1u2 +grafo1á2 +grafo1é2 +grafo1í2 +grafo1ó2 +grafo1ú2 +guarda1h +guarda1a2 +guarda1e2 +guarda1i2 +guarda1o2 +guarda1u2 +guarda1á2 +guarda1é2 +guarda1í2 +guarda1ó2 +guarda1ú2 +halo1h +halo1a2 +halo1e2 +halo1i2 +halo1o2 +halo1u2 +halo1á2 +halo1é2 +halo1í2 +halo1ó2 +halo1ú2 hecto1h hecto1a2 hecto1e2 @@ -2419,6 +2782,17 @@ hecto1é2 hecto1í2 hecto1ó2 hecto1ú2 +helico1h +helico1a2 +helico1e2 +helico1i2 +helico1o2 +helico1u2 +helico1á2 +helico1é2 +helico1í2 +helico1ó2 +helico1ú2 helio1h helio1a2 helio1e2 @@ -2452,6 +2826,8 @@ hemi1é2 hemi1í2 hemi1ó2 hemi1ú2 +hemio3la. +hemio3las. hemo1h hemo1a2 hemo1e2 @@ -2463,9 +2839,41 @@ hemo1é2 hemo1í2 hemo1ó2 hemo1ú2 +hepato1h +hepato1a2 +hepato1e2 +hepato1i2 +hepato1o2 +hepato1u2 +hepato1á2 +hepato1é2 +hepato1í2 +hepato1ó2 +hepato1ú2 +hepta1h +hepta1a2 +hepta1e2 +hepta1i2 +hepta1o2 +hepta1u2 +hepta1á2 +hepta1é2 +hepta1í2 +hepta1ó2 +hepta1ú2 +hetero1h +hetero1a2 +hetero1e2 +hetero1i2 +hetero1o2 +hetero1u2 +hetero1á2 +hetero1é2 +hetero1í2 +hetero1ó2 +hetero1ú2 2al. 2ales. -.hepta1e hexa1h hexa1a2 hexa1e2 @@ -2488,7 +2896,19 @@ hidro1é2 hidro1í2 hidro1ó2 hidro1ú2 +holo1h +holo1a2 +holo1e2 +holo1i2 +holo1o2 +holo1u2 +holo1á2 +holo1é2 +holo1í2 +holo1ó2 +holo1ú2 hipe2r3r +hipe2r1h hipe2r1a2 hipe2r1e2 hipe2r1i2 @@ -2549,6 +2969,17 @@ homo1é2 homo1í2 homo1ó2 homo1ú2 +homeo1h +homeo1a2 +homeo1e2 +homeo1i2 +homeo1o2 +homeo1u2 +homeo1á2 +homeo1é2 +homeo1í2 +homeo1ó2 +homeo1ú2 ibero1h ibero1a2 ibero1e2 @@ -2571,6 +3002,7 @@ icono1é2 icono1í2 icono1ó2 icono1ú2 +.i2n1h .i2n2a2 .i2n2e2 .i2n2i2 @@ -2581,43 +3013,81 @@ icono1ú2 .i2n2í2 .i2n2ó2 .i2n2ú2 -.in3abord +in4hib +in4híb +in4hal +in4hál +in4hest +in4hést +in4hum +in4húm +in4hiest +in4hiést +in4herent +in4hóspit +in4hesi .in3abarc +.in3abord .in3acent -.in3aguant +.in3acept .in3adapt -.ina3movib +.in3adopt +.in3aguant +.in3alámb +.in3alien .in3analiz -.ina3nic .in3anim -.iná3nim +.in3apagab +.in3afect .in3apel +.in3aplaz .in3aplic -.in3aprens .in3apreci +.in3aprehen +.in3aprens +.in3armón .in3arrug .in3asist -.iné3dit +.in3atent .in3efic .in3efici .in3eludi +.in3encont +.in3equid +.in3exact +.in3evit +.ina3movib +.ina3nic .ine3narr +.ine3quív +.iná3nim +.iné3dit +.in3eleg +.in3exha +.in3ex ini3cia iní3cia ini3ciá ini3cie -.rei3na re3ini3cia re3iní3cia re3ini3ciá re3ini3cie .ini3cuo .ini3cua +.in3igualab +.in3in +.in3obser .ino3cuo .ino3cua +.ino3cenc +.ino3cent +.in3ocult +.ino3fens .ino3cula .ino3culá .ino3cule +.in3oport .inú3til .inu3tiliz infra1h @@ -2631,7 +3101,19 @@ infra1é2 infra1í2 infra1ó2 infra1ú2 +inmuno1h +inmuno1a2 +inmuno1e2 +inmuno1i2 +inmuno1o2 +inmuno1u2 +inmuno1á2 +inmuno1é2 +inmuno1í2 +inmuno1ó2 +inmuno1ú2 .inte2r3r +.inte2r1h .inte2r1a2 .inte2r1e2 .inte2r1i2 @@ -2654,18 +3136,23 @@ infra1ú2 .de3s4in3ter2e3sá .de3s4in3ter2e3sé .de3s4in3ter2e3só -4n3te3ri3n -4n4te4r5i4nsu +4n5te5r2i3n +inte6r5i4nsu +inte6r5i4nst +inte6r5i4nd +4ino. +4inos. +4ina. +4inas. .in3te3r4rog .in3te3r4rupc .in3te3r4rupt .in3te3r4rump inter4és inte3r4esar -inte4r4i4n4 -inter5ins5t inte5r4regno inte3r4ior4 +in3te3r4im. 4i4ano. 4i4ana. 4i4anos. @@ -2681,6 +3168,28 @@ intra1é2 intra1í2 intra1ó2 intra1ú2 +islamo1h +islamo1a2 +islamo1e2 +islamo1i2 +islamo1o2 +islamo1u2 +islamo1á2 +islamo1é2 +islamo1í2 +islamo1ó2 +islamo1ú2 +italo1h +italo1a2 +italo1e2 +italo1i2 +italo1o2 +italo1u2 +italo1á2 +italo1é2 +italo1í2 +italo1ó2 +italo1ú2 iso1h iso1a2 iso1e2 @@ -2703,6 +3212,50 @@ kilo1é2 kilo1í2 kilo1ó2 kilo1ú2 +leuco1h +leuco1a2 +leuco1e2 +leuco1i2 +leuco1o2 +leuco1u2 +leuco1á2 +leuco1é2 +leuco1í2 +leuco1ó2 +leuco1ú2 +linfo1h +linfo1a2 +linfo1e2 +linfo1i2 +linfo1o2 +linfo1u2 +linfo1á2 +linfo1é2 +linfo1í2 +linfo1ó2 +linfo1ú2 +lipo1h +lipo1a2 +lipo1e2 +lipo1i2 +lipo1o2 +lipo1u2 +lipo1á2 +lipo1é2 +lipo1í2 +lipo1ó2 +lipo1ú2 +lito1h +lito1a2 +lito1e2 +lito1i2 +lito1o2 +lito1u2 +lito1á2 +lito1é2 +lito1í2 +lito1ó2 +lito1ú2 macro1h macro1a2 macro1e2 @@ -2779,6 +3332,28 @@ melano1é2 melano1í2 melano1ó2 melano1ú2 +meso1h +meso1a2 +meso1e2 +meso1i2 +meso1o2 +meso1u2 +meso1á2 +meso1é2 +meso1í2 +meso1ó2 +meso1ú2 +meta1h +meta1a2 +meta1e2 +meta1i2 +meta1o2 +meta1u2 +meta1á2 +meta1é2 +meta1í2 +meta1ó2 +meta1ú2 micro1h micro1a2 micro1e2 @@ -2806,7 +3381,7 @@ ia5res. amili6a a3rio a3ria -li5área +li5á4rea mili4ar mini1h mini1a2 @@ -2826,6 +3401,17 @@ mini1ú2 2o3sas. 2o3samente. mini4a5tur +.mio1h +.mio1a2 +.mio1e2 +.mio1i2 +.mio1o2 +.mio1u2 +.mio1á2 +.mio1é2 +.mio1í2 +.mio1ó2 +.mio1ú2 multi1h multi1a2 multi1e2 @@ -2859,10 +3445,28 @@ mono1é2 mono1í2 mono1ó2 mono1ú2 -2i3co. -2i3cos. -2i3ca. -2i3cas. +morfo1h +morfo1a2 +morfo1e2 +morfo1i2 +morfo1o2 +morfo1u2 +morfo1á2 +morfo1é2 +morfo1í2 +morfo1ó2 +morfo1ú2 +moto1h +moto1a2 +moto1e2 +moto1i2 +moto1o2 +moto1u2 +moto1á2 +moto1é2 +moto1í2 +moto1ó2 +moto1ú2 namo1h namo1a2 namo1e2 @@ -2874,6 +3478,28 @@ namo1é2 namo1í2 namo1ó2 namo1ú2 +nano1h +nano1a2 +nano1e2 +nano1i2 +nano1o2 +nano1u2 +nano1á2 +nano1é2 +nano1í2 +nano1ó2 +nano1ú2 +narco1h +narco1a2 +narco1e2 +narco1i2 +narco1o2 +narco1u2 +narco1á2 +narco1é2 +narco1í2 +narco1ó2 +narco1ú2 necro1h necro1a2 necro1e2 @@ -2885,6 +3511,17 @@ necro1é2 necro1í2 necro1ó2 necro1ú2 +nefro1h +nefro1a2 +nefro1e2 +nefro1i2 +nefro1o2 +nefro1u2 +nefro1á2 +nefro1é2 +nefro1í2 +nefro1ó2 +nefro1ú2 neo1h neo1a2 neo1e2 @@ -2908,6 +3545,17 @@ neto1é2 neto1í2 neto1ó2 neto1ú2 +neumo1h +neumo1a2 +neumo1e2 +neumo1i2 +neumo1o2 +neumo1u2 +neumo1á2 +neumo1é2 +neumo1í2 +neumo1ó2 +neumo1ú2 norte1h norte1a2 norte1e2 @@ -2963,8 +3611,73 @@ omni1é2 omni1í2 omni1ó2 omni1ú2 -i2o. -i2os. +onco1h +onco1a2 +onco1e2 +onco1i2 +onco1o2 +onco1u2 +onco1á2 +onco1é2 +onco1í2 +onco1ó2 +onco1ú2 +onto1h +onto1a2 +onto1e2 +onto1i2 +onto1o2 +onto1u2 +onto1á2 +onto1é2 +onto1í2 +onto1ó2 +onto1ú2 +opto1h +opto1a2 +opto1e2 +opto1i2 +opto1o2 +opto1u2 +opto1á2 +opto1é2 +opto1í2 +opto1ó2 +opto1ú2 +ornito1h +ornito1a2 +ornito1e2 +ornito1i2 +ornito1o2 +ornito1u2 +ornito1á2 +ornito1é2 +ornito1í2 +ornito1ó2 +ornito1ú2 +orto1h +orto1a2 +orto1e2 +orto1i2 +orto1o2 +orto1u2 +orto1á2 +orto1é2 +orto1í2 +orto1ó2 +orto1ú2 +orto4e3pía +osteo1h +osteo1a2 +osteo1e2 +osteo1i2 +osteo1o2 +osteo1u2 +osteo1á2 +osteo1é2 +osteo1í2 +osteo1ó2 +osteo1ú2 paleo1h paleo1a2 paleo1e2 @@ -2976,10 +3689,16 @@ paleo1é2 paleo1í2 paleo1ó2 paleo1ú2 +.pa4n1a4fri .pa4n1a4meri +.pa4n1á4rab +.pa4n1a4ráb +.pa4n1a4rab .pa4n1europ -.pa4n1afri -.pa4n1hisp +.pa4n1islam +.pa4n1islám +.pa4n5hisp +.pa4n1hel .pa4n1ópti para1h para1a2 @@ -2996,6 +3715,7 @@ para2is. aí5so. aí5sos. para4íso +para4i3señ para4ulata penta1h penta1a2 @@ -3008,6 +3728,28 @@ penta1é2 penta1í2 penta1ó2 penta1ú2 +peta1h +peta1a2 +peta1e2 +peta1i2 +peta1o2 +peta1u2 +peta1á2 +peta1é2 +peta1í2 +peta1ó2 +peta1ú2 +pico1h +pico1a2 +pico1e2 +pico1i2 +pico1o2 +pico1u2 +pico1á2 +pico1é2 +pico1í2 +pico1ó2 +pico1ú2 piezo1h piezo1a2 piezo1e2 @@ -3019,6 +3761,17 @@ piezo1é2 piezo1í2 piezo1ó2 piezo1ú2 +piro1h +piro1a2 +piro1e2 +piro1i2 +piro1o2 +piro1u2 +piro1á2 +piro1é2 +piro1í2 +piro1ó2 +piro1ú2 pluri1h pluri1a2 pluri1e2 @@ -3050,6 +3803,19 @@ poli4andr poli4antea poli4arca expoli4 +porta1h +porta1a2 +porta1e2 +porta1i2 +porta1o2 +porta1u2 +porta1á2 +porta1é2 +porta1í2 +porta1ó2 +porta1ú2 +porta4e3ro +.pos2t1h .pos2t2a2 .pos2t2e2 .pos2t2i2 @@ -3060,10 +3826,17 @@ expoli4 .pos2t2í2 .pos2t2ó2 .pos2t2ú2 +po4s3impr +po4s3o2per +po4s3ind +po4s3e4lect +po4s3estr .pos3tin .pos3tín +.pos4t3ind pos3ta. pos3tas. +pos4t5s s3te. s3tes. s3tal. @@ -3089,31 +3862,57 @@ s3tores. .pos3tu3lá .pos3tu3le .pos3tu3lé -.post3elec -.post3impr -.post3ind -.post3ope +.pos2t3elec +.pos2t3impr +.pos2t3ope .pos2t3rev .pos2t3rom -.pre2a2 -.pre2e2 -.pre2i2 -.pre2o2 -.pre2u2 -.pre2á2 -.pre2é2 -.pre2í2 -.pre2ó2 -.pre2ú2 -.pre1h2 -pre3elij -pre3elig -pre3exis -pre3emin -preo3cup -preo2cúp -pre3olí -pre3opin +.pos3taci +.pos3tar +.pos3tear +.pos3te3me +.pos3ta3je +.pos3te3ler +.pos3te3ma +.pos3te3mi +.pos3te3río +.pos3te3ta +.pos3ti3le +.pos3ti3llo +.pos3ti3lo +.pos3ti3lá +.pos3ti3lé +.pos3ti3ló +.posti3nudo +.posto3res +.pos3tu3lo +.pos3tu3ló +.pos3tón +.pos3te3mas +.pos3ti3cer +.pos3tism +.pos3tu3reo +.pos3te3lera +.pos3teo +.pos3ti3ll +.pos3tista +.pre1h +.pre1a2 +.pre1e2 +.pre1i2 +.pre1o2 +.pre1u2 +.pre1á2 +.pre1é2 +.pre1í2 +.pre1ó2 +.pre1ú2 +.pre4ámbul +.pre4o3cup +.pre4o3cúp +.pre4ordin +.pre4ordín +.pro1h .pro2a2 .pro2e2 .pro2i2 @@ -3125,6 +3924,15 @@ pre3opin .pro2ó2 .pro2ú2 .pro3abort +.pro3etarr +.pro4hiba +.pro4híba +.pro4hibá +.pro4hibe +.pro4híb +.pro4híbo +.pro4hibi +.pro4hibí proto1h proto1a2 proto1e2 @@ -3149,6 +3957,17 @@ psico1ó2 psico1ú2 3p2sic 3p2siq +ptero1h +ptero1a2 +ptero1e2 +ptero1i2 +ptero1o2 +ptero1u2 +ptero1á2 +ptero1é2 +ptero1í2 +ptero1ó2 +ptero1ú2 quete1h quete1a2 quete1e2 @@ -3160,6 +3979,28 @@ quete1é2 quete1í2 quete1ó2 quete1ú2 +quimio1h +quimio1a2 +quimio1e2 +quimio1i2 +quimio1o2 +quimio1u2 +quimio1á2 +quimio1é2 +quimio1í2 +quimio1ó2 +quimio1ú2 +quiro1h +quiro1a2 +quiro1e2 +quiro1i2 +quiro1o2 +quiro1u2 +quiro1á2 +quiro1é2 +quiro1í2 +quiro1ó2 +quiro1ú2 radio1h radio1a2 radio1e2 @@ -3198,25 +4039,70 @@ ea3cia. ea3cias. .re3abr .re3ábr +.re3abiert +.re3absor +.re3absór +.re3admis +.re3admit +.re3admít .re3afirm .re3afírm +.re3agrav +.re3agráv +.re3acondic +.re3acuñ +.re3acúñ .re3ajust .rea3júst +.re3alegr +.re3alégr .rea3liza .rea3lizá .rea3líza .re3alim .rea3lism .rea3list +.re3aloj +.re3alój +.re3alq .re3anim .re3aním +.re3ama +.re3áma +.re3amá +.re3ame +.re3áme +.re3amé +.re3amo +.re3ámo +.re3amó .re3aparec +.re3aprend +.re3aprénd +.re3apret +.reapríet +.rei3no .re3ubica .re3ubíca +.re3ubicá +.re3ubico +.re3ubicó +.re3ubiq +.re3ubíq .reu3mati .reu3máti -.re3unir -.re3unír +.reu3nir +.reu3nír +.reu3nia +.reu3ní +.reu3nis +.reunim +.reu3ná +.reu3nie +.reu3nié +.reu3nid +.reu3nió +.re3unif .re3usar .re3usár .re3utiliz @@ -3224,17 +4110,37 @@ ea3cias. .re3a2eg .re3a2q .re3a2z +.re3asum +.re3asúm .re3a2grup .re3i2m .re3inc +.re3inic +.re3inf .re3ing +.re3inv +.rei3na .re3ins .re3int .re3o2b +.re3orient +.rei3vind .re3oc -.re3oj +.re4o3j .re3orga .re3unt +.reu3ma +rete1h +rete1a2 +rete1e2 +rete1i2 +rete1o2 +rete1u2 +rete1á2 +rete1é2 +rete1í2 +rete1ó2 +rete1ú2 rmano1h rmano1a2 rmano1e2 @@ -3268,6 +4174,28 @@ romo1é2 romo1í2 romo1ó2 romo1ú2 +salva1h +salva1a2 +salva1e2 +salva1i2 +salva1o2 +salva1u2 +salva1á2 +salva1é2 +salva1í2 +salva1ó2 +salva1ú2 +seleno1h +seleno1a2 +seleno1e2 +seleno1i2 +seleno1o2 +seleno1u2 +seleno1á2 +seleno1é2 +seleno1í2 +seleno1ó2 +seleno1ú2 semi1h semi1a2 semi1e2 @@ -3283,6 +4211,17 @@ i2a. i2as. 2ótic emi2o2 +servo1h +servo1a2 +servo1e2 +servo1i2 +servo1o2 +servo1u2 +servo1á2 +servo1é2 +servo1í2 +servo1ó2 +servo1ú2 2seudo1h 2seudo1a2 2seudo1e2 @@ -3307,6 +4246,8 @@ sobre1é2 sobre1í2 sobre1ó2 sobre1ú2 +sobre3a4sa +sobre3a4sas socio1h socio1a2 socio1e2 @@ -3318,8 +4259,10 @@ socio1é2 socio1í2 socio1ó2 socio1ú2 -a3rio. -a3rios. +4a3rio. +4a3rios. +4a3ria. +4a3rias. 3logía 4ón. 4ones. @@ -3328,6 +4271,7 @@ a3rios. 4o2icos. 4o2ica. 4o2icas. +.su2b1h .su2b2a2 .su2b2e2 .su2b2i2 @@ -3338,38 +4282,58 @@ a3rios. .su2b2í2 .su2b2ó2 .su2b2ú2 -.sub2i3ll -.sub2i3mien +.sub3acuát +.subi3ll +.su3bi3da +.su3bi3dor +.su3bi3do +.su3bi3dón +.su3basta +.su3básta +.su3bastá +.su3baste +.su3básté +.su3basto +.su3bástó .sub3índ .sub3ími .su4b3ray +.sub3acepc +.sub3acet .sub3aflue +.sub3alcai .sub3arr +.sub3ártic +.sub3atómic +.sub3ejecut +.sub3elemen +.sub3emple .sub3enten +.seb3entrad +.sub3espec +.sub3estac .sub3estim .sub3estím +.sub3estruc +.sub3occipit .sub3ofici +.su3bordin +.su3bordín .sub3urba -.sub3alter +.sub3aliment +.su3balter .sub3insp -.su3bién +.sub3intenden .su3bir -.su3bam -.su3bordin -.su3bordín -.sub3acuá -.sub3espe -.sub3esta -.su3burbi -.su4b5rein -.su2d1a2fr -.su2d1a2me -.su2d1este -su4d3oes -.su2r1a2me +.su3bír +.su3bién +.su3bi3mien +.su3bier +.su3bies .su2r1est .su2r1oes supe2r3r +supe2r1h supe2r1a2 supe2r1e2 supe2r1i2 @@ -3441,9 +4405,31 @@ tele1ó2 tele1ú2 4ósteo. 4ósteos. +tecno1h +tecno1a2 +tecno1e2 +tecno1i2 +tecno1o2 +tecno1u2 +tecno1á2 +tecno1é2 +tecno1í2 +tecno1ó2 +tecno1ú2 .tele1imp .tele1obj .tele4o3lót +tera1h +tera1a2 +tera1e2 +tera1i2 +tera1o2 +tera1u2 +tera1á2 +tera1é2 +tera1í2 +tera1ó2 +tera1ú2 termo1h termo1a2 termo1e2 @@ -3477,6 +4463,7 @@ topo1é2 topo1í2 topo1ó2 topo1ú2 +.tra2s1h .tra2sa2 .tra2se2 .tra2si2 @@ -3487,7 +4474,33 @@ topo1ú2 .tra2sí2 .tra2só2 .tra2sú2 -.tra3s2o3ñ +tras1abuel +tras1alcob +tras1alp +tras1altar +tras1andin +tras1atlánt +tras1oceán +tra3se3ro. +tra3se3ros. +tra3se3ra. +tra3se3ras. +.tra3su3da +.tra3su3dá +.tra3su3de +.tra3su3dé +.tra3su3do +.tra3su3dó +.tra3sunta +.tra3suntá +.tra3sunte +.tra3sunté +.tra3sunto +.tra3suntó +.tra3so3ñ +.tra3se3g +.tra3sieg +tran2s1h tran2sa2 tran2se2 tran2si2 @@ -3498,22 +4511,29 @@ tran2sé2 tran2sí2 tran2só2 tran2sú2 -tran2s1alp +trans3aminas tran2s1and tran2s1atl tran2s1oce tran2s1ur tran3sacci +tran3sactiv tran3seún tran3se3xu +tran3si3berian tran3si3cion tran3si3ción +tran3sido. +tran3sidos. +tran3sida. +tran3sidas. tran3si3gi tran3si3gí tran3si3ge tran3si3ja tran3si3já tran3si3jo +tran3silvan tran3sisto tran3si3ta tran3si3tá @@ -3523,6 +4543,7 @@ tran3si3to tran3si3tó tran3si3tiv tran3si3tori +trans3oraci tran3subst tran3sust .tri1ó2x @@ -3537,6 +4558,17 @@ tropo1é2 tropo1í2 tropo1ó2 tropo1ú2 +turbo1h +turbo1a2 +turbo1e2 +turbo1i2 +turbo1o2 +turbo1u2 +turbo1á2 +turbo1é2 +turbo1í2 +turbo1ó2 +turbo1ú2 ultra1h ultra1a2 ultra1e2 @@ -3581,6 +4613,28 @@ xeno1é2 xeno1í2 xeno1ó2 xeno1ú2 +xero1h +xero1a2 +xero1e2 +xero1i2 +xero1o2 +xero1u2 +xero1á2 +xero1é2 +xero1í2 +xero1ó2 +xero1ú2 +xilo1h +xilo1a2 +xilo1e2 +xilo1i2 +xilo1o2 +xilo1u2 +xilo1á2 +xilo1é2 +xilo1í2 +xilo1ó2 +xilo1ú2 zoo1h zoo1a2 zoo1e2 @@ -3593,6 +4647,55 @@ zoo1í2 zoo1ó2 zoo1ú2 wa3s4h +3grafo. +3grafa. +3grafos. +3grafas. +3grafía. +3grafías. +o4i3dea. +o4i3deas. +o4i3dal. +o4i3dales. +4o2i3de. +4o2i3des. +4i2dal. +4i2dales. +4i3deo. +4i3deos. +i2o. +i2os. +2i3co. +2i3cos. +2i3ca. +2i3cas. +4e3dro. +4e3dros. +4é3drico. +4é3dricos. +4é3drica. +4é3dricas. +4í3ble. +4í3bles. 3hablante 3habiente -3aficionad} \ No newline at end of file +5humano +5humana +3a4ficionad +3a4merican +su2d3a4merican +su2r3a4merican +3e4lectr +3e4léctr +di4e5lec +di4e5léc +5i4ndustr +5islámi +5islami +5ingenier +5técnic +5biología +5céntrico +5e4cuatorial +7u4niversid +5u4niversit} \ No newline at end of file diff --git a/tex/context/patterns/mkii/lang-nb.hyp b/tex/context/patterns/mkii/lang-nb.hyp index 85bd4f8e1..d23cc5a30 100644 --- a/tex/context/patterns/mkii/lang-nb.hyp +++ b/tex/context/patterns/mkii/lang-nb.hyp @@ -2,8 +2,114 @@ % for comment and copyright, see lang-nb.rme -% used: a b d e n r t +% used: A B D G H K M N S Z a b c d e f g h i j k l m n o p r s t u v w y z å æ ø ü \hyphenation{ -at-ten-de -be-tre} \ No newline at end of file +Ant-wer-pen +Arm-strong +Arm-strongs +Beo-grad +Beo-grads +Brynj-ulf +Brynj-ulfs +Brynj-ulv +Brynj-ulvs +Dansk-øya +Demo-sthe-nes +Gan-dhi +Gan-dhis +Helmut +Kam-tsjat-ka +Me-dina +Nielsen +Nielsens +Not-odden +Not-oddens +Sien-kie-wicz +Steinar +Steinars +Steins-land +Stendhal +Stendhals +Zara-thust-ra +Zara-thust-ras +atten-de +aust-røn +av-ise +aviser +betre +bil-skyss +bil-skyssen +bord-ende +bortan-for +bortre +båt-skyss +båt-skyssen +celle-ska-de +celle-ska-den +celle-ska-der +celle-ska-dene +cheese +dess-uak-tet +dit-over +elev-skys-sen +elev-skyss +et-steds +finger-spitzen-ge-fühl +finger-spitz-ge-fühl +fram-ifrå +før-enn +gi-vet-vis +her-etter +her-etter-dags +hes-te-skyss +hes-te-skyssen +hvor-over +inn-yver +høist-ære-de +kaste-sting +lands-øl +lands-ølet +lands-ølets +langt-ifra +maling-slitt +maling-slitte +midt-etter +midt-skys-sen +midt-skyss +ned-imot +ned-om +ned-yver +noens +næs-ten +nøye-reg-nen-de +opp-imot +oven-ikjø-pet +po-lar-is +po-lar-isen +polis +polisen +promp-te +sel-ves-te +skole-skys-sen +skole-skyss +skrov-is +skrov-isen +smal-enden +spleen +stokk-ende +svart-svidd +svart-svidde +syd-enden +sørpe-is +sørpe-isen +treskje +tvert-om +ukes-kor-tet +ukes-kort +ukes-kort-ene +upp-yver +ut-ørk +ut-ørken +velan +velet} \ No newline at end of file diff --git a/tex/context/patterns/mkii/lang-nn.hyp b/tex/context/patterns/mkii/lang-nn.hyp index 552576f8d..16d9e9a93 100644 --- a/tex/context/patterns/mkii/lang-nn.hyp +++ b/tex/context/patterns/mkii/lang-nn.hyp @@ -2,8 +2,114 @@ % for comment and copyright, see lang-nn.rme -% used: a b d e n r t +% used: A B D G H K M N S Z a b c d e f g h i j k l m n o p r s t u v w y z å æ ø ü \hyphenation{ -att-en-de -bet-re} \ No newline at end of file +Ant-wer-pen +Arm-strong +Arm-strongs +Beo-grad +Beo-grads +Brynj-ulf +Brynj-ulfs +Brynj-ulv +Brynj-ulvs +Dansk-øya +Demo-sthe-nes +Gan-dhi +Gan-dhis +Helmut +Kam-tsjat-ka +Me-dina +Nielsen +Nielsens +Not-odden +Not-oddens +Sien-kie-wicz +Steinar +Steinars +Steins-land +Stendhal +Stendhals +Zara-thust-ra +Zara-thust-ras +atten-de +aust-røn +av-ise +aviser +betre +bil-skyss +bil-skyssen +bord-ende +bortan-for +bortre +båt-skyss +båt-skyssen +celle-ska-de +celle-ska-den +celle-ska-der +celle-ska-dene +cheese +dess-uak-tet +dit-over +elev-skys-sen +elev-skyss +et-steds +finger-spitzen-ge-fühl +finger-spitz-ge-fühl +fram-ifrå +før-enn +gi-vet-vis +her-etter +her-etter-dags +hes-te-skyss +hes-te-skyssen +hvor-over +inn-yver +høist-ære-de +kaste-sting +lands-øl +lands-ølet +lands-ølets +langt-ifra +maling-slitt +maling-slitte +midt-etter +midt-skys-sen +midt-skyss +ned-imot +ned-om +ned-yver +noens +næs-ten +nøye-reg-nen-de +opp-imot +oven-ikjø-pet +po-lar-is +po-lar-isen +polis +polisen +promp-te +sel-ves-te +skole-skys-sen +skole-skyss +skrov-is +skrov-isen +smal-enden +spleen +stokk-ende +svart-svidd +svart-svidde +syd-enden +sørpe-is +sørpe-isen +treskje +tvert-om +ukes-kor-tet +ukes-kort +ukes-kort-ene +upp-yver +ut-ørk +ut-ørken +velan +velet} \ No newline at end of file diff --git a/tex/context/patterns/mkiv/lang-af.lua b/tex/context/patterns/mkiv/lang-af.lua index 4ada49a32..e458dad68 100644 --- a/tex/context/patterns/mkiv/lang-af.lua +++ b/tex/context/patterns/mkiv/lang-af.lua @@ -12,11 +12,11 @@ return { ["texcomment"]="% no comment", }, ["patterns"]={ - ["characters"]="'-abcdefghijklmnopqrstuvwxyzäèêëîïôöûü’", - ["data"]=".aan5s4 .aä7lawa .a6bc-b .a4b5la .ab7salo .a6b-ja .ac7cra. .a6farm .af7arm. .a6feet .af7eet. .a4f5en .a6fets .af7ets. .a6foes .af7oes. .a4f5oo .a4f5ra .af6ro' .af6ro’ .a7fro's .a7fro’s .af6ro- .a7fro-h .a6fry. .af3s .ag6aam .agte6r5 .a6guur .a9ha. .ah7lers .a3kw .a6leer .al7eer. .alf4 .al7fagr .al5fr .al6lda .a4l3o .al6oïe .a7loïen .al3p .al5st .al7thea .al7twee .al6zhe .amp4s .amps5w .a6naër .an7aëro .an6cpl .and4 .an5dr .ang4 .an5gl .angs5 .a4n5io .an7thro .a3pr .ap7side .a5rag .ara6p. .ar7thur .ar6zbe .as7jas. .a6snog .a6sof. .a5sti .a7straa .a7s6tral .at6hol .a7thol. .a5tsj .atte4 .au7drey .b6aanv .ba6din .ba4d5o .ba7loi. .ba7ragw .ba7rins .ba6sek .ba7tho. .be7deks .be6kaf .bek7af. .be5la .be7lol. .be7skos .be7thel .be7thul .bi7sho. .bli4 .blus5 .bo7kerf .bo7kies .bo7kors .bo7maat .b4on .bo7plaa .bo5ro .bo7sor. .bo5sta .bo7trit .bo7tswa .bo7uit. .bout5j .b4re .bu6eno .bu6lol .bu7thel .by6ldr .by6lho .by6lne .by6lpi .by7port .bys4 .by6tal .ca7thy. .ca7yenn .chlo7e. .ci6rca .ci7trus .cos7ta. .cy6pri .d2 .da7gon. .dag5s .da6kat .da6koo .da7tage .da6tji .dat7jie .da6wki .de6k7laa .de6klo .de6kwe .de5la .de7roga .de6sal .de6sok .de4sp .diep5l .di6jks .di4si .di7thak .do4m5a .do4m5o .dor7ste. .dr6oef .dun5s .du6pre .dut5j .dy7spie .e6bcu. .ed5wa .ed7win. .eer6sk .ee4t .e6fron .ef7ron. .eg7gofo .e6indu .ei5st .ek4s5k .ek7sopa .ek7sord .eks7tri .eks7tro .en7dres .enk4 .en5kl .e6noft .en7ofta .en4t5j .en7topt .ep7soms .er4d5a .er6dwo .er6fle .er6foo .er6inv .ern4 .er4t4 .er5te .ert5j .ert7se. .erts5w .e2s .e9sau .e4s3k .e3so .es3p .es8p. .es6pma .es3t .es6tco .es6tni .es5tr .e7tage. .et4sn .eur5a .eu7stac .ex7odus .e6zra. .f2 .fo6chv .fo6wle .f4ri .fy6tji .g2 .ga7lage .ga7lago .ga6lap .ga6loo .g6arbo .ga6sen .ge7dart .ge3g .ge7geks .ge7guil .gekun5 .gekuns6 .ge5la .ge7mopp .ge7muit .ge7nève .ge7rogg .ges4 .ge7sjab .ge7sjar .ge5sk .ge5so .ges7pe. .ge7sper. .ge7steg .gif3 .gi7gagr .gi6sen .gly3 .gly5k .g6lyna .g4oo .gou7da. .gr6äbe .g6ruba .gui7do. .hang5s .he6blu .he6gor .he6gra .h6eind .hek5o .he7rakl .he6r5en .he6wle .hi8v. .ho6fet .ho6laa .ho6loo .hooi5 .ho7taze .ho4t5o .hy6gro .ic7teru .i4gl .ile7us. .i2n1 .i9n8a. .in6ari .i7narie .ind4 .in7dwar .ing4 .in5gr .in5gw .in6iti .in5kl .in6kly .in5kn .in5kw .in6osi .i7nosie .in3s4 .in7snee .in7twyf .i5raa .i3sa .i4sk .i3so .ja6gli .jah7we. .ja6spa .ja7taga .j6äger .je7sopp .jo7dofo .jo7safa .ju6kos .juk7os. .j6ü6rge .jy6sel .k2 .kaar4 .kade4 .kadet5 .k4af .kaï7ro. .ka7nont .ka6pla .ka7plak .k6arbe .ka7thar .ka7thu. .ka6toë .kat7oë. .ka6tui .ke6ple .ker6k5a .ker6k5l .kerk5r .ker6sa .ker6sl .ker6s5p .ke4s5t .kie6st .ki6pli .ki4r .kit7se. .k4la .k6leyn .k4li .klip5 .knik5 .kn6opn .ko6maa .ko6maf .k4op .kope4 .koper7a .ko6pla .kop5o .ko7rag. .kor6st .kors7te. .k6rak. .kr6üge .kryt5 .ku7mon. .k4we .k4wo .ky7otop .l'7etji .l’7etji .la6eti .la6kwa .la5sa .lei5s4 .lek7oë. .le6poo .le5pr .le7shab .le6son .le4sp .les5t .le6suu .lig5e .li4gi .li6gom .li6gre .li7pase .l6loyd .lo6chn .lof7ui. .lo6glê .l6ontd .los5k .lu6gen .lui5sl .l6üder .m2 .m'7etji .m’7etji .ma6cdo .ma6nal .ma6nur .ma7stek .ma7thes .ma6zda .mel6k5a .mel6k5l .mer6k5l .mes5m .me4sw .me6tem .mi6dos .mi6rba .mi7traa .m4ne .mo7djad .mo7flam .mo6sin .mo4sk .mu4e .my6nen .my6n5in .my7unis .n2 .n6aand .na5fl .na6gro .na7groe .na7smaa .na7stor .na7uurs .ne4k5a .ne4k5o .ne6kri .nek7rin .ne6kys .ne4s3 .ne7serh .n6etik .ne4t5j .ne6tru .ne6wca .ne6wfo .ne6wla .ne6wma .ni4e .ni6jho .ni6rva .nix7on. .n6kosa .noet4 .noe5tj .no6gee .no4k .n6ondu .nu4l .ny7lont .oe5kr .oe4r .oe7ralg .oe7rang .oer7os. .oe4s3 .o4gl .oh7rigs .o6klah .ok7laho .ol6ieu .o7lieui .oms4 .o2n1 .ond6ui .on7duit .o6nemo .on6ias .o7nias. .on3k .on7parm .on3s4 .on6she .on6sse .on6t7eer .on6t5er .on4tr .ont7ras .ont5ri .o9nus .on6us. .oon4 .oon7de. .o4op .oor5n .oor5s4 .oo4s .o6peet .op7eet. .o6peg. .o6pein .o6p5erd .o4pof .o4pr .op5ra .ops4 .op7smuk .o7ragie .or6kne .o3ro .orto5 .o4sk .os5ko .os7oog. .ot6hel .o7thell .ou6doo .ou7nôi. .ou5tj .p2 .pa4d3 .pa7die. .pa6vlo .pe5la .pel6sk .per6st .pe4sk .pe4st .pie6tj .pi7laf. .pit5s .p4la .po6dzo .p6oefe .poen4 .p6ontw .po6sad .p4re .pu6tad .py6paa .py6pla .py6pol .pyp5r .py7thon .r2 .r'7etji .r’7etji .r6aard .ra7dart .ra6seg .ras7eg. .re7aumu .re6gru .rek5s .re6mas .rem7as. .re6mco .re4sl .rie4t .riet5j .riet5r .ri6ple .roc7ky. .ro6gak .ron7do. .rond5s .ro5py .ros5t .ro6tre .ro6wli .ru7klip .ruk4o .ru7kope .ru7staa .ru6suu .ry4k5a .ry6ste .s6aans .s4af .s4ag .sa7gopa .s6akty .s4am .sa6vlo .s4ca .se6an. .see5ra .see7ys. .se7khuk .se6laa .se6lop .se7reni .se6sle .ses5t .se6suu .se6tap .se4tr .sex5y .s6fale .s4fi .s4gr .s4ha4 .s4he .s4hi .s4ho .s4hu .s4in .si6nes .si7pho. .si7rag. .s4ja .s4ka .s4ke .s4kl .s4ko .s4kr .s4ku .slag5 .s4ma .s4me .s4mi .s4mo .s4mu .s6nags .s4ne .sod4 .so7dafa .so7dwan .so7iets .so6kop .some4 .s6oms. .s4on .so6neg .s4op .so6pek .so7phok .so7ross .s4pe .s4pl .spo4g .s6pren .s4py .s8ri. .s4ta .s6temp .ste7rol .ster6ta .ster6t7j .s4ti .s4to .straf5 .s6trei .s6tuar .stuc5 .su7biet .sub5m .sub5p .su8e. .s4ui .su5kr .su7ther .su7tra. .s4we .s4wi .s4wo .sy1 .sy6lvi .sy7nagr .sy7slag .t2 .t6afsy .t4ag .tee5k .te6flo .te7rafi .te7ragr .ter6tj .tert7ji .te4s5t .te7stud .ti6ene .tie6t5j .ti4k .ti6ner .t6jaai .tjok5 .toe7ys. .to6kla .to7ky7o. .to6lun .to7ront .tou3 .trap5r .trek5 .tre4s .trie4 .tries5 .t4sa .ts4h .ts6jaa .ty6daa .ty6dor .ty6dra .ui6laa .ui4t3 .ui5ti .ui5t6ji .um7hlan .uns4 .un5st .u5raa .u5tra .va6kad .va6kei .va6naf .va4n5o .va7raan .va6sen .va6swa .vas7ys. .ve7cino .ve7laar .ve7lare .ve7lêr. .ve7loer .ve7lome .ve7meng .ve7rema .ve7rena .ve7reve .ve7skaf .ve7tore .vlas5 .vo6gin .vo6lyw .vo6sko .wa7ghri .wa4n .wa7smou .wa6spa .web5m .we4bo .we6b-o .week7lan .wee4t5 .we6kuu .we4l5a .we6lin .wel7ing .we6nan .werk5l .wer6k5r .we4s5k .we6soe .we6swa .w8hê. .w4hi .wi6id. .wins5 .wi4p .wi4t .wî9e. .wy7kwas .wy7nand .wy6net .x2 .y6amin .y6anni .y6asud .yk7loon .ys3 .ys6ere .ys5la .ze5us .z6üric .z4wa .z4wi aa2 aad1 aa4da aa4de aa4do aa4d3r aaf7emme aaf6sat aag5al aag7asem aag7elas aag3r aag7rond aag5s4l aag5sp aag5st aag7swee aai7lag. aak1 aa4ka aa4ko aak3r aak7ster aak3w aal1 aal6dys aald7ys. aal5fe aal6fpo aal5sa aal7sfee aam1 aa4ma aa4me aa4mo aam7smul aan1 aan6dou aand6re aan7dren aan7dros aan7gons aan3k4 aan5kl 5aankon aan7kry. 5aanleg aan7sage aan6see aans7eer aan6sek 5aansig aan7skem aan5sl aan5sn aan6som aan6son aan5sp aan7tuig 5aanva aap1 aa4pa aa4po aap3r aa4pu aar3a aar6dan aard7ang aard7as. aar5de aar7ding aar4du aar3e aar3i aar7kwek aar6lbe aar6lka aar6lva aar6lzi aar6l-o aar3o aar7ser. aar7seri aar6sid aars8teek aars8tell aars6ti 5aartap aar6tin aar7tomo aar7tryb aar3u aas3 aa4so aas7omel aat1 aat7nagt aa4to aat3r aat6sef aat7sfee aat7slim aat6slo aat6sly aat7sonn aat6sow aat6sti aau6wbe aä5ron aba6kas abak7as. aba7komb abare4 aba7ster ab3d aber6sp ab5lau ab5rup 3abso abu7scha ab5wie ac5que a2d a3da a4d3aa adam4 adam7pe. ada4r a3de ades7lan ade7smee a3di adi6eus 5adjud 5admin a3do a4dow a3dr 5adres. ads7erwe ad4sn ads6op. ad5sor ads7teso ad4su a3du ad5uit adu7spel adu5tj 5advert a3dy ady7smit a1e ael7atoo ae4l5ei ae4lo aes5to aes5tr aes7tuur aë1 4afee af5eks afel5aa af4fre af5gha af5inr af3l a4fof af1r af5raa af5ram af5ran a4f3re 3afri a4f5rit a4f3ro a5frod a4f3ru af3s4w 3afva afval5 ag3aa a6gaanv a4gaar ag5adv a4g3ak ag5alg ag5api ag5are 4age. 4ageb 4aged age6ddo a4gei 4agem a4g5erv 4ages a6g5ewen agge7us. a3gi a5ging a4g5ins agi5s6tr ag1l ag5ogg ag5ord ag5ork ag5oud a4g3re ag5rei a4g3ru ag3sa ags7abno ag6sins ag5ska ags7koev ag5skol ag5skr ag5sky ags4lo ag4sn ags6oep ag5som. ags6oom ags6op. ag5spe ag5s6por ags4t ags7taal ag5sti ags6waa ags6wee ag4tu agt7uur. a4g3ui ag5ure ag5uur ag-7lag. aher4 ahe5ri a4hs. ai1 aig6ne. aiï5er ai4lp ain6ste aip6eis ai3s4k ai5sla ais4p ais7prys ais4t ai3tj ai3t4r a4k5aan ak5arb ake6lee ake6lof ak5ess ak5ins akis4 akis7te. 5akkoo a2k3l a5klank ak6leet a2k3n ako6bre ak5oms a1kr a4k3re ak5rig ak4sc ak5sme ak3sp a4k3ui a2kw ak3we ak5win a3ky a4kys a1la ala7gadi a5lagm al5agt ala7kled alan7gaa al5dei a4lef ale6str al4f3e alf6eni al4fh al5fie al4fj alf7olie alf6sko alf6sni alf6sta alfs7tan al4fu alf4- 5algori alien5s ali6gal ali7glas alk7aard alk7laag alk7oond alk5sp al4kui alk7wyk. 5alleen alm7eier alm7lont a1lo als4a als7agti als7ghaa al6skel als7kelk als5li al4s5oo als7pret als5waa als7werw alt6hea alt6hus alt7rots alt6sas alt6wee a1lu alve5o a2m a3ma ama3k4 aman6t5j ama7rins am5atoo 5ambag 5ambass a3me am5egt ame6sin ame5sm ame6spo a3mi ami7skyw amm6afu 5ammun a3mo amp7arre amp7lag. amp7leer amp7lig. amp7lug. amp7omhe amp7seël amp7sfee amp7sier amp7staf amp7staw ams7esel am6s5kop ams7lend am6smet ams7meti ams6mul am4s3o ams7pels am6swan am6swar ams7wyn. a3mu a4mui am5uit a3my an5agt ana7kwal an5alf ana6spi an4c- and7aans and7adel an6dakt an5dan and7anal an4dap an6dase an6datt and7attr an6degt and7egte and5eks and7emal an6derf and7erf. an6dete and7etes and7eval an6dinw and7inwa and6ja. and6jar an4d5om an4don an4d5op and7oud. an6drak an4dro and6ser and6s7kop and7spaa and7spre and7steg and7swee an7dwing and7wyn. ane6ron ang7aal. ang7adem ang7ghor ang6hai ang6lad an5g4li an6glig ang7lig. ang7lip. ang6nol ang6ons ang7ore. ang7repu ang7sakm ang6ska ang7snee ang6s7te. ang7stem ang6sur ang7ure. anie6t5r an5inl ani5sf ani7slaw an6kase ank7asem ank7refe an4kry ank3w an5ops an5opt an5opv an5ord an5org ano7roei ano7stoe anr6hyn ans7aalw an4s5am an6sass ans7asse an4sc ans7eila ans7eura an6sink ans7ink. an6sjek ans7jekk ans7jord an4ske ans5kei an6skin an6s5kop ans7kous an6slat ans7mada an4sn ans7oran an4s5pa an6sper ans7pet. an4spo ans4ti ans7toil ant5aan ant5aar an6tass ant7asso an4tei an6teks ant7ekst 5antenn ant7ete. an6tins ant5jo an4tol ant7opru ant7rest ant5rin ant7rob. ant6ski ant6sko an4tui 5antwo a1ny a1o a2p a3pa a4p5aan a4p5agt ap5aks ap5arm 5aparth a3pe ape6nop a3pi api6rfa ap3l a3po apo6kaa ap5ond apo5sta 5appar ap1r ap5rol ap3ru a4pry ap5ryk a5prys ap6sall aps7alli ap6seko aps7iden ap6skof ap6s5taa ap5sti aps7toet aps5we a3pu a4pui ap5uit a3py a1ra ara7gwan ara7klee ara6kop ara3p4 ara6ppa ar6d5agt ar6das. ar6datm ar5der ar6deti ar6d5opp 3area aree5s areg7swe ar3ei are7knip ar5fla arg4h ar5gha 5argite ar4gl arg4o arie4f ari6jke ar6k5ana ar6kini ark7leer ar5klo ark6los ark7onvo arko6v. ark7snui ark5sp ar4kw ark5wa arn6avo a1ro aroet6j aroe7tji aroo5h aroom4 aroo5p aroo5s ar3op aro6wva ar5rag arres5t ars5ag ars7elek 5arsena ar5sie ars6kou ars7krap ar6skre ars7kree ar6skro ars7pan. ar4spr ar6stal ars7tall ars7tee. ars6-in ar6taas art7aasv ar6talb art7albu ar4t5as ar4tc ar5te. art7eend ar5teh ar4tei art6hol art6hur art6omo art5oog art5oor ar4tor art7reek art7roep art6ryb art7samb art6slu art6spr art7spyn a1ru arus6o. a1ry ary7taal as3ag as5app as3c as4d. as4dh as5egt ase6rak as5ete as3f asg6hit as4hi asi7freu a4sj. a4sjm a2s3k a5skool a5skri as5kru a2s3l as5laag as3m a4smy a4sna as3no as9of. as5ogi a4s3oo as3op as3p as4por as3t as4t. a5staa as4th ast6les a5stof a7strak. a5s6tran a5s6troo as3w a4sys as5yst at5aar a4tag ata3s4 ata6sse atas7se. ata6wba ate5it 5atelj ate6rar ate6rer ate6ron a6tetes ath7cart a5t4hee ath7kinp ath7lone atie6te a2t3j atk6v-s 5atleet 5atmos at5oog at5ry. ats7alma at6sint ats7inte at4sj at6skin ats6kom at6skop ats7kop. ats7krip at4s5le ats7lykh at4sm ats6maa ats7nood at6somw ats7omwe at4son ats5ond ats7onko ats7onlu ats5op ats7ower ats7tend ats7trek ats8treke at6stro ats3w at5the att6hys at4tu atu6maa 2au aud6rey au5gra aug6sbu aul6spo au3p aure5u auri5s4 aus4t aus7tin. au5str aus7tus. aut6ste ava6lop ave7lott avlo6v. 3avon awa7glas awas4 awe5ga awe4r5a awer6ui aws6han ax5ofo a3ya ay4a. ay5ist ayn6ard ayn6or. a3yo a3yw azoo7ka. azz7agti az4zl azz7orke 1ä 1b2 2b. babak4 bab7wiër ba4d5ra bad5sp ba4kin ba3kl ba4kla ba6kleu ba4k3o ba4k3r bak3w bal6kla ba4lo bal7onts bal5or bal7tsas ban4da ban6dek ban4d5r ban7glad bang7ste bangs8te. ban4k5a ban6kre ban4kw bar7kaan bar4s3 bar5th bas7ekst bas7ghit bas7jan. ba4sn ba5spe bas7peer bat5aan ba3t4j 2bb b3ba b3be b3bi b3bl b3bo b3by 2bd b3de b3di b3do bed7slaa bed6sta beds7taa be3dw beel6dr bek7neus bek7wind bel6aga belk6li bel7klik bel6ldo ber6gaa berg7aar ber4gl ber4g5r ber7grys ber6gzi bers7pan ber6spr bers7pre bert6sk bes6aan bes4k be5ska be3sl be3sm be3so be5son be5sôr be3s4t be6s5ter be5sti be6stia bes7tial bes7trol bet4h be5tha bet7hesd be5ton be3tw 2b1f 2b1g b3ge bid3s bi4du bid7ure. bie6dui bie4g bieg5r bi4jl bin6dri bio7sfee bi4rc bis4a bis6ho. bis7scho bi3tr 2bj b3je 2b1k b3kl b3ko b3ku bla4d5a bla6don bla4d5r bla5so 4blau bleem5 ble4s ble7ser. bles5k ble6tji blet7jie blê6rfl blik5o blix7en. blo4k3 blo7kaal blo4m3 blu6sem bly7mare bly3s4 2b1n b3no bob7slee boe6kil boe6kom boe6koo boer6st boers7te boe4s5k bog7gher bog7skut bo2k1 bo3ka bok6aak bok6ale bok6as. bok6erf bok6ies bok3l bo7kleed bok6om. bok6ors bok6ost bok3r bok6rag bo4m5aa bom6aat bo4m3o bon6dam bon6dra bond7raa bon6tel bon4t5r bo9op. bop6laa bor6dak bor6des bor4g5a bor6gri b4ors bor6saa bor4s5k bor4s5l bor4s5t bo2s bos7anem bos7jamb bos7pepe bos7taai bo5s4tr bos7uil. bo5t4ha bot6sto bou6it. bou3s4 b3pr brand5a breek5 br4ei brei5s4 brengs7t brie6kw briek7wa 3bro bro4n bro4sk bro6vni bro6wni bru4l 4brup br4üm 2b1s b3se b3si b3sk b3so b3sp b3st bs4ti b3su 2bt b3te b3ti buc7cleu buik5s bui5t4j bult7af. bul4t5j bul6top bult7op. bul6tui bun7senb bus6had bus7toer but6hel buu7rend 2bv b3ve b3vi 2bw b3we by1 by3d by3k by4lb by4lt by3n4a by3s bys6kot bys4l bys6tek bys7ter. bys6tor bys4w byt7alka byt7eier by3tr 1c2 2c. ca4es cam5ph ca3pr ca3ra car6lto caru7so. cat4h ca5tha 2cc c3ca c3ch c3ci c3co ce4st ces5te 2ch. che6lan 5chemi che6reg che5r4i che7ryl. che7styl che6vvi ch5hoe ch5lei ch5nik cho7rage ch5sia 2cht 2ck c3ke cot7rand cove7ry. 2ct c3ta c3to c3tu cus5to cyp7rian 1d 2d. 4d5aanb d5aand 4d5aank d5aansl daard5u 4dabs 2d1af da2g da5gas dag5et da5gha dag6ham da5gra dag4sk dag5so dag7ster dak7lei. dak7oorh da4k3r dak5wa 4d5alar 4damb dam6plu 3dan dan6k7erk dan6sak dan6sko dans5m dan4so dan4s5t dan4t5r daph7ne. dap4l da5pla 4d3arm 4dart d5arti da4s. das7lag. das7traa da3t4j 2db dby6lvo 2dd dda5kl dda3s4 dde6lee ddel5so dder7aal dde6ras dder7as. d3dh dd4hi deba4t dee4g deeg5r dee4l dee7lig. 4d5eenh deë7skou 4deg. 2dei de3ka dek6aan de6klad de6k5lat de6klei dek7lei. de4kna 6dekono de6krie dek7riet 4deksa dek6ska del7appe del5eeu del5egg d5elekt del7elek 6d5eleme de6leng del7enge del6fer del5fi del6fos delf7os. del5oor del7oper del6ser del4so del7sold del7sone del4sp del6str del7stre delt6ag del7tagt del7weis 4demm dem6pla den6din 4d3eng 4denj den6kar den6kja den4k5l den4kr dens7pre den4t5j den6tri deo7plek deo7sfee 3dep der5ast de6reen der7een. der7emig der7ent. der7flap de6rin. derm7ins der5na de4ro de5rob de5roe der5of de5rol der5on der5ow der5ps der6sjo der5s6kr der6slu der6spu der7thal der6uit de5sag des7alni des5ap de6seng des7enge de4s5in deskat5 de6skor des7leed de4sn des7offe des7oksi de4s5on de4sor de4spa des7pari des7poës des7prik des7taal des7tele de4sti de5stig de4sw des7weë. 4d5ete. deten6te de3tw 4deuro deur5s6w 2d1f 2d1g dge5sp dg4li 2dh dias4 dia7stol dia6zvi dic7kie. dic7tio. die6fal die6kes 5diens die4pl die6tom die4t5u dig6ofa di4gre digs4 dig7skro dig7som. di6kamp dik7amp. di4k3l di4kr dik7ribs di4kw dik7wyn. di4l5al din6gas din4gr 4d3inl 4dins 4d3int 4d3inv di6sass dis7assi di4so di5son dis6pne dis7quis dit6hak dit7jies 2dj dja7dji. d4ji. d4jia 2d1k dklo4 2d1l d3la 2dm 2d1n doek5r doe6lon doe6sko does7kop 2dof 4dogi do4l5os dol6sou dols7ou. 3dom dom6pli dom6sap 4d5omse dom7slim dom6swê 4domt don4sk 4d5oord 4dopn dop6rof dop6rys 3dor 4d3org dor7othy dor4sl dor4st dos6tel dou3t do3y doy4e 2dp d2r 3dra dra6gaa 4d5rand dra7stan 4dreë 4d3reg d4rela d4rew 4driff d5rigt d5riss 4driv droë7ys. 4d5rond d5rooi 4d5roos dr4op dro6pan dro5pn dro7sfee 4d3rug d5ruim d5ruit 4d3rus 4d3ry. 4d3rye 4d3ryk 4drym d4ryw 2ds ds5aamb ds5aar d4s3ad d5sakr ds5aks ds5angs d4s3ar ds3as d3se d4s5een ds5eis. d4s5eko dse4l dse7leer d4s5eng d4s5era dser6tj dsert7ji d4s5erv d5sfeer ds3id ds5imp ds5inde d4s5ins ds5int d2s3j d5skee d4skin ds5kind d4skis d5skole d4skom d5skoo d6skraa d6skrit d6skroo d4s3le ds3li ds6luie ds3m d5s4mee ds6moor d4sna ds5neu ds5noo ds5not d2s1o d3soe d5some ds3on d7sonde. d7sondes dson4t ds5oog ds3op ds3ow d5s4pel d5spes d3spi ds5pop ds6prek d7spreker ds7preki d1st ds5taak d4staf d5stand ds5tea d5stel ds5tent d5ster. ds5terr d5sters ds4ti d3str d3stu ds3w d3sy 2dt dter6tj dtert7ji du4e- duns6te dur6rhe dusie5k dus6kap dus6pel 2dv dverdiens9 dverdien8st dve6sid dvie4 2dw d4waal d5waar 5d4wang dwa6nor 4dwarm dwar7se. d3wat d4weil 5dwerg dwerk5o dwe6tar d3wil d4wing 4dwoo d4wyn dys5ag dys6mit dys7tuin 2d- d-r6hod e1a eam6ses eang4 eate4 eau7mont e3ba eb5adr eb9cu. ebou5t ebou6t. eb4re ebrons5 eb5tui ec5cle e4chn ech7tiaa eda7gaat eda5go e3de ed5eis eder7as. ede7ring ede6sap ed5off edors5 ed4ra ed5rep ed6saks eds7kalm ed4sl eds7lafe eds5om ed3sp ed5s4we ed5uit ed2w ed5woo ed5yst ed3yw ee5agt eed6atu eed5we ee4dy ee2f eef7laag eef7lopi eef7rant eef7rek. eeg3l eeg5ru eeg3s4 eeg6sdi e5eila ee2k eek5ass ee5klaa ee5klag eek5lo eek3n eek5og eek7oors eek7rooi eek3w eek6wal eel5ap eel6doo eel7doos eel5een eel7eer. eel5ei eel7indr eeling7s6 ee6lins eel5int ee4l3o ee5lob eel6ood eel6oon eel5sa eel7snag eem7onde eem5ou ee2n1 5eendj een6ema ee5nen 3eenj eenk4 een5kl een7slot een5sm eens6pa een7swee een7topp ee4ny eep7esel eep7leer eep7loog ee4pop eep7roes eep6sam eep7skep eeps5ko eep7skui eep6sti ee2r eer5ap ee5red eer5ee eer5end eer5in ee5rob eer7oes. eer5om eer5on ee5row eer5ps eer7skur eers7lam eer7smed eer6sow eer3u eer6ust eery4 eer5ys ee2s3 ee4s. ees6ala ees6ap. ees6lep ees5me ees7muil ee5sna ee5sny ees6op. ees6pre ee5staa ees6tal ees4tr ee6styd ee4sw ee5syd ees6yfe eet7appe eet7eenh ee4ti eet5in eet7rek. ee6troe eet7roed eet7ruik eet7wiel eeu3g4 eeu5in eeus4 eeu7spoe eeu5tj eeu6ur. ee5yst e3êr eë5aan eëks5t eël7eier eël7yste eë4na e3ër eër7agti eë5ran eër7arm. eë5rod eër6ske eë4sk eët6ste eëts7te. e4faf ef5afs ef5eks 5effek ef5inh e1fl ef5loo e4fly ef5oms ef5oue ef3st efs6tal eg5amp ega5s4k e3ge ege6las egel7as. eges7per eges4t ege6vwo e6ginko eg5ogg eg5rig egs7enti eg6sins eg6s5int eg3sk egs6lot egs6pre egs6pri egs6pyk eg6s7taal egte6re e4g3ui eher6in ehe7rinn eho6kra eib7niz. eid7rok. eid7saam eid7salo eid7sirk eid7skou eid7sku. eid7spa. eid7spek eid7ste. eid7stoo eid7sug. ei1e eie7naan eig6h-n eig7opro eik7aard ei5kno eik7wydt eil6spa 3eind ei4n5ed ein7eed. ein7glas ei4non ein7oord ei4n5op ein7otte ein6sad ein6sep eis7angs ei5sei ei6s5ind ei5sja eis7kamm eis6kaw ei5skê eis6kot eis6laa 4eiso eis7ouer eis6pir ei5s6tel ei5s6tre eit2 eit7hand ei3tj eit7klin eit7nisp eit7onde ei5tra eits5ko eits5l eits5o eit7spor eit7stak eit7stra eits5w eï5mit eï4na eïn7klin eï4no eï4nu eï5oni eï4sl eja7stas ek5aan ekaars8te ek5aks e3kan ek5asg e3ke ek5een eke7naar eke6tam e3kê e4k5ins ek3k e4k5les e5kleu e4klê ek5log e3koe eko6mol ekom4s ek5omsl ekoms5t 5ekono ek5ooi e3kop eko6pap e4k5opm ek5opn ekor6da eko7rum. ekou6st ek5owe e1kr ek5rad e4k5rok e5krom ek5rug ek6sapp 5eksemp eks5esk eks7inge eks7logi eks7loks eks7outo eks5pir eks5po eks6poe eks6tel ek6sten ek4sti eks7uur. ek5uit e4kwê ek5wie e4kwu e1ky e1la e6l5aand el5aanh e6laanv el5aard el5adm el5adv el3af el3ag e5lag. ela7klon e4l3al e5lari e4l5arm ela7slan el5asp eld7adel el4dap el5de. el6d5ele eld7erfe eld7evan eld7olie eld7onde eld7smid e3le el5eien eleis6t elei7sta e6lelek el5erts ele7sett ele6too el4faa elf6abr elf6eit elf7en-d elf5erk elf6lan elf6les el4fon elf7onth elf7ontp el6foop elf7oops el6foor elf7oors elf6ron elf7twyf e3li eling8stell el5inh e6linko el5inv elk7nage elks4 el4kwi el4lv elm5agt e1lo el4ob e4lol el5oli el5ond el5ont e4loor e4l5opd el6ope. e4l3or el5phi els7angs el5sfe el6sind els7indr el6skan el6skom els7korr els7krit els7lof. el5smi els7mora els6nag els7nood els7onde els7oork el6stek el6s7tran els7ware el5swee elt7akke e1lu el5uit eluit6j elui7tji e3ly ely6kaa em5app e5masj eme6lek eme6lew eme6ron eme4s eme7sis. emes5m emes5t e5metf em5eva e4moef em3op em5org emp7laag emp6skr ems4p em5spl e4naf ena7glas en5agt en5akk en5alt e4n5art ena6spe en6d5agt ende7ro. end7raak end7rit. ends7oë. end7sons end7ure. end6wer en5eil en4en e4n5ent 5energ ener6tj enert7ji eng6hor eng4la eng6lor e3ni en4ig en4im en5inh e6n5ink. eni7soms 3enji en6kinh enkom4 enkoms5 enk3w e5nomm eno7ryn. en5out ens7adem en6sall ens7are. ens7eise ens7elek ens7elik en5sen ens5erv ens7esse ens6haw en5sie ens7inga en5sji ens7koei ens7kyke ens7luik ens6med ens7nuk. en4son ens7onru ens7onva en6spei ens7pist ens7pot. en6spou ens7pous ens7taak en6stak ens6tam en6steh ens6tei ens6tel ens7tele en7sters en7s6tes. ens6tet ens6teu ens6too ens7toom ens7trek ens7uil. ens7ure. en5sy. ent5akt en6teks ent7inte ent7rif. ent7rok. ent6sin ent6son ent6spa ent6wen en3ui enu6lin enu5sk enu5st e3ny en-7steg e1o eoe4s eo5fag eo3g4n eoi6ste eop6lek eo3ro eo1s eos4t eo3tr e4paf e4p3ag epe6loo ep5emm ep5epi epers7te 5epidem e4p5int ep4la ep5lap ep5ligg ep5lus epoet4 epo6nin ep5ops e4p5rei eps7ameu ep6s5eis eps5id ep4sj ep4sk eps7kano ep5ski eps7kohe ep4slu eps7luik eps6oms eps5on ep4s5pr eps7waar ep5uit e1ra er4a. er5aan er5afd er5afh er5afsk er5aft er5afv er5afw er3ag era7gree era7kles er5aks er5akt er5alb er6ald. er5alt er5ana e5randa e4rapp er3ar era6ser era7uitv erd7ryle erd7slip erd7tree er3dw er4eb er6eenk er5eers er5eff er5eie er5eil er4ek er5ekst er5elm e4r5emm e6rengt e4reni e4renj er5erg er5erv e3r4es er5esel ere7spio eres6ta ere6stp ere7temm e5rewa e1rê er4fh er6flaa erf7leen er6flet erf7lett er5flo erf7lug. erf7lus. erf7omhe erf7oom. er4fp erf7reuk erf7ruik erg7aren erg7lyn. erg7renm erg7rymp erg6rys erg6sho erg7stra erg7uitj er4id eri5fr e3rig eri4g5a e4r5ind e6rink. e6rinna er5ins e4r5int e6r5ital eri7trea erk5aan erk7esel erk6has erk7ink. er6kins erk7inwy er4kj er6klat er5kle erk7onde erk6opn erk6s5on erk7spas erk6sto erk7uurr er6kweë erk7weë. erk7ywer er5lik er5lui erm4a erm7aanh erm7afsl ern7eiwi ern7kwes er4nm er4nn ern7oes. er4nr e1ro er5oew er3oë er5ogg e3roï e5rok. e4r5oks e4r5oli er5om. er5omh er5oms er6ona. er5oog e5room er5oond e5roos e4r3op e5ropa er6opla e5ropo e4ror e5rora 5erosi e4r5oss ero7stil er5oud er5oue erou6t. erp7anke er6pinh erp7inho erp6lan erp7ruik erp6sig err6ein ers7assi er6s5eli ers7ete. ers7inda ers7jean ers7kaia er6skaj ers7kaju er7skake ers7kaki ers7kete ers7kiss ers7koet ers7koor ers7kop. er5sky ers7less ers7lone ers7luid ers6mal er7smara er6smat er4s5om ers7onvr ers6opn ers7ower ers7pien ers7put. ers7scen er5ste ers7tele ers6teo ers4ti ers7treg ers7waar ert5aan er6taap ert7aap. er5tap ert7ape. er6tend ert7end. er5tes ert6hal ert7jakk ert7opin ert7orre er6tres ert7rok. erts5l ert7uur. ert6wak er5twi e1ru erug3 er5uin er5uit er3uu e1ry ery7doel ery7salf erys6ma ery7smaa ery7suur ery7trek e5saan. e5sage es5agt es4ak es5all esa6mol es4an es3c es4dh e3se e4s5een e4s5epi es4er e3si es4ia es4ie es4if esi6gei e4sill esin6s5i es4it e2sj e4s5ke. es5kle eskor6s eskors7t e5s4kut e3sla es5lem es4lip e1sm es4me es5me. es5men es9mè. e5smou es4mu es5nie es5noo es4ny esoet6j esoe7tji eso7fagu es4ol e3s4oo es4ou e1sp e5spel es5pen e4sper es5pet es5pir es4pli es4pra ess6opv e1st es4t. e5stad es5tas e4s5te. es5tea es5teli e4s5tes estes5o est6her es6tik. es5toi es5tos e6strak es4tre e5stuk e3sw es4yd e4t3ag eta7stas e3te e4t5eie ete5r6aa etie4l5 5etike et7jie-k etk6ysi eto6nop et5opv e4t5ord e4t5ram e6treke e6treko etre7kor et5rim ets7fyn. et6skat ets7kato ets7kous ets7krie et6s5lap ets6maa ets5ong et6spaa et4spr et6stek ett6re. et5uits et5unie et4wi et5win et4wy et5yst 2eu. eug6rie e3uit euk7inte euk4l eul7eien eu4loo eu5mon eum7uitg eu4na eun6sla eup7aand eu4ra eur5aa eur6aal eu5ral eu4ree eur7eet. eu6reg. eu6regt eur7egth eur7ekst eur7elem eur7spar eu4sa eus7ape. eus7jig. eus6kot eus6tac eute4l eu5tem eu3tr e1uu 2eu- eva7kwaa eva6les evr6ore evu6es. ewal4s5 ew4ar ewee4 ewe7gaan ewe7goed ewe7inde e5weis ewe6nee ewen8stes ewe6res ewe7span ewik4s ewiks7te exy7ste. eyn4o e5yste e3yw e4zka ez9ra. è1r ê1 êe4ro êla7flui ê4rde êre6loe ê4rhe 1ë ë1g ëi3e ëk4sk ëks3p ëks6pek ëk4st ë3laa ël5agt ël5alb ël5as. ë4lei ël5ent ëlf4l ël5fle ë5loop ëls7kuil ën5agt ën4tr ënt5re ëpre4 ër5aan ër5afd ër5off ërog4 ëro3s ër5owe ërs7kent ë1ry ë1s 2f. 1fa f5aanb f3aar f3ad 2f1ag f4agi fah7renh fai6r-n fak6ste faks7te. fan4t5j fan4tr fant6s5t f3ap f3art faru6q. 2fb 2fd f5dein fde4s fde7sake fde7sess fde7skei fde7stor fde7stra fde7sust f3d2w 1fe 4feen 3f4ees f3eie fe4l5ap fel7asem fel7enti fe6loon fel7oond fel5s4m fel6spoo fe4lu fe4ly fel5ys fer6skr fers7kra fer6sku fers7kui f5erts fe2s fes3t fet7ete. f1f ffe6las ffe6ret ffe6tet ffi6eek ffies6m ff5rei f1g fge7sper fg4ha fg4li fg4ly fgod4s5 1fi fi3d fid6ji- fie7ekst fie7lafo fie7smaa fie4s5o fie6tol fi5lag fil4m5a 4finr fi5sto fit4z 2f1k fkom6st fkoms7te fla4p flap5o f2le f5lees f5lese fle4t flet5j flex7or. 2fli 5f4liek 3f4lit 2fm fmo4no f1n fni4s3 1fo f3of 4foff fok4s5t fol4k3 4foms 5fonds fond6sk fond6st fonds7te f5ontb 5fonte f5ontl f5oorl 2fop fo4po fop7spen f5orde f3org for7oksi fo5rom fo3ru fos7feen fout5j fox7hill fox7stra fp4sa 1f2r frag6aa 4fram f4ras f4ren fre4s5k 4f3rig fri6too f4rod fru5ga f3ry 2f1s fs5agt f4s5ank f4s5eko f4skon fs5log f3sm f4sma fs4me fs4mi f3sp fs4pl f4spro f4s5tak fs4ti 2ft ftre4 ftre5d ftrek5 1fu fu4ch fur6ore fu3so 4fuur f5uur. 2fv fva4l 2fw 1fy fyn7goud 2f1ys fyt7appe fyt7jie. 2g. 1ga g4aai gaam6s7te g4aan. g5aanbi g6aandh g5aanl g5aanw g4aat 4g3add 2g1af g4afo 2g1ag g4agr ga5gre gag6rep gak4l ga5kla gal7afsk gal7appe galei5 gal7oog. gan6gra 4g5anke gans7ke. g3app ga3ra 4g3arb 4g3arm gar4s3 gars6ti gar7stig g5arti ga6sarm gas7arm. gas6mok ga4so ga5sol gas6pel gas6tre ga4tr gat7ruik gay7nor. 2gb gbys4 2gd gde7roof gdut7jie g3dw gd4wa 1ge ge3d gedi4s g5eenh gee6tal geet7al. geës3 geë6sti ge3f 4ge4ff gef4l ge1g2 4geg. geges5p geg6uil g3eie geï7migr ge7k6lik. 4geks gek4y gel6agk gel6dad gel4do ge5lol ge5loo ge6loon gel7oond gel6s7te. gemi7au. gem6opp 3gen gen4dr gen6dur genes5t 4geng ge4oi gep4a ge5pag geper6st gepon6s 3ger ge5rap ger6ard ger5ete ger7iden ge6roef ger6ogg ger6spo ger5sw ger6uit ge3sa ge5sfe ge5sin ges7jagt ges4k ges7kade ge3sl ge3s4m ge5sne ge3sp ges7perb ges7pers ges7pes. ge3st ges6tas ges6tig ges4w ge5tja ge3tw ge3ui ge5um. gev7woes gewens7te ge1y 2g1f g3fl gf4li 2g1g2 g3ga gga7kwee gga7stre gga5t4j gge6sti 2gh 5g4hoer gho7ghok gho4l 5gholf g4hs. ghu6moe 1gi g5iden gie6far gi4fa 4gimp gin6gaa 4g5inri gip4s gip7siet gis7enti gi5tra git5sw 2g1k gkaar4 5g4lans gla4sa gla6sel gla6ska glas5o g4le. 5g4len. gli6don g4lif gli6gur 4glik g4lim g4lip 3glis g4lob 4glod 3g4loe g4lof 3g4lom g3lop 3g4lot g4lo- g3lus 3g4luu g4ly. 4glyn 2gm gma7skui 2g1n gneem5 gneet5 gnie6ko 1go god6sak god6sid 4g3oef goe7krui 4goes g5oes. g5oeta goe7the. goë7lary 2g1of 3gogi gol4f5o 4g5olie go4mag 4g3ong gon6sto g3ont goo5gl 4g3oor 2g1op go5pla 3g4opo g5orig go3sl gos7pelr g5osse go3s4t gou4d3 goud6a. gou7dief gou7dini gou7dink goud6s. gow7rie. go9ya. 2gp 1g2r g4rab g5rak. gra4ma gra7mado gra4m5o g4ras gra4s5a gra4se 4g3red g4ree4 g5reek greep5 4greë g4ren gren6st g5rese gre4sp gre6sur gre6tji gret7jie g4reu griek6s7t grie6t5j 4grig gri4p g5rit. 4g3rok g4ron 4g5rooi g5rook g5room g5rowe 4grug g5ruim 4g3ryk 4grym gry6ste 2gs g2s1a g5saam gs3ad gs6ade. g4saf gs5agt gs5aks g5sala g5sale gs5ana gs5ant gs5app gs6appe gs3ar gs3as g4s5een g4s3ef gs5eis. g6seise gs5eko gs5eks g5sekt g4s5ele g4s5eli g4s5ene g4s5est g4sew gs5ewe gs3f g5s6feer g4sid gs5ide g6simpa gs5inde gs5ini gs5inl gs5ins g2s3j g2s1k g5skaal gs5kab g5skad g6skapa g5skatt g5sked g5sker g7skeur. gs7keurd g3ski g4s5kin g4skl g5skof g5skole g4skom g5skoo g6s5koor gs5korr g5skot g5skou gs3kr g2s3l g3s4la g5s4lop gs3m g5snel g2s3o gs4ol gso6pro gs4ou gs3p g5s4pel gs5per g5spes g3s4pi g6spill gs4poe gs6pore g7sports g5s4pru g1st g6s5taak g4s5tab gs6tabi g4stak g4stal g4star g4s5tek g6stelg g6stera gs5teri g6sterr gster6s g6stese g4sti g5stigt g4stoe g7stoele gs5toer gs5toet g4s5ton gs5trad g6strak g6stran g6strap g6strib gs5troe gs7troon g6struu g4s3ui gs3w gs6werw 2gt gte7eenh gte7lagi gte6ras gte6rer gte4ro gte7roer gte7rol. gtes4 gte7sfee gte7smee gt5uri 1gu gu2a gu2e gu5ela guid6o. gui6rla 4guit 2gv 2gw g3yst 2g- 1h2 2h. 2ha. hal4f3 hal6m5ag 4halo hal4s5k hal6s5tr ham7pagn ham6skr hams7kra han6dan han7dja. han4dr han4du han6gli han6gor hangs6l hang5s6w han4s5k han6ska har6dop hard7op. har6sel har6sol har6spa har6t5aa har4t5j har4to har7toem ha4wk haw7shan hay6eli heb7lus. hee4l heer8s7te. hees6e. heg7orga heg7rank heg7spyk 5heid. heid7stem he4ko hek7saan he4k3w hel7ange hend4 hen4so he2r her3a he9ra. her6akl he7rald. he5r4an he3re her7egpa he4r5ek he4r5ev herf4 herfs5 her3i her6ib. he5rid he5rod he5rol her5ond her7ontm he5ros her6oss he5rou her5ow her7sche her3u her5yk he4sp hes7peru he4s3t hete5r6o heu6paa he3us hev3 he4vr hewen7st hie4r hier7in. hie7roni hie7rony hië1 hil6lbr 5hings hing6s5t hipe4 hi4rl hi4sp his5pa hi4v- 2hl h3li 2hm h3ma 2hn hode6sl hodes7la hoe7kaai hoe6kys hoe6spi hoe4s5t hoër7op. ho4fa hof5aa hof7amp. hof7uits hog6hok hoi7swer hok7rakk hol7aar. holes5 4holf hol5in hol7oog. 4hon. hon6daa hon6dag hon6dro hop7land hop7smaa ho3ro hor4s hor4t5j hos6hol ho4ta hou4t5a hout5j hou6tol hou6tom hou6who 2hr hre6sto hrie4 hries5 hris5t h3te h3to hu9go. hui6daa hui6dui hui6sef huit6ji hui7tjie huk6hun hul4p5a hul6pek hul6ple hul6por hul6ste huls7te. hu3mo hum7oes. humus5 huter6s hut7jie. hut6spo hut6ste huts7te. h5vill 2hw hyg7roma hys3k hys7tang i1a iaan6so iaan6sp iaan6st iaans7te iam7son. ia4nop ias6koo ia5spo ia5sta ia5s4tr i4baf i4bag ibou6s. ic5ky. i2d i3da ida7groe id5agt idde6ra i3de ide7snui i3dê i3di idia5s id4ja i5djan i3do i3dr id2s1 id4s5et ids7inoe id4ska ids7kerm ids5kr ids3l ids7lags ids7nye. ids3o ids3p ids6pa. ids6pek ids6pie id6spil ids6pri id6spry ids7taal ids7tee. ids7teks ids7tele ids5ti ids5toe id6s7trek ids7ure. i3du id3uu ieding6s7 ied7ione ied5rol ied3w i1ee i4eee ie5een ieë7aard ieë6lys ief7alar ie5fie ie4f3r ief7stal ief7uitg ie5gla ieg7loka ieg7riem ie6grit ieg5st iek7asyn ie5ke. ie6k5erv iek7esse ie5kie ie6klaa iek7laai ie4kni ie6k5ond iek7ople ie6kops iek7opse iek5opv ie4kre iek7revu iek7rigt iek7ware iek7wees ie4k5wi iek6wos iek7wyd. ie4laa iel6afo ie6lene iel7oor. iel6san iel6s5on ien7anal ien7glor ien6kro ien7olie ie4n5oo ien4s ien7sakk iens5or ien7sout ien7span iens5t ien7stam ien7stel ien8stele ien7stet ien7stoo ien5suu ie4n5ur ie6poog iep7oog. ie6proo iep7rooi ier7afma ie6rafs ier7engt ier7eter ier7neff ier7omtr ie4r5on ier6oni ier6ony ier7swee ies6amp ie5se. ie6senk ies7enke ies7ents ies7ferw ies7kaf. ie6skon ies7kop. ies7kraa ies6kry ies7laag ie6slep ies7lepe ies5li ies7luik ies7meub ies7mooi ie3so ies7oes. ies5ond ies7oorp ie6sopn ies7opne ies7pane ies5per ies7plig ie6s7taal ies6tas ies7tee. ie6steh ies7tele ies7tent ies6tin ies5uil ie4s3w iet7aans iet7aard iet7alba ie5te. iet7erts iet7omse iet7reke iet7reko iet4sl iet7uie. ie5twi ie4tys i1eu i4eub i4eud i4eug ieu7grie i4e3ui ieu7ing. i4eul i4eum ieu7skot i4euu i4euv i4euw ie5wie ie4w- ie5yst ie-7klik i3èr i1ê iël6sku iën6tji iënt7jie ië4s3t i4fei i4fim i4fin if1l i2f3r i4f3ui i4g5aan i4gap igare4 igaret5 ig5eff ige6naa ig5ete ig5ins ig1l ig5loe ig4op ig5opt ig5org igo7roos ig5res ig5roo i4g3ry ig3sa igs6ins igs7kaps ig7skend igs5ko ig5sku igs6mee igs6ona ig5soo igs7poei ig5sti ig7stoei igu7era. ihu6ahu i1i ike6roe iket5j ik5kli i2k3n iko6nat i1kr ik6sakt iks7akte iks7iden ik4sin iks7inve iks7juk. ik6skom iks7paar iks6pad iks7pare iks6tik iks6tuu iks6wel ik5wan i4k3we i4kwy 2il i1la il5agt ila6too ilbe6st ild7agti ild7smaa ild6stj ild7temm ilet5a ile6tji ilet7jie ilf4l il5fli il5gha ilinde6 illo4w 3illu il4m5at ilm7oper i1lo ilo5sk ils7insp ils7orde il4spr ilt7aar. i1lu i2m i3ma im5agt i3me i4mek im5eks ime7laar iment6s ime4s imes5t i3mê i3mi 5immigr i3mo i4m3o4p imo7theu 5implik i3mu imu6maa in5aard i4naf i4n3ag in5akk in5arg in4d5aa in4das inder7as 5indiv ind6oef in6doog ind7oogm in6d5oor ind7sleu ind5sw 3indu in5dwi inee7tji ine5ra 2inf ing7aars in5gan ing7eter ing6hpa in6gind in6ginf ing7infr ing7inst ing6leb ing6ope ing6opl ing5ou ing7pseu in4g5ru ing7saag ing7sap. ing7see. ing7sekr ing7seku ing7sfer ing7sin. ing7sinj ing7skal ing7skêr ing7skud ing7slep ing7slym ing7sofa ing7som. ing7somm ing6s7pil ings9telle ing7stin ing7suie ing7suil ing7swel ing7uil. i3ni ini6gaa in4ik in5inf 5inisia ink7erts ink7laag ink7ler. ink7nerf ink5nu ink7ogie in4kol ink7olie 5inkom ink7ring in6krol ink5st ink7wit. 5innam 5innemi innes6t inne7ste in5ong ino7skaa in5rag 5inrig ins7epou in6s5ete 5insets in4sg ins7kaps ins6kin in3sl ins7molt ins7moor ins6ond 5inspek ins7prie ins4t 5insti insti7t. ins6ton ins7twis int7appe int5ess inte6s5t int6he. int6uit int6wyf inu5e. 5invlo i1o io3pr ior6ubr io1s ios4k io5skl ios4p ios4t io3tr i2p i3pa i4p3ag i3pe i3pi i3pl ip4lo i3po ipo4s5t i3pr ipre4 ip4s. ips7kopi i3pu i4pui i3py i1r ir4ch irke4 irkel5o irop4 iro5pr iru4s i4rwa is3ag i5sagi i4s5aks i6sangs is3ar i4sarg is5asp i4sav is3c i4s3ei i4s3et ise5um i5sfeer ish7nie. i4s5int is5inv i2sj i4sj. is5jan is5joe i2s3k is4k. i4ska is6kaaf is5kan is4kê is5kui i2s3l is5laa i5slag is3m i5s4mit i2s3n is5oes is5ond is3or is3p is4p. is3t is4t. is4th isto7pho i5s4tyn i4s3ui i5suik isu6maa is3w i2t i3ta it3ag ita6tis it3b i3te ite7dwal ite7glas itek7te. ite6mas i5tenh it4er ite5ru i4t5ete i3tê i3ti it4in i4t5ins i3to ito5fa ito7plan ito7rowe it1r it3re it3ry it4sc it5ser its5ete its7jood it4s5oo its7perk its6tek its7tori its7uur. i3tu itu6saa it5win i3ty ity7sokk itz7laan i1u ium1 iu4ma iu4me iu4mi iu5mie ium6uur iwel6s5k iwe7mos. iwes4 iwe7spor iwe5st 1ï ï2m ïn5akt ïn3o ïns4t ïn5und ïs5lam ïs3t 1j 3jaa jaar6s7kr 3jac ja4cq 3jag ja4ga jan7ghai jan7knap jap4l ja5pla 3jare 3jari ja4sm jas7pant jas6tas jaz4z jaz7zeri je4kn je4kr jek7rasi je5rop jes7nië. jes4t je4t3r jet6sjn jeu4g 5jie5kn jie6nan jie6nol jien5s 5jieon 5jieop jie6ska jie7skap jies7kat jie6ski jie6skop jie6s5lo jie6slu jie6sol jie6son jie6spa jie6s5tr jie6sui jie7suik ji4eu jin7gope ji4rp job4s3 joe7kwee joen6sk 5joern 3jong jos6afa jou7kuit juit6sp juk7riem 3jun jun6kre 2k. 1ka k4aal k5aand kaan8s7te. k5aanw kaar7se. kaars7te 5kaart kaar6ti kaar6t5j kade6la kade6sl 4k3adv 5kafee kaf6oef 4kafr 4k3afs 2k1ag 5kagem k4agg 5kagge k4ago k4agr 4kaks kal4k5a kal4k5l 5kalko kal6koo kal4kw kal4s5p kal4st 3kam kam6par kam6ple kams4 3kana kaner5o 3kank kan6ont kan6sko kan6ste kans7te. 3kant kan4t5j kant7om. kan4t5r ka4pak 5kapas kap7inte 5kapit kap6lak kap7lat. kapo4 ka5pri kap7seis kap6spr kap6stek 5kapte 3kar. 5karak 4k5arbe k5arm. ka5roo kar6oor kar4st k5arti kar5to 3kas 4kasg kas7laai kas6maa kas7traa ka5s6tro 5kateg kat7etes kat6har kat6hu. ka4too kat7ryk. kats4 kat5sw kat7uil. kay6aku 2kb kbe6kwi kbout7ji 2kd k3de 1ke kede6lo kee2 keel5a 4keen keep6s5t keer6so keer6ste keë6laa keël7aar 4keff kei6dro keids7pr 4keik keis4 kei5st 4k3eks ke4l5ak ke6lane kel7anem kel7assi kel7eenh 4k5elem ke6linb kel7inbr kel6mag ke4l5ou kels8onde kem6afa 4k3emm ken6aar ken6dra ken7eel. 4k3enj 3kenm 3kenn ke4nou ken7son. kep7laai kep7ler. ke4p5lo kep5sk ker7een. ke4rel ker7els. ker7flan 3kerk ker6kal ker6kin ker6k5or ker6kow ker4kr ker7kris ker6kui kerk7uil kerk5wy ker6m7eng ker6naf ker6nei ker6nen ker4n5o ker7oes. ke4r5on ker6pru ker6set ker4sk ker7skil kers7kom ker6slo ker4sn ker4so ker7son. ker6s5pi kers5w 4kerts 6k5ervar kes6el. ke4sn ke6trol ket6ska 5ketti ke4tu keu6ror 3keus keut7jie key7kleu key7nooi kê4rb 2k1f 2k1g kga7laga kge5la 2kh kha7yeli k4hoi khu7khun 1ki ki2e kie6dro kie7laai kie6mas kiem7as. kie6sent kie4s5k kie7skry kies5l kie6slo kies7tan kie4ta kieu5s ki4kl ki4ma 4kimm 5kind. 6k5indel kin5dr 4kindu k3inh 4kinl 4k5inst kio4s kios7ke. kip7ling ki4rc 3kis. kis7obli ki5s4po ki5s6tew kit4s kits5k 2k1k kk4ag kka7smaa kka5str k3ke kke6nee kker5kr kk4li 1k2l k5ladi 4kland k5lang k4lank klas3 klas6e. kla6sin k5leerd 4kleg k5lege k4l4ei 4klel 4k3len 3kle4p klep7as. k4ler 5klere kle5us k3lê 4klied k4lier 4k3lig 4k3lik 5klikk kli6kop k4lim kli6moe k4lin 5klink k5linn kli4p3 k4lis kli7sjee 4klog klo6kon k5loos. k4lou klub5h klu6bre 4klug 2k3ly 2km kman7spo 1k2n k4nap 4knav 5kneg. 4knei 4knem kne4t knet5j 3kni kni6kla kni4p3 knoe4 knoe7te. 4k3nom k5noot k4nop knor7os. 1ko kob7rego 3kod 4k3oef 3koek koe6kei koe4l5o koe5pl 3koer koe4s3 koe7sist 3koë 4koë. k4ofi 4kogi kok7onth kok6skr ko5lag kol6for 3koll 3kolo 3kolw 3kom kom7aan. kom7bina 4komg kom7ghad k5omhu kom7miss kom7saal kom4sp kon7atoo 4k5ontl kon5tr 4k5onts 4k3oog ko4op 5koord 3koö ko4pag kop7ape. kope7la. kop7las. 4koplo 3kopm 4kopn 5kopno ko4po 6kopper kop7uits kord7aan kor6doe kor6foo k3org koring7s k3ork ko3ro 3korp kor4s5l kor7sten kor4t5a kor6tji kort7jie 3kos kos7eetp kos7inko kos7juff ko4sk ko5ski kos5ko kos5pe kos5taa ko4t5ak 5kotel kous7te. kou5tj kovi7ev. ko4vk ko4vs k5owerh 2kp kpro6pa kp4si k2r k5raad 3kra4g kra7gers krag5o k5rak. 4krand 5krank 5kredi 5kreet. k4reëe 4k3reg 4k3rek k3rel k5rese 3kret 4kri4f3 4krig kri4k3 kri6moo 3krin kri4p krip7lee 3kris 4k3riv k5roet k5rolp 5kroon kr4or 4k3row 4krub 3krui 4kruim kru6kas kruk6s. kru4l k5rusp kry6fin krygs5t 4k3ryk kry7sket 3kryt 2k1s ks6aan. ks5agt ks4ak ks5chi k4s5een k4s5erv k4s5eti k3si k6singe ks5ins ks6jari k4skan ks5kin k4skon k4slê ks3li k5s6maak ks5moo k5smou k2s3n k5snob k4sob ks5obj k4s5ond ks5onl ks5opk k2sp k5spek k5spel ks5pen ks5per k5spes k3spi k4spir k5spra k5spri ks5pur k6s5taal ks5tant k6steken k6stemp ks5tens k6stera k6s5teri k6sterr kster6t7j ks5tet ks5tip k7strado k6s5trah k5s6trak ks5tur ks5tuu k3sty ks3ui k4s5ure ks3w k5swei ksyn4 2kt kte6rad kte6ron kter6sp ktes4 k4the k3ti k3to kto6rev k3tu kt4wi 1ku kud7aksi 3kuik 4kuim kuin4 kuins5t 4kuit kul6der kul6plo kul6poo 3kult 3kun 4k3uni kun6sin 3kurs 3kus ku6seen kus7lang kus7node kus7taak kut3r kut6slu kuus6te kuu7ste. 2kv kvang6s 1k2w 4k5waar k3wae k4wan 3k4war kwa7skaa k4week 4kwees 4kweg 4k3wer kwê7lafl kwik3 kwi6kwa 3kwis 2k3wo 3k4wot k3wu ky4fa kyk7uit. k1ys 2k- k-5kli 2l. 4laanb 4laanh 4laard laat7slo laat6str lad7onde la4du 4ladv 2laf la4fa l3afd 2lag l4ag. la4ga la5ga. la5gas l4agi la5gie l4agl lag7lag. l4ago lag5ri lag7some lai6rgo lak7albu lak6led lak7okul lak7oore 4l5aksi lak3w lak7ware lamb7da. la4m5oo lam6pli lam6pol lamp7oli lam6sko lam6sle lam6spe 3land lan6daa land7aar lan6dad lan4d5r land6sta land6s7te lan6gaa lan7gnol lan4go lang7ste langs8te. lan6gur lan4k5a lan4k5l lan6kop lank7ope lan4k5r lan6kwi lan4s5k lan4sp lan4s5t lan6taa lan7taat lan4t5j lan6tre 4lantw lap3r 4l3art las7elek las6ie. la4sn la4so la5sol la4sp las5pa late5r6a 5lawaa lba6spe lbe6kne lbo6wvi lb4re ld5amb ldan7ha. ld5apt l4d5een ld5eis lde6rat lder7os. ld5ins ld3of ld5oor ld6oor. ld5ord l4dow ld5owe l5draa l4d3re lds4k lds6maa ld3so lds6ond ld3sp l4d5uit 1le lec5tr lee2 lee4g3 4leep3 leer5a leer7eis 5leerl leer5o leer5s lee4s lees7tra lee7tjie lee7vaar 4l3eff leg7slot 4leien lei7gleu lei6kaa lei6naa lei6not lei7skoo lei6spa leis7pan lei7spir leit5s lek7loti le4kn lek6suu 3leli 5lengt 4lenj len6sel len6ste lens7te. len6tji lent7jie le5pel lep5li lep7oog. lep7ratw lep5sk lep6szy leps7zy. ler4a 5leraa ler6kam lerk7amp lerk5sp 4lerts le4see le4set les5ete les6hab les7insl le4ske les7kes. les7lie. les7onde le4s5oo le3st les7taak le4ste le5stel les6tin les5tra les4ty les7uur. les7wete l5etan le4tc let5em let7oorb let7rol. let6sko 4leuf le3u4m leun5s leur7eg. leu4r5o leute4 lew6ein 6l5ewena 4l5ewig 3ley 1lê lê4rw lf5aan lfa7stra lf3ei l4fek lf5eks l4fen l4f3ev lf4ie l4fin lf5ing lf3l l5flap lf5onde l5fone lf5onts lf3op l2f3r lf6skar lfs7karm lfs7kop. lfs7kuil lfs7nier lfs7oog. lfs7perk lft4w l4f3ui l4f3uu l1g lg4ha l4gli lgo7lagn lg6ordy lgs6mee 1li liat6ji lia7tjie 3lid lid7onts 3lied lie6gli lie6kwy lie5la liers5w lie5sme lie7steg lie7stys lie7swak 4l3i4eu lig7inte lig6las lig6ny. lig7omge lig7rekl lig7riet li4gro lig7skag lig7sona lig5s4p lig5s4w lig7ure. lik7aspa 4likk 5likkew li4kl lik7opsi lik6see lik6sju lik6soo li4k5wa lin6gid lin6gin lin6gli lin6goo ling7ooi 4linh lin4k5l lin4kr l5inli 4l3inr l5insp lin4t5j 4linv li4pa li4p3l lip5la li5plo li6poml lip7omly li4p3r lips4 lip7soom 5lisen l5item liter6t7j lit3j litjie6 lit3r lit7sha. lit4sp lit4s5t lit6zdo ljus4 l1k l4kaf lka6tio lkat7ion lk5een lks7emos lks7epos lk6skap lk4sku lk4sl lk4son lks7ower lk5spe lk5spr lk6stel lks7tell lkter6t lktert7j lk5uil lk5wat lk5wit l4kwy lk5wyf 2l1l l3la llat6ji lla7tjie llei5s lle7knop lle6rui lle6swe lleve7ë. llo5sk lls7moor l4maf lmo6kal lmo4no lm3sm l1n lne4s lob7eend loe6dal loe6det loe7dja. loe6don loe4d5r 4loef loe6gos loeg7os. loers7te loe6skr loe4st lof7opri lof6spa 4logig log4o lo5gop log7sot. log4st log7stok lo4k3l lok7onde lok7swin lo5kwi l5olie. lomer4 lomert5 loms4 4lond lon6gaa long7aar lon6spa lon6ste lons7te. 4lont lon4t5j 3lood loofs5w l4oop 5loopb l5oore 5loosh loo7stra lop7emme 4lopl lop6rys lo3ro lo5ryn 5lose. lo4sj lo4sk los7laat los5ta los7trum los7wikk lo4tak lot7riet lot7ruïn lot7swan lot5ui loui7sa. lou3t lou6wna lou6wre lou6wtj lo4wr low5ry lox7era. lö4jd löj6don lp5aan lpe6nin lp4he l4pon lp5ond l1r 2l1s l4s5aar l4sad ls5arm l4s5asp l4s5eko lse4l lse5le lse6mek ls5erva ls5fei lsg6haa lsi6g5aa ls5jas l4s5kin l4skon l6skorr l4skre l4skru l5s6maak l5s4mee l4snaa ls5opw ls6plet l5s4pli l4spu l3st ls4ti l6stoeg ls5waar ls5wet ls5wyn l4t3ag l4t5amp lta7spie lter6sk lt5oond l5t4wak lu4bh lu4bl lub5le lub7loka lu2g1 lug6er. lu5gub 3lui. 4l5uie. lui7masi lui7slan 4luit luk5raa luk7rake luk6s5pa l5unie. luns6a. lur6pag lus7moor lu3t4h lut6zpu luus6te luu7ste. lva7soor lve5ti lwe4r5a lwe6rui 1ly lyce7um. ly4fe ly4fo lyk7aant lyk7lope lyk7lug. ly4kn ly4k3o lyk6ont lyk7rede lyk5sk ly4ma lym5ag lym7uint 3lyn lyn6aaf ly3pl ly3sp lyt7ring 1m 2m. mac7dona made7us. mae4s m1af 4mafd m4afo ma5fro 4mafs mag6sta ma4hd mah5di mak6lot ma3kw ma5lag mal7thus mamat6j mama7tji man7djar man3g4 man7gona man6n-p man7salm man7spen man6spr man6s7taa man6sto man7ure. map4l ma3ra mar6kek mar6kle mar6kom mar6kon mar4k5r mar6lpr mar4s5k mar4s5t mar6tro mary7na. mas6koo mas6kri mas6kui mas6tek ma5s4tr mat6hes mat7thys may7nard 2mb mb4re 2md mdo6poë mdop7oë. md5soo m3dw md4wa 4meder mee7kole mee5kr 5meel. mee5l4o mee5ne mee7reis mee7reke mee5sl mee7spre meest7al mee6tre me3ga megas4 mega5st 4megt mei6nee mel6aar mel7ekwa mel6kal mel6kjo mel6kla mel6kna mel4k5r melk5s mel4k5w mel7spul mel6too mem7phis men7angs men7eise men7opga men6sky men6snu men4s5p men6s5ta men6tin men4t5j men4t5r me5phi me4rak me6rass mer7asse mer5ast mer7dein me4rei me6reng mer7enge mer7esse mering8s9taa mer6kli mer6kna mer7kopn mer4kw mer7kwar mer5oes mer7onth mer7treë mes4a me4sal me4s5ka me6s7koor me6skor mes7kore me6skro mes7kroe me4sl me5slu mes7moss mes7port me6stas me4s5to mes7ware me4t5ee met7emps meter6so meu6las meul7as. 2m1f mfloer6 2m1g mgang4 mgangs5 mgeper6 mges7per 2mh mh4ei 4mid. mid7osea 4mids mids5t mie6kas mie6kwa mie6ret mie4r5y mie6skr mie6taa mie6tji miet7jie mig6re. migu7el. mih7rab. mil6taa min7gopl 4m5insp 6minstu mi4rl mi3sf mis7sêr. mis6tkr mis6tok mit7swa. mi4v- 2m1k mkaar4 mkom6st mkoms7te 2m1l m3la 2mm mma5sp mmas6to mma7stor mmat6ji mma7tjie mme7loor mme6res mme4r5o mmi7stok 2m1n 3mod mode4l mod6jad 3moe moed4s moe6nes moe4st mof6lam mok7alba mole4s5 m5olie. mol4m5a mon6dch mon6dop 4m5onts 3moon moor6da 2mop m3opl 4morg mo3ro mor6sju mor6spo mor4s5t mo5saa mos3f mos7fles mos7inen mo4ske mos7keë. mo5sta 3mot mote7us. mot6heu motor5a mou5fl mou7slip mou6ste mous7te. mou6tek mo9ya. 5môre. 2mp m4pag mpa7gne. mp5agt mpe6lys mpen6to mp4her mp5ops mps7kraa mp5sli mps7taal 2m1r 2m1s ms5app m4s5kat m4skon ms7kraal m5slin m3s4me ms3op ms5pen m6s5taal ms4te m5steg m5steo m3sw 2mt mter6t5j muc7klen mues7li. muf7smaa mui6les 4muit 3mul mum7aant muns4 mun5st mun6tou mur4g mur7gie. 3mus 2mv mvi6tra 2mw myl7afst myl6sla 3myn myn7ent. myn7impa myn7inge m1ys 2m- 2n. 1na 3naal 3n4aam 4n3aan 6n5aardi naar6skr n5admi 4n3adv nae6lys nael7yst n1af n4afi naf6lad nag6aand na6gaap na4g5ap na6gemm nag7emme nag6las n4ago nag5ron nag3s 4nagt n5agtig na4gu nai7set. na5kli nak6lip 4nalf 4nalt 3nam na3p4l na3pr nap7roet 4n3arb 4narea na3s4k nas7klip na3s4l nas6maa na3sp nas6pel nas4pr na5s4ta nas6ten nas6tor na5s4tr na5stu nas6tuu nas4w na5swe na5t4ha nat6jie nat7onde 3nav 5nawee na9yl. 2nb nba6chs 4nche 2nd nda7gesk nd5akt nd5app n4d5arb nd5art n4d5ass nda7stoe nde7eier n4d5een nd5eg. nd3ei nd5eksa ndel8s7kor ndel8s7taa nd5emm nde6rad nde6raf nder7af. nde6rar nde6rem nde6r7ent nde6r7ess nde6rim nder7in. n6deros nde7rosi nde7sill nde6zvo nd5ide ndi5go nd5ins nd3of n5dome nd5omt nd5ond nd5ont n4d5opb ndo5st nd5rak nd5rat n4d3re nd6resd nd5riff nd5riv nd5roe nd5rok nd5rot n6druim nds7ertj nds7geru nd6sinl nds7kenn nds7koor nds7kraa nd6s7laag nds6leg nd5s6maa nds6ons nds7oorn nd5sor nd6spre nd5spu nds7taal nd6stek nds7toet nds7troe nds6wee ndt6wis ndu4e n4d5uit ndu7kraa n4d3ys 1ne nebe6st nec7ticu 5neder nee2 nee4l neel5a n4eem 4n5eend 4n5eenh neer5o neer5s nee6tew neeu3 nee7uur. nee7woor 4neff 4neg. ne5gla n3eie 4neil 4neksp n5ekspe nel6lma ne6loon nel7oond nel6spo 3nem nem6afi nen4sl nep7olie 3ner. ner6faf nerf7af. ne4ros ner7psig ner6sle ner5sw ners6we nes7evan nes6tas ne4ste net7omge ne4tri ne5um. neu7moko neu7raal neu6sji neu6ska neu7stoo neu6toë neut7oë. ne4wt 3nez 1nê 2n1f2 n3fl nfy6tap 2ng n4gad n4g3ak n4g5apt n4g5ase ng5ass n4g5een n4g3ei ng5eks nge6r7aap nge6r5al nger6d5r nge6ret nges7per ng5eten n6geter ng5imp n4g5ink n6ginst ng1l ng6lasu n4goë ng5oë. n4g3on n4g5oog n4gou ngp6seu n6g5raad ng5ran ng5rat n4g3ri ng7sade. ngs7agit ng7sappe ng4see ngs7eise ng4sek ng6serk ngs7erke ng6sero ng6serv ngs6fer ngs7impa ng4sin ngs5int ngs5kan ng7skat. ng7skoel ngs7koep ngs7kop. ng7skors ngs7kort ngs7kurw ngs7kuur ng6s5laa ng6slab ngs7labo ngs7ladi ngs6lep ng7s6loop ngs6lym ng4sn ng5sni ngs6oet ngs6ofa ngs6omm ngs7pelo ngs7pill ng5spoe ng7stabi ngs7tal. ng6steh ng6stei ngs7teik ngs7telg ng6stem ngs7tema ng7stemm ngs7temp ng6s5ten ngs7tese ngs6tin ng6stou ngs7tou. ngs7trap ngs7truu ngs6uie ngs7ure. ngs6wel ng5uit 2nh 1ni nie6kaa nie7knik nie6raa nier7aar niers5w nie6uin nig7aard ni4g5ee ni4g5ie niks7py. nik7warm 4n3ind 4ninf nin6g7ele nin6get 4ninh 4n3ins 4n3int 4ninv n5invo n2is nis7alma nis6ara ni5see nis5id nis7insp nis6oms ni4son ni3tr nit7sare nje7glas nje7krui njie6st 2n1k nkaar4 nk5aard n4k3af n4kak nk5aks nk5eff n4kei nk5eie nke6las nke6lit nke6ree nkers6w nker7swe n4k3li n2kn nk3na nk5nes nk5neu n4k3of n5kofi nk5psi nk5rig nk5rol n4k5roo nk5ros nk5rye nks6noe nk4s5om nk3sp nks4t nk3s4w nk5uit n2kw nk5wat n5kwen 2n1l n3la nli4ga nlu4s n1n nna6spo nna7tjie nne6pol nne6sev nni4s 1no 4noef 4noes noe4st no4g5al nog7eens nok5as no9ko. nok7riww 3n4oma n4omm nomo7yi. no4n3a 4n3ond 4n3ont noo6dan n3oog noor6di 4nopb no5pla nop6laa 4noplo nop7omhu nop6rod 4norg n5orga nor6kla 3norm nor7tham nos6kaa no3sp 3nota 3note not4r no5tre 2np n1r nroet6j nroe7tji 2n1s n4s5aar ns3ag ns4an ns5angs ns4e. ns4el nse4pr nser6to nser6tr ns3f ns6feer ns5gel n3si ns4ia ns4ie ns4ig nsi6gar ns7inges nsi6tri ns4iu ns3ja n6skafe n5skap n4skar n4s5kel ns5kin n6skous n4s5kra n2sl n3sla ns5lam n6sland ns3le n4s3li n4s3lo ns6lotg ns6lott n3slu ns4mee n5snar n4sne n5snel ns5noo n5soek n4soë ns5oë. ns5ond nson4t5 ns5onw ns3op ns5par ns5pas n4s5per ns7portr n4spot n6sprat ns6prek n6staak n4staf ns5teh ns6tel. ns6tels n5s6ter. ns6ters ns5trak n3s4tu n4s3tw nst6wyf ns5tyd ns3w ns6weer n4syw ns5ywe 2nt nt5ags nt5ark n4t5art nta5tj n4t5eie nte6ram nte5sm nte6sti n5t4hon nti7kwaa nt5inv nt3ja n4tjo nto7fakt nt7oksie n4t5oli nto6nad nt5ond n4top nt5ops n4t5org nt7radin nt5raf n5tref ntre7kor nt5rim nt5roe nt5rom nt5ron nt5room n5troos n5trou nt5row nt5rui nt5ryk nt3sa nts7inge nt6skan nts7kand nt4s5le nt3s4m nts7onde nts5paa nt3st nt5uit ntu4m3 n4t3ys 1nu 3nua nu4e. nu4es. 2nui nuk4w nu5kwa nul7soms 4nuni nu5skr nu6skra nus4t nu3tr 4n3uur 2nv nva6lis 2nw ny4so nza6cs. o1a o4bag ob5agt o3bo ob5vor oby6nro ock7wyn. oda5gr od5een ode7leie ode7spaa od5lui od3op od3re ods7akke ods7kish od6slak ods7lake ods7lopi ods5oo ods6op. ods6org ods7paar ods7rogg ods6uit ods6waa ods6war ods6wyg odu4k oe4d5aa oe4d5ag oe4dei oed7eie. oed7ette oe6dind oed6ja. oed7onde oe4d5oo oe4d5op oe4d5or oe4d5ro oed7stry oe4du oed3w oed7wyn. oe4f5aa oe4f5an 3oefe oe4fek oe4f5lo oe4f3o oef7rit. oeg7aand oeg7laer oeg7lam. oe4gog oeg3s oeg7yska oei1 oeien6a oeis4 oei7sker oe4kaa oek7eier oe6kerf oek7erf. oek7eval oe4k3l oek6lap oek7olie oek7oort oe4kr oek5rak oek5re oek5ro oek7sten oe4k3w oe4lei oe5leie oe6lemm oel7emme oel7eter oeling6 oelings7 oe6lins oel7inst oel7onbe oel7opri oel6ser oel6skr oel7slik oe4nei oen7eike oe6nert oen7ertj oen7esse oenk4 oen5kl oen7knoo oen5kw oe4n3o oens5ko oen5sm oens4o oen7ysbe oep7aang oep7inst oe6pinv oe4pl oe5pla oep5li oe5plo oep6s5ee oep6s5in oep4sl oe4pu oeras5e oer3k oe4r5on oer5ou oer6ske oer7twak oe5ser oe5sie oe5sje oes7kraa oes7limt oe4s5lo oes7medi oes7pil. oe4s5po oes5ter oes7troe oe4swe oet7aanp oe4t5am oet6he. oe4t3j oe6t5oli oe4t5oo oe4t5ri oe4t5ru oets7kra oet6sna oet6spe oet6s5te oet6sti oet5wy oë5rug of3at of5een 5offis o4f3in of3l o4fok of5oks o4f3om of5psa o2f3r of6sant ofs7iden of6sins ofs7insi of4s5le of4s5oo ofs7paar o4fui o1g og4d. oge4s5t ogge6lo oggel7oo ogi7faal 3ogig og1l og4nat ogo7steo o4gry og5rye og4s. og4sg ogs6inf og5ska ogs7last ogs6ot. ogs4p ogs7pad. ogs7pris ogs6uip ogs6wan oi1 oig6aff oi3k oile4 ois4a oi5sag oi5ski ois6kuu oi5sky oi5sla ois4p ois4t ois7teïs ois6wer oi3tj oje4k ojek5l o4k5aas o4kag ok4am ok4an oke4t oket5j okie4 o4k5ins ok5lat ok6leed ok3n oko7seil oko6sol o4kou o1kr o4k3ro ok4s. ok5sig ok6sins ok4sj oks7kraa oks6lip ok3sp ok3st oks6win o2k3w ok4win o1la ol5agt olf7ent. ol5fèg olf6lap olf6sku olf6sme ol4gl olg7onde ol4g5or olg7smee 5olieb olies6m olie7sma 5olifa oli7gny. olk6sem olk6sep olk6sow olk6sti o1lo olo5kw o4l5oor olo5sp olp6hta ol4sar ols7are. olt6zha o1lu olyf5o o2m o3ma om5agt oma7pleg o4m5arm omat6ji oma7tjie o3me ome4s ome5us omg6had o3mi omka5s4 5omloop o3mo omos6fe omo7sfee omp7ligs omp7oor. om6pop. oms6aal om5sla oms6lag oms7perk 5omstan oms6tin o4n3ag o5n4age o3n4an ona6skl ona7sten ond7aap. ond5agt ond7ampt ond7dwaa 4ondes onde7us. on4did on4dom ond7rol. ond5sle ond5so ond5sp ond6spl ond7twis on5eff o4n3ei ong5aan on4g5os o3n4ik o4nil onin6gr onk7ert7j on4kj on5kno onk7omge onk7rugh onne5st o4n5oks ono7sfee on4s. onse4p5 ons7iden ons7kepe ons7kori ons7pamp ons7self ons4t on5ste ons7tol. on6t5aar 3ontd ont7elsi 5ontgi ont5raa on4tri ont7rol. on4t5ru ont7slik 3ontw o1ny ony7okol oo2 oo5agt ood3a oo5deb ood5ee oo5dek ood5er ood5et ood5ok ood7onge ood3r ood6san ood7smoo ood7sorg ood7spui ood7suit ood7swaa ood7swar ood5ui oof1 oof6ser oof6sid oog3 oog6enh oog6les 5oogpu oog7sinf oog7suip oog6-lo ooi6spa ook3 oo4ka ook6sst ool1 ool6and ool7snaa oom1 oo4ma oo4me oo4mo oon1 oon6ag. oong4 oons6ko oon5sl oop1 oo4pa oo4pe oop7klik o4opn oo4po oop6swe oor1 oor6daa oor7daad oor6dap oor7darm oor6dca oor6d5om oor7doop oor7frek oor3i oor7klik 5oorlog oor6ot. 4oort. oor6taa oor6t5in oort7ja. oor6tyl oort7yl. oorve7ë. oos3a oos3k oo4so oos7pers oot1 oo4ta oot6aai oot6en. oo4ti oo4to oo4t3r oo4tu oo3v oö5spo o2p o3pa o4paf op5agt opa6les o4p3am 5opdrag o3pe op5een op9eg. 5openi op4er oper7aar ope7rage op6horu o3pi opie6le opk6lik op3l op4lan op6lein 3oplo 1opn 4opno o3po opo7fagi op5off op5ont opo7sfee 5opperv op3r o5p4rot o4pru op6skre ops6maa ops7neus op5son ops5or op3st op3sw ops7wels o3pu o1ra or5afd or5agt ora6lee ora6loo orat6ji ora7tjie ord7akti ord6arm ord7eksa ord7ierl ord7inst ord5oes or4d5oo ord6oop or6dord ord7orde or4d5ri ord7roma ore7ster o3rê orf7oond 4org. or3gh or4glo 4orgp org7ring 3orië orings8ku or5kaa orkes5 ork7lag. ork6lik ork7ney. orkom6s orkoms7t or6maan or4mj or4nj or5ond or5ong o5rot. oro7thy. or3p4h orp6ski orp4sn ors7aar. ors5ag ors7jurk ors5mo ors7pot. ors7teri ors7tery or4sti ors7trek ort7aan. ort5aar ort5akt or4tar ort6ham 5ortod ort7onde ort7rol. ort7ruk. ort5sw or1u o3r4us o3ry. ory4s os3ag osa7phat os5api osas4 osa7tjie os5cen o3se ose7phin ose7phus o3si osi6nen o4sjo os1k o4s3ka os5kee os5kis os5koe os5kop. os5kor os5kou os5kow os3kr o5skri o4sku o2s3l os3m o2s3n os5oli os5oor o4sor os5ord os3p os4pe os5ste os3t os4t. os4ta os5taf os5tak os5tal os5tar os4td os4th ost7impe os4tm o5strat os6trev ost7revo ost6roo os4tw os4t- os3w os-7lond o2t o3ta ot5akk otas4 ota5st ota7tjie o3te oteek5 ote4s5a ote6sno ote6spr ote4s5t o4the oth7nage o3ti ot3j o3to ot5opm oto6ran oto6ren otor5o otos4 oto5sk ot3re o3tro ot5ryk ots7eila ots7karr ot4s5ko ot4sl ots5la ot4s5po ots7rûe. ots7tee. ot6stek ots7toet ot4stu otte6l5o o3tu o4tui otu6set oua6che oud7agti ou6dakt oud7akti oud6ief oud6ini oud6ink oud7oorg oud7styd ou4du oud7uitg oue6rio ou3g ou4gh ou4gl oug4r ou1i ou5ill ouis6a. ou1k oul7ontl ou3m ou5nyw ou5rei ous6kak ous6ken ou5ski ous6lip ous6ouw ou3s4p ous7pan. ou3s4t ous7tert ou7stiek ous7ties out7aar. out7aksy ou4t5as out7ekst out7emme 5outoma out7omhe ou4t5oo out3r out6rap out6rei ou4wb ouw7rens ou4wv ou4-o ove5re over6y. ovie6v. ov5ket owe6nal owen7al. owe6ral ower7al. ower7kon oy4a. oy4eu ô1 ô2i ôi3e ôre5st 1ö öjd7onde ö1l 1p 2p. 5paaie. 4paanv paar7dui 3pad. pa4da pad6ie. pa4d3r pad6-eg p1af pag6ne. 3pak pa4ke pak5es paki3 pakket5 pa4ko pak5os 4p5akti 3pale pal7esse pal5fr pal6mol pa4nop pan5sp pan4t5j 3pap pa5pri pap7ryp. paps4 pap7saf. pap7smee 3pa3ra pa6ramn par7amne 3park par6kar par4ko park5r 4parm par4sk par6ste pars7te. 5party pa5sja pa4so p5aspi 3pass 5paste pas7til. pa4taa pat7are. 4patel pat4j pa5tji 3patr pats4 pat5sj pav7lov. 2pb pbe6koo pbreng6 2pd p3dw pd4wa pd4wi 3pe. pe4ak pe4ar 3ped pede4r pe5dof pee2 peel5a peel5u 4peen peet3 3pei 4peie p5eien 4p3eis pek7nek. pe4k3r pel7aktr pe4l5oe pel7oond pels7kra pel6tak pel7yste 4pemm pe6nars 3penn pen7opsl pen6slu pen7smed pen6sop 4pepi 3pera pe6raap per7aap. per7admi per6ary per7asid pera5s6t 5perd. per6dag per6dry per6dwy per7enke per5est 3peri pe4rok 3pers pers5ag per6set per6sje pers7med 5perso per6s7ond pers8tel. 5pertj per6top per7tsja per7uran 3pes. 4pesi pe4sl pe4s5te peu6rel 2p1f p3fl pf4li 2p1g pges4 pge5sp pg4ly 2ph phe6ars p2hi phi5s4t p3hit piek5n pie6raf pie6rom pie4ru pie7samp pie6ska pik7erts pik3s4 6p5inges ping6la pin7glas pin5kl 4pinst pipe4 pipet5 pi3s4k pit3j pit4s5k pit4st pits5te pits7tek pit6suu pit6zko 2pj 2p1k pkom4s5 p2l pla6kal pla6kok 5plan. 5p4lant 4p3lap 3p4las 3p4lat pla4t5r plee4 pleet5 p5leie ple4k 5pleks 4p3lep pleu7ra. p3lê pli4g pli4t5e 4plits p5loos p5lose plu6ska 4plyn 2pm 2p1n p4neum poe6doe 3poei poe4s5t poe6tol po4fa pog7rest pog5sk pok5aa pok7olie 3pol 3pom 4pomh 3pone pon7opbr pon4s5k pons7te. 4pont 5pont. p5onts 4poor. 5poort. 3poot poo6tel po4pag 4popd pop6lek 4pops p5ordo po3ro por6tak 6portso por6t5ui 3pos po4sk pos6tim pos6tko pos6tna po4t5as 3pote pou6ste 2pp ppe6las ppel7as. ppe6rad ppe4ro ppie6sl ppoor6t ppoort7j p2r p4raa 4praak p5raam 5praat pra6esi 5prakt 3pren 3pres pre4s5t 4preu 3p4ria p3rib p4rie4 prie7ël. 5pries5 priet5j 5prins 3prio 3prob 3prod pr4oe 3prof 3p4rog 3proj 4p5rok. 3p4rop pro6pop pro5pr pr4or 3pros pro5sa pro7sopa pru4t 3pry pry4st 2p1s p4sad p4s5aks p4sakt 5psalm. p4sas ps5asp p4sat p4sid 5p4sigi 5psigo p4s5ing p4s5int ps3j p5skaa p4s5ket ps5kof p4skon ps5loj ps3m ps4my p4son p5son. p4s3oo p4sor ps7portr p6stera ps4ti p6stoet p4ston p5swar ps5wer 2pt ptos4 3pub pue4b 4puit 3pun pun4t5j pus7tipo put7adde put7emme put5ji put7rioo 2pv 2pw 3pyn 3pyp pyp7aard pyp3l pyp7las. pyp3o py4pr pys3k 4p5yste py5tha pyt6hon 2p- 1q qu2 qua7driv que6str qui7nas. 2r. raa6min 4raan r6aans. 4r5aard 4rabs rac5te 5radio 4r3adv 4rafd ra4fek 4rafh ra4foe 4raft ra4fu raf7urn. 4rafv 4rafw 2rag rag6aal 5rageb ra5gie ra6ginl rag7inli r4agr rag7raad rag7ryer rag6sab rag6sak rag6sin rag7soep ragu5e rag6wan rai7gne. rak6les rak7oper rak7wate 4ralb ral7eer. ral7oor. 4ralt ram7argi 4r5ameu ram6pla r4anda ran6daa ran7dafe ran6d7akk ran6dem ran6dev ran6doe ran4dr ran4g5o rank5l ran4k5r ran6saa ran6seu ran6sjo ran6sko ran6sor ran4s5p ran4s5t ran6tad ran6tet ran4t5j ran4tr 4r3any rapa7da. ra6pas. ra5pes rap7ewen rap6loï ra4pon rap7onge rap7para rap7rem. rap7righ r4ari 4rarm 4rarr 4rart r5asia ras6tan ra5s4to ra5s4tr ra4su ras5ui ra5t4ho 4r5atom rats5o rbo6lol rd5agti r4d5ame rd5eil r6delek rd5esel rde5sm rd5euro r3do r4d5oli r4d5ont r4d5oon rdô6nne rd7raais r6droma rds6lip rd3so rd3sp rdt6ree rdu6sol rd4wa r5dwar r4dwu r4d5yst 1re 3r2e. 3reak reed5a ree4k reek5e ree7kier ree7loon 4r5eend 4r5eenh 4reenv ree6pes ree6ple ree6pro 4reers ree7sala ree7stra 3reë 4reë. 4reff 3reg. reg7ruk. reg6sen reg6skw regs7om. reg7spre 4reie 4reil rei6nar 4reind rei6noo rei6ser rei6sou reit7ze. re4kn rek7naar rek5ne rek4r rek7spoe 4rekst re4kwa rel4d rel7dae. rel7diag rel7dopp reld7ran rel7duik rel7oest ren6agt r4end 5rend. r5enig ren7shaw ren4so ren4sp rens7te. ren6sto ren6str ren6tak ren6tcl ren4t5j ren4t5r 4rerg 4r3er4t rert5j 4resel re4s5ka res7lap. res5lo re3s4m res7ore. re4spi re4ste re5stel re4sti res7toet res7toma res7ure. ret5art reu6kin reu4kl reu4k5o re5usg r4ewa rey5no rê4rh r4faa rf5laa rf5lat r3fle r5f4lie r5flui rf5opv r4fre rf5reg rf4sl r1g r4gak rg5akt rgek6li rge7klik rg5eng rgeper6 rge6rid rg4hu rg5hut rg4len rg4let rg5loo r4g3lu rg4ly rgo6wri rgrie4 rg5ros rg3s rg4s. rgs4p rguit6j rgui7tji 1r2i 3rib. rib7file rie6dio rie6dop rieket5 rie6klo rie5me rie6pri ries6e. rie6skr rie6taa ri4fa rif6ree rig6ska rig7smee rig7styf ri4kl rik6sid rik5sj rik7spad ri4kw rim4s 4r3inf rin6gaa rin7gaan ring7aar 6r7ingest rin7gleb rin4g5r rin6gui 4r3inh rin6kar 4r5inko rink5w rin6kwa 4r3inl 4r3inr 4rins r5inst rin7the. r3inv 4rinve rio7rye. rip4s5t ri5s4ko ris4o ri5son ris5op ris6per rit5ji rit7oond rit6rea ri5tro rit6zri 5rivie rix7tont 2r1k r4kaan rk5een rk5eik rke6lap rke4s3 rke7sel. r6kink. rk5inl rk5leie r4klid r5klip r4k5los rk5nei rk5omg rkom6sti r4k5opd r4k5ops rk5rand rk5red rk5rib rk5rok rks6maa rk5spo rks6uid rk5twi rk5uit r4k5ure rk5wag r4k5wat rk5wee r4k5wet rk5wil rk5win r4kwy r1l r3la rli4g rlo6gja rloo7ple rlo6wpa 2rm r6maanh rma5gô rma6gun rma7klot rma7plaa rma7raan rme6raa rmer7aar rme5sa rmi4l rmos4 rmo7stro rm5uit rmy6nim 2r1n r5nagte rna6spl r4n5ele rne4s rne4t5a rne6tom rn5oor rn6stig rns6tin r3nu roduk5 roe6fas roef7as. roe4f5l roe6fri roe4ga roe7glas roe4n5a roe4pa roep5l roe4p5o roe4s5k roe6sla roes7lag roe4s5t roes5w roe6taa 4roew rog7akke 4rogg rog6lis ro5gna ro4kn rok4r rok7slip rok4s5p ro5kyn ro4l5aa rol7gord r6olien rol7mops romp7op. 4roms ron7aar. ron6dag ron6dak ron6d7er6t7 ron6d5et ron4d5o rond6o. ron4d5r ronds4 rond5sw ron4du ron6gaa ron6kaa ronker6 ron6kert ron4k5l ron6kow ron4kr ronk7wa. ron6ske ron6ste rons7te. ron7stel ron6s5ti r5ontp ron4t5r ron6tui 4rontw roo7dewa roo7dist 3roof 4roog roo7gron roo7mens roo7nag. 4roond roop6la 4r3oor roo7taai r4opa rop7aans rop7anys ro5pee rop6een 4r5open r4opi r4opo r1or r4ora ro3ro ros6afr 4r5osea ros7kie. ro3s4p ro5sta ros6til rot6hsc ro5ton ro3tr rot4sa 4roud rou7floe rou5sk rou3t rovi7ch. rov7nik. ro4w- rox9y. r2ö rpe4s3 r4pid rp5ide r4p5lik rp5opd r4p5reg rps7idio rp4sl rps5no rp6spri rp4stu 2r1r2 rre7glob rre7nagt rre4st rre7stau rres5tr rri6gin rron7kaa 2rs r4sakt rs5alm r4s3ar r5scha rs5eila rseuns6 rs3f r5s6feer rs4ie rsi7flag r6sinda rs5inko r6sinsp r6sinst r5sjam r6skaki r5skap r6skapa r6skapi r6skeus r4s5kin rs6kink r6skoet rs6komm rs6koni r4skor r5skors r5skou rs5krib r6skroo r4skur r4slê rs5lis r4s5los rs5lyf rs6maad rs6maai r5s6maak r6smaat rs6magt rs6mak. r6smake rs6mara rs6mede rs4mee r5smeer rs4mel rsnee5m r5snoo r4snot r4s3og rsonde6 rsonder7 rs5ong rs5oog r6soors rs3op rs4op. rs5ord r1sp r6spaar r4s5par r6spien r5spri r1st r6s5tal. r4stb r6stegn rs6terp r5s6ters rs6tigl rs4tik rs4tis r4s5tit r4stj r6s5toet r6streg r3sty rs3un rsu4s rs5wa. rs5wap rs3we rs6werf rs5wyk 2rt rt5afd rt7angel rt5art r6teend rte6loe rtie4s rting4 rti7saan r4t3om rt5ont rt5opr rt5org r6treda rt5reis rt5ren r4t5rie r6trol. r4t3ry rt6s5aar rts5ond rts6pyn rt5uits rt4wis rt4wyf 3rub ru4ga rug6-sk rui6lek rui6moe 5ruimte rui6niv 4ruit5s ru2k3 ru5kaa ruk6lip ruk6opp ruk6-en rul5aa rul7ape. rul7yste r2um rum7grok 4runi rup7lys. ru5spi rus6tak rus6tka rus6tma rus6tvo rus7uur. rut7oond 2ruu ruus6te ruu7ste. rweg5a rwe6gei rwe6skr rwi7sje. rwoes5 rwy6sak rwy6see ry4fa ryf7ink. ry4fo ryf7ode. ryf6sch ryf6sin ryf6ska ryg7stek ryg6str ry6kinr ryk3l ry5klu 3rym. ryn4s5l ryp7arm. ry5ple ryp7lus. ryp7nagt ry4s3a rys6alf ry6sinl rys5pi rys5po ry3st rys4ti ry4su ry4ta ry5tra s2 2s. s'9ie. s’9ie. 1sa 3sa. s4aad saa6dui 3saak 3saal 4s3aan 4s3aap 4s5aard 4s3aas 4s3adm s5adre 4s3adv 2s3af 2sag 3s4ag. sa4gal s3age s4agi s4ag4n sa5gne 3s4ago sag6opa 5sagte. 5s6agtew 3sak. s5akad 3sake 3sakk sa6k5rok sa6krus saks4 s3akt 4s5akti sa6lamm sal7ammo 4salb s5albu 3salf sal6fol 4s3alg 4salm sal6mei sal6tro 3sam 4samba same4n 4s3amp sam6swy 4sana s5anal san6d5ag san6dak sand7akk san6dru 3sang san4g5a san6gre sang7ste 4s5anke sap6hat s5appa s5appel sa3pr 4s3arb 4sarea sar7olie 4s3art 4sase s5asem 4s5aspe sa5spr sat6jie 4s3atl 4s5atta sav7lon. 2sb s3ba s3be s3bi s3bl s3bo s3br s3bu s3by s3ca s3ci 2sd s3da s3de s3di s3do s3dr s3du s3dw sd4wa s3dy 1se 3se. s5eed. see3f see3k s5eenhe see6plo see5ram seer7as. see5rei see7roet see3s4 see7soog see5sw seë7kran s5egpa 4segt 4s3eie 4seik s5eik. 4seila sei6nan 4seind 4seis. sek6huk 4seksa s5eksam sek4s5k sek4s5p sek4st 3sel sel5aan sel7anal se4l5el sel4f5a sel7fabr sel6fer self5i sel6fid 6seliks sel5of sel7oor. sel5op sels7kak sel6slo sel7spen sel6s7taa se4m5ag 4s5emal sem7ekst sen6dan sen7ghor sen7sord sen6str sep6hus ser7afse 4serf s5erf. ser6s5in ser6skr ser6sta sers7taa ser7stad sers7tal ser6tuu s5ervar ses6aan 4se4s5ka ses7lett se4s5po se4st se4s5ur ses7uur. se4sw ses7weke s4et. sewes6t sewe7ste sey7stof 1sê 2s1f2 s3fa s3fi s3fl s3fo s3fr s3fu 2s1g s3ga sga4s5e s3ge sges7per s3gi s3gl sg4ly s3go s3gr s3gu 2sh s3ha s4ha. sha7ron. s3he s3hi s3ho sho7shol s3hu 1si 4s5idea s5idee. 4s5ideo 3sie sie7kwos sies6li sies7mee si5fle sif6reu 4si3go si4gro 4simpl 3sin. si5nag s5indek 5sindr 4sindu sin7enti sin7este 4s3inf s4ing sin6gaa sing7aan 6singes sin7gle. sin6gre s5ingry 4s3inh sin6kch sin4kl 4sinko s5inlig 4s3inm 4s3inr sin6see sin6sin 6sinslu sin5sn 4sinv sip6ho. s4ist sit6are 4s5item si3tr si4tre sit7riem sit6sik sit5sl 3situ siu6mur 1sj 2sja sje6ans 5sjoko 4sjuf 1sk2 2sk. 5skaaf skaar6s 6skaart s5kafe 3skak 6skakeb s5kakt 4s5kalf 4skam 4skant 3skap ska6pin ska6pon skap5r 4skar. 4skara 4skas s5kata ska6tel ska6tit 5skawe 3skem 4skenn 3s4kep ske6pla ske4p5r 4skerk 4s5kern ske7smee 5skets 4skett s5kiem ski7klub s4kil 4s5kilj ski6lol s4kip 5skip. 4skis. 2s3kl 2s3kn 4skod 4s5koeë 5s4koen 4skoer sko6kaa sko4ko 4skoll 4skolo 4skolw 4skomb 4skomi 4skomp s3kon s4kone 4skonf 4skong 4skons 4skont 6skoord s4koot 4skoö 4skos sko6see 5skott 4skow 6skraan 4skrag 4skran sk4re 6skreet s5kres 5skrif 4skrin 5s4krip 4skris 4skrui 3s4kry 4s5kryt sku6dak 4skuik s5kuip 5skuld 4skult 4skun 5skurf 4skus sku6tar 2s3kw sky7drin s4kyf s4kyw 1sl s4laa 4s3lad s4la4g 4slam 4s5land s4lang s5lant 4s3las 4s3lat s4law 4s3led 5sleep 4s5leer 4s3leë s4leë. 4s3lei 4s3lek 4slel 4sleng sle6tji slet7jie s4leu 4s5leue s5leus 5sleut 4s3lew 4sley s3lê 2sli slib3 5slier s3li4g 5slinge slo6bee s4lof 4sloj 4slok 4s5loon 4s5loos 4slop slo4t5a s5loter s4low sl4öj 4s3lug 4slui. 4s5luia s5luih 5sluit 4s3lus 4s3lye 4slyf sly6mui 4slyn sly6paf 4s3lys 2sm s3ma s4mad 5s4mart s3me s5melk 5s4melt s3mi 5smid. smi4s smit4h5 3smok s5mol. s3mon s3mu 3smy smy6nin s4myt 1sn s5naai 4snaam s5naat 4s3na4g snag5e snag6s. 4snam sna6pro s4nar s3nas 4snat 4snav snee7tji 4s3nek 3s4nel 4s3nes 4s3net 4sneu sni6kwa sni6tre s4nob 5snoet 4s3nom 4snoo 4snorm s4nui sny3 s4nye 5snyer sny6-ys 1so 4soef 3s4oek soe6kal soe6kev soe6kol soe4k5u s4oen soe6nys 4soes 5soet. soets6t soet7ste sof6agu 4soff so3fr sof6ree sog4l soi6ets sok7opho 3sol s5olie. sol6lme solo5s s4om. s4ome 4s3omg 4s3oms 4s3omv 3s4on. s6onde. s7ondern 3s4one so6neek son7eekh son5eg 4son3g son7kwas so4n5op son4so 4s3ont son7uit. s4onv 4sonw 4soog 3s4ool 4s5oond soon4s 4s5oor. 4s5oorb 4s5oord 4s5oore s5oorg 4s5oorl s5oors 5soort. s5oortr 2s1op 3sop. sop7ekst so5phi sop6hok s4opi 5sopie s3opl 3sopo so3pr 5s4op4ra s3ops s3opt s3opv 4sord 5sorg. 4s5orga sor6gee sor6gra sorg7raa s5orke so5ror 4sorto sos4h so5sha so3th sot4ho so3tr 3sou 4soud s5oude sou6spa sou4s5t sou6taa sou6tak 4souto s5outom so9ya. s5paal 5spaan 4spad 4spak 3s4pan span5o spa6noo 4spap 4spark 4s5pas. 4spast spa6tar 4spatr 4spe. 3s4pee spe4k5l spe6kne spe6lak 5speler s4pell 6spelot 4spen s5pen. 4sperd 4sperk 5sperm. 4spers 4spes. 5spesi 4spet s4peu 4s5piek s4pio 2s3pl 5s4plee 5s4plin 5splits 3s4ply 4spoei 4spol 4spom spon6st 5spoor. 4spoot 5spore 6sportr 4spos 4spote s5poti 5spraak 6sprakt 4s5prat spreek5 s5prem 4spres 5spreu 4sprob 5sproei 4sprof 4sprog 5s4pron 4spros 5spruit 4spry s3ps sp4si 4spub 3s4pul 4spun 4spyn 4spyp 2s1r s3ra sra4e s3re s3ri s3ro s3ru s3ry 2s1s s3sa ss4af ss4ag ssa6rol ssay7is. s3se sse6nas sse4n5i sser4s sse5st s3si ssie6l7ei s3sk ss4ko s3sl s3sm ss4ma ss4me s3sn s3so s3sp ss4pl s3st ss4ti s3su s3sw s3sy 2st. 4sta. s4taa st5aard 5staat 3s4tad 4stafe sta6las stal7as. 4stale sta6lee sta6lem 4stali 5s4talt 5s4tam. sta4m5o 5s4tan. stand8s7ta 4stari 3s4tat s5tatr 4stea s4tedd 5s4tede s4tee4k 5s4teen 4steer 4steg ste6gre st4ei ste6kli ste6lek stel7eks 6stelev 5s6telse stel6tj stelt7ji 5s4tem. 5stemm ste6mom ste6nou 4stent s5teny 4steo 6sterap ste6r5ei 5sterkt 4sterm ste6rom ster5sm ste6rys ster7ys. ste6ser ste6sin ste6ska ste6ski ste4sl ste6sma 2sth s3ti 4stie s4tigt 4s5tiku sti6laa s4timu sting5a 5stinkh s4tip 4stir 4s5tite s3tj 4sto. s5toeg s5toek 5stoel. 6stoela s5toen 4stoer 4stoes s5toev s4tof sto6fek sto6fem sto6fen sto4fo 4stog sto4ka sto6kle sto6kre 3s4tom 4stone 4stoon st4op sto6poo 4stos sto4st 3s4tot s4tow s4traa 4strad s6trak. 4s5trei s4trew 4s5tril 6strins 4stroe s5trog str6ont 6stroon 6strosp 4strot s5trots 4strou 4strov s4tru 5struk 4s5trus 3s4try stu4c 3s4tud 4stuig 3s4tuk stu6kin stu7klep stu7stra stu4to stu6tys st4wi 2sty 4styd 5styf. 3s4tyl sty6loo 1su su2b1 sub3a sub7gids sub7hoof sub7nasi sub5oo sub7reko 3suid sui6daf sui6dei s4uik s4uil suip5l sui6pro 4s3uit s4uiw sul6tin sum7aans 2sun s3uni su4su sut6her su9yo. 2sv s3va s3ve s3vi s3vl s3vo s3vr s3vu s3vy svy7kraa 2sw 5s4waai 5swael s5waen 3s4wak 3s4wa4m swam5a s5wand 5swart s3wat 3s4waw 6sweefs s6weeft s5week 5s4weep 5s4weet 4sweg 5sweis s4welg 3s4we4m 5s4werm swe6tre s3wê s3wi s4wik 4swil s3wo 5swoeg swor6st 4swort s3wr s3wu 3swyg 1sy 5syfer sy3k syn6agr syn6sin syn5sm sy5pla sy3sk 4syst s5yster 4sywe s5ywer 2s- 1t 2t. 3ta. taa6nam 4taand taan5s6f 6taansi 4taant 4t5aanv 3tabb 4tadm ta4d5ro tad6ser tad4s5i tad6ska tads5n tads5p tad6ste tad6s5to 4taf. 4tafd 3tafe tafe4l 4ta4fr 4t3afs 4tafv 4t3afw t4age 4t5agen 4tags 4t3agt tai4l ta5inv tai7peis 5take. tak6lep ta5kli ta4kr tak7rol. 3takt tak7wyn. 3tale tal7eenh tal7emme 5talig tal6kaa tal6sor ta6mind tam7inde tan6dat tan4dr tand7rin tand6sto tang5st 4t5anna tan4sk tap5ro 3tari 4tark 4tarm t5arm. tar5oo t5artik ta4s. t5asem tas4p tas6tas tat7isol tat4j tat7jies ta4t5ra 2tb tba6lun tby6tei 2td tdy7ing. teby6s. 3tedo teek5r tee6lee tee7lood tee6mev tee4mo tee4n 4teenh 3teer tee7raad tee7renv tees4 tee5sk tee5sl tee5st tee7suik 4t3eeu tef7lon. 3tegn teg6ori teg7ren. 5tehui tei6noo tek2 5tekam tek7bak. 5teken teke8n7aap tek7haak tek7limi 5tekor tek7semp tek6sin teks5k teks5t tek7stel tek5vo te6laap tel7aap. te4l5ak te4l5ap tel7dwei te4l5el tel7fles tel7idee 5telik tel6lho tel7oes. tel7oog. te6loon tel7oond tel7smed tem7asse 4temm tem7omva te6moog tem7oog. 5tempo tena6ge 5tend. t4enh ten6kaa ten6koo ten7ouer ten6san ten7slot 5tenso ten4s5u ten4t5j ten4tr tent7reg ten7treu ten7twen 3teo te3p4h ter7adel 5te4r5af ter6afi ter6ago te4rak ter7akro ter7als. ter7aman ter7amer te6ramp ter7amp. 5terap ter5app ter6arg ter6dro terd7roo ter5een te4r5el te4rem 4terft te6rin. ter7ink. terk7wyn 3term ter7omra ter5ond ter5ont 5teror ter5os. te4r5ow ter7raan 5terrei ter7rein 5terri ter6sas ter6sef ter6seg ter6skop ter7sopn ters6we ter7swee ter7syst ter6tap te4rui ter7uie. te6ryst ter7yste ter6-in 3tesi tes7inst tes7loe. tes7lydi tes7mart tes7meto tes7proe tes7teri tes6tud te5sty te4s3w 3teti teun5s4 2t1f tf4li 2t1g tg4af tge6nap tg4li 2th 3tha. t4has 4thei 3t4hen ther6aa the7raan the5ro 3t2hi 4thit t5hitt th5leh t4ho. tho6nat ths7chil t4hy. tib7niet tie4f tief5o tie6gri tie6kap tie4k5l tie6kom tie4k5r tie4k5w tie6roë tie7smoo 4tif. 4tiff 4tigm tike4 ti4kla tik7lug. tik5ro tik6waa 4til. til7aan. 4tild 4til3s 4tilt 4t3ind tin7erts tin4ga tin7gaal ting7aan ting7eg. tin4g5r ting6su tings7uu 4tinkh tink7wa. 4t3inl 4tinv 5tipe. 5tipes ti4rp tis6aan ti3sj ti3tr tive5r t2j 2tja tje6sni tjo4k 2t1k tki6sob tkom4s5 2t1l t3la tla6sin t3li t3lo t5lont 2tm tme6sti 2t1n tne6ywe tnot4s5 3to. toe7eien 4toef 5toef. toe7gly. toe7klap toe5kr 4toel. 5toe5la 4toele toe6let toe6lop 4toelt 4toep. toe7plei 5toern toe6rou 5toeru 3toes toe5sl toe5sm toe7swel toë7roti to4fa tof7ekst tof7emis to4f5io tof7onde 3tog to4gl tok7las. tok7lett tok5ou t5olie. 4tom. 4tond 3tone ton4gr tong5s 4tont t5ontl t5onts 3toon t5oper to5p4he 4topm top7oorl 4topv tor7eien tor7eval to6rint tor7inte tor6m5ag tor6mom to1s to3sf tos6tro to3tr tot6ste tou3s4 tou7tjie tou6wsr to4wn toy7ota. 2tp tpen6sk tpie6tj tpiet7ji tplek5 tpoor6t tpoort7j tp4sa t5psal t2r 4t5raad t5raam 5tradis 4traf tra6fas traf5o tra6foo 5trakta 5transa 5transf tra6paf trap7as. tra6pew tra7ploï 5trapp trat4 tra5tj 4tratu 4trea t3rec t5reda t5redd t4ree 4treek 4t5reen 4treë 4treg. t5regi tr4ei t5reini tre6ink 4treis tre4ka tre4k5l tre4ko tre4kr trek5w tre6kwi t4rer t5rese tre4st tre4t tre7talb tret5j t5reuk t5rewo 5tribu t5rief trie6kl 5tries tri5g4l 4tring trobo5 4t5roer tro6las trol7as. tro6lin tro6naf troo4 4troom tro6ski 3trou 3trov 4trub 4t3rug truit6j trui7tji 4truk tru7kopp trust5r 4tryk 2t1s ts5agt t4sam t4sar ts5arg t4s5eks t4s5eng tse6raf tse6rys tser7ys. t6singr t4s5ins ts5inv tsi7tsik ts5jae t4skar ts5kok t4skon t4skor t6skrie t6skrip t4skru ts5lam t5s6maak t5s4mee ts4mel t4smo ts5mot t5smou ts5nat ts5neu ts5oon t4s5pas ts5pen ts5pot t4s5pro ts5tea t5stel t6stend ts4ti ts5toer ts5tron t3stu t3su ts5waar t5swar t5swen ts6wing ts5wyn 2tt tta5tj tte6loë tte6ral tte6ram tte7ridg tte4ro tte7ruil tte6slo tte6s5ta tte5us tt4he tting5a tt5uur 3tua 3tue 3tuig 3tuin 4tuits tu4kl tum7aanw tur6kna 4turt tus7aart tus7eter tussen5 tu5têr 2tv tv4li 2tw twee5k twee5l twees4 twerp5o twi6sap 3tyd tyd7aanw tyd7lont tyd7orde tyd3r tyd6sat 3tye tyl7oorw 3tyn tyn7spre ty3o t5yster 2tz tze6nel 2t- u1a ua4e4s uahu6a. u4b3ag ubas4 uba7slag ub5eko ub3f ub5gro ub5int u3bl u4blu ub5lun ub3or ub5sch ub3t ub3v ub5wyk uck6len u4d3ar udi6top u4d3re u4dri uds6med ud5sor ud6stoe uds6tyd u1e ueb5lo uer7ione ue4ron uer7onde ues7tria ue5uni u4fri uf5rin ufs6maa ug5aan u4gei uge6ska ug1l u2go ugo6mol ug3or u2g3r ug3s ugs4k ugs4l ug4soo ugs4p ug5ste ugs6tek ug5sto ug5sui ug4ub ui4dag uid7arts ui4d3o ui4dr uid7reek uid7simb uid7skat uid7skel uid7skil uid7slui uid5spr uids6to uid7stoe uid7uits ui1e uiers6w uies6ma uie7smaa ui4f3a uif7eend uif5le ui4go ui4g3r uig3s4 ui4k3a ui4k3l ui4k3r uik7sfee uik6sta uik7uitk ui4kw uil7aap. uil5eks uil7esel ui4l5oo uil7tjan ui4ma uim7oes. ui4na ui5nae uin5ar uin7asyn uind4 uin7drek uin7ivoo uin7kole ui4n3o uin7ser. uin5si uin6ska ui4pl ui4po uip5oo uip7ore. uip7roes ui4s3a uis3j ui4s3o uis5ta ui4t3a uit7dein ui4t5ee ui5ter uit3j uit3r uit4sj uit6-as uk4aa ukaar4 uk5loo u4kof uk5off u4kor u5krat uk3ry ukse4s uk4ski uks4m uks7pop. uk4sv uk4th uku7yama u2k3w u1la ul3ag uld5erk ule6sta ulê6r-w ulf6api ul5ins u1lo ul5oog ulp7eksa ulp7oort ulp7orga ul4saa uls6oms ult7inge ult7uit. u1lu u2m u3ma um5agt umat4 uma5tj u3me umg6rok u3mi um4ie um5ond um4s. ums7feld u3mu u4mui umu4s un5arm uner6st 5unifo 3univ unk7reda un2s3 uns6enb un4sid uns6kap un5s6kol un7s6kool uns7lagg uns7taal un5str unt7eenh un6tinn unt7real unt6roe unts6ko unt5sw unug6s. u1o upi6lop u4ply u4pon u1ra ur5aar ur3af ur5agt ur3ak u5ra5s4t ur5atl ur5een u4ref ur5eff ure5um urf7loop urg6h-s urg7laag u4r5int urke5s urk7nael u1ro uro7pesi urp7agti urr7heim urs7agte ur4s5ek urs6fee ur6sloo urs7mous ur4sno ur4s5oo urs7paar urs6par ur4spr urs6wee urs6wie ur6t5oor ur4top urt7room u1ru u1ry us3ag usa7lag. u4sap us5een use5st ush7die. ush7koal usie4k usiek5l u4s5ins u2s3k us4k. us4kok us4kri u2s3l u3s4lu u4sno u2s3o us4ol us4or us3p us4pie u4spo us5pot usse7us. us3t us4t. ust5akt usta6v. us4tb us4tf us4tg us4th us6tink us4to us6trek us5tru us4ts us3w u2t u3ta ut5adm u4t3ag uta7spek u3te ute7ling ute7rago u3ti u3to u4topl ut5org ut4rek uts7luis ut4spr u3tu u3ty uu2 uur1 uur3i uur6s5in uus3 uus6khe uut3j uwees4 uwe7smit u5yste u3yu û1 1ü1 1v2 vaar6st va4kar vak7eie. va4kes va4ki va5kie va4k3o va4kr val7este val7fees val7funk val7isog valk7oë. val7opto val4sa val6spa vals7pan val6spo val6spr val6s5te val6sth va4n5ee van7effe van6gap van6gre van7uit. vari5et var6kja var6kle var4k5n var4k5o var4k5r vas7ent. vas6oor vas7waai ve2 ve3d vee7kong vee5kr vee4l veer5a vee3s4 ve9ga. veis4 vei5st vel6don vel4d5r vel5oo ve5lop vel5sm vel7sple ve5lum ve3na ve3ne ve5nor ven4t5j ve3nu vep7legi 3ver1 ve9ra. verd4 verdien7s8 ve5reb ve5rek ver6ema ver6ena ve5rend ver6eve ver6flu ver6fru ve3ri ve6r5inn verk4 ver5kl ver5kw ve7rona. ver5sa vers6ki ver7skin vers8kop. ver5sl ver5sm vers6mag ver5sp ver7stal ver5s4w vers8waar ver4t5j ver5tw ves3p ves3t ves7taal ve5suv vet5in vet5ji vet7opga vet3r vets4 vet5sm vid5so vie7ring vig4s vi5rag vi4rg vi4r- vi4sar vi4so vis5ol vis7oog. vis5tr vi3tr vit7rate vlag5s vla4k vla7koek vla6sak vle4k vlek5l v4lie vlie6so voe6rek voe6rui voë4l voël7oë. vog7inho vo4gr vo4lei vol4g5a vol6gon vo4l3o vol7song vol7uit. vol7ywer vond6s7te von6klo voo7doo. voor5s4 vor4s5t vor7ster vou7pops vou5tj vra6gry v4re. vree6tj vreet7ji vrie6sp vri6jze vry7duik vry7kyk. vry3s4 vry5st vry7uit. vu4e. vu9yo. vyf7armi vy3s 1w 2w. 4wael wae6lat 4wa4eo 3wag. wag6las wal6ste wand6sk wan6gaa wan7inge wans4 wan5sm 5wapen 3warm war4s3 wars6e. 4wart war6thi war4t5j war6toë wart7oë. war6too war4t5r war6tys wa5shi was6kaa was5la was6mou was7pan. wa5str wate6ra water7aa wat5so we4bad we4bm we4b5ru web7taal web7vlie 3wed we4d3r we5dra we5dry we4dy 5weefse weeg6s. wee5ran wee5sa wee7skaa wee5sko wee5sl wee5s4p wee5st wee6tru 3weg we4ga weg7dof. weg3l we4go weg7orde we4g3r weg3s4 weg5st we4gu 4weis we4k5ro wek7uur. wel7aanb we6larg we4l5ee wel7flan wel7fron wel5oor we4l5op wel6ske we4m3o wem6os. we4nak we4n5as wen7eens wen6sad wen6san wen6sar wen6sei wen6ser wen6ses wen4sk wens5ka wen7skud wen4s5l wen4so wen6spr wen6ste wens7tes wen4s5u wer7esse wer6fom wer6gar wer6gre wer6int 3werk wer6kad wer6k5af wer6kes wer4kl werk7laa wer7klan wer7klap wer7klok wer6koms wer6kon wer7kony wer6kre wer6kro wer6kuu wer4kw wer5kwa wer4ky we4r3o wer6paf wer6pan wer6plo wer6pon wer6poo wer6por wer7smed wer7uil. wes6mit wes7oewe we4sp wes7pemi we4s3t we5sta wes4th we5s4tr wes7waar 3wet. wet7regu wet4s5o wet4s5t wet7wysi 3wêr 4wfon wids7tor wiel5a wie4t5j wi4gr wi4kl wi4ko wiks7te. wil6dag wil6sin wil4sk wind7as. win6del win6dop wind7op. win4dr wind7ruk win6kle win4sk win7sky. win4s5t win7ston win6tap win6tes wip7lig. wip7roos wit5el wit7inkb wit5ji wi4t3o wit5ro 2wj wje6tun 4woeg woe4s wo4l3a wol7invo wol6klo wo4l3o woor6dr wo5rum wou6dag w2r wree4 wri6gon 2ws wur4gr wur4m wurm5a 2ww wwe7rint wyd5oo wyd7uite wyk6was wyn6and wyn5sm 3wys wys7aksi wys3k wys3p wys5ta wyt7raak x'9ie. x’9ie. x1a xe1 x3em xerox7e. x2h x1i xys6te. y1a y4ama ybe6lil y2d y3da y3de yden4s ydgele6 ydg6leu y3di yd3of yd3re yd3ro yd4sin yd6skat yds7krit yds7orde y1e y4enn yer2 yer7hof. yer7maat yer4s yer7ton. yer7vill yer7voël yes6agt 3yeu yf3aa y4far yf5as. yf3l y2f3r yf5ren yf4sl yf4su y1g yg4le yg4li yg4ly yg5saa ygs7kans yg5sko ygs5le ygs6tek yg4sto yg4stu ykaar4 yker6st y4k5ins y2kl yk3li yk4lu yk5lui yk5lus ykoms4 y4kor yk3ri yk4s5ad yk4sk yks7kans yk3sp yks4t yk4su y2k3w y1la y1lo y4loe yls7laar y2n1a yn4a. y4nei y4n5ete yn1g2 yn5kli yn5kwa y2n1o y3n4om yns6agt yn4s5am yns5ins yn5sly yns4m yns7maan yn4s5or yn4sp yns7paar yns4t yn3u yo9yo. y2p y3pa y3pe y3pi y5plan yp3li yp5org y3pr y3pu y1r y4sam ys4ig y4s5ind y4s5ins y2sk ys5kar ys3ko y5s4koo y2s3l y2s3n y2s3o ys4ok ys4ou ys5poe ys3t ys4ta y4s5taf y5s4tel y4ster y3s4tr ys4tu ys3ui ys3w y2t y3ta yt3ag y3te yt4ha y3ti y3tj y3to y3tu y3ty yve7sant 1z 2z. 4zbur zee7rust zen7elle zi2c zi5cat 4zman zook6a. 2zz 2-1 -er4t -ert5j -ha-7ha. -k4li -na6gew -s4ti -t4we -5twee", + ["characters"]="'-abcdefghijklmnopqrstuvwxyzäèêëîïôöûü", + ["data"]=".aan5s4 .aä7lawa .a6bc-b .a4b5la .ab7salo .a6b-ja .ac7cra. .a6farm .af7arm. .a6feet .af7eet. .a4f5en .a6fets .af7ets. .a6foes .af7oes. .a4f5oo .a4f5ra .af6ro' .a7fro's .af6ro- .a7fro-h .a6fry. .af3s .ag6aam .agte6r5 .a6guur .a9ha. .ah7lers .a3kw .a6leer .al7eer. .alf4 .al7fagr .al5fr .al6lda .a4l3o .al6oïe .a7loïen .al3p .al5st .al7thea .al7twee .al6zhe .amp4s .amps5w .a6naër .an7aëro .an6cpl .and4 .an5dr .ang4 .an5gl .angs5 .a4n5io .an7thro .a3pr .ap7side .a5rag .ara6p. .ar7thur .ar6zbe .as7jas. .a6snog .a6sof. .a5sti .a7straa .a7s6tral .at6hol .a7thol. .a5tsj .atte4 .au7drey .b6aanv .ba6din .ba4d5o .ba7loi. .ba7ragw .ba7rins .ba6sek .ba7tho. .be7deks .be6kaf .bek7af. .be5la .be7lol. .be7skos .be7thel .be7thul .bi7sho. .bli4 .blus5 .bo7kerf .bo7kies .bo7kors .bo7maat .b4on .bo7plaa .bo5ro .bo7sor. .bo5sta .bo7trit .bo7tswa .bo7uit. .bout5j .b4re .bu6eno .bu6lol .bu7thel .by6ldr .by6lho .by6lne .by6lpi .by7port .bys4 .by6tal .ca7thy. .ca7yenn .chlo7e. .ci6rca .ci7trus .cos7ta. .cy6pri .d2 .da7gon. .dag5s .da6kat .da6koo .da7tage .da6tji .dat7jie .da6wki .de6k7laa .de6klo .de6kwe .de5la .de7roga .de6sal .de6sok .de4sp .diep5l .di6jks .di4si .di7thak .do4m5a .do4m5o .dor7ste. .dr6oef .dun5s .du6pre .dut5j .dy7spie .e6bcu. .ed5wa .ed7win. .eer6sk .ee4t .e6fron .ef7ron. .eg7gofo .e6indu .ei5st .ek4s5k .ek7sopa .ek7sord .eks7tri .eks7tro .en7dres .enk4 .en5kl .e6noft .en7ofta .en4t5j .en7topt .ep7soms .er4d5a .er6dwo .er6fle .er6foo .er6inv .ern4 .er4t4 .er5te .ert5j .ert7se. .erts5w .e2s .e9sau .e4s3k .e3so .es3p .es8p. .es6pma .es3t .es6tco .es6tni .es5tr .e7tage. .et4sn .eur5a .eu7stac .ex7odus .e6zra. .f2 .fo6chv .fo6wle .f4ri .fy6tji .g2 .ga7lage .ga7lago .ga6lap .ga6loo .g6arbo .ga6sen .ge7dart .ge3g .ge7geks .ge7guil .gekun5 .gekuns6 .ge5la .ge7mopp .ge7muit .ge7nève .ge7rogg .ges4 .ge7sjab .ge7sjar .ge5sk .ge5so .ges7pe. .ge7sper. .ge7steg .gif3 .gi7gagr .gi6sen .gly3 .gly5k .g6lyna .g4oo .gou7da. .gr6äbe .g6ruba .gui7do. .hang5s .he6blu .he6gor .he6gra .h6eind .hek5o .he7rakl .he6r5en .he6wle .hi8v. .ho6fet .ho6laa .ho6loo .hooi5 .ho7taze .ho4t5o .hy6gro .ic7teru .i4gl .ile7us. .i2n1 .i9n8a. .in6ari .i7narie .ind4 .in7dwar .ing4 .in5gr .in5gw .in6iti .in5kl .in6kly .in5kn .in5kw .in6osi .i7nosie .in3s4 .in7snee .in7twyf .i5raa .i3sa .i4sk .i3so .ja6gli .jah7we. .ja6spa .ja7taga .j6äger .je7sopp .jo7dofo .jo7safa .ju6kos .juk7os. .j6ü6rge .jy6sel .k2 .kaar4 .kade4 .kadet5 .k4af .kaï7ro. .ka7nont .ka6pla .ka7plak .k6arbe .ka7thar .ka7thu. .ka6toë .kat7oë. .ka6tui .ke6ple .ker6k5a .ker6k5l .kerk5r .ker6sa .ker6sl .ker6s5p .ke4s5t .kie6st .ki6pli .ki4r .kit7se. .k4la .k6leyn .k4li .klip5 .knik5 .kn6opn .ko6maa .ko6maf .k4op .kope4 .koper7a .ko6pla .kop5o .ko7rag. .kor6st .kors7te. .k6rak. .kr6üge .kryt5 .ku7mon. .k4we .k4wo .ky7otop .l'7etji .la6eti .la6kwa .la5sa .lei5s4 .lek7oë. .le6poo .le5pr .le7shab .le6son .le4sp .les5t .le6suu .lig5e .li4gi .li6gom .li6gre .li7pase .l6loyd .lo6chn .lof7ui. .lo6glê .l6ontd .los5k .lu6gen .lui5sl .l6üder .m2 .m'7etji .ma6cdo .ma6nal .ma6nur .ma7stek .ma7thes .ma6zda .mel6k5a .mel6k5l .mer6k5l .mes5m .me4sw .me6tem .mi6dos .mi6rba .mi7traa .m4ne .mo7djad .mo7flam .mo6sin .mo4sk .mu4e .my6nen .my6n5in .my7unis .n2 .n6aand .na5fl .na6gro .na7groe .na7smaa .na7stor .na7uurs .ne4k5a .ne4k5o .ne6kri .nek7rin .ne6kys .ne4s3 .ne7serh .n6etik .ne4t5j .ne6tru .ne6wca .ne6wfo .ne6wla .ne6wma .ni4e .ni6jho .ni6rva .nix7on. .n6kosa .noet4 .noe5tj .no6gee .no4k .n6ondu .nu4l .ny7lont .oe5kr .oe4r .oe7ralg .oe7rang .oer7os. .oe4s3 .o4gl .oh7rigs .o6klah .ok7laho .ol6ieu .o7lieui .oms4 .o2n1 .ond6ui .on7duit .o6nemo .on6ias .o7nias. .on3k .on7parm .on3s4 .on6she .on6sse .on6t7eer .on6t5er .on4tr .ont7ras .ont5ri .o9nus .on6us. .oon4 .oon7de. .o4op .oor5n .oor5s4 .oo4s .o6peet .op7eet. .o6peg. .o6pein .o6p5erd .o4pof .o4pr .op5ra .ops4 .op7smuk .o7ragie .or6kne .o3ro .orto5 .o4sk .os5ko .os7oog. .ot6hel .o7thell .ou6doo .ou7nôi. .ou5tj .p2 .pa4d3 .pa7die. .pa6vlo .pe5la .pel6sk .per6st .pe4sk .pe4st .pie6tj .pi7laf. .pit5s .p4la .po6dzo .p6oefe .poen4 .p6ontw .po6sad .p4re .pu6tad .py6paa .py6pla .py6pol .pyp5r .py7thon .r2 .r'7etji .r6aard .ra7dart .ra6seg .ras7eg. .re7aumu .re6gru .rek5s .re6mas .rem7as. .re6mco .re4sl .rie4t .riet5j .riet5r .ri6ple .roc7ky. .ro6gak .ron7do. .rond5s .ro5py .ros5t .ro6tre .ro6wli .ru7klip .ruk4o .ru7kope .ru7staa .ru6suu .ry4k5a .ry6ste .s6aans .s4af .s4ag .sa7gopa .s6akty .s4am .sa6vlo .s4ca .se6an. .see5ra .see7ys. .se7khuk .se6laa .se6lop .se7reni .se6sle .ses5t .se6suu .se6tap .se4tr .sex5y .s6fale .s4fi .s4gr .s4ha4 .s4he .s4hi .s4ho .s4hu .s4in .si6nes .si7pho. .si7rag. .s4ja .s4ka .s4ke .s4kl .s4ko .s4kr .s4ku .slag5 .s4ma .s4me .s4mi .s4mo .s4mu .s6nags .s4ne .sod4 .so7dafa .so7dwan .so7iets .so6kop .some4 .s6oms. .s4on .so6neg .s4op .so6pek .so7phok .so7ross .s4pe .s4pl .spo4g .s6pren .s4py .s8ri. .s4ta .s6temp .ste7rol .ster6ta .ster6t7j .s4ti .s4to .straf5 .s6trei .s6tuar .stuc5 .su7biet .sub5m .sub5p .su8e. .s4ui .su5kr .su7ther .su7tra. .s4we .s4wi .s4wo .sy1 .sy6lvi .sy7nagr .sy7slag .t2 .t6afsy .t4ag .tee5k .te6flo .te7rafi .te7ragr .ter6tj .tert7ji .te4s5t .te7stud .ti6ene .tie6t5j .ti4k .ti6ner .t6jaai .tjok5 .toe7ys. .to6kla .to7ky7o. .to6lun .to7ront .tou3 .trap5r .trek5 .tre4s .trie4 .tries5 .t4sa .ts4h .ts6jaa .ty6daa .ty6dor .ty6dra .ui6laa .ui4t3 .ui5ti .ui5t6ji .um7hlan .uns4 .un5st .u5raa .u5tra .va6kad .va6kei .va6naf .va4n5o .va7raan .va6sen .va6swa .vas7ys. .ve7cino .ve7laar .ve7lare .ve7lêr. .ve7loer .ve7lome .ve7meng .ve7rema .ve7rena .ve7reve .ve7skaf .ve7tore .vlas5 .vo6gin .vo6lyw .vo6sko .wa7ghri .wa4n .wa7smou .wa6spa .web5m .we4bo .we6b-o .week7lan .wee4t5 .we6kuu .we4l5a .we6lin .wel7ing .we6nan .werk5l .wer6k5r .we4s5k .we6soe .we6swa .w8hê. .w4hi .wi6id. .wins5 .wi4p .wi4t .wî9e. .wy7kwas .wy7nand .wy6net .x2 .y6amin .y6anni .y6asud .yk7loon .ys3 .ys6ere .ys5la .ze5us .z6üric .z4wa .z4wi aa2 aad1 aa4da aa4de aa4do aa4d3r aaf7emme aaf6sat aag5al aag7asem aag7elas aag3r aag7rond aag5s4l aag5sp aag5st aag7swee aai7lag. aak1 aa4ka aa4ko aak3r aak7ster aak3w aal1 aal6dys aald7ys. aal5fe aal6fpo aal5sa aal7sfee aam1 aa4ma aa4me aa4mo aam7smul aan1 aan6dou aand6re aan7dren aan7dros aan7gons aan3k4 aan5kl 5aankon aan7kry. 5aanleg aan7sage aan6see aans7eer aan6sek 5aansig aan7skem aan5sl aan5sn aan6som aan6son aan5sp aan7tuig 5aanva aap1 aa4pa aa4po aap3r aa4pu aar3a aar6dan aard7ang aard7as. aar5de aar7ding aar4du aar3e aar3i aar7kwek aar6lbe aar6lka aar6lva aar6lzi aar6l-o aar3o aar7ser. aar7seri aar6sid aars8teek aars8tell aars6ti 5aartap aar6tin aar7tomo aar7tryb aar3u aas3 aa4so aas7omel aat1 aat7nagt aa4to aat3r aat6sef aat7sfee aat7slim aat6slo aat6sly aat7sonn aat6sow aat6sti aau6wbe aä5ron aba6kas abak7as. aba7komb abare4 aba7ster ab3d aber6sp ab5lau ab5rup 3abso abu7scha ab5wie ac5que a2d a3da a4d3aa adam4 adam7pe. ada4r a3de ades7lan ade7smee a3di adi6eus 5adjud 5admin a3do a4dow a3dr 5adres. ads7erwe ad4sn ads6op. ad5sor ads7teso ad4su a3du ad5uit adu7spel adu5tj 5advert a3dy ady7smit a1e ael7atoo ae4l5ei ae4lo aes5to aes5tr aes7tuur aë1 4afee af5eks afel5aa af4fre af5gha af5inr af3l a4fof af1r af5raa af5ram af5ran a4f3re 3afri a4f5rit a4f3ro a5frod a4f3ru af3s4w 3afva afval5 ag3aa a6gaanv a4gaar ag5adv a4g3ak ag5alg ag5api ag5are 4age. 4ageb 4aged age6ddo a4gei 4agem a4g5erv 4ages a6g5ewen agge7us. a3gi a5ging a4g5ins agi5s6tr ag1l ag5ogg ag5ord ag5ork ag5oud a4g3re ag5rei a4g3ru ag3sa ags7abno ag6sins ag5ska ags7koev ag5skol ag5skr ag5sky ags4lo ag4sn ags6oep ag5som. ags6oom ags6op. ag5spe ag5s6por ags4t ags7taal ag5sti ags6waa ags6wee ag4tu agt7uur. a4g3ui ag5ure ag5uur ag-7lag. aher4 ahe5ri a4hs. ai1 aig6ne. aiï5er ai4lp ain6ste aip6eis ai3s4k ai5sla ais4p ais7prys ais4t ai3tj ai3t4r a4k5aan ak5arb ake6lee ake6lof ak5ess ak5ins akis4 akis7te. 5akkoo a2k3l a5klank ak6leet a2k3n ako6bre ak5oms a1kr a4k3re ak5rig ak4sc ak5sme ak3sp a4k3ui a2kw ak3we ak5win a3ky a4kys a1la ala7gadi a5lagm al5agt ala7kled alan7gaa al5dei a4lef ale6str al4f3e alf6eni al4fh al5fie al4fj alf7olie alf6sko alf6sni alf6sta alfs7tan al4fu alf4- 5algori alien5s ali6gal ali7glas alk7aard alk7laag alk7oond alk5sp al4kui alk7wyk. 5alleen alm7eier alm7lont a1lo als4a als7agti als7ghaa al6skel als7kelk als5li al4s5oo als7pret als5waa als7werw alt6hea alt6hus alt7rots alt6sas alt6wee a1lu alve5o a2m a3ma ama3k4 aman6t5j ama7rins am5atoo 5ambag 5ambass a3me am5egt ame6sin ame5sm ame6spo a3mi ami7skyw amm6afu 5ammun a3mo amp7arre amp7lag. amp7leer amp7lig. amp7lug. amp7omhe amp7seël amp7sfee amp7sier amp7staf amp7staw ams7esel am6s5kop ams7lend am6smet ams7meti ams6mul am4s3o ams7pels am6swan am6swar ams7wyn. a3mu a4mui am5uit a3my an5agt ana7kwal an5alf ana6spi an4c- and7aans and7adel an6dakt an5dan and7anal an4dap an6dase an6datt and7attr an6degt and7egte and5eks and7emal an6derf and7erf. an6dete and7etes and7eval an6dinw and7inwa and6ja. and6jar an4d5om an4don an4d5op and7oud. an6drak an4dro and6ser and6s7kop and7spaa and7spre and7steg and7swee an7dwing and7wyn. ane6ron ang7aal. ang7adem ang7ghor ang6hai ang6lad an5g4li an6glig ang7lig. ang7lip. ang6nol ang6ons ang7ore. ang7repu ang7sakm ang6ska ang7snee ang6s7te. ang7stem ang6sur ang7ure. anie6t5r an5inl ani5sf ani7slaw an6kase ank7asem ank7refe an4kry ank3w an5ops an5opt an5opv an5ord an5org ano7roei ano7stoe anr6hyn ans7aalw an4s5am an6sass ans7asse an4sc ans7eila ans7eura an6sink ans7ink. an6sjek ans7jekk ans7jord an4ske ans5kei an6skin an6s5kop ans7kous an6slat ans7mada an4sn ans7oran an4s5pa an6sper ans7pet. an4spo ans4ti ans7toil ant5aan ant5aar an6tass ant7asso an4tei an6teks ant7ekst 5antenn ant7ete. an6tins ant5jo an4tol ant7opru ant7rest ant5rin ant7rob. ant6ski ant6sko an4tui 5antwo a1ny a1o a2p a3pa a4p5aan a4p5agt ap5aks ap5arm 5aparth a3pe ape6nop a3pi api6rfa ap3l a3po apo6kaa ap5ond apo5sta 5appar ap1r ap5rol ap3ru a4pry ap5ryk a5prys ap6sall aps7alli ap6seko aps7iden ap6skof ap6s5taa ap5sti aps7toet aps5we a3pu a4pui ap5uit a3py a1ra ara7gwan ara7klee ara6kop ara3p4 ara6ppa ar6d5agt ar6das. ar6datm ar5der ar6deti ar6d5opp 3area aree5s areg7swe ar3ei are7knip ar5fla arg4h ar5gha 5argite ar4gl arg4o arie4f ari6jke ar6k5ana ar6kini ark7leer ar5klo ark6los ark7onvo arko6v. ark7snui ark5sp ar4kw ark5wa arn6avo a1ro aroet6j aroe7tji aroo5h aroom4 aroo5p aroo5s ar3op aro6wva ar5rag arres5t ars5ag ars7elek 5arsena ar5sie ars6kou ars7krap ar6skre ars7kree ar6skro ars7pan. ar4spr ar6stal ars7tall ars7tee. ars6-in ar6taas art7aasv ar6talb art7albu ar4t5as ar4tc ar5te. art7eend ar5teh ar4tei art6hol art6hur art6omo art5oog art5oor ar4tor art7reek art7roep art6ryb art7samb art6slu art6spr art7spyn a1ru arus6o. a1ry ary7taal as3ag as5app as3c as4d. as4dh as5egt ase6rak as5ete as3f asg6hit as4hi asi7freu a4sj. a4sjm a2s3k a5skool a5skri as5kru a2s3l as5laag as3m a4smy a4sna as3no as9of. as5ogi a4s3oo as3op as3p as4por as3t as4t. a5staa as4th ast6les a5stof a7strak. a5s6tran a5s6troo as3w a4sys as5yst at5aar a4tag ata3s4 ata6sse atas7se. ata6wba ate5it 5atelj ate6rar ate6rer ate6ron a6tetes ath7cart a5t4hee ath7kinp ath7lone atie6te a2t3j atk6v-s 5atleet 5atmos at5oog at5ry. ats7alma at6sint ats7inte at4sj at6skin ats6kom at6skop ats7kop. ats7krip at4s5le ats7lykh at4sm ats6maa ats7nood at6somw ats7omwe at4son ats5ond ats7onko ats7onlu ats5op ats7ower ats7tend ats7trek ats8treke at6stro ats3w at5the att6hys at4tu atu6maa 2au aud6rey au5gra aug6sbu aul6spo au3p aure5u auri5s4 aus4t aus7tin. au5str aus7tus. aut6ste ava6lop ave7lott avlo6v. 3avon awa7glas awas4 awe5ga awe4r5a awer6ui aws6han ax5ofo a3ya ay4a. ay5ist ayn6ard ayn6or. a3yo a3yw azoo7ka. azz7agti az4zl azz7orke 1ä 1b2 2b. babak4 bab7wiër ba4d5ra bad5sp ba4kin ba3kl ba4kla ba6kleu ba4k3o ba4k3r bak3w bal6kla ba4lo bal7onts bal5or bal7tsas ban4da ban6dek ban4d5r ban7glad bang7ste bangs8te. ban4k5a ban6kre ban4kw bar7kaan bar4s3 bar5th bas7ekst bas7ghit bas7jan. ba4sn ba5spe bas7peer bat5aan ba3t4j 2bb b3ba b3be b3bi b3bl b3bo b3by 2bd b3de b3di b3do bed7slaa bed6sta beds7taa be3dw beel6dr bek7neus bek7wind bel6aga belk6li bel7klik bel6ldo ber6gaa berg7aar ber4gl ber4g5r ber7grys ber6gzi bers7pan ber6spr bers7pre bert6sk bes6aan bes4k be5ska be3sl be3sm be3so be5son be5sôr be3s4t be6s5ter be5sti be6stia bes7tial bes7trol bet4h be5tha bet7hesd be5ton be3tw 2b1f 2b1g b3ge bid3s bi4du bid7ure. bie6dui bie4g bieg5r bi4jl bin6dri bio7sfee bi4rc bis4a bis6ho. bis7scho bi3tr 2bj b3je 2b1k b3kl b3ko b3ku bla4d5a bla6don bla4d5r bla5so 4blau bleem5 ble4s ble7ser. bles5k ble6tji blet7jie blê6rfl blik5o blix7en. blo4k3 blo7kaal blo4m3 blu6sem bly7mare bly3s4 2b1n b3no bob7slee boe6kil boe6kom boe6koo boer6st boers7te boe4s5k bog7gher bog7skut bo2k1 bo3ka bok6aak bok6ale bok6as. bok6erf bok6ies bok3l bo7kleed bok6om. bok6ors bok6ost bok3r bok6rag bo4m5aa bom6aat bo4m3o bon6dam bon6dra bond7raa bon6tel bon4t5r bo9op. bop6laa bor6dak bor6des bor4g5a bor6gri b4ors bor6saa bor4s5k bor4s5l bor4s5t bo2s bos7anem bos7jamb bos7pepe bos7taai bo5s4tr bos7uil. bo5t4ha bot6sto bou6it. bou3s4 b3pr brand5a breek5 br4ei brei5s4 brengs7t brie6kw briek7wa 3bro bro4n bro4sk bro6vni bro6wni bru4l 4brup br4üm 2b1s b3se b3si b3sk b3so b3sp b3st bs4ti b3su 2bt b3te b3ti buc7cleu buik5s bui5t4j bult7af. bul4t5j bul6top bult7op. bul6tui bun7senb bus6had bus7toer but6hel buu7rend 2bv b3ve b3vi 2bw b3we by1 by3d by3k by4lb by4lt by3n4a by3s bys6kot bys4l bys6tek bys7ter. bys6tor bys4w byt7alka byt7eier by3tr 1c2 2c. ca4es cam5ph ca3pr ca3ra car6lto caru7so. cat4h ca5tha 2cc c3ca c3ch c3ci c3co ce4st ces5te 2ch. che6lan 5chemi che6reg che5r4i che7ryl. che7styl che6vvi ch5hoe ch5lei ch5nik cho7rage ch5sia 2cht 2ck c3ke cot7rand cove7ry. 2ct c3ta c3to c3tu cus5to cyp7rian 1d 2d. 4d5aanb d5aand 4d5aank d5aansl daard5u 4dabs 2d1af da2g da5gas dag5et da5gha dag6ham da5gra dag4sk dag5so dag7ster dak7lei. dak7oorh da4k3r dak5wa 4d5alar 4damb dam6plu 3dan dan6k7erk dan6sak dan6sko dans5m dan4so dan4s5t dan4t5r daph7ne. dap4l da5pla 4d3arm 4dart d5arti da4s. das7lag. das7traa da3t4j 2db dby6lvo 2dd dda5kl dda3s4 dde6lee ddel5so dder7aal dde6ras dder7as. d3dh dd4hi deba4t dee4g deeg5r dee4l dee7lig. 4d5eenh deë7skou 4deg. 2dei de3ka dek6aan de6klad de6k5lat de6klei dek7lei. de4kna 6dekono de6krie dek7riet 4deksa dek6ska del7appe del5eeu del5egg d5elekt del7elek 6d5eleme de6leng del7enge del6fer del5fi del6fos delf7os. del5oor del7oper del6ser del4so del7sold del7sone del4sp del6str del7stre delt6ag del7tagt del7weis 4demm dem6pla den6din 4d3eng 4denj den6kar den6kja den4k5l den4kr dens7pre den4t5j den6tri deo7plek deo7sfee 3dep der5ast de6reen der7een. der7emig der7ent. der7flap de6rin. derm7ins der5na de4ro de5rob de5roe der5of de5rol der5on der5ow der5ps der6sjo der5s6kr der6slu der6spu der7thal der6uit de5sag des7alni des5ap de6seng des7enge de4s5in deskat5 de6skor des7leed de4sn des7offe des7oksi de4s5on de4sor de4spa des7pari des7poës des7prik des7taal des7tele de4sti de5stig de4sw des7weë. 4d5ete. deten6te de3tw 4deuro deur5s6w 2d1f 2d1g dge5sp dg4li 2dh dias4 dia7stol dia6zvi dic7kie. dic7tio. die6fal die6kes 5diens die4pl die6tom die4t5u dig6ofa di4gre digs4 dig7skro dig7som. di6kamp dik7amp. di4k3l di4kr dik7ribs di4kw dik7wyn. di4l5al din6gas din4gr 4d3inl 4dins 4d3int 4d3inv di6sass dis7assi di4so di5son dis6pne dis7quis dit6hak dit7jies 2dj dja7dji. d4ji. d4jia 2d1k dklo4 2d1l d3la 2dm 2d1n doek5r doe6lon doe6sko does7kop 2dof 4dogi do4l5os dol6sou dols7ou. 3dom dom6pli dom6sap 4d5omse dom7slim dom6swê 4domt don4sk 4d5oord 4dopn dop6rof dop6rys 3dor 4d3org dor7othy dor4sl dor4st dos6tel dou3t do3y doy4e 2dp d2r 3dra dra6gaa 4d5rand dra7stan 4dreë 4d3reg d4rela d4rew 4driff d5rigt d5riss 4driv droë7ys. 4d5rond d5rooi 4d5roos dr4op dro6pan dro5pn dro7sfee 4d3rug d5ruim d5ruit 4d3rus 4d3ry. 4d3rye 4d3ryk 4drym d4ryw 2ds ds5aamb ds5aar d4s3ad d5sakr ds5aks ds5angs d4s3ar ds3as d3se d4s5een ds5eis. d4s5eko dse4l dse7leer d4s5eng d4s5era dser6tj dsert7ji d4s5erv d5sfeer ds3id ds5imp ds5inde d4s5ins ds5int d2s3j d5skee d4skin ds5kind d4skis d5skole d4skom d5skoo d6skraa d6skrit d6skroo d4s3le ds3li ds6luie ds3m d5s4mee ds6moor d4sna ds5neu ds5noo ds5not d2s1o d3soe d5some ds3on d7sonde. d7sondes dson4t ds5oog ds3op ds3ow d5s4pel d5spes d3spi ds5pop ds6prek d7spreker ds7preki d1st ds5taak d4staf d5stand ds5tea d5stel ds5tent d5ster. ds5terr d5sters ds4ti d3str d3stu ds3w d3sy 2dt dter6tj dtert7ji du4e- duns6te dur6rhe dusie5k dus6kap dus6pel 2dv dverdiens9 dverdien8st dve6sid dvie4 2dw d4waal d5waar 5d4wang dwa6nor 4dwarm dwar7se. d3wat d4weil 5dwerg dwerk5o dwe6tar d3wil d4wing 4dwoo d4wyn dys5ag dys6mit dys7tuin 2d- d-r6hod e1a eam6ses eang4 eate4 eau7mont e3ba eb5adr eb9cu. ebou5t ebou6t. eb4re ebrons5 eb5tui ec5cle e4chn ech7tiaa eda7gaat eda5go e3de ed5eis eder7as. ede7ring ede6sap ed5off edors5 ed4ra ed5rep ed6saks eds7kalm ed4sl eds7lafe eds5om ed3sp ed5s4we ed5uit ed2w ed5woo ed5yst ed3yw ee5agt eed6atu eed5we ee4dy ee2f eef7laag eef7lopi eef7rant eef7rek. eeg3l eeg5ru eeg3s4 eeg6sdi e5eila ee2k eek5ass ee5klaa ee5klag eek5lo eek3n eek5og eek7oors eek7rooi eek3w eek6wal eel5ap eel6doo eel7doos eel5een eel7eer. eel5ei eel7indr eeling7s6 ee6lins eel5int ee4l3o ee5lob eel6ood eel6oon eel5sa eel7snag eem7onde eem5ou ee2n1 5eendj een6ema ee5nen 3eenj eenk4 een5kl een7slot een5sm eens6pa een7swee een7topp ee4ny eep7esel eep7leer eep7loog ee4pop eep7roes eep6sam eep7skep eeps5ko eep7skui eep6sti ee2r eer5ap ee5red eer5ee eer5end eer5in ee5rob eer7oes. eer5om eer5on ee5row eer5ps eer7skur eers7lam eer7smed eer6sow eer3u eer6ust eery4 eer5ys ee2s3 ee4s. ees6ala ees6ap. ees6lep ees5me ees7muil ee5sna ee5sny ees6op. ees6pre ee5staa ees6tal ees4tr ee6styd ee4sw ee5syd ees6yfe eet7appe eet7eenh ee4ti eet5in eet7rek. ee6troe eet7roed eet7ruik eet7wiel eeu3g4 eeu5in eeus4 eeu7spoe eeu5tj eeu6ur. ee5yst e3êr eë5aan eëks5t eël7eier eël7yste eë4na e3ër eër7agti eë5ran eër7arm. eë5rod eër6ske eë4sk eët6ste eëts7te. e4faf ef5afs ef5eks 5effek ef5inh e1fl ef5loo e4fly ef5oms ef5oue ef3st efs6tal eg5amp ega5s4k e3ge ege6las egel7as. eges7per eges4t ege6vwo e6ginko eg5ogg eg5rig egs7enti eg6sins eg6s5int eg3sk egs6lot egs6pre egs6pri egs6pyk eg6s7taal egte6re e4g3ui eher6in ehe7rinn eho6kra eib7niz. eid7rok. eid7saam eid7salo eid7sirk eid7skou eid7sku. eid7spa. eid7spek eid7ste. eid7stoo eid7sug. ei1e eie7naan eig6h-n eig7opro eik7aard ei5kno eik7wydt eil6spa 3eind ei4n5ed ein7eed. ein7glas ei4non ein7oord ei4n5op ein7otte ein6sad ein6sep eis7angs ei5sei ei6s5ind ei5sja eis7kamm eis6kaw ei5skê eis6kot eis6laa 4eiso eis7ouer eis6pir ei5s6tel ei5s6tre eit2 eit7hand ei3tj eit7klin eit7nisp eit7onde ei5tra eits5ko eits5l eits5o eit7spor eit7stak eit7stra eits5w eï5mit eï4na eïn7klin eï4no eï4nu eï5oni eï4sl eja7stas ek5aan ekaars8te ek5aks e3kan ek5asg e3ke ek5een eke7naar eke6tam e3kê e4k5ins ek3k e4k5les e5kleu e4klê ek5log e3koe eko6mol ekom4s ek5omsl ekoms5t 5ekono ek5ooi e3kop eko6pap e4k5opm ek5opn ekor6da eko7rum. ekou6st ek5owe e1kr ek5rad e4k5rok e5krom ek5rug ek6sapp 5eksemp eks5esk eks7inge eks7logi eks7loks eks7outo eks5pir eks5po eks6poe eks6tel ek6sten ek4sti eks7uur. ek5uit e4kwê ek5wie e4kwu e1ky e1la e6l5aand el5aanh e6laanv el5aard el5adm el5adv el3af el3ag e5lag. ela7klon e4l3al e5lari e4l5arm ela7slan el5asp eld7adel el4dap el5de. el6d5ele eld7erfe eld7evan eld7olie eld7onde eld7smid e3le el5eien eleis6t elei7sta e6lelek el5erts ele7sett ele6too el4faa elf6abr elf6eit elf7en-d elf5erk elf6lan elf6les el4fon elf7onth elf7ontp el6foop elf7oops el6foor elf7oors elf6ron elf7twyf e3li eling8stell el5inh e6linko el5inv elk7nage elks4 el4kwi el4lv elm5agt e1lo el4ob e4lol el5oli el5ond el5ont e4loor e4l5opd el6ope. e4l3or el5phi els7angs el5sfe el6sind els7indr el6skan el6skom els7korr els7krit els7lof. el5smi els7mora els6nag els7nood els7onde els7oork el6stek el6s7tran els7ware el5swee elt7akke e1lu el5uit eluit6j elui7tji e3ly ely6kaa em5app e5masj eme6lek eme6lew eme6ron eme4s eme7sis. emes5m emes5t e5metf em5eva e4moef em3op em5org emp7laag emp6skr ems4p em5spl e4naf ena7glas en5agt en5akk en5alt e4n5art ena6spe en6d5agt ende7ro. end7raak end7rit. ends7oë. end7sons end7ure. end6wer en5eil en4en e4n5ent 5energ ener6tj enert7ji eng6hor eng4la eng6lor e3ni en4ig en4im en5inh e6n5ink. eni7soms 3enji en6kinh enkom4 enkoms5 enk3w e5nomm eno7ryn. en5out ens7adem en6sall ens7are. ens7eise ens7elek ens7elik en5sen ens5erv ens7esse ens6haw en5sie ens7inga en5sji ens7koei ens7kyke ens7luik ens6med ens7nuk. en4son ens7onru ens7onva en6spei ens7pist ens7pot. en6spou ens7pous ens7taak en6stak ens6tam en6steh ens6tei ens6tel ens7tele en7sters en7s6tes. ens6tet ens6teu ens6too ens7toom ens7trek ens7uil. ens7ure. en5sy. ent5akt en6teks ent7inte ent7rif. ent7rok. ent6sin ent6son ent6spa ent6wen en3ui enu6lin enu5sk enu5st e3ny en-7steg e1o eoe4s eo5fag eo3g4n eoi6ste eop6lek eo3ro eo1s eos4t eo3tr e4paf e4p3ag epe6loo ep5emm ep5epi epers7te 5epidem e4p5int ep4la ep5lap ep5ligg ep5lus epoet4 epo6nin ep5ops e4p5rei eps7ameu ep6s5eis eps5id ep4sj ep4sk eps7kano ep5ski eps7kohe ep4slu eps7luik eps6oms eps5on ep4s5pr eps7waar ep5uit e1ra er4a. er5aan er5afd er5afh er5afsk er5aft er5afv er5afw er3ag era7gree era7kles er5aks er5akt er5alb er6ald. er5alt er5ana e5randa e4rapp er3ar era6ser era7uitv erd7ryle erd7slip erd7tree er3dw er4eb er6eenk er5eers er5eff er5eie er5eil er4ek er5ekst er5elm e4r5emm e6rengt e4reni e4renj er5erg er5erv e3r4es er5esel ere7spio eres6ta ere6stp ere7temm e5rewa e1rê er4fh er6flaa erf7leen er6flet erf7lett er5flo erf7lug. erf7lus. erf7omhe erf7oom. er4fp erf7reuk erf7ruik erg7aren erg7lyn. erg7renm erg7rymp erg6rys erg6sho erg7stra erg7uitj er4id eri5fr e3rig eri4g5a e4r5ind e6rink. e6rinna er5ins e4r5int e6r5ital eri7trea erk5aan erk7esel erk6has erk7ink. er6kins erk7inwy er4kj er6klat er5kle erk7onde erk6opn erk6s5on erk7spas erk6sto erk7uurr er6kweë erk7weë. erk7ywer er5lik er5lui erm4a erm7aanh erm7afsl ern7eiwi ern7kwes er4nm er4nn ern7oes. er4nr e1ro er5oew er3oë er5ogg e3roï e5rok. e4r5oks e4r5oli er5om. er5omh er5oms er6ona. er5oog e5room er5oond e5roos e4r3op e5ropa er6opla e5ropo e4ror e5rora 5erosi e4r5oss ero7stil er5oud er5oue erou6t. erp7anke er6pinh erp7inho erp6lan erp7ruik erp6sig err6ein ers7assi er6s5eli ers7ete. ers7inda ers7jean ers7kaia er6skaj ers7kaju er7skake ers7kaki ers7kete ers7kiss ers7koet ers7koor ers7kop. er5sky ers7less ers7lone ers7luid ers6mal er7smara er6smat er4s5om ers7onvr ers6opn ers7ower ers7pien ers7put. ers7scen er5ste ers7tele ers6teo ers4ti ers7treg ers7waar ert5aan er6taap ert7aap. er5tap ert7ape. er6tend ert7end. er5tes ert6hal ert7jakk ert7opin ert7orre er6tres ert7rok. erts5l ert7uur. ert6wak er5twi e1ru erug3 er5uin er5uit er3uu e1ry ery7doel ery7salf erys6ma ery7smaa ery7suur ery7trek e5saan. e5sage es5agt es4ak es5all esa6mol es4an es3c es4dh e3se e4s5een e4s5epi es4er e3si es4ia es4ie es4if esi6gei e4sill esin6s5i es4it e2sj e4s5ke. es5kle eskor6s eskors7t e5s4kut e3sla es5lem es4lip e1sm es4me es5me. es5men es9mè. e5smou es4mu es5nie es5noo es4ny esoet6j esoe7tji eso7fagu es4ol e3s4oo es4ou e1sp e5spel es5pen e4sper es5pet es5pir es4pli es4pra ess6opv e1st es4t. e5stad es5tas e4s5te. es5tea es5teli e4s5tes estes5o est6her es6tik. es5toi es5tos e6strak es4tre e5stuk e3sw es4yd e4t3ag eta7stas e3te e4t5eie ete5r6aa etie4l5 5etike et7jie-k etk6ysi eto6nop et5opv e4t5ord e4t5ram e6treke e6treko etre7kor et5rim ets7fyn. et6skat ets7kato ets7kous ets7krie et6s5lap ets6maa ets5ong et6spaa et4spr et6stek ett6re. et5uits et5unie et4wi et5win et4wy et5yst 2eu. eug6rie e3uit euk7inte euk4l eul7eien eu4loo eu5mon eum7uitg eu4na eun6sla eup7aand eu4ra eur5aa eur6aal eu5ral eu4ree eur7eet. eu6reg. eu6regt eur7egth eur7ekst eur7elem eur7spar eu4sa eus7ape. eus7jig. eus6kot eus6tac eute4l eu5tem eu3tr e1uu 2eu- eva7kwaa eva6les evr6ore evu6es. ewal4s5 ew4ar ewee4 ewe7gaan ewe7goed ewe7inde e5weis ewe6nee ewen8stes ewe6res ewe7span ewik4s ewiks7te exy7ste. eyn4o e5yste e3yw e4zka ez9ra. è1r ê1 êe4ro êla7flui ê4rde êre6loe ê4rhe 1ë ë1g ëi3e ëk4sk ëks3p ëks6pek ëk4st ë3laa ël5agt ël5alb ël5as. ë4lei ël5ent ëlf4l ël5fle ë5loop ëls7kuil ën5agt ën4tr ënt5re ëpre4 ër5aan ër5afd ër5off ërog4 ëro3s ër5owe ërs7kent ë1ry ë1s 2f. 1fa f5aanb f3aar f3ad 2f1ag f4agi fah7renh fai6r-n fak6ste faks7te. fan4t5j fan4tr fant6s5t f3ap f3art faru6q. 2fb 2fd f5dein fde4s fde7sake fde7sess fde7skei fde7stor fde7stra fde7sust f3d2w 1fe 4feen 3f4ees f3eie fe4l5ap fel7asem fel7enti fe6loon fel7oond fel5s4m fel6spoo fe4lu fe4ly fel5ys fer6skr fers7kra fer6sku fers7kui f5erts fe2s fes3t fet7ete. f1f ffe6las ffe6ret ffe6tet ffi6eek ffies6m ff5rei f1g fge7sper fg4ha fg4li fg4ly fgod4s5 1fi fi3d fid6ji- fie7ekst fie7lafo fie7smaa fie4s5o fie6tol fi5lag fil4m5a 4finr fi5sto fit4z 2f1k fkom6st fkoms7te fla4p flap5o f2le f5lees f5lese fle4t flet5j flex7or. 2fli 5f4liek 3f4lit 2fm fmo4no f1n fni4s3 1fo f3of 4foff fok4s5t fol4k3 4foms 5fonds fond6sk fond6st fonds7te f5ontb 5fonte f5ontl f5oorl 2fop fo4po fop7spen f5orde f3org for7oksi fo5rom fo3ru fos7feen fout5j fox7hill fox7stra fp4sa 1f2r frag6aa 4fram f4ras f4ren fre4s5k 4f3rig fri6too f4rod fru5ga f3ry 2f1s fs5agt f4s5ank f4s5eko f4skon fs5log f3sm f4sma fs4me fs4mi f3sp fs4pl f4spro f4s5tak fs4ti 2ft ftre4 ftre5d ftrek5 1fu fu4ch fur6ore fu3so 4fuur f5uur. 2fv fva4l 2fw 1fy fyn7goud 2f1ys fyt7appe fyt7jie. 2g. 1ga g4aai gaam6s7te g4aan. g5aanbi g6aandh g5aanl g5aanw g4aat 4g3add 2g1af g4afo 2g1ag g4agr ga5gre gag6rep gak4l ga5kla gal7afsk gal7appe galei5 gal7oog. gan6gra 4g5anke gans7ke. g3app ga3ra 4g3arb 4g3arm gar4s3 gars6ti gar7stig g5arti ga6sarm gas7arm. gas6mok ga4so ga5sol gas6pel gas6tre ga4tr gat7ruik gay7nor. 2gb gbys4 2gd gde7roof gdut7jie g3dw gd4wa 1ge ge3d gedi4s g5eenh gee6tal geet7al. geës3 geë6sti ge3f 4ge4ff gef4l ge1g2 4geg. geges5p geg6uil g3eie geï7migr ge7k6lik. 4geks gek4y gel6agk gel6dad gel4do ge5lol ge5loo ge6loon gel7oond gel6s7te. gemi7au. gem6opp 3gen gen4dr gen6dur genes5t 4geng ge4oi gep4a ge5pag geper6st gepon6s 3ger ge5rap ger6ard ger5ete ger7iden ge6roef ger6ogg ger6spo ger5sw ger6uit ge3sa ge5sfe ge5sin ges7jagt ges4k ges7kade ge3sl ge3s4m ge5sne ge3sp ges7perb ges7pers ges7pes. ge3st ges6tas ges6tig ges4w ge5tja ge3tw ge3ui ge5um. gev7woes gewens7te ge1y 2g1f g3fl gf4li 2g1g2 g3ga gga7kwee gga7stre gga5t4j gge6sti 2gh 5g4hoer gho7ghok gho4l 5gholf g4hs. ghu6moe 1gi g5iden gie6far gi4fa 4gimp gin6gaa 4g5inri gip4s gip7siet gis7enti gi5tra git5sw 2g1k gkaar4 5g4lans gla4sa gla6sel gla6ska glas5o g4le. 5g4len. gli6don g4lif gli6gur 4glik g4lim g4lip 3glis g4lob 4glod 3g4loe g4lof 3g4lom g3lop 3g4lot g4lo- g3lus 3g4luu g4ly. 4glyn 2gm gma7skui 2g1n gneem5 gneet5 gnie6ko 1go god6sak god6sid 4g3oef goe7krui 4goes g5oes. g5oeta goe7the. goë7lary 2g1of 3gogi gol4f5o 4g5olie go4mag 4g3ong gon6sto g3ont goo5gl 4g3oor 2g1op go5pla 3g4opo g5orig go3sl gos7pelr g5osse go3s4t gou4d3 goud6a. gou7dief gou7dini gou7dink goud6s. gow7rie. go9ya. 2gp 1g2r g4rab g5rak. gra4ma gra7mado gra4m5o g4ras gra4s5a gra4se 4g3red g4ree4 g5reek greep5 4greë g4ren gren6st g5rese gre4sp gre6sur gre6tji gret7jie g4reu griek6s7t grie6t5j 4grig gri4p g5rit. 4g3rok g4ron 4g5rooi g5rook g5room g5rowe 4grug g5ruim 4g3ryk 4grym gry6ste 2gs g2s1a g5saam gs3ad gs6ade. g4saf gs5agt gs5aks g5sala g5sale gs5ana gs5ant gs5app gs6appe gs3ar gs3as g4s5een g4s3ef gs5eis. g6seise gs5eko gs5eks g5sekt g4s5ele g4s5eli g4s5ene g4s5est g4sew gs5ewe gs3f g5s6feer g4sid gs5ide g6simpa gs5inde gs5ini gs5inl gs5ins g2s3j g2s1k g5skaal gs5kab g5skad g6skapa g5skatt g5sked g5sker g7skeur. gs7keurd g3ski g4s5kin g4skl g5skof g5skole g4skom g5skoo g6s5koor gs5korr g5skot g5skou gs3kr g2s3l g3s4la g5s4lop gs3m g5snel g2s3o gs4ol gso6pro gs4ou gs3p g5s4pel gs5per g5spes g3s4pi g6spill gs4poe gs6pore g7sports g5s4pru g1st g6s5taak g4s5tab gs6tabi g4stak g4stal g4star g4s5tek g6stelg g6stera gs5teri g6sterr gster6s g6stese g4sti g5stigt g4stoe g7stoele gs5toer gs5toet g4s5ton gs5trad g6strak g6stran g6strap g6strib gs5troe gs7troon g6struu g4s3ui gs3w gs6werw 2gt gte7eenh gte7lagi gte6ras gte6rer gte4ro gte7roer gte7rol. gtes4 gte7sfee gte7smee gt5uri 1gu gu2a gu2e gu5ela guid6o. gui6rla 4guit 2gv 2gw g3yst 2g- 1h2 2h. 2ha. hal4f3 hal6m5ag 4halo hal4s5k hal6s5tr ham7pagn ham6skr hams7kra han6dan han7dja. han4dr han4du han6gli han6gor hangs6l hang5s6w han4s5k han6ska har6dop hard7op. har6sel har6sol har6spa har6t5aa har4t5j har4to har7toem ha4wk haw7shan hay6eli heb7lus. hee4l heer8s7te. hees6e. heg7orga heg7rank heg7spyk 5heid. heid7stem he4ko hek7saan he4k3w hel7ange hend4 hen4so he2r her3a he9ra. her6akl he7rald. he5r4an he3re her7egpa he4r5ek he4r5ev herf4 herfs5 her3i her6ib. he5rid he5rod he5rol her5ond her7ontm he5ros her6oss he5rou her5ow her7sche her3u her5yk he4sp hes7peru he4s3t hete5r6o heu6paa he3us hev3 he4vr hewen7st hie4r hier7in. hie7roni hie7rony hië1 hil6lbr 5hings hing6s5t hipe4 hi4rl hi4sp his5pa hi4v- 2hl h3li 2hm h3ma 2hn hode6sl hodes7la hoe7kaai hoe6kys hoe6spi hoe4s5t hoër7op. ho4fa hof5aa hof7amp. hof7uits hog6hok hoi7swer hok7rakk hol7aar. holes5 4holf hol5in hol7oog. 4hon. hon6daa hon6dag hon6dro hop7land hop7smaa ho3ro hor4s hor4t5j hos6hol ho4ta hou4t5a hout5j hou6tol hou6tom hou6who 2hr hre6sto hrie4 hries5 hris5t h3te h3to hu9go. hui6daa hui6dui hui6sef huit6ji hui7tjie huk6hun hul4p5a hul6pek hul6ple hul6por hul6ste huls7te. hu3mo hum7oes. humus5 huter6s hut7jie. hut6spo hut6ste huts7te. h5vill 2hw hyg7roma hys3k hys7tang i1a iaan6so iaan6sp iaan6st iaans7te iam7son. ia4nop ias6koo ia5spo ia5sta ia5s4tr i4baf i4bag ibou6s. ic5ky. i2d i3da ida7groe id5agt idde6ra i3de ide7snui i3dê i3di idia5s id4ja i5djan i3do i3dr id2s1 id4s5et ids7inoe id4ska ids7kerm ids5kr ids3l ids7lags ids7nye. ids3o ids3p ids6pa. ids6pek ids6pie id6spil ids6pri id6spry ids7taal ids7tee. ids7teks ids7tele ids5ti ids5toe id6s7trek ids7ure. i3du id3uu ieding6s7 ied7ione ied5rol ied3w i1ee i4eee ie5een ieë7aard ieë6lys ief7alar ie5fie ie4f3r ief7stal ief7uitg ie5gla ieg7loka ieg7riem ie6grit ieg5st iek7asyn ie5ke. ie6k5erv iek7esse ie5kie ie6klaa iek7laai ie4kni ie6k5ond iek7ople ie6kops iek7opse iek5opv ie4kre iek7revu iek7rigt iek7ware iek7wees ie4k5wi iek6wos iek7wyd. ie4laa iel6afo ie6lene iel7oor. iel6san iel6s5on ien7anal ien7glor ien6kro ien7olie ie4n5oo ien4s ien7sakk iens5or ien7sout ien7span iens5t ien7stam ien7stel ien8stele ien7stet ien7stoo ien5suu ie4n5ur ie6poog iep7oog. ie6proo iep7rooi ier7afma ie6rafs ier7engt ier7eter ier7neff ier7omtr ie4r5on ier6oni ier6ony ier7swee ies6amp ie5se. ie6senk ies7enke ies7ents ies7ferw ies7kaf. ie6skon ies7kop. ies7kraa ies6kry ies7laag ie6slep ies7lepe ies5li ies7luik ies7meub ies7mooi ie3so ies7oes. ies5ond ies7oorp ie6sopn ies7opne ies7pane ies5per ies7plig ie6s7taal ies6tas ies7tee. ie6steh ies7tele ies7tent ies6tin ies5uil ie4s3w iet7aans iet7aard iet7alba ie5te. iet7erts iet7omse iet7reke iet7reko iet4sl iet7uie. ie5twi ie4tys i1eu i4eub i4eud i4eug ieu7grie i4e3ui ieu7ing. i4eul i4eum ieu7skot i4euu i4euv i4euw ie5wie ie4w- ie5yst ie-7klik i3èr i1ê iël6sku iën6tji iënt7jie ië4s3t i4fei i4fim i4fin if1l i2f3r i4f3ui i4g5aan i4gap igare4 igaret5 ig5eff ige6naa ig5ete ig5ins ig1l ig5loe ig4op ig5opt ig5org igo7roos ig5res ig5roo i4g3ry ig3sa igs6ins igs7kaps ig7skend igs5ko ig5sku igs6mee igs6ona ig5soo igs7poei ig5sti ig7stoei igu7era. ihu6ahu i1i ike6roe iket5j ik5kli i2k3n iko6nat i1kr ik6sakt iks7akte iks7iden ik4sin iks7inve iks7juk. ik6skom iks7paar iks6pad iks7pare iks6tik iks6tuu iks6wel ik5wan i4k3we i4kwy 2il i1la il5agt ila6too ilbe6st ild7agti ild7smaa ild6stj ild7temm ilet5a ile6tji ilet7jie ilf4l il5fli il5gha ilinde6 illo4w 3illu il4m5at ilm7oper i1lo ilo5sk ils7insp ils7orde il4spr ilt7aar. i1lu i2m i3ma im5agt i3me i4mek im5eks ime7laar iment6s ime4s imes5t i3mê i3mi 5immigr i3mo i4m3o4p imo7theu 5implik i3mu imu6maa in5aard i4naf i4n3ag in5akk in5arg in4d5aa in4das inder7as 5indiv ind6oef in6doog ind7oogm in6d5oor ind7sleu ind5sw 3indu in5dwi inee7tji ine5ra 2inf ing7aars in5gan ing7eter ing6hpa in6gind in6ginf ing7infr ing7inst ing6leb ing6ope ing6opl ing5ou ing7pseu in4g5ru ing7saag ing7sap. ing7see. ing7sekr ing7seku ing7sfer ing7sin. ing7sinj ing7skal ing7skêr ing7skud ing7slep ing7slym ing7sofa ing7som. ing7somm ing6s7pil ings9telle ing7stin ing7suie ing7suil ing7swel ing7uil. i3ni ini6gaa in4ik in5inf 5inisia ink7erts ink7laag ink7ler. ink7nerf ink5nu ink7ogie in4kol ink7olie 5inkom ink7ring in6krol ink5st ink7wit. 5innam 5innemi innes6t inne7ste in5ong ino7skaa in5rag 5inrig ins7epou in6s5ete 5insets in4sg ins7kaps ins6kin in3sl ins7molt ins7moor ins6ond 5inspek ins7prie ins4t 5insti insti7t. ins6ton ins7twis int7appe int5ess inte6s5t int6he. int6uit int6wyf inu5e. 5invlo i1o io3pr ior6ubr io1s ios4k io5skl ios4p ios4t io3tr i2p i3pa i4p3ag i3pe i3pi i3pl ip4lo i3po ipo4s5t i3pr ipre4 ip4s. ips7kopi i3pu i4pui i3py i1r ir4ch irke4 irkel5o irop4 iro5pr iru4s i4rwa is3ag i5sagi i4s5aks i6sangs is3ar i4sarg is5asp i4sav is3c i4s3ei i4s3et ise5um i5sfeer ish7nie. i4s5int is5inv i2sj i4sj. is5jan is5joe i2s3k is4k. i4ska is6kaaf is5kan is4kê is5kui i2s3l is5laa i5slag is3m i5s4mit i2s3n is5oes is5ond is3or is3p is4p. is3t is4t. is4th isto7pho i5s4tyn i4s3ui i5suik isu6maa is3w i2t i3ta it3ag ita6tis it3b i3te ite7dwal ite7glas itek7te. ite6mas i5tenh it4er ite5ru i4t5ete i3tê i3ti it4in i4t5ins i3to ito5fa ito7plan ito7rowe it1r it3re it3ry it4sc it5ser its5ete its7jood it4s5oo its7perk its6tek its7tori its7uur. i3tu itu6saa it5win i3ty ity7sokk itz7laan i1u ium1 iu4ma iu4me iu4mi iu5mie ium6uur iwel6s5k iwe7mos. iwes4 iwe7spor iwe5st 1ï ï2m ïn5akt ïn3o ïns4t ïn5und ïs5lam ïs3t 1j 3jaa jaar6s7kr 3jac ja4cq 3jag ja4ga jan7ghai jan7knap jap4l ja5pla 3jare 3jari ja4sm jas7pant jas6tas jaz4z jaz7zeri je4kn je4kr jek7rasi je5rop jes7nië. jes4t je4t3r jet6sjn jeu4g 5jie5kn jie6nan jie6nol jien5s 5jieon 5jieop jie6ska jie7skap jies7kat jie6ski jie6skop jie6s5lo jie6slu jie6sol jie6son jie6spa jie6s5tr jie6sui jie7suik ji4eu jin7gope ji4rp job4s3 joe7kwee joen6sk 5joern 3jong jos6afa jou7kuit juit6sp juk7riem 3jun jun6kre 2k. 1ka k4aal k5aand kaan8s7te. k5aanw kaar7se. kaars7te 5kaart kaar6ti kaar6t5j kade6la kade6sl 4k3adv 5kafee kaf6oef 4kafr 4k3afs 2k1ag 5kagem k4agg 5kagge k4ago k4agr 4kaks kal4k5a kal4k5l 5kalko kal6koo kal4kw kal4s5p kal4st 3kam kam6par kam6ple kams4 3kana kaner5o 3kank kan6ont kan6sko kan6ste kans7te. 3kant kan4t5j kant7om. kan4t5r ka4pak 5kapas kap7inte 5kapit kap6lak kap7lat. kapo4 ka5pri kap7seis kap6spr kap6stek 5kapte 3kar. 5karak 4k5arbe k5arm. ka5roo kar6oor kar4st k5arti kar5to 3kas 4kasg kas7laai kas6maa kas7traa ka5s6tro 5kateg kat7etes kat6har kat6hu. ka4too kat7ryk. kats4 kat5sw kat7uil. kay6aku 2kb kbe6kwi kbout7ji 2kd k3de 1ke kede6lo kee2 keel5a 4keen keep6s5t keer6so keer6ste keë6laa keël7aar 4keff kei6dro keids7pr 4keik keis4 kei5st 4k3eks ke4l5ak ke6lane kel7anem kel7assi kel7eenh 4k5elem ke6linb kel7inbr kel6mag ke4l5ou kels8onde kem6afa 4k3emm ken6aar ken6dra ken7eel. 4k3enj 3kenm 3kenn ke4nou ken7son. kep7laai kep7ler. ke4p5lo kep5sk ker7een. ke4rel ker7els. ker7flan 3kerk ker6kal ker6kin ker6k5or ker6kow ker4kr ker7kris ker6kui kerk7uil kerk5wy ker6m7eng ker6naf ker6nei ker6nen ker4n5o ker7oes. ke4r5on ker6pru ker6set ker4sk ker7skil kers7kom ker6slo ker4sn ker4so ker7son. ker6s5pi kers5w 4kerts 6k5ervar kes6el. ke4sn ke6trol ket6ska 5ketti ke4tu keu6ror 3keus keut7jie key7kleu key7nooi kê4rb 2k1f 2k1g kga7laga kge5la 2kh kha7yeli k4hoi khu7khun 1ki ki2e kie6dro kie7laai kie6mas kiem7as. kie6sent kie4s5k kie7skry kies5l kie6slo kies7tan kie4ta kieu5s ki4kl ki4ma 4kimm 5kind. 6k5indel kin5dr 4kindu k3inh 4kinl 4k5inst kio4s kios7ke. kip7ling ki4rc 3kis. kis7obli ki5s4po ki5s6tew kit4s kits5k 2k1k kk4ag kka7smaa kka5str k3ke kke6nee kker5kr kk4li 1k2l k5ladi 4kland k5lang k4lank klas3 klas6e. kla6sin k5leerd 4kleg k5lege k4l4ei 4klel 4k3len 3kle4p klep7as. k4ler 5klere kle5us k3lê 4klied k4lier 4k3lig 4k3lik 5klikk kli6kop k4lim kli6moe k4lin 5klink k5linn kli4p3 k4lis kli7sjee 4klog klo6kon k5loos. k4lou klub5h klu6bre 4klug 2k3ly 2km kman7spo 1k2n k4nap 4knav 5kneg. 4knei 4knem kne4t knet5j 3kni kni6kla kni4p3 knoe4 knoe7te. 4k3nom k5noot k4nop knor7os. 1ko kob7rego 3kod 4k3oef 3koek koe6kei koe4l5o koe5pl 3koer koe4s3 koe7sist 3koë 4koë. k4ofi 4kogi kok7onth kok6skr ko5lag kol6for 3koll 3kolo 3kolw 3kom kom7aan. kom7bina 4komg kom7ghad k5omhu kom7miss kom7saal kom4sp kon7atoo 4k5ontl kon5tr 4k5onts 4k3oog ko4op 5koord 3koö ko4pag kop7ape. kope7la. kop7las. 4koplo 3kopm 4kopn 5kopno ko4po 6kopper kop7uits kord7aan kor6doe kor6foo k3org koring7s k3ork ko3ro 3korp kor4s5l kor7sten kor4t5a kor6tji kort7jie 3kos kos7eetp kos7inko kos7juff ko4sk ko5ski kos5ko kos5pe kos5taa ko4t5ak 5kotel kous7te. kou5tj kovi7ev. ko4vk ko4vs k5owerh 2kp kpro6pa kp4si k2r k5raad 3kra4g kra7gers krag5o k5rak. 4krand 5krank 5kredi 5kreet. k4reëe 4k3reg 4k3rek k3rel k5rese 3kret 4kri4f3 4krig kri4k3 kri6moo 3krin kri4p krip7lee 3kris 4k3riv k5roet k5rolp 5kroon kr4or 4k3row 4krub 3krui 4kruim kru6kas kruk6s. kru4l k5rusp kry6fin krygs5t 4k3ryk kry7sket 3kryt 2k1s ks6aan. ks5agt ks4ak ks5chi k4s5een k4s5erv k4s5eti k3si k6singe ks5ins ks6jari k4skan ks5kin k4skon k4slê ks3li k5s6maak ks5moo k5smou k2s3n k5snob k4sob ks5obj k4s5ond ks5onl ks5opk k2sp k5spek k5spel ks5pen ks5per k5spes k3spi k4spir k5spra k5spri ks5pur k6s5taal ks5tant k6steken k6stemp ks5tens k6stera k6s5teri k6sterr kster6t7j ks5tet ks5tip k7strado k6s5trah k5s6trak ks5tur ks5tuu k3sty ks3ui k4s5ure ks3w k5swei ksyn4 2kt kte6rad kte6ron kter6sp ktes4 k4the k3ti k3to kto6rev k3tu kt4wi 1ku kud7aksi 3kuik 4kuim kuin4 kuins5t 4kuit kul6der kul6plo kul6poo 3kult 3kun 4k3uni kun6sin 3kurs 3kus ku6seen kus7lang kus7node kus7taak kut3r kut6slu kuus6te kuu7ste. 2kv kvang6s 1k2w 4k5waar k3wae k4wan 3k4war kwa7skaa k4week 4kwees 4kweg 4k3wer kwê7lafl kwik3 kwi6kwa 3kwis 2k3wo 3k4wot k3wu ky4fa kyk7uit. k1ys 2k- k-5kli 2l. 4laanb 4laanh 4laard laat7slo laat6str lad7onde la4du 4ladv 2laf la4fa l3afd 2lag l4ag. la4ga la5ga. la5gas l4agi la5gie l4agl lag7lag. l4ago lag5ri lag7some lai6rgo lak7albu lak6led lak7okul lak7oore 4l5aksi lak3w lak7ware lamb7da. la4m5oo lam6pli lam6pol lamp7oli lam6sko lam6sle lam6spe 3land lan6daa land7aar lan6dad lan4d5r land6sta land6s7te lan6gaa lan7gnol lan4go lang7ste langs8te. lan6gur lan4k5a lan4k5l lan6kop lank7ope lan4k5r lan6kwi lan4s5k lan4sp lan4s5t lan6taa lan7taat lan4t5j lan6tre 4lantw lap3r 4l3art las7elek las6ie. la4sn la4so la5sol la4sp las5pa late5r6a 5lawaa lba6spe lbe6kne lbo6wvi lb4re ld5amb ldan7ha. ld5apt l4d5een ld5eis lde6rat lder7os. ld5ins ld3of ld5oor ld6oor. ld5ord l4dow ld5owe l5draa l4d3re lds4k lds6maa ld3so lds6ond ld3sp l4d5uit 1le lec5tr lee2 lee4g3 4leep3 leer5a leer7eis 5leerl leer5o leer5s lee4s lees7tra lee7tjie lee7vaar 4l3eff leg7slot 4leien lei7gleu lei6kaa lei6naa lei6not lei7skoo lei6spa leis7pan lei7spir leit5s lek7loti le4kn lek6suu 3leli 5lengt 4lenj len6sel len6ste lens7te. len6tji lent7jie le5pel lep5li lep7oog. lep7ratw lep5sk lep6szy leps7zy. ler4a 5leraa ler6kam lerk7amp lerk5sp 4lerts le4see le4set les5ete les6hab les7insl le4ske les7kes. les7lie. les7onde le4s5oo le3st les7taak le4ste le5stel les6tin les5tra les4ty les7uur. les7wete l5etan le4tc let5em let7oorb let7rol. let6sko 4leuf le3u4m leun5s leur7eg. leu4r5o leute4 lew6ein 6l5ewena 4l5ewig 3ley 1lê lê4rw lf5aan lfa7stra lf3ei l4fek lf5eks l4fen l4f3ev lf4ie l4fin lf5ing lf3l l5flap lf5onde l5fone lf5onts lf3op l2f3r lf6skar lfs7karm lfs7kop. lfs7kuil lfs7nier lfs7oog. lfs7perk lft4w l4f3ui l4f3uu l1g lg4ha l4gli lgo7lagn lg6ordy lgs6mee 1li liat6ji lia7tjie 3lid lid7onts 3lied lie6gli lie6kwy lie5la liers5w lie5sme lie7steg lie7stys lie7swak 4l3i4eu lig7inte lig6las lig6ny. lig7omge lig7rekl lig7riet li4gro lig7skag lig7sona lig5s4p lig5s4w lig7ure. lik7aspa 4likk 5likkew li4kl lik7opsi lik6see lik6sju lik6soo li4k5wa lin6gid lin6gin lin6gli lin6goo ling7ooi 4linh lin4k5l lin4kr l5inli 4l3inr l5insp lin4t5j 4linv li4pa li4p3l lip5la li5plo li6poml lip7omly li4p3r lips4 lip7soom 5lisen l5item liter6t7j lit3j litjie6 lit3r lit7sha. lit4sp lit4s5t lit6zdo ljus4 l1k l4kaf lka6tio lkat7ion lk5een lks7emos lks7epos lk6skap lk4sku lk4sl lk4son lks7ower lk5spe lk5spr lk6stel lks7tell lkter6t lktert7j lk5uil lk5wat lk5wit l4kwy lk5wyf 2l1l l3la llat6ji lla7tjie llei5s lle7knop lle6rui lle6swe lleve7ë. llo5sk lls7moor l4maf lmo6kal lmo4no lm3sm l1n lne4s lob7eend loe6dal loe6det loe7dja. loe6don loe4d5r 4loef loe6gos loeg7os. loers7te loe6skr loe4st lof7opri lof6spa 4logig log4o lo5gop log7sot. log4st log7stok lo4k3l lok7onde lok7swin lo5kwi l5olie. lomer4 lomert5 loms4 4lond lon6gaa long7aar lon6spa lon6ste lons7te. 4lont lon4t5j 3lood loofs5w l4oop 5loopb l5oore 5loosh loo7stra lop7emme 4lopl lop6rys lo3ro lo5ryn 5lose. lo4sj lo4sk los7laat los5ta los7trum los7wikk lo4tak lot7riet lot7ruïn lot7swan lot5ui loui7sa. lou3t lou6wna lou6wre lou6wtj lo4wr low5ry lox7era. lö4jd löj6don lp5aan lpe6nin lp4he l4pon lp5ond l1r 2l1s l4s5aar l4sad ls5arm l4s5asp l4s5eko lse4l lse5le lse6mek ls5erva ls5fei lsg6haa lsi6g5aa ls5jas l4s5kin l4skon l6skorr l4skre l4skru l5s6maak l5s4mee l4snaa ls5opw ls6plet l5s4pli l4spu l3st ls4ti l6stoeg ls5waar ls5wet ls5wyn l4t3ag l4t5amp lta7spie lter6sk lt5oond l5t4wak lu4bh lu4bl lub5le lub7loka lu2g1 lug6er. lu5gub 3lui. 4l5uie. lui7masi lui7slan 4luit luk5raa luk7rake luk6s5pa l5unie. luns6a. lur6pag lus7moor lu3t4h lut6zpu luus6te luu7ste. lva7soor lve5ti lwe4r5a lwe6rui 1ly lyce7um. ly4fe ly4fo lyk7aant lyk7lope lyk7lug. ly4kn ly4k3o lyk6ont lyk7rede lyk5sk ly4ma lym5ag lym7uint 3lyn lyn6aaf ly3pl ly3sp lyt7ring 1m 2m. mac7dona made7us. mae4s m1af 4mafd m4afo ma5fro 4mafs mag6sta ma4hd mah5di mak6lot ma3kw ma5lag mal7thus mamat6j mama7tji man7djar man3g4 man7gona man6n-p man7salm man7spen man6spr man6s7taa man6sto man7ure. map4l ma3ra mar6kek mar6kle mar6kom mar6kon mar4k5r mar6lpr mar4s5k mar4s5t mar6tro mary7na. mas6koo mas6kri mas6kui mas6tek ma5s4tr mat6hes mat7thys may7nard 2mb mb4re 2md mdo6poë mdop7oë. md5soo m3dw md4wa 4meder mee7kole mee5kr 5meel. mee5l4o mee5ne mee7reis mee7reke mee5sl mee7spre meest7al mee6tre me3ga megas4 mega5st 4megt mei6nee mel6aar mel7ekwa mel6kal mel6kjo mel6kla mel6kna mel4k5r melk5s mel4k5w mel7spul mel6too mem7phis men7angs men7eise men7opga men6sky men6snu men4s5p men6s5ta men6tin men4t5j men4t5r me5phi me4rak me6rass mer7asse mer5ast mer7dein me4rei me6reng mer7enge mer7esse mering8s9taa mer6kli mer6kna mer7kopn mer4kw mer7kwar mer5oes mer7onth mer7treë mes4a me4sal me4s5ka me6s7koor me6skor mes7kore me6skro mes7kroe me4sl me5slu mes7moss mes7port me6stas me4s5to mes7ware me4t5ee met7emps meter6so meu6las meul7as. 2m1f mfloer6 2m1g mgang4 mgangs5 mgeper6 mges7per 2mh mh4ei 4mid. mid7osea 4mids mids5t mie6kas mie6kwa mie6ret mie4r5y mie6skr mie6taa mie6tji miet7jie mig6re. migu7el. mih7rab. mil6taa min7gopl 4m5insp 6minstu mi4rl mi3sf mis7sêr. mis6tkr mis6tok mit7swa. mi4v- 2m1k mkaar4 mkom6st mkoms7te 2m1l m3la 2mm mma5sp mmas6to mma7stor mmat6ji mma7tjie mme7loor mme6res mme4r5o mmi7stok 2m1n 3mod mode4l mod6jad 3moe moed4s moe6nes moe4st mof6lam mok7alba mole4s5 m5olie. mol4m5a mon6dch mon6dop 4m5onts 3moon moor6da 2mop m3opl 4morg mo3ro mor6sju mor6spo mor4s5t mo5saa mos3f mos7fles mos7inen mo4ske mos7keë. mo5sta 3mot mote7us. mot6heu motor5a mou5fl mou7slip mou6ste mous7te. mou6tek mo9ya. 5môre. 2mp m4pag mpa7gne. mp5agt mpe6lys mpen6to mp4her mp5ops mps7kraa mp5sli mps7taal 2m1r 2m1s ms5app m4s5kat m4skon ms7kraal m5slin m3s4me ms3op ms5pen m6s5taal ms4te m5steg m5steo m3sw 2mt mter6t5j muc7klen mues7li. muf7smaa mui6les 4muit 3mul mum7aant muns4 mun5st mun6tou mur4g mur7gie. 3mus 2mv mvi6tra 2mw myl7afst myl6sla 3myn myn7ent. myn7impa myn7inge m1ys 2m- 2n. 1na 3naal 3n4aam 4n3aan 6n5aardi naar6skr n5admi 4n3adv nae6lys nael7yst n1af n4afi naf6lad nag6aand na6gaap na4g5ap na6gemm nag7emme nag6las n4ago nag5ron nag3s 4nagt n5agtig na4gu nai7set. na5kli nak6lip 4nalf 4nalt 3nam na3p4l na3pr nap7roet 4n3arb 4narea na3s4k nas7klip na3s4l nas6maa na3sp nas6pel nas4pr na5s4ta nas6ten nas6tor na5s4tr na5stu nas6tuu nas4w na5swe na5t4ha nat6jie nat7onde 3nav 5nawee na9yl. 2nb nba6chs 4nche 2nd nda7gesk nd5akt nd5app n4d5arb nd5art n4d5ass nda7stoe nde7eier n4d5een nd5eg. nd3ei nd5eksa ndel8s7kor ndel8s7taa nd5emm nde6rad nde6raf nder7af. nde6rar nde6rem nde6r7ent nde6r7ess nde6rim nder7in. n6deros nde7rosi nde7sill nde6zvo nd5ide ndi5go nd5ins nd3of n5dome nd5omt nd5ond nd5ont n4d5opb ndo5st nd5rak nd5rat n4d3re nd6resd nd5riff nd5riv nd5roe nd5rok nd5rot n6druim nds7ertj nds7geru nd6sinl nds7kenn nds7koor nds7kraa nd6s7laag nds6leg nd5s6maa nds6ons nds7oorn nd5sor nd6spre nd5spu nds7taal nd6stek nds7toet nds7troe nds6wee ndt6wis ndu4e n4d5uit ndu7kraa n4d3ys 1ne nebe6st nec7ticu 5neder nee2 nee4l neel5a n4eem 4n5eend 4n5eenh neer5o neer5s nee6tew neeu3 nee7uur. nee7woor 4neff 4neg. ne5gla n3eie 4neil 4neksp n5ekspe nel6lma ne6loon nel7oond nel6spo 3nem nem6afi nen4sl nep7olie 3ner. ner6faf nerf7af. ne4ros ner7psig ner6sle ner5sw ners6we nes7evan nes6tas ne4ste net7omge ne4tri ne5um. neu7moko neu7raal neu6sji neu6ska neu7stoo neu6toë neut7oë. ne4wt 3nez 1nê 2n1f2 n3fl nfy6tap 2ng n4gad n4g3ak n4g5apt n4g5ase ng5ass n4g5een n4g3ei ng5eks nge6r7aap nge6r5al nger6d5r nge6ret nges7per ng5eten n6geter ng5imp n4g5ink n6ginst ng1l ng6lasu n4goë ng5oë. n4g3on n4g5oog n4gou ngp6seu n6g5raad ng5ran ng5rat n4g3ri ng7sade. ngs7agit ng7sappe ng4see ngs7eise ng4sek ng6serk ngs7erke ng6sero ng6serv ngs6fer ngs7impa ng4sin ngs5int ngs5kan ng7skat. ng7skoel ngs7koep ngs7kop. ng7skors ngs7kort ngs7kurw ngs7kuur ng6s5laa ng6slab ngs7labo ngs7ladi ngs6lep ng7s6loop ngs6lym ng4sn ng5sni ngs6oet ngs6ofa ngs6omm ngs7pelo ngs7pill ng5spoe ng7stabi ngs7tal. ng6steh ng6stei ngs7teik ngs7telg ng6stem ngs7tema ng7stemm ngs7temp ng6s5ten ngs7tese ngs6tin ng6stou ngs7tou. ngs7trap ngs7truu ngs6uie ngs7ure. ngs6wel ng5uit 2nh 1ni nie6kaa nie7knik nie6raa nier7aar niers5w nie6uin nig7aard ni4g5ee ni4g5ie niks7py. nik7warm 4n3ind 4ninf nin6g7ele nin6get 4ninh 4n3ins 4n3int 4ninv n5invo n2is nis7alma nis6ara ni5see nis5id nis7insp nis6oms ni4son ni3tr nit7sare nje7glas nje7krui njie6st 2n1k nkaar4 nk5aard n4k3af n4kak nk5aks nk5eff n4kei nk5eie nke6las nke6lit nke6ree nkers6w nker7swe n4k3li n2kn nk3na nk5nes nk5neu n4k3of n5kofi nk5psi nk5rig nk5rol n4k5roo nk5ros nk5rye nks6noe nk4s5om nk3sp nks4t nk3s4w nk5uit n2kw nk5wat n5kwen 2n1l n3la nli4ga nlu4s n1n nna6spo nna7tjie nne6pol nne6sev nni4s 1no 4noef 4noes noe4st no4g5al nog7eens nok5as no9ko. nok7riww 3n4oma n4omm nomo7yi. no4n3a 4n3ond 4n3ont noo6dan n3oog noor6di 4nopb no5pla nop6laa 4noplo nop7omhu nop6rod 4norg n5orga nor6kla 3norm nor7tham nos6kaa no3sp 3nota 3note not4r no5tre 2np n1r nroet6j nroe7tji 2n1s n4s5aar ns3ag ns4an ns5angs ns4e. ns4el nse4pr nser6to nser6tr ns3f ns6feer ns5gel n3si ns4ia ns4ie ns4ig nsi6gar ns7inges nsi6tri ns4iu ns3ja n6skafe n5skap n4skar n4s5kel ns5kin n6skous n4s5kra n2sl n3sla ns5lam n6sland ns3le n4s3li n4s3lo ns6lotg ns6lott n3slu ns4mee n5snar n4sne n5snel ns5noo n5soek n4soë ns5oë. ns5ond nson4t5 ns5onw ns3op ns5par ns5pas n4s5per ns7portr n4spot n6sprat ns6prek n6staak n4staf ns5teh ns6tel. ns6tels n5s6ter. ns6ters ns5trak n3s4tu n4s3tw nst6wyf ns5tyd ns3w ns6weer n4syw ns5ywe 2nt nt5ags nt5ark n4t5art nta5tj n4t5eie nte6ram nte5sm nte6sti n5t4hon nti7kwaa nt5inv nt3ja n4tjo nto7fakt nt7oksie n4t5oli nto6nad nt5ond n4top nt5ops n4t5org nt7radin nt5raf n5tref ntre7kor nt5rim nt5roe nt5rom nt5ron nt5room n5troos n5trou nt5row nt5rui nt5ryk nt3sa nts7inge nt6skan nts7kand nt4s5le nt3s4m nts7onde nts5paa nt3st nt5uit ntu4m3 n4t3ys 1nu 3nua nu4e. nu4es. 2nui nuk4w nu5kwa nul7soms 4nuni nu5skr nu6skra nus4t nu3tr 4n3uur 2nv nva6lis 2nw ny4so nza6cs. o1a o4bag ob5agt o3bo ob5vor oby6nro ock7wyn. oda5gr od5een ode7leie ode7spaa od5lui od3op od3re ods7akke ods7kish od6slak ods7lake ods7lopi ods5oo ods6op. ods6org ods7paar ods7rogg ods6uit ods6waa ods6war ods6wyg odu4k oe4d5aa oe4d5ag oe4dei oed7eie. oed7ette oe6dind oed6ja. oed7onde oe4d5oo oe4d5op oe4d5or oe4d5ro oed7stry oe4du oed3w oed7wyn. oe4f5aa oe4f5an 3oefe oe4fek oe4f5lo oe4f3o oef7rit. oeg7aand oeg7laer oeg7lam. oe4gog oeg3s oeg7yska oei1 oeien6a oeis4 oei7sker oe4kaa oek7eier oe6kerf oek7erf. oek7eval oe4k3l oek6lap oek7olie oek7oort oe4kr oek5rak oek5re oek5ro oek7sten oe4k3w oe4lei oe5leie oe6lemm oel7emme oel7eter oeling6 oelings7 oe6lins oel7inst oel7onbe oel7opri oel6ser oel6skr oel7slik oe4nei oen7eike oe6nert oen7ertj oen7esse oenk4 oen5kl oen7knoo oen5kw oe4n3o oens5ko oen5sm oens4o oen7ysbe oep7aang oep7inst oe6pinv oe4pl oe5pla oep5li oe5plo oep6s5ee oep6s5in oep4sl oe4pu oeras5e oer3k oe4r5on oer5ou oer6ske oer7twak oe5ser oe5sie oe5sje oes7kraa oes7limt oe4s5lo oes7medi oes7pil. oe4s5po oes5ter oes7troe oe4swe oet7aanp oe4t5am oet6he. oe4t3j oe6t5oli oe4t5oo oe4t5ri oe4t5ru oets7kra oet6sna oet6spe oet6s5te oet6sti oet5wy oë5rug of3at of5een 5offis o4f3in of3l o4fok of5oks o4f3om of5psa o2f3r of6sant ofs7iden of6sins ofs7insi of4s5le of4s5oo ofs7paar o4fui o1g og4d. oge4s5t ogge6lo oggel7oo ogi7faal 3ogig og1l og4nat ogo7steo o4gry og5rye og4s. og4sg ogs6inf og5ska ogs7last ogs6ot. ogs4p ogs7pad. ogs7pris ogs6uip ogs6wan oi1 oig6aff oi3k oile4 ois4a oi5sag oi5ski ois6kuu oi5sky oi5sla ois4p ois4t ois7teïs ois6wer oi3tj oje4k ojek5l o4k5aas o4kag ok4am ok4an oke4t oket5j okie4 o4k5ins ok5lat ok6leed ok3n oko7seil oko6sol o4kou o1kr o4k3ro ok4s. ok5sig ok6sins ok4sj oks7kraa oks6lip ok3sp ok3st oks6win o2k3w ok4win o1la ol5agt olf7ent. ol5fèg olf6lap olf6sku olf6sme ol4gl olg7onde ol4g5or olg7smee 5olieb olies6m olie7sma 5olifa oli7gny. olk6sem olk6sep olk6sow olk6sti o1lo olo5kw o4l5oor olo5sp olp6hta ol4sar ols7are. olt6zha o1lu olyf5o o2m o3ma om5agt oma7pleg o4m5arm omat6ji oma7tjie o3me ome4s ome5us omg6had o3mi omka5s4 5omloop o3mo omos6fe omo7sfee omp7ligs omp7oor. om6pop. oms6aal om5sla oms6lag oms7perk 5omstan oms6tin o4n3ag o5n4age o3n4an ona6skl ona7sten ond7aap. ond5agt ond7ampt ond7dwaa 4ondes onde7us. on4did on4dom ond7rol. ond5sle ond5so ond5sp ond6spl ond7twis on5eff o4n3ei ong5aan on4g5os o3n4ik o4nil onin6gr onk7ert7j on4kj on5kno onk7omge onk7rugh onne5st o4n5oks ono7sfee on4s. onse4p5 ons7iden ons7kepe ons7kori ons7pamp ons7self ons4t on5ste ons7tol. on6t5aar 3ontd ont7elsi 5ontgi ont5raa on4tri ont7rol. on4t5ru ont7slik 3ontw o1ny ony7okol oo2 oo5agt ood3a oo5deb ood5ee oo5dek ood5er ood5et ood5ok ood7onge ood3r ood6san ood7smoo ood7sorg ood7spui ood7suit ood7swaa ood7swar ood5ui oof1 oof6ser oof6sid oog3 oog6enh oog6les 5oogpu oog7sinf oog7suip oog6-lo ooi6spa ook3 oo4ka ook6sst ool1 ool6and ool7snaa oom1 oo4ma oo4me oo4mo oon1 oon6ag. oong4 oons6ko oon5sl oop1 oo4pa oo4pe oop7klik o4opn oo4po oop6swe oor1 oor6daa oor7daad oor6dap oor7darm oor6dca oor6d5om oor7doop oor7frek oor3i oor7klik 5oorlog oor6ot. 4oort. oor6taa oor6t5in oort7ja. oor6tyl oort7yl. oorve7ë. oos3a oos3k oo4so oos7pers oot1 oo4ta oot6aai oot6en. oo4ti oo4to oo4t3r oo4tu oo3v oö5spo o2p o3pa o4paf op5agt opa6les o4p3am 5opdrag o3pe op5een op9eg. 5openi op4er oper7aar ope7rage op6horu o3pi opie6le opk6lik op3l op4lan op6lein 3oplo 1opn 4opno o3po opo7fagi op5off op5ont opo7sfee 5opperv op3r o5p4rot o4pru op6skre ops6maa ops7neus op5son ops5or op3st op3sw ops7wels o3pu o1ra or5afd or5agt ora6lee ora6loo orat6ji ora7tjie ord7akti ord6arm ord7eksa ord7ierl ord7inst ord5oes or4d5oo ord6oop or6dord ord7orde or4d5ri ord7roma ore7ster o3rê orf7oond 4org. or3gh or4glo 4orgp org7ring 3orië orings8ku or5kaa orkes5 ork7lag. ork6lik ork7ney. orkom6s orkoms7t or6maan or4mj or4nj or5ond or5ong o5rot. oro7thy. or3p4h orp6ski orp4sn ors7aar. ors5ag ors7jurk ors5mo ors7pot. ors7teri ors7tery or4sti ors7trek ort7aan. ort5aar ort5akt or4tar ort6ham 5ortod ort7onde ort7rol. ort7ruk. ort5sw or1u o3r4us o3ry. ory4s os3ag osa7phat os5api osas4 osa7tjie os5cen o3se ose7phin ose7phus o3si osi6nen o4sjo os1k o4s3ka os5kee os5kis os5koe os5kop. os5kor os5kou os5kow os3kr o5skri o4sku o2s3l os3m o2s3n os5oli os5oor o4sor os5ord os3p os4pe os5ste os3t os4t. os4ta os5taf os5tak os5tal os5tar os4td os4th ost7impe os4tm o5strat os6trev ost7revo ost6roo os4tw os4t- os3w os-7lond o2t o3ta ot5akk otas4 ota5st ota7tjie o3te oteek5 ote4s5a ote6sno ote6spr ote4s5t o4the oth7nage o3ti ot3j o3to ot5opm oto6ran oto6ren otor5o otos4 oto5sk ot3re o3tro ot5ryk ots7eila ots7karr ot4s5ko ot4sl ots5la ot4s5po ots7rûe. ots7tee. ot6stek ots7toet ot4stu otte6l5o o3tu o4tui otu6set oua6che oud7agti ou6dakt oud7akti oud6ief oud6ini oud6ink oud7oorg oud7styd ou4du oud7uitg oue6rio ou3g ou4gh ou4gl oug4r ou1i ou5ill ouis6a. ou1k oul7ontl ou3m ou5nyw ou5rei ous6kak ous6ken ou5ski ous6lip ous6ouw ou3s4p ous7pan. ou3s4t ous7tert ou7stiek ous7ties out7aar. out7aksy ou4t5as out7ekst out7emme 5outoma out7omhe ou4t5oo out3r out6rap out6rei ou4wb ouw7rens ou4wv ou4-o ove5re over6y. ovie6v. ov5ket owe6nal owen7al. owe6ral ower7al. ower7kon oy4a. oy4eu ô1 ô2i ôi3e ôre5st 1ö öjd7onde ö1l 1p 2p. 5paaie. 4paanv paar7dui 3pad. pa4da pad6ie. pa4d3r pad6-eg p1af pag6ne. 3pak pa4ke pak5es paki3 pakket5 pa4ko pak5os 4p5akti 3pale pal7esse pal5fr pal6mol pa4nop pan5sp pan4t5j 3pap pa5pri pap7ryp. paps4 pap7saf. pap7smee 3pa3ra pa6ramn par7amne 3park par6kar par4ko park5r 4parm par4sk par6ste pars7te. 5party pa5sja pa4so p5aspi 3pass 5paste pas7til. pa4taa pat7are. 4patel pat4j pa5tji 3patr pats4 pat5sj pav7lov. 2pb pbe6koo pbreng6 2pd p3dw pd4wa pd4wi 3pe. pe4ak pe4ar 3ped pede4r pe5dof pee2 peel5a peel5u 4peen peet3 3pei 4peie p5eien 4p3eis pek7nek. pe4k3r pel7aktr pe4l5oe pel7oond pels7kra pel6tak pel7yste 4pemm pe6nars 3penn pen7opsl pen6slu pen7smed pen6sop 4pepi 3pera pe6raap per7aap. per7admi per6ary per7asid pera5s6t 5perd. per6dag per6dry per6dwy per7enke per5est 3peri pe4rok 3pers pers5ag per6set per6sje pers7med 5perso per6s7ond pers8tel. 5pertj per6top per7tsja per7uran 3pes. 4pesi pe4sl pe4s5te peu6rel 2p1f p3fl pf4li 2p1g pges4 pge5sp pg4ly 2ph phe6ars p2hi phi5s4t p3hit piek5n pie6raf pie6rom pie4ru pie7samp pie6ska pik7erts pik3s4 6p5inges ping6la pin7glas pin5kl 4pinst pipe4 pipet5 pi3s4k pit3j pit4s5k pit4st pits5te pits7tek pit6suu pit6zko 2pj 2p1k pkom4s5 p2l pla6kal pla6kok 5plan. 5p4lant 4p3lap 3p4las 3p4lat pla4t5r plee4 pleet5 p5leie ple4k 5pleks 4p3lep pleu7ra. p3lê pli4g pli4t5e 4plits p5loos p5lose plu6ska 4plyn 2pm 2p1n p4neum poe6doe 3poei poe4s5t poe6tol po4fa pog7rest pog5sk pok5aa pok7olie 3pol 3pom 4pomh 3pone pon7opbr pon4s5k pons7te. 4pont 5pont. p5onts 4poor. 5poort. 3poot poo6tel po4pag 4popd pop6lek 4pops p5ordo po3ro por6tak 6portso por6t5ui 3pos po4sk pos6tim pos6tko pos6tna po4t5as 3pote pou6ste 2pp ppe6las ppel7as. ppe6rad ppe4ro ppie6sl ppoor6t ppoort7j p2r p4raa 4praak p5raam 5praat pra6esi 5prakt 3pren 3pres pre4s5t 4preu 3p4ria p3rib p4rie4 prie7ël. 5pries5 priet5j 5prins 3prio 3prob 3prod pr4oe 3prof 3p4rog 3proj 4p5rok. 3p4rop pro6pop pro5pr pr4or 3pros pro5sa pro7sopa pru4t 3pry pry4st 2p1s p4sad p4s5aks p4sakt 5psalm. p4sas ps5asp p4sat p4sid 5p4sigi 5psigo p4s5ing p4s5int ps3j p5skaa p4s5ket ps5kof p4skon ps5loj ps3m ps4my p4son p5son. p4s3oo p4sor ps7portr p6stera ps4ti p6stoet p4ston p5swar ps5wer 2pt ptos4 3pub pue4b 4puit 3pun pun4t5j pus7tipo put7adde put7emme put5ji put7rioo 2pv 2pw 3pyn 3pyp pyp7aard pyp3l pyp7las. pyp3o py4pr pys3k 4p5yste py5tha pyt6hon 2p- 1q qu2 qua7driv que6str qui7nas. 2r. raa6min 4raan r6aans. 4r5aard 4rabs rac5te 5radio 4r3adv 4rafd ra4fek 4rafh ra4foe 4raft ra4fu raf7urn. 4rafv 4rafw 2rag rag6aal 5rageb ra5gie ra6ginl rag7inli r4agr rag7raad rag7ryer rag6sab rag6sak rag6sin rag7soep ragu5e rag6wan rai7gne. rak6les rak7oper rak7wate 4ralb ral7eer. ral7oor. 4ralt ram7argi 4r5ameu ram6pla r4anda ran6daa ran7dafe ran6d7akk ran6dem ran6dev ran6doe ran4dr ran4g5o rank5l ran4k5r ran6saa ran6seu ran6sjo ran6sko ran6sor ran4s5p ran4s5t ran6tad ran6tet ran4t5j ran4tr 4r3any rapa7da. ra6pas. ra5pes rap7ewen rap6loï ra4pon rap7onge rap7para rap7rem. rap7righ r4ari 4rarm 4rarr 4rart r5asia ras6tan ra5s4to ra5s4tr ra4su ras5ui ra5t4ho 4r5atom rats5o rbo6lol rd5agti r4d5ame rd5eil r6delek rd5esel rde5sm rd5euro r3do r4d5oli r4d5ont r4d5oon rdô6nne rd7raais r6droma rds6lip rd3so rd3sp rdt6ree rdu6sol rd4wa r5dwar r4dwu r4d5yst 1re 3r2e. 3reak reed5a ree4k reek5e ree7kier ree7loon 4r5eend 4r5eenh 4reenv ree6pes ree6ple ree6pro 4reers ree7sala ree7stra 3reë 4reë. 4reff 3reg. reg7ruk. reg6sen reg6skw regs7om. reg7spre 4reie 4reil rei6nar 4reind rei6noo rei6ser rei6sou reit7ze. re4kn rek7naar rek5ne rek4r rek7spoe 4rekst re4kwa rel4d rel7dae. rel7diag rel7dopp reld7ran rel7duik rel7oest ren6agt r4end 5rend. r5enig ren7shaw ren4so ren4sp rens7te. ren6sto ren6str ren6tak ren6tcl ren4t5j ren4t5r 4rerg 4r3er4t rert5j 4resel re4s5ka res7lap. res5lo re3s4m res7ore. re4spi re4ste re5stel re4sti res7toet res7toma res7ure. ret5art reu6kin reu4kl reu4k5o re5usg r4ewa rey5no rê4rh r4faa rf5laa rf5lat r3fle r5f4lie r5flui rf5opv r4fre rf5reg rf4sl r1g r4gak rg5akt rgek6li rge7klik rg5eng rgeper6 rge6rid rg4hu rg5hut rg4len rg4let rg5loo r4g3lu rg4ly rgo6wri rgrie4 rg5ros rg3s rg4s. rgs4p rguit6j rgui7tji 1r2i 3rib. rib7file rie6dio rie6dop rieket5 rie6klo rie5me rie6pri ries6e. rie6skr rie6taa ri4fa rif6ree rig6ska rig7smee rig7styf ri4kl rik6sid rik5sj rik7spad ri4kw rim4s 4r3inf rin6gaa rin7gaan ring7aar 6r7ingest rin7gleb rin4g5r rin6gui 4r3inh rin6kar 4r5inko rink5w rin6kwa 4r3inl 4r3inr 4rins r5inst rin7the. r3inv 4rinve rio7rye. rip4s5t ri5s4ko ris4o ri5son ris5op ris6per rit5ji rit7oond rit6rea ri5tro rit6zri 5rivie rix7tont 2r1k r4kaan rk5een rk5eik rke6lap rke4s3 rke7sel. r6kink. rk5inl rk5leie r4klid r5klip r4k5los rk5nei rk5omg rkom6sti r4k5opd r4k5ops rk5rand rk5red rk5rib rk5rok rks6maa rk5spo rks6uid rk5twi rk5uit r4k5ure rk5wag r4k5wat rk5wee r4k5wet rk5wil rk5win r4kwy r1l r3la rli4g rlo6gja rloo7ple rlo6wpa 2rm r6maanh rma5gô rma6gun rma7klot rma7plaa rma7raan rme6raa rmer7aar rme5sa rmi4l rmos4 rmo7stro rm5uit rmy6nim 2r1n r5nagte rna6spl r4n5ele rne4s rne4t5a rne6tom rn5oor rn6stig rns6tin r3nu roduk5 roe6fas roef7as. roe4f5l roe6fri roe4ga roe7glas roe4n5a roe4pa roep5l roe4p5o roe4s5k roe6sla roes7lag roe4s5t roes5w roe6taa 4roew rog7akke 4rogg rog6lis ro5gna ro4kn rok4r rok7slip rok4s5p ro5kyn ro4l5aa rol7gord r6olien rol7mops romp7op. 4roms ron7aar. ron6dag ron6dak ron6d7er6t7 ron6d5et ron4d5o rond6o. ron4d5r ronds4 rond5sw ron4du ron6gaa ron6kaa ronker6 ron6kert ron4k5l ron6kow ron4kr ronk7wa. ron6ske ron6ste rons7te. ron7stel ron6s5ti r5ontp ron4t5r ron6tui 4rontw roo7dewa roo7dist 3roof 4roog roo7gron roo7mens roo7nag. 4roond roop6la 4r3oor roo7taai r4opa rop7aans rop7anys ro5pee rop6een 4r5open r4opi r4opo r1or r4ora ro3ro ros6afr 4r5osea ros7kie. ro3s4p ro5sta ros6til rot6hsc ro5ton ro3tr rot4sa 4roud rou7floe rou5sk rou3t rovi7ch. rov7nik. ro4w- rox9y. r2ö rpe4s3 r4pid rp5ide r4p5lik rp5opd r4p5reg rps7idio rp4sl rps5no rp6spri rp4stu 2r1r2 rre7glob rre7nagt rre4st rre7stau rres5tr rri6gin rron7kaa 2rs r4sakt rs5alm r4s3ar r5scha rs5eila rseuns6 rs3f r5s6feer rs4ie rsi7flag r6sinda rs5inko r6sinsp r6sinst r5sjam r6skaki r5skap r6skapa r6skapi r6skeus r4s5kin rs6kink r6skoet rs6komm rs6koni r4skor r5skors r5skou rs5krib r6skroo r4skur r4slê rs5lis r4s5los rs5lyf rs6maad rs6maai r5s6maak r6smaat rs6magt rs6mak. r6smake rs6mara rs6mede rs4mee r5smeer rs4mel rsnee5m r5snoo r4snot r4s3og rsonde6 rsonder7 rs5ong rs5oog r6soors rs3op rs4op. rs5ord r1sp r6spaar r4s5par r6spien r5spri r1st r6s5tal. r4stb r6stegn rs6terp r5s6ters rs6tigl rs4tik rs4tis r4s5tit r4stj r6s5toet r6streg r3sty rs3un rsu4s rs5wa. rs5wap rs3we rs6werf rs5wyk 2rt rt5afd rt7angel rt5art r6teend rte6loe rtie4s rting4 rti7saan r4t3om rt5ont rt5opr rt5org r6treda rt5reis rt5ren r4t5rie r6trol. r4t3ry rt6s5aar rts5ond rts6pyn rt5uits rt4wis rt4wyf 3rub ru4ga rug6-sk rui6lek rui6moe 5ruimte rui6niv 4ruit5s ru2k3 ru5kaa ruk6lip ruk6opp ruk6-en rul5aa rul7ape. rul7yste r2um rum7grok 4runi rup7lys. ru5spi rus6tak rus6tka rus6tma rus6tvo rus7uur. rut7oond 2ruu ruus6te ruu7ste. rweg5a rwe6gei rwe6skr rwi7sje. rwoes5 rwy6sak rwy6see ry4fa ryf7ink. ry4fo ryf7ode. ryf6sch ryf6sin ryf6ska ryg7stek ryg6str ry6kinr ryk3l ry5klu 3rym. ryn4s5l ryp7arm. ry5ple ryp7lus. ryp7nagt ry4s3a rys6alf ry6sinl rys5pi rys5po ry3st rys4ti ry4su ry4ta ry5tra s2 2s. s'9ie. 1sa 3sa. s4aad saa6dui 3saak 3saal 4s3aan 4s3aap 4s5aard 4s3aas 4s3adm s5adre 4s3adv 2s3af 2sag 3s4ag. sa4gal s3age s4agi s4ag4n sa5gne 3s4ago sag6opa 5sagte. 5s6agtew 3sak. s5akad 3sake 3sakk sa6k5rok sa6krus saks4 s3akt 4s5akti sa6lamm sal7ammo 4salb s5albu 3salf sal6fol 4s3alg 4salm sal6mei sal6tro 3sam 4samba same4n 4s3amp sam6swy 4sana s5anal san6d5ag san6dak sand7akk san6dru 3sang san4g5a san6gre sang7ste 4s5anke sap6hat s5appa s5appel sa3pr 4s3arb 4sarea sar7olie 4s3art 4sase s5asem 4s5aspe sa5spr sat6jie 4s3atl 4s5atta sav7lon. 2sb s3ba s3be s3bi s3bl s3bo s3br s3bu s3by s3ca s3ci 2sd s3da s3de s3di s3do s3dr s3du s3dw sd4wa s3dy 1se 3se. s5eed. see3f see3k s5eenhe see6plo see5ram seer7as. see5rei see7roet see3s4 see7soog see5sw seë7kran s5egpa 4segt 4s3eie 4seik s5eik. 4seila sei6nan 4seind 4seis. sek6huk 4seksa s5eksam sek4s5k sek4s5p sek4st 3sel sel5aan sel7anal se4l5el sel4f5a sel7fabr sel6fer self5i sel6fid 6seliks sel5of sel7oor. sel5op sels7kak sel6slo sel7spen sel6s7taa se4m5ag 4s5emal sem7ekst sen6dan sen7ghor sen7sord sen6str sep6hus ser7afse 4serf s5erf. ser6s5in ser6skr ser6sta sers7taa ser7stad sers7tal ser6tuu s5ervar ses6aan 4se4s5ka ses7lett se4s5po se4st se4s5ur ses7uur. se4sw ses7weke s4et. sewes6t sewe7ste sey7stof 1sê 2s1f2 s3fa s3fi s3fl s3fo s3fr s3fu 2s1g s3ga sga4s5e s3ge sges7per s3gi s3gl sg4ly s3go s3gr s3gu 2sh s3ha s4ha. sha7ron. s3he s3hi s3ho sho7shol s3hu 1si 4s5idea s5idee. 4s5ideo 3sie sie7kwos sies6li sies7mee si5fle sif6reu 4si3go si4gro 4simpl 3sin. si5nag s5indek 5sindr 4sindu sin7enti sin7este 4s3inf s4ing sin6gaa sing7aan 6singes sin7gle. sin6gre s5ingry 4s3inh sin6kch sin4kl 4sinko s5inlig 4s3inm 4s3inr sin6see sin6sin 6sinslu sin5sn 4sinv sip6ho. s4ist sit6are 4s5item si3tr si4tre sit7riem sit6sik sit5sl 3situ siu6mur 1sj 2sja sje6ans 5sjoko 4sjuf 1sk2 2sk. 5skaaf skaar6s 6skaart s5kafe 3skak 6skakeb s5kakt 4s5kalf 4skam 4skant 3skap ska6pin ska6pon skap5r 4skar. 4skara 4skas s5kata ska6tel ska6tit 5skawe 3skem 4skenn 3s4kep ske6pla ske4p5r 4skerk 4s5kern ske7smee 5skets 4skett s5kiem ski7klub s4kil 4s5kilj ski6lol s4kip 5skip. 4skis. 2s3kl 2s3kn 4skod 4s5koeë 5s4koen 4skoer sko6kaa sko4ko 4skoll 4skolo 4skolw 4skomb 4skomi 4skomp s3kon s4kone 4skonf 4skong 4skons 4skont 6skoord s4koot 4skoö 4skos sko6see 5skott 4skow 6skraan 4skrag 4skran sk4re 6skreet s5kres 5skrif 4skrin 5s4krip 4skris 4skrui 3s4kry 4s5kryt sku6dak 4skuik s5kuip 5skuld 4skult 4skun 5skurf 4skus sku6tar 2s3kw sky7drin s4kyf s4kyw 1sl s4laa 4s3lad s4la4g 4slam 4s5land s4lang s5lant 4s3las 4s3lat s4law 4s3led 5sleep 4s5leer 4s3leë s4leë. 4s3lei 4s3lek 4slel 4sleng sle6tji slet7jie s4leu 4s5leue s5leus 5sleut 4s3lew 4sley s3lê 2sli slib3 5slier s3li4g 5slinge slo6bee s4lof 4sloj 4slok 4s5loon 4s5loos 4slop slo4t5a s5loter s4low sl4öj 4s3lug 4slui. 4s5luia s5luih 5sluit 4s3lus 4s3lye 4slyf sly6mui 4slyn sly6paf 4s3lys 2sm s3ma s4mad 5s4mart s3me s5melk 5s4melt s3mi 5smid. smi4s smit4h5 3smok s5mol. s3mon s3mu 3smy smy6nin s4myt 1sn s5naai 4snaam s5naat 4s3na4g snag5e snag6s. 4snam sna6pro s4nar s3nas 4snat 4snav snee7tji 4s3nek 3s4nel 4s3nes 4s3net 4sneu sni6kwa sni6tre s4nob 5snoet 4s3nom 4snoo 4snorm s4nui sny3 s4nye 5snyer sny6-ys 1so 4soef 3s4oek soe6kal soe6kev soe6kol soe4k5u s4oen soe6nys 4soes 5soet. soets6t soet7ste sof6agu 4soff so3fr sof6ree sog4l soi6ets sok7opho 3sol s5olie. sol6lme solo5s s4om. s4ome 4s3omg 4s3oms 4s3omv 3s4on. s6onde. s7ondern 3s4one so6neek son7eekh son5eg 4son3g son7kwas so4n5op son4so 4s3ont son7uit. s4onv 4sonw 4soog 3s4ool 4s5oond soon4s 4s5oor. 4s5oorb 4s5oord 4s5oore s5oorg 4s5oorl s5oors 5soort. s5oortr 2s1op 3sop. sop7ekst so5phi sop6hok s4opi 5sopie s3opl 3sopo so3pr 5s4op4ra s3ops s3opt s3opv 4sord 5sorg. 4s5orga sor6gee sor6gra sorg7raa s5orke so5ror 4sorto sos4h so5sha so3th sot4ho so3tr 3sou 4soud s5oude sou6spa sou4s5t sou6taa sou6tak 4souto s5outom so9ya. s5paal 5spaan 4spad 4spak 3s4pan span5o spa6noo 4spap 4spark 4s5pas. 4spast spa6tar 4spatr 4spe. 3s4pee spe4k5l spe6kne spe6lak 5speler s4pell 6spelot 4spen s5pen. 4sperd 4sperk 5sperm. 4spers 4spes. 5spesi 4spet s4peu 4s5piek s4pio 2s3pl 5s4plee 5s4plin 5splits 3s4ply 4spoei 4spol 4spom spon6st 5spoor. 4spoot 5spore 6sportr 4spos 4spote s5poti 5spraak 6sprakt 4s5prat spreek5 s5prem 4spres 5spreu 4sprob 5sproei 4sprof 4sprog 5s4pron 4spros 5spruit 4spry s3ps sp4si 4spub 3s4pul 4spun 4spyn 4spyp 2s1r s3ra sra4e s3re s3ri s3ro s3ru s3ry 2s1s s3sa ss4af ss4ag ssa6rol ssay7is. s3se sse6nas sse4n5i sser4s sse5st s3si ssie6l7ei s3sk ss4ko s3sl s3sm ss4ma ss4me s3sn s3so s3sp ss4pl s3st ss4ti s3su s3sw s3sy 2st. 4sta. s4taa st5aard 5staat 3s4tad 4stafe sta6las stal7as. 4stale sta6lee sta6lem 4stali 5s4talt 5s4tam. sta4m5o 5s4tan. stand8s7ta 4stari 3s4tat s5tatr 4stea s4tedd 5s4tede s4tee4k 5s4teen 4steer 4steg ste6gre st4ei ste6kli ste6lek stel7eks 6stelev 5s6telse stel6tj stelt7ji 5s4tem. 5stemm ste6mom ste6nou 4stent s5teny 4steo 6sterap ste6r5ei 5sterkt 4sterm ste6rom ster5sm ste6rys ster7ys. ste6ser ste6sin ste6ska ste6ski ste4sl ste6sma 2sth s3ti 4stie s4tigt 4s5tiku sti6laa s4timu sting5a 5stinkh s4tip 4stir 4s5tite s3tj 4sto. s5toeg s5toek 5stoel. 6stoela s5toen 4stoer 4stoes s5toev s4tof sto6fek sto6fem sto6fen sto4fo 4stog sto4ka sto6kle sto6kre 3s4tom 4stone 4stoon st4op sto6poo 4stos sto4st 3s4tot s4tow s4traa 4strad s6trak. 4s5trei s4trew 4s5tril 6strins 4stroe s5trog str6ont 6stroon 6strosp 4strot s5trots 4strou 4strov s4tru 5struk 4s5trus 3s4try stu4c 3s4tud 4stuig 3s4tuk stu6kin stu7klep stu7stra stu4to stu6tys st4wi 2sty 4styd 5styf. 3s4tyl sty6loo 1su su2b1 sub3a sub7gids sub7hoof sub7nasi sub5oo sub7reko 3suid sui6daf sui6dei s4uik s4uil suip5l sui6pro 4s3uit s4uiw sul6tin sum7aans 2sun s3uni su4su sut6her su9yo. 2sv s3va s3ve s3vi s3vl s3vo s3vr s3vu s3vy svy7kraa 2sw 5s4waai 5swael s5waen 3s4wak 3s4wa4m swam5a s5wand 5swart s3wat 3s4waw 6sweefs s6weeft s5week 5s4weep 5s4weet 4sweg 5sweis s4welg 3s4we4m 5s4werm swe6tre s3wê s3wi s4wik 4swil s3wo 5swoeg swor6st 4swort s3wr s3wu 3swyg 1sy 5syfer sy3k syn6agr syn6sin syn5sm sy5pla sy3sk 4syst s5yster 4sywe s5ywer 2s- 1t 2t. 3ta. taa6nam 4taand taan5s6f 6taansi 4taant 4t5aanv 3tabb 4tadm ta4d5ro tad6ser tad4s5i tad6ska tads5n tads5p tad6ste tad6s5to 4taf. 4tafd 3tafe tafe4l 4ta4fr 4t3afs 4tafv 4t3afw t4age 4t5agen 4tags 4t3agt tai4l ta5inv tai7peis 5take. tak6lep ta5kli ta4kr tak7rol. 3takt tak7wyn. 3tale tal7eenh tal7emme 5talig tal6kaa tal6sor ta6mind tam7inde tan6dat tan4dr tand7rin tand6sto tang5st 4t5anna tan4sk tap5ro 3tari 4tark 4tarm t5arm. tar5oo t5artik ta4s. t5asem tas4p tas6tas tat7isol tat4j tat7jies ta4t5ra 2tb tba6lun tby6tei 2td tdy7ing. teby6s. 3tedo teek5r tee6lee tee7lood tee6mev tee4mo tee4n 4teenh 3teer tee7raad tee7renv tees4 tee5sk tee5sl tee5st tee7suik 4t3eeu tef7lon. 3tegn teg6ori teg7ren. 5tehui tei6noo tek2 5tekam tek7bak. 5teken teke8n7aap tek7haak tek7limi 5tekor tek7semp tek6sin teks5k teks5t tek7stel tek5vo te6laap tel7aap. te4l5ak te4l5ap tel7dwei te4l5el tel7fles tel7idee 5telik tel6lho tel7oes. tel7oog. te6loon tel7oond tel7smed tem7asse 4temm tem7omva te6moog tem7oog. 5tempo tena6ge 5tend. t4enh ten6kaa ten6koo ten7ouer ten6san ten7slot 5tenso ten4s5u ten4t5j ten4tr tent7reg ten7treu ten7twen 3teo te3p4h ter7adel 5te4r5af ter6afi ter6ago te4rak ter7akro ter7als. ter7aman ter7amer te6ramp ter7amp. 5terap ter5app ter6arg ter6dro terd7roo ter5een te4r5el te4rem 4terft te6rin. ter7ink. terk7wyn 3term ter7omra ter5ond ter5ont 5teror ter5os. te4r5ow ter7raan 5terrei ter7rein 5terri ter6sas ter6sef ter6seg ter6skop ter7sopn ters6we ter7swee ter7syst ter6tap te4rui ter7uie. te6ryst ter7yste ter6-in 3tesi tes7inst tes7loe. tes7lydi tes7mart tes7meto tes7proe tes7teri tes6tud te5sty te4s3w 3teti teun5s4 2t1f tf4li 2t1g tg4af tge6nap tg4li 2th 3tha. t4has 4thei 3t4hen ther6aa the7raan the5ro 3t2hi 4thit t5hitt th5leh t4ho. tho6nat ths7chil t4hy. tib7niet tie4f tief5o tie6gri tie6kap tie4k5l tie6kom tie4k5r tie4k5w tie6roë tie7smoo 4tif. 4tiff 4tigm tike4 ti4kla tik7lug. tik5ro tik6waa 4til. til7aan. 4tild 4til3s 4tilt 4t3ind tin7erts tin4ga tin7gaal ting7aan ting7eg. tin4g5r ting6su tings7uu 4tinkh tink7wa. 4t3inl 4tinv 5tipe. 5tipes ti4rp tis6aan ti3sj ti3tr tive5r t2j 2tja tje6sni tjo4k 2t1k tki6sob tkom4s5 2t1l t3la tla6sin t3li t3lo t5lont 2tm tme6sti 2t1n tne6ywe tnot4s5 3to. toe7eien 4toef 5toef. toe7gly. toe7klap toe5kr 4toel. 5toe5la 4toele toe6let toe6lop 4toelt 4toep. toe7plei 5toern toe6rou 5toeru 3toes toe5sl toe5sm toe7swel toë7roti to4fa tof7ekst tof7emis to4f5io tof7onde 3tog to4gl tok7las. tok7lett tok5ou t5olie. 4tom. 4tond 3tone ton4gr tong5s 4tont t5ontl t5onts 3toon t5oper to5p4he 4topm top7oorl 4topv tor7eien tor7eval to6rint tor7inte tor6m5ag tor6mom to1s to3sf tos6tro to3tr tot6ste tou3s4 tou7tjie tou6wsr to4wn toy7ota. 2tp tpen6sk tpie6tj tpiet7ji tplek5 tpoor6t tpoort7j tp4sa t5psal t2r 4t5raad t5raam 5tradis 4traf tra6fas traf5o tra6foo 5trakta 5transa 5transf tra6paf trap7as. tra6pew tra7ploï 5trapp trat4 tra5tj 4tratu 4trea t3rec t5reda t5redd t4ree 4treek 4t5reen 4treë 4treg. t5regi tr4ei t5reini tre6ink 4treis tre4ka tre4k5l tre4ko tre4kr trek5w tre6kwi t4rer t5rese tre4st tre4t tre7talb tret5j t5reuk t5rewo 5tribu t5rief trie6kl 5tries tri5g4l 4tring trobo5 4t5roer tro6las trol7as. tro6lin tro6naf troo4 4troom tro6ski 3trou 3trov 4trub 4t3rug truit6j trui7tji 4truk tru7kopp trust5r 4tryk 2t1s ts5agt t4sam t4sar ts5arg t4s5eks t4s5eng tse6raf tse6rys tser7ys. t6singr t4s5ins ts5inv tsi7tsik ts5jae t4skar ts5kok t4skon t4skor t6skrie t6skrip t4skru ts5lam t5s6maak t5s4mee ts4mel t4smo ts5mot t5smou ts5nat ts5neu ts5oon t4s5pas ts5pen ts5pot t4s5pro ts5tea t5stel t6stend ts4ti ts5toer ts5tron t3stu t3su ts5waar t5swar t5swen ts6wing ts5wyn 2tt tta5tj tte6loë tte6ral tte6ram tte7ridg tte4ro tte7ruil tte6slo tte6s5ta tte5us tt4he tting5a tt5uur 3tua 3tue 3tuig 3tuin 4tuits tu4kl tum7aanw tur6kna 4turt tus7aart tus7eter tussen5 tu5têr 2tv tv4li 2tw twee5k twee5l twees4 twerp5o twi6sap 3tyd tyd7aanw tyd7lont tyd7orde tyd3r tyd6sat 3tye tyl7oorw 3tyn tyn7spre ty3o t5yster 2tz tze6nel 2t- u1a ua4e4s uahu6a. u4b3ag ubas4 uba7slag ub5eko ub3f ub5gro ub5int u3bl u4blu ub5lun ub3or ub5sch ub3t ub3v ub5wyk uck6len u4d3ar udi6top u4d3re u4dri uds6med ud5sor ud6stoe uds6tyd u1e ueb5lo uer7ione ue4ron uer7onde ues7tria ue5uni u4fri uf5rin ufs6maa ug5aan u4gei uge6ska ug1l u2go ugo6mol ug3or u2g3r ug3s ugs4k ugs4l ug4soo ugs4p ug5ste ugs6tek ug5sto ug5sui ug4ub ui4dag uid7arts ui4d3o ui4dr uid7reek uid7simb uid7skat uid7skel uid7skil uid7slui uid5spr uids6to uid7stoe uid7uits ui1e uiers6w uies6ma uie7smaa ui4f3a uif7eend uif5le ui4go ui4g3r uig3s4 ui4k3a ui4k3l ui4k3r uik7sfee uik6sta uik7uitk ui4kw uil7aap. uil5eks uil7esel ui4l5oo uil7tjan ui4ma uim7oes. ui4na ui5nae uin5ar uin7asyn uind4 uin7drek uin7ivoo uin7kole ui4n3o uin7ser. uin5si uin6ska ui4pl ui4po uip5oo uip7ore. uip7roes ui4s3a uis3j ui4s3o uis5ta ui4t3a uit7dein ui4t5ee ui5ter uit3j uit3r uit4sj uit6-as uk4aa ukaar4 uk5loo u4kof uk5off u4kor u5krat uk3ry ukse4s uk4ski uks4m uks7pop. uk4sv uk4th uku7yama u2k3w u1la ul3ag uld5erk ule6sta ulê6r-w ulf6api ul5ins u1lo ul5oog ulp7eksa ulp7oort ulp7orga ul4saa uls6oms ult7inge ult7uit. u1lu u2m u3ma um5agt umat4 uma5tj u3me umg6rok u3mi um4ie um5ond um4s. ums7feld u3mu u4mui umu4s un5arm uner6st 5unifo 3univ unk7reda un2s3 uns6enb un4sid uns6kap un5s6kol un7s6kool uns7lagg uns7taal un5str unt7eenh un6tinn unt7real unt6roe unts6ko unt5sw unug6s. u1o upi6lop u4ply u4pon u1ra ur5aar ur3af ur5agt ur3ak u5ra5s4t ur5atl ur5een u4ref ur5eff ure5um urf7loop urg6h-s urg7laag u4r5int urke5s urk7nael u1ro uro7pesi urp7agti urr7heim urs7agte ur4s5ek urs6fee ur6sloo urs7mous ur4sno ur4s5oo urs7paar urs6par ur4spr urs6wee urs6wie ur6t5oor ur4top urt7room u1ru u1ry us3ag usa7lag. u4sap us5een use5st ush7die. ush7koal usie4k usiek5l u4s5ins u2s3k us4k. us4kok us4kri u2s3l u3s4lu u4sno u2s3o us4ol us4or us3p us4pie u4spo us5pot usse7us. us3t us4t. ust5akt usta6v. us4tb us4tf us4tg us4th us6tink us4to us6trek us5tru us4ts us3w u2t u3ta ut5adm u4t3ag uta7spek u3te ute7ling ute7rago u3ti u3to u4topl ut5org ut4rek uts7luis ut4spr u3tu u3ty uu2 uur1 uur3i uur6s5in uus3 uus6khe uut3j uwees4 uwe7smit u5yste u3yu û1 1ü1 1v2 vaar6st va4kar vak7eie. va4kes va4ki va5kie va4k3o va4kr val7este val7fees val7funk val7isog valk7oë. val7opto val4sa val6spa vals7pan val6spo val6spr val6s5te val6sth va4n5ee van7effe van6gap van6gre van7uit. vari5et var6kja var6kle var4k5n var4k5o var4k5r vas7ent. vas6oor vas7waai ve2 ve3d vee7kong vee5kr vee4l veer5a vee3s4 ve9ga. veis4 vei5st vel6don vel4d5r vel5oo ve5lop vel5sm vel7sple ve5lum ve3na ve3ne ve5nor ven4t5j ve3nu vep7legi 3ver1 ve9ra. verd4 verdien7s8 ve5reb ve5rek ver6ema ver6ena ve5rend ver6eve ver6flu ver6fru ve3ri ve6r5inn verk4 ver5kl ver5kw ve7rona. ver5sa vers6ki ver7skin vers8kop. ver5sl ver5sm vers6mag ver5sp ver7stal ver5s4w vers8waar ver4t5j ver5tw ves3p ves3t ves7taal ve5suv vet5in vet5ji vet7opga vet3r vets4 vet5sm vid5so vie7ring vig4s vi5rag vi4rg vi4r- vi4sar vi4so vis5ol vis7oog. vis5tr vi3tr vit7rate vlag5s vla4k vla7koek vla6sak vle4k vlek5l v4lie vlie6so voe6rek voe6rui voë4l voël7oë. vog7inho vo4gr vo4lei vol4g5a vol6gon vo4l3o vol7song vol7uit. vol7ywer vond6s7te von6klo voo7doo. voor5s4 vor4s5t vor7ster vou7pops vou5tj vra6gry v4re. vree6tj vreet7ji vrie6sp vri6jze vry7duik vry7kyk. vry3s4 vry5st vry7uit. vu4e. vu9yo. vyf7armi vy3s 1w 2w. 4wael wae6lat 4wa4eo 3wag. wag6las wal6ste wand6sk wan6gaa wan7inge wans4 wan5sm 5wapen 3warm war4s3 wars6e. 4wart war6thi war4t5j war6toë wart7oë. war6too war4t5r war6tys wa5shi was6kaa was5la was6mou was7pan. wa5str wate6ra water7aa wat5so we4bad we4bm we4b5ru web7taal web7vlie 3wed we4d3r we5dra we5dry we4dy 5weefse weeg6s. wee5ran wee5sa wee7skaa wee5sko wee5sl wee5s4p wee5st wee6tru 3weg we4ga weg7dof. weg3l we4go weg7orde we4g3r weg3s4 weg5st we4gu 4weis we4k5ro wek7uur. wel7aanb we6larg we4l5ee wel7flan wel7fron wel5oor we4l5op wel6ske we4m3o wem6os. we4nak we4n5as wen7eens wen6sad wen6san wen6sar wen6sei wen6ser wen6ses wen4sk wens5ka wen7skud wen4s5l wen4so wen6spr wen6ste wens7tes wen4s5u wer7esse wer6fom wer6gar wer6gre wer6int 3werk wer6kad wer6k5af wer6kes wer4kl werk7laa wer7klan wer7klap wer7klok wer6koms wer6kon wer7kony wer6kre wer6kro wer6kuu wer4kw wer5kwa wer4ky we4r3o wer6paf wer6pan wer6plo wer6pon wer6poo wer6por wer7smed wer7uil. wes6mit wes7oewe we4sp wes7pemi we4s3t we5sta wes4th we5s4tr wes7waar 3wet. wet7regu wet4s5o wet4s5t wet7wysi 3wêr 4wfon wids7tor wiel5a wie4t5j wi4gr wi4kl wi4ko wiks7te. wil6dag wil6sin wil4sk wind7as. win6del win6dop wind7op. win4dr wind7ruk win6kle win4sk win7sky. win4s5t win7ston win6tap win6tes wip7lig. wip7roos wit5el wit7inkb wit5ji wi4t3o wit5ro 2wj wje6tun 4woeg woe4s wo4l3a wol7invo wol6klo wo4l3o woor6dr wo5rum wou6dag w2r wree4 wri6gon 2ws wur4gr wur4m wurm5a 2ww wwe7rint wyd5oo wyd7uite wyk6was wyn6and wyn5sm 3wys wys7aksi wys3k wys3p wys5ta wyt7raak x'9ie. x1a xe1 x3em xerox7e. x2h x1i xys6te. y1a y4ama ybe6lil y2d y3da y3de yden4s ydgele6 ydg6leu y3di yd3of yd3re yd3ro yd4sin yd6skat yds7krit yds7orde y1e y4enn yer2 yer7hof. yer7maat yer4s yer7ton. yer7vill yer7voël yes6agt 3yeu yf3aa y4far yf5as. yf3l y2f3r yf5ren yf4sl yf4su y1g yg4le yg4li yg4ly yg5saa ygs7kans yg5sko ygs5le ygs6tek yg4sto yg4stu ykaar4 yker6st y4k5ins y2kl yk3li yk4lu yk5lui yk5lus ykoms4 y4kor yk3ri yk4s5ad yk4sk yks7kans yk3sp yks4t yk4su y2k3w y1la y1lo y4loe yls7laar y2n1a yn4a. y4nei y4n5ete yn1g2 yn5kli yn5kwa y2n1o y3n4om yns6agt yn4s5am yns5ins yn5sly yns4m yns7maan yn4s5or yn4sp yns7paar yns4t yn3u yo9yo. y2p y3pa y3pe y3pi y5plan yp3li yp5org y3pr y3pu y1r y4sam ys4ig y4s5ind y4s5ins y2sk ys5kar ys3ko y5s4koo y2s3l y2s3n y2s3o ys4ok ys4ou ys5poe ys3t ys4ta y4s5taf y5s4tel y4ster y3s4tr ys4tu ys3ui ys3w y2t y3ta yt3ag y3te yt4ha y3ti y3tj y3to y3tu y3ty yve7sant 1z 2z. 4zbur zee7rust zen7elle zi2c zi5cat 4zman zook6a. 2zz 2-1 -er4t -ert5j -ha-7ha. -k4li -na6gew -s4ti -t4we -5twee", ["lefthyphenmin"]=1, - ["length"]=76601, - ["n"]=10349, + ["length"]=76529, + ["n"]=10342, ["righthyphenmax"]=1, }, ["version"]="1.001", diff --git a/tex/context/patterns/mkiv/lang-ala.lua b/tex/context/patterns/mkiv/lang-ala.lua index 360b311b0..3f502d08e 100644 --- a/tex/context/patterns/mkiv/lang-ala.lua +++ b/tex/context/patterns/mkiv/lang-ala.lua @@ -9,11 +9,11 @@ return { ["texcomment"]="% no comment", }, ["patterns"]={ - ["characters"]="abcdefghiklmnopqrstuxyz", - ["data"]=".a2b3l .anti1 .anti3m2n .ari3s2to .circu2m1 .co2n1iun .e2x3 .exs2t .para1i .para1u .peri1 .quin2c3un .su2b3lu .su2b3r .s2 2s3que. 2s3dem. .sta3g2n 3p2sic 3p2neu 3ne. 2sne. a1ua a1ue a1ui a1uo a1uu e1ua e1ue e1ui e1u2o e1uu i1ua i1ue i1ui i1uo i1uu o1ua o1ue o1ui o1uo o1uu u1ua u1ue u1ui u1iu u2iua u2iue u2iui u2iuo u1uo u3u2u a2l3ua a2l3ue a2l3ui a2l3uo a2l3uu e2l3ue i2l3ua i2l3ue i2l3ui i2l3uo i2l3uu o2l3ua o2l3ue o2l3ui o2l3uo o2l3uu u2l3ua u2l3uo u2l3uu a1a e1e e1a e1o i3i o1o ui1a a1is cu3 a1ia a1ie a1io a1iu ae1a ae1o ae1u e1ia e1ie e1i2u io1i o1ia o1ie o1io o1iu 2am. 2at. 2as. 2ans. 2ax. 4ant. 2es. 2et. 2em. 2ex. e5us. 2is. 2im. 2it. 2ix. 2yx. 2ys. 2ox. 2ui. 2ux. i3um. i3ur. i3unt. i3ui. tru5us. tru1um. .i2a .i2e .i2i .i2o .i2u .iuu2a .iuu2e .iuu2o .iei2u .iai2u .iuu2i i2oi2u i3u2ia i3ui3ua i3ui3ue i3ui3ui i3ui3uo i3ui3uu e1ui1ue e1ui1ui e1ui1uo i2y uo3u .ua3ua .uo3ue .ue1io .u2a .u2e .u2i .u2o .u2u 1b 2bb 2bd 2bh b2l 2bm 2bn 2bp b2r 2bt 2bs b3s2t 2b. .b2 1c 2cc c2h2 c2l 2cm 2cn 2cq c2r 2cs 2ct 2cz 2c. .c2 1d 2dd 2dg 2df 2dm d2r 2ds 2d. .g2 1f 2ff f2l 2fn f2r 2ft 2f. .f2 1g 2gg 2gd 2gf g2l 2gm 2gn g2r 2gs 2g. 1h 2hp 2ht 2h. .hu1i2u .h2 1k 1l 2lb 2lc 2ld 2lf l3f2t 2lg 2lk 2ll 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2l. .l2 1m 2mm 2mb 2md 2ml 2mn 2mp 2mq 2mr 2ms 2mt 2m. .m2 1n 2nb 2nc 2nd 2nf 2ng 2nl 2nm 2nn 2np 2nq 2nr 2ns 2nh n2s3m n2s3f 2nt 2nx2 2n. .n2 1p p2h2 p2l 2pn 2pp p2r 2ps 2pt 3p2tr 2pz 2php 2pht 2p. .p2 1qu2 1r 2rb 2rc 2rd 2rf 2rg r2h 2rl 2rm 2rn 2rp 2rq 2r3r 2rs 2rt 2rz 2r. 2r1x .r2 1s 2s3s 2sb 2sc 2sd 2sf 2sg s2l 2sm 2sn s2r 2sp 2sq 2st 3s2th 3s2ph 3s2ch 2s2t3l 2s3tn 2st3p 2s2t3q 2s2t3s 2s2t3t 2s. 2st. .s2m 1t 2tb 2tc 2td 2tf 2tg t2h2 t2l t2r 2tm 2tn 2tp 2tq 2tt 2t. .t2 x1 2x. .x2 1x2a 1x2e 1x2i 1x2it. 1x2o 1x2y xy3s2t 1xu2a 1xu2e 1xu2i 1xu2o 1xu2u 1x2u. 1x2um. 1x2us. y3c2n 1z 2z. .z2 a2m3ui a2n1u2a a2n1u2e a2n1u2i a2n1u2o a2n1u2u e2n1u2a e2n1u2e e2n1u2i e2n1u2o e2n1u2u ge3n2ua i2n1u2a i2n1u2e i2n1u2i i2n1u2o i2n1u2u ti3n2ui o2n1u2a o2n1u2e o2n1u2i o2n1u2o o2n1u2u u2n1u2a u2n1u2e u2n1u2i u2n1u2o u2n1u2u a2r1u2a a2r1u2e a2r1u2i a2r1u2o a2r1u2u e2r1u2a e2r1u2e e2r1u2i e2r1u2o e2r1u2u i2r1u2a i2r1u2e i2r1u2i i2r1u2o i2r1u2u o2r1u2a o2r1u2e o2r1u2i o2r1u2o o2r1u2u u2r1u2a u2r1u2e u2r1u2i u2r1u2o u2r1u2u .a2b1auu .a2b1ali .a2b1ic .a2b1iec .a2b1in1 .a2b1iu .a2b1ol .ab2s .ab3si2 .ab3so .ab3s2te .ab3su2 .a2b1es2 .a2b1er2 .a2bfu .a2b3ru .ab5s2cin .a2d1 .adsu2 .a2d1es2 .ad3si2 .a2d1er2 .a2dfu .ad3s2t .a3g2nas .a3s2c .a3s2p .a3s2t .ape3r2u .ci2s3 .co1e .co1i .co1i2e .coi3u .co2e1n .co3e2lec .co3e2lig .co3emen .co3e2r .co3e2x3 .coex3s2 .co3g2no .co2n1 .con3ic .co3n2if .co3n2ig .co3n2it .co3n2i3ue .coni2a .coni2e .coni2i .coni2u .con3s2cr .con3s2p2 .con3s2t .de3s2c .de3s2p .de3s2q .de3s2t .di3g2nosc .di2s1i2 .di3s2ce .di4s3cep3t .di3s2p .di3s2qua .di3s2cr .di3s2t .di4s3ten1d .di4s3ti4nc .i2dci .i3di2og .i2n1 .in3s2p .in3s2t .i3n2an .ina2b3r .inab3s2 .i3n2it .ina2cr .ina2df .i3n2ers .i3n2ert .ine2x3 .inexs2t .ino2b .inob3s2c .ino3b2oe .inpe2r3iur .i3n2ul .i4n3ulc .inu2a .inu2e .inu2i .inu2o .inu2u .iu2s3i2ur .o2b1 .o3b2ed .o3b2el .o3b2es .o3b2ic .obi2a .obi2e .ob3i2u .ob3s2cu .ob3l .ob3r .o3b4ruz .ob3s2c .ob3s2t .ob3tr .obu2a .obu2e .obu2i .obu2o .pe2r1absu .pe2r1ac .pe2r1a2d1u .pe2r1a2dp .pe2r1ae .pe2r3ag .pe2r3err .pe2r3or .pe2r3u .pe2r1ar .pe2r1a2u .pe2r1ed .pe2r1eff .pe2r1egr .pe2r1el .pe2r1em .pe3r2enn .pe2r1eru .pe2r1e2x3 .pe2r3h .pe2r1i2ac .pe2r1i2ec .peri3p2s .peri3p2t .peri3s2c .peri3s2t .pe2r1o2b3s2c .pe2r1od .pe2r1of .pe2r1ol .pe2r1op .perse2u .perse2i .perse2o .pe2r3s2c .pe2r3s2p .pe2r3s2t .pe2r3tran2s1 .pe2r1u2a .pe2r1u2e .pe2r1u2i .pe2r1u2o .prae1 .praea2u .prae3s2c .prae3s2p .prae3s2t .praeu2a .praeu2e .praeu2i .praeu2o .praete2r1 .praeteru2e .praeteru2o .primi1 .primi3s2c .pro2d1es3s .pro2d1ig .pro1de1amb .pro2d1eo .pro2d3is .pro2d1it .pro2d1im .pro2d1eun .pro2d1ir .pro2d1ib .pro2d1ier .pro2d1ea .pro3d2ito .pro3d2iti .pro3d2itr .pro3g2n .pro3in .pro3s2c .pro3s2p .pro3s2t .quo2t1an .quo2t1en .quo2t1i2e .quo2t3li .re2d1ac .re2d1ad .re2d1am .re2d1an .re2d1ar .re2d1a2u .re2d1em .re2d1eo .re2d5is .re2d5it .re4d3imi .re2d1eu .re2d1ier .re2d1ib .re2d1ien .re3d2ic .re3d2ig .re3d2im .re2d1in .re2d1ol .re2d1op .re3d2orm .re2d1orn .re2d1ul .re2d1ord .re2d1arg .re2d1amb .ree2x .re1ie .re1in .repa2u .re3s2cr .re3s2p .re3s2tag .re3s2ta2u .re3s2tib .re3s2tic .re3s2til .re3s2tip .re3s2tr .sati2s1 .sa2t1ag .ses2c1u4n .si2c1u4t2 .si3s2ten .su2b1ic .su2b1ingr .su2b1odo .su2b3s2t .supe2r1ab .supe2r1ad .supe2r1ad3s2t .supe2r1ae .supe2r1ag .supe2r1am .supe2r1arg .supe2r1a3s2p .supe2r1a3s2t .supe2r1att .supe2r1bib .supe2r1bif .supe2r1bil .supe2r1c .supe2r1d .supe2r1ed .supe2r1eff .supe2r1eg .supe2r1em .supe2r1en .supe2r1er .supe2r1eu .supe2r1e2x3 .supe2r3h .supe2r3i2 .supe2r1il .supe2r1im .supe2r1in .supe2r1ir .supe4r5i4ume .supe3r4i3o .supe3r4i3u .supe2r1o2b1d .supe2r1o2b3r .supe2r1oc .supe2r1or .supe2r3s2c .supe2r3s2p .supe2r3s2t .supe2r1sub3s2t .supe2r3u2 3r4us. .supra3s2c .su3s2c .su3s2p .suss2cr .tetra3e2t .tetra3g2n .tetra3s2t .te2r1i2u .te2r1un .terp2s .the2o .theo3g2n .the3s2p .the3s2t .thi3s2b .tra1i2a .tra1i2e .tra1ii .tran2s .transa2 .trans1a2b1i .trans1a2b1e2 .trans1act .trans1a2d1 .trans3i .trans1a2u .tran3s2c .tran3s2en .trans1e .transe2u .trans1o2 .trans1u2 .tran3s2um .tra2n1ue .tri3en .u2n1i2us .ute2r3ui .za2i3eu .zeu3g2m", + ["characters"]="abcdefghijlmnopqrstuvxyzáæéíóúýāăēĕīĭōŏœūŭǣǽȳ́̄̆͞͡", + ["data"]=".ab1 .aba2 .ab3a4u .aba4v .ab3áu .ab3áv .abe4 .ab3es .abé2 .ab3és .abi2 .ab3i4n .ab3is .ab3it .abi4u .abi4v .abī2 .abī4n .abī́4 .abí2 .ab3í4n .ab3ís .abí4t .abo2 .abó2 .ab5us .ab3ú .ad3ā .ad3á .adǣ́4 .adǽ2 .ade4 .ad3es .ad3ē2 .adḗ4 .adé2 .ad3ér .ad3és .ad3ib .ad3i4c .ad3ie .ad3ié .adi4m .ad5i4n .ad3i4q .ad3is .ad5i4t .adi4u .ad3i4v .ad3ī4 .adī́4 .adí4c .adí4m .ad3í4n .ad3í4q .ad3ís .adí4t .ad3í4u .ad3í4v .ad6ora. .ad6orane .ad6oraq .ad6oraue. .ad6orave. .ad5ṓro .ad5ṓ6rō .ad6ó6ra. .adó4ro .adú2 .ae2a .ae2ă3 .ae4st .ae5te .ag2n .aī3b .aī́3b .aí2 .aí3b .am4b3ē .am4bi. .am4b5i4n .am4b5i4q .am6b5is. .am6b5isn .am6b5isq .am6b5isu .am6b5isv .ambi6ue .amb6iui. .amb6iuin .amb6iuiq .amb6iuiu .amb6iuín .amb6iuíq .amb6iuíu .ambi6ve .amb6ivi. .amb6ivin .amb6iviq .amb6iviv .amb6ivín .amb6ivíq .amb6ivív .ambī4n .ambī́6n .am4b5í4n .am4bí4q .am4b5ís .am6bí6ue .am6bí6ve .am4b3ú .an6t5ea. .ante5i4 .ante5í4 .as4ce .as4cé .as4ta .as4tá .as4te .as4té .as4to .as4tō .as4tó .as6trar .as6trat .as4trā .as6trár .as6trás .as4tru .as4trū .ate2 .atē2 .a͞e4ă .a͞e4s5t .a͡e4ă .a͡e4s5t .á͡e4s5 .āg2 .ā́2 .ā́g2 .ā́4l .ā́4t .ăbă2 .ăbă4u .ăbă4v .ăbĕ4 .ăbĕ́4 .ăbī2 .ăbī4q .ăbī́4 .ăbĭ2 .ăb3ĭt .ăbĭ́4 .ăbŏ́4 .ăd3ā .ăd3á .ădæ4 .ădǣ4 .ădǣ́4 .ădǽ4 .ăd3ē2 .ădḗ4 .ădĕ4 .ădĕ́4 .ăd3ī4 .ădī́4 .ăd3ĭē .ăd3ĭĕ .ăd3ĭī .ădĭ4m .ăd3ĭ4t .ădĭ́4t .ăd5ṓ6rō .ăd5ṓrŏ .ăd3ŭ́ .ăī3b .ăī́3b .ăm4b3ē .ămbī4q .ămbī́6q .ăm4b5ŭ́ .ăs4pĭ .ăs4tă .ăs4tĭ .ăs4tō .ăs4trā .ăs4trū .ắ2 .ắb5ă4u .ắb5ă4v .ắb3ĕ4 .ắbĭ4 .ắb5ĭt .ắb3ŏ .ắ4c .ắd3ē .ắd3ĕ4 .ắd3ī .ắd5ĭē .ắd5ĭī .ắd5ĭ4t .ắ4g .ắ4ĭ .ắ4l .ắ4r .ắ4s .ắs4tā .ắs4tă .ắs4tĕ .ắs4tō .ắ4t .áb1 .ába2 .áb3a4u .áb3a4v .áb3e4 .ábi2 .áb3is .áb3it .áb3o .ád1 .áde2 .ád3es .ád3ē .ádi2 .ád3ie .ád3is .ád3it .ád3ī .áes3 .áes5t .ág4nit .ám4bi. .ám4b5is .án4ter .ás4ta .ás4tā .ás4te .ás4to .ás4tō .ás4tru .æs3t .ǣs3t .ǣ́2 .ǣ́4q .ǣ́s3 .ǽs3 .ba3g .ba6iane. .ba6iáne. .ba4ii .ba4iī .bā́3 .bá4iī .bi3 .bĭ1 .bĭ3ĕ .ca2i .cá2i .cen3s .cēn3s .ci6sta .ci6sté .co3i4 .co3í4 .com5ēs .com5ḗs .co4més .co4n5i4c .co4ní4c .cŏ3ĭ .cŏm5ēs .cŏm5ḗs .cŏm3ĕ .cŏ4n5ĭ4c .cŏ6n5ĭ́6c .cŏ́3ĭ .cŏ́4m3 .cŏ́mĭ4 .cŏ́6n5ĭ6c .có3i .có4mit .cómi6te .có4n5i4c .de3d .de4met .des2 .de5u4ta .de5u4tá .de5utí .dēs2 .dē3sc .dē3sú .dḗ3i .dḗ5sum .dĕ1 .dĕ3d .dĕ3ŏ .dé3s2 .di3gé .di4r5e4m .di4r5é4m .dis6cendam .dis6cendas .dis6cendám .dis6cendás .dis6cendi .dis6cendí .dis6cendo. .dis6cendon .dis6cendoq .dis6cendou .dis6cendov .dis6cendón .dis6cendóq .dis6cendóu .dis6cendóv .dis6céndam .dis6céndas .dis6cénde .dis6céndi .dis6céndo. .di5s6tau .di5s6tav .dis4tá .di5s4tī .dī1 .dīs4t .dĭ5s4tă .dĭ5s4tī .do3l .dó3l .ed2 .ed4i .ed4o .ed4u .ei2 .er2e .ere5x4 .et3i .ex3ā .ex3á .ex3éq .ex3i4 .ex3ī4 .exī́4 .ex3í4 .ex5ṓr .ex3ón .ex3u4 .exū2 .exū́4 .exú2 .ēs3tĭ .ḗ2 .ĕd2 .ĕd4ĭ .ĕt3ĭ .ĕx3ā .ĕx3ī4 .ĕxī́4 .ĕx3ĭ2 .ĕxĭ́4 .ĕx5ṓr .ĕxū2 .ĕxū́4 .ĕx3ŭ .ĕ́2 .ĕ́4c .ĕ́4q .ĕ́4t .ĕ́t3ĭ .ĕ́x3ī .ĕ́x3ĭ4 .ĕ́x3ŭ .ét3e2 .ét3i .éx3eq .éx3i2 .éx3u .gé1 .hemi3 .hḗ3 .hi6ste .hi6str .hĭ6stĕ .ho4s .ibe3 .id3eo .id3eō .id3í .id3ue .ie3su .ié3su .ig2 .ig3ne .ig3ni .ig3nī .ig3ní .in1 .in3a4 .in3ā4 .inā́4 .iná4 .in3e4 .inē2 .inḗ4 .in3é2 .in3i4 .inī4 .inī́4 .in3í4 .in3o4 .inó4 .in3t .inte6re6ri .inte6re6rí .inte6res .inte6rés .inte6ri. .inte6riq .inte6ris .inte6rí6n .inte6rí6q .inte6rís .inte6rí6t .inté6re6ri .inté6ri6te .inté6ri6ti .inté6ri6to. .inté6ri6tō .inu4d .in3ue .in3ui .in3uī .in3uí .in3us .inū́4 .inú4d .io3s4 .io5su .ió3s2 .is5ta .is5tā .is5te .is5ti .is5tí .is3tr .ī́2 .ī́4b .ī́4m .ī́4n .ī́4q .ī́4t .ĭd3ĕō .ĭg2 .ĭg3nĕ .ĭg3nī .ĭn1 .ĭn3ā4 .ĭnā́4 .ĭnḗ4 .ĭnĕ4 .ĭnĕ́4 .ĭnī4 .ĭnī́4 .ĭn3ĭ2 .ĭnĭ́4 .ĭntĕ6rĭt. .ĭntĕ6rĭ6tĕ .ĭntĕ6rĭtn .ĭntĕ6rĭ6tō. .ĭntĕ6rĭ6tōn .ĭntĕ6rĭ6tōq .ĭntĕ6rĭ6tōu .ĭntĕ6rĭ6tōv .ĭntĕ6rĭ6tṓn .ĭntĕ6rĭ6tṓq .ĭntĕ6rĭ6tṓu .ĭntĕ6rĭ6tṓv .ĭntĕ6rĭtq .ĭntĕ6rĭtu .ĭntĕ6rĭtv .ĭntĕ6rĭ́6t .ĭntĕ́6rĕ6rĭ .ĭntĕ́6rĭ6tĕ .ĭntĕ́6rĭ6tō .ĭnū́4 .ĭn3ŭs .ĭs5tā .ĭs5tă .ĭs5tĕ .ĭs5tĭ .ĭ́2 .ĭ́d5ĕō .ĭ́4n .ĭ́n3ĕ4 .ĭ́n3ĭ4 .ĭ́n5ŭĕ .ĭ́n5ŭī .ĭ́n5ŭō .íd3eo .íd3eō .íd3ue .ín1 .ín3e2 .ín3i2 .ín3t .ín3ui .jo3s4 .jo5su .jó3s2 .li4g5n .líg3n .lí3t .ma3ge .magnæ6u .magnæ6v .magnǣ6u .magnǣ6v .magnǣ́6u .magnǣ́6v .magnǽ6u .magnǽ6v .mă3gĕ .măgnæ6u .măgnæ6v .măgnǣ6u .măgnǣ6v .măgnǣ́6u .măgnǣ́6v .măgnǽ6u .măgnǽ6v .mĕ3ĭ .mi6sta .ne3q .ne3s .ne5s4c .ne5ute .ne5uté .ne5u4ti .ne3xo .ne3xō .nḗ3 .nĕ3xō .né3s2 .né5ute .no6ste .nŏ6stĕ .nu3d .nū3d .ob3a2 .obe4r .ob3es .ob3é2 .obi2 .ob3iī .ob3i4n .ob3iq .ob3is .obi4u .obi4v .ob3ī4 .obī́4 .obí4 .ob3ín .ob3íq .ob3ís .obo2 .ob3ō .obó4r .ob3u .oc4té .os3t .ṓ2 .ṓ4l .ṓ4s .ŏb3ī4 .ŏbī́4 .ŏb3ĭī .ŏb3ō .ŏc4t3ĕ .ŏ́2 .ŏ́b3ĕ .ŏ́b3ĭ .ŏ́4l .ŏ́4p .ób3i .œ́2 .pa4r5ui .pa4r5uí .pā2r3 .pá4rui .pera4 .pe4r5an .per5ar .peras5 .pe4rā .per5ār .pe6ráeq .peræ4q .perǣ́4 .per5ǣ́q .pe4rǽ4q .pere4 .per5em .pe4r5es .pe4r5ē4 .perḗ4 .peré4 .pe4r5ém .pe4r5és .pe4ri. .pe6riens .per6iere. .per6ierene .per6iereq .per6iereu .per6ierev .per6ieris .per6ierís .per6iēn .per6iēre .per6iḗn .per6iḗre .per6iére .pe5rille .pe5r6illi .pe5rillí .pe5rimin .per6imini .per6iminí .per5imu .pe5r6imur .peri6mus .pe5rimúr .per5i6mús .peri4n .per5ine .pe4r5i4q .per6i6re. .peri6rem. .pe5r6iremi .peri6remn .peri6remq .peri6remue .pe5r6iremur .peri6remus .pe5r6iremúr .peri6remús .peri6remv .per6i6rene .peri6rent. .peri6rentn .peri6rentq .peri6rentue .pe5r6irentur .pe5r6irentú .peri6rentv .per6i6req .pe5r6irer .peri6res .peri6ret .per6iretur .per6iretú .per6i6reu .per6i6rev .pe5r6irémi .peri6rémn .peri6rémq .peri6rémue .pe5r6irémur .peri6rémus .peri6rémv .peri6réntn .peri6réntq .peri6réntue .pe5r6iréntur .peri6réntv .pe5r6irér .peri6rés .peri6rét .per6irétur .pe5r6iri .pe5r6irí .pe6ris. .pe6risn .pe6risq .pe6r5isse. .pe6r5issem .pe6r5issen .pe6r5isseq .pe6r5isses .pe6r5isset .pe6r5isseue .pe6r5issev .pe6r5issém .pe6r5issén .pe6r5issés .pe6r5issét .pe6r5isti .pe6r5istí .pe6risu .pe6risv .per5it. .peri6ta .peri6tā .peri6tá .per6i6tæ .per6i6tǽ .per6i6te .peri6ti. .peri6tin .peri6tiq .peri6tis. .peri6tisn .peri6tisq .peri6tisu .peri6tisv .peri6tiue .peri6tiv .peri6tín .peri6tíq .peri6tísn .peri6tísq .peri6tísu .peri6tísv .peri6tíu .peri6tív .per5itn .per6i6to. .per6i6ton .per6i6toq .per6itor .pe5ritor. .pe5ritorn .pe5ritorq .pe5ritorue .peri6torum .peri6torú .pe5ritorv .per6i6tos .peri6tot .per6i6tou .per6i6tov .per6i6tón .per6i6tóq .per6itór .pe5ritórn .pe5ritórq .pe5ritórue .peri6tórum .pe5ritórv .per6i6tós .peri6tót .per6i6tóu .per6i6tóv .per5itq .per6i6tu .per7itue .peri6tū .per6i6tú .per5itv .peri4u .per7iue .per5i4v .pe4rī. .pe6r5ī6mus .pe6r5ī6mús .per5ī4n .pe4r5ī4q .pe6r6ī6re. .pe6rī6rem .pe6r6ī6rene .pe6rī6rent. .pe6rī6rentn .pe6rī6rentq .pe6rī6rentue .per6īrentur .per6īrentú .pe6rī6rentv .pe6r6ī6req .per6īrer .pe6rī6ret .pe6r6ī6reu .pe6r6ī6rev .per6īrēmi .per6īrēmur .pe6rī6rēmus .per6īrēmúr .pe6rī6rēmús .per6īrēr .pe6rī6rēs .pe6rī6rēt .per6īrētu .per6īrētú .per6īrḗmi .per6īrḗmur .pe6rī6rḗmus .per6īrḗr .pe6rī6rḗs .pe6rī6rḗt .per6īrḗtu .pe6rī6rém .pe6rī6réntn .pe6rī6réntq .pe6rī6réntue .per6īréntur .pe6rī6réntv .per6īrér .pe6rī6rét .per6īri .per6īrī .per6īrí .pe4r5īs .pe6rī6te .pe6r5ī6tis. .pe6r5ī6tisn .pe6r5ī6tisq .pe6r5ī6tisu .pe6r5ī6tisv .pe6r5ī6tísn .pe6r5ī6tísq .pe6r5ī6tísu .pe6r5ī6tísv .pe6rī6tō. .pe6rī6tōn .pe6rī6tōq .pe6r5ī6tōt .pe6rī6tōu .pe6rī6tōv .pe6rī6tṓn .pe6rī6tṓq .pe6r5ī6tṓt .pe6rī6tṓu .pe6rī6tṓv .pe6rī6tur .pe6rī6túr .pe4r5ī4u .pe4r5ī4v .pe6r5ī́6mus .pe6r5ī́6n .pe6r5ī́6q .pe6r6ī́6re. .pe6rī́6rem .pe6rī́6ren .per6ī́rene .pe6r6ī́6req .per6ī́rer .pe6rī́6ret .pe6r6ī́6reu .pe6r6ī́6rev .pe6rī́6rē .per6ī́ri .per6ī́rī .pe6rī́s .pe6rī́6te .pe6r5ī́6tis .pe6rī́6tō. .pe6rī́6tur .pe6rī́6u .pe6rī́6v .pe4ríe .pe5ríl .per6ímin .pe6r5í6mus .perí4n .pe6r5íne .pe4r5í4q .pe6r6í6re. .pe6rí6rem .pe6rí6ren .per6írene .pe6r6í6req .per6írer .pe6rí6res .pe6rí6ret .pe6r6í6reu .pe6r6í6rev .per6íri .pe6rísn .pe6rísq .pe6r5íss .pe6r5ísti .pe6rísu .pe6rísv .pe6rí6tan .pe6rí6taq .pe6rí6tau .pe6rí6tav .pe6rí6te .pe6rí6tis .pe6r5ítn .pe6rí6to. .pe6r5ítq .pe6r5ítue .pe6rítur .pe6r5ítv .pe4rí4u .pe4rí4v .per5os .per3ō .pe4rór .pe4rós .pē4nī .pḗ3i .pĕ4r3ā .pĕ4r3ă .pĕrăs5 .pĕ6r5áeq .pĕræ4 .pĕrǣ4 .pĕrǣ́4 .pĕr5ǣ́q .pĕrǽ4 .pĕ4r5ǽq .pĕ4r5ē4 .pĕrḗ4 .pĕ4rĕā .pĕ4rĕă .pĕ4r5ĕm .pĕ4r5ĕō .pĕ6r5ĕ́m .pĕ4rī. .pĕ6r5ī6mŭs .pĕ6r5ī6mŭ́s .pĕr5ī4n .pĕ4r5ī4q .pĕ6r5ī6rēmŭs .pĕ6r5ī6rēmŭ́s .pĕ6r5ī6rēs .pĕ6rī6rēt .pĕr5īrētĭ .pĕ6r5ī6rḗmŭs .pĕ6r5ī6rḗs .pĕ6rī6rḗt .pĕr5īrḗtĭ .pĕ6rī6rĕ. .pĕ6r5ī6rĕm .pĕ6rī6rĕnĕ .pĕ6r5ī6rĕnt. .pĕ6r5ī6rĕntn .pĕ6r5ī6rĕntq .pĕ6r5ī6rĕntu .pĕ6r5ī6rĕntv .pĕ6rī6rĕq .pĕ6r5ī6rĕt .pĕ6rī6rĕu .pĕ6rī6rĕv .pĕ6r5ī6rĕ́m .pĕ6r5ī6rĕ́ntn .pĕ6r5ī6rĕ́ntq .pĕ6r5ī6rĕ́ntu .pĕ6r5ī6rĕ́ntv .pĕ6r5ī6rĕ́t .pĕ4r5īs .pĕ6rī6tĕ .pĕ6r5ī6tĭs. .pĕ6r5ī6tĭsn .pĕ6r5ī6tĭsq .pĕ6r5ī6tĭsu .pĕ6r5ī6tĭsv .pĕ6r5ī6tĭ́sn .pĕ6r5ī6tĭ́sq .pĕ6r5ī6tĭ́su .pĕ6r5ī6tĭ́sv .pĕ6rī6tō. .pĕ6rī6tōn .pĕ6rī6tōq .pĕ6r5ī6tōt .pĕ6rī6tōu .pĕ6rī6tōv .pĕ6rī6tṓn .pĕ6rī6tṓq .pĕ6r5ī6tṓt .pĕ6rī6tṓu .pĕ6rī6tṓv .pĕ6rī6tŭr .pĕ6rī6tŭ́r .pĕ4r5ī4u .pĕ4r5ī4v .pĕ6r5ī́6mŭs .pĕ6r5ī́6n .pĕ6r5ī́6q .pĕ6r5ī́6rē .pĕ6rī́6rĕ. .pĕ6r5ī́6rĕm .pĕ6rī́6rĕn .pĕr5ī́rĕnt .pĕ6rī́6rĕq .pĕ6r5ī́6rĕt .pĕ6rī́6rĕu .pĕ6rī́6rĕv .pĕ6r5ī́s .pĕ6rī́6tĕ .pĕ6r5ī́6tĭs .pĕ6rī́6tō. .pĕ6rī́6tŭr .pĕ6r5ī́6u .pĕ6r5ī́6v .pĕ6rĭēn .pĕ6rĭērĕ .pĕ6r5ĭērŭ .pĕ6rĭḗn .pĕ6rĭḗrĕ .pĕ6r5ĭḗrŭ .pĕ6r5ĭĕr .pĕ6r5ĭĕ́r .pĕ4r5ĭī .pĕr5ĭmŭ .pĕrĭ4t .pĕ6r5ĭt. .pĕ6r5ĭtā .pĕ6rĭtĕ .pĕ6r5ĭtn .pĕ6r5ĭtq .pĕ6r5ĭtu .pĕ6r5ĭtū .pĕ6r5ĭtv .pĕ6r5ĭ́ĕ .pĕ6r5ĭ́t .pĕr3ō .pĕ́4r5ĕ .pĕ́6rĭē .pĕ́6r5ĭī .pĕ́6r5ĭ6t .pé3i .pé2r .pér3e .pér5ii .pér5iī .pér5i4t .pi6str .po6te6ris .po6te6rís .po6tes. .po6tesn .po6tesq .po6tesu .po6tesv .po4tés .pó4tes .pule5i .pulé3 .ra3d4 .radi5c .ra3i .ra3m .ra5ra .ra5rá .ras5t .ra6ste .rā6ste .rā6stĕ .rā́6st .rá3i .ræ3 .re1 .re5dam. .re5damq .re5damu .re5damv .re5das .red3e4 .red3ē .re4dé .re4di. .re4d5ie .re4d5iē .re4d5ié .re4d5ií .re4d5i4m .red5i4n .re4d5i4q .re6dis. .re6disn .re6disq .red5iss .red5ist .re6disu .re6disv .re4d5i4t .re4di6u .red5iue .redi6v .red5ive .re4dī. .red5ī4m .re4d5ī4n .re4d5ī4q .red5ī4t .redī6u .redī6v .red5ī́6m .re6d5ī́6n .re6d5ī́6q .red5ī́s .red5ī́6t .re6d5ī́6u .re6d5ī́6v .re4d5í4m .re4d5í4n .re4d5í4q .re6dísn .re6dísq .red5íss .red5íst .re6dísu .re6dísv .re4d5í4t .re4d5í4u .re4d5í4v .re3ō .re3ó .res4tō .rex2 .re5xi .rĕ1 .rĕd3ē .rĕ4dĕ .rĕ4dī. .rĕd5ī4m .rĕ4d5ī4n .rĕ4d5ī4q .rĕd5ī4t .rĕdī6u .rĕdī6v .rĕd5ī́6m .rĕ6d5ī́6n .rĕ6d5ī́6q .rĕd5ī́s .rĕd5ī́6t .rĕ6d5ī́6u .rĕ6d5ī́6v .rĕdĭ4 .rĕ4d5ĭē .rĕ4d5ĭĕ .rĕd5ĭm .rĕ4d5ĭt .rĕdĭ́4 .rĕd5ĭ́t .rĕ3ō .rĕ5s4tō .rĕ́4d5ĭ4 .rĕ́3q .rĕ́s6tē .rĕ́s6tĕm .rĕ́5s6tō .ré4d3i4 .rés6tem .rés6tes .rés4tē .ré5s4to .ré5s4tō .ré5str .ris2 .ro3b2 .ro3d4 .ro5di .rodi5u .rodi5v .ro4s3t .rō3d4 .rō5dī .rōdī5u .rōdī5v .ru3r .ru4s .sa3mu .sá3mu .se3i .se6mis. .se6misn .se6misq .se6misue .se6misv .se6mísn .se6mísq .se6mísu .se6mísv .se3ps .sē3i .sē3p2 .sḗ3i .sḗ3p4 .sé3i .sé4mis .sé3ps .sér4ui .sér4uī .si4lu .sil5ui .sil5uī .sil5uí .si6str .sí4lui .sí4luī .supe6ris .supé6r5is .te4ia .te4iá .te4ie .te4ii .te4ií .te4io .te4ió .te4iú .te3n4u .te3ra .te5r4e .te5rim .te5rin .te5r6it .teri5tur .te5ri5ue .te5ri5v .te5rī .terī5u .terī5v .te3ro .te3rō .te5runt .tē2i .tĕ5rĕ .tĕrĕ5r .tĕ5rī .tĕrī5u .tĕrī5v .tĕ3rŭ .té3n4u .té5r4e .té3rī .tran5s6ue. .trān5s6ue. .trān5s6uĕ. .trā́n5s6ue. .trā́n5s6uĕ. .trán5s6ue. .tro4ii .tro4ií .tro4i5q .tro6iue .tro4iv .tro4í .troí5u .troí5v .ub2 .ubī3q .ubī́3 .ueni4 .ue4ni. .ue6niens .ue6n5ier .ue6niéns .ue6n5iér .ue4nim .ue4nin .ue4niq .ue4nir .ue4nis .ue4nit .ue6niue .ue4ní4 .uen5íe .ue6ste .uē4nit .uē4nī4 .uēn5īs .uēnī́4 .uēn5ī́s .uē4nĭt .uē6nĭ́t .uē4nít .uḗ6nit .uḗ4n5ī .uḗ6nĭt .uĕ6stĕ .ué4ni. .ué6niens .ué4nis .ué4nit .uī4cĕ́ .ul3ui .ul3uī .ul3uí .um2e .un3et .uol6uere. .uol6uerene .uol6uereq .uol6uereu .uol6uēre .uol6uēru .uol6uērú .uol6uḗre .uol6uḗru .uol6uit. .uol6uitn .uol6uitq .uol6uitue .uo6ste .uŏ6stĕ .uól6ui. .uól6uit. .uól6uī. .ur1 .uu2 .ūn5ắn .ū́2 .ū́4d .ū́4n .ū́4s .ū́4t .ŭb2 .ŭ́4n .ŭ́4t .úb2 .veni4 .ve4ni. .ve6niens .ve6n5ier .ve6niéns .ve6n5iér .ve4nim .ve4nin .ve4niq .ve4nir .ve4nis .ve4nit .ve4niv .ve4ní4 .ven5íe .ve6ste .vē4nit .vē4nī4 .vēn5īs .vēnī́4 .vēn5ī́s .vē4nĭt .vē6nĭ́t .vē4nít .vḗ6nit .vḗ4n5ī .vḗ6nĭt .vĕ6stĕ .vé4ni. .vé6niens .vé4nis .vé4nit .vī4cĕ́ .vo6ste .vŏ6stĕ a1ā2 a3āt a3ā́2 a1á2 a3át 2aba aba3i ab2a3q aba6ste ab3aui ab3auí ab3av 2abá abá3i abæ3 a2beú 2abé ab2ia ab2iá a2b3i2b ab3ice a2bie ab4ies ab4iet a2biē ab4iēs ab4iḗs a2bié ab4iés ab4iét a2bii a2biī ab3iī. ab3iīn ab3iīq ab3iīu ab3iīv ab5iī́n ab5iī́q ab5iī́u ab5iī́v a2b3ií 2abil 2abim ab3iss ab3ist 2abit abi4tot abi4tót 1abī abī2m a2b3í2b a2bíe ab3íer a2bíi ab3ímu ab3íss ab3íst ab3íto 1abj 1a2bl 1abn 2abo 2abó abó2l 1ab1r ab3rā ab3rá 1abs ab2sq ab4stem ab4stēm ab6stḗm ab4stén ab4sti abs5tin ab4stó abs3tr ab4stru ab4strū ab4strú 4abunt ab3u4s abu2t ab1ū2 abū4s abū́2 2abú 5abúndat 5a4b5úndā 5abúndem 5abúndes 5abúndet 5a4b5úndē 5a4b5úndō abú2t a3ca a3cá a3cæ a3cǽ 1acc 2a3ce. 2a3cen 2a3ceq 2a3ceu 2a3cev 2aci a3ci. a3ciq a3cis a3ciu a3civ 2a3cī 2ací a3cl 2a3co aco3ni 2a3cō 2a3có 2acum 2acus a2cut 1a2c2ū 2acúm 2acús a2cút ad1 ad2ad ada4ma. ad6amans ada6mante. ada6mantem ada6manten ada6manteq ada6mantes ada6manteue ada6mantev ada6mantēs ada6mantḗs ad6amanté ada6mantém ada6mantés ada6manti ad6amanti. ad6amantib ad6amantin ad6amantiq ad6amantis ad6amantiu ad6amantiú ad6amantiv ad6a6mantī ada6mantí ad6amantín ad6amantíq ad6amantís ad6amantíu ad6amantív ad6amas. ad6amasn ad6amasq ad6amasu ad6amasv ad6amāns ad6amās. ad6amāsn ad6amāsq ad6amāsu ad6amāsv ad6amā́ns ad6amā́sn ad6amā́sq ad6amā́su ad6amā́sv ad6amáns ad6amánte ad6amántē ad6amánti. ad6amántib ad6amántis ad6amántiu ad6amántī ad6amásn ad6amásq ad6amásu ad6amásv ad2an a2dap ada2q ad2ar ad3ác adæ2 adǣ2 1add ade4d ade2g ade2q ade4s adē2d adē2g adē4s adḗ4d adḗ4g adḗ4s adé2d adé2g adé2s 1adh ad3iác adi2c adi2g adi4mí adi2r adi4tā adi4tǣ adi4tī adi4tū adī2m adī2r adī2t adī́4m adī́4r adī́4t adí2b adí2g adí4mu adí2r ad3íss ad3íst adí4to adí4tu 1adj 1adn a2do2 a3do. ad4oc a3don a3doq a3dou a3dov adō2 ad4ōc ad5ṓ6rant ad5ṓ6rat ad5ṓ4rā ad5ṓ6rem ad5ṓ6rent ad5ṓ6rer ad5ṓ6ret ad5ṓ4rē adṓ6ror adó6rans adó6rant adó4ras adó4rat adó4rem adó6rent adó4rer adó4res adó4ret adó4ria adó4ror 1adp 1ads adu2 a2dul ad3u4r ad3us adū2 adū́2 a2dú2l adú2r ae1 2ae. 2aea aea2b3 a3eamú a3eant 2aeā a3eām a3eā́m 2aeă aeắ2 2aeá ae3ác a3eánt ae3áp ae4cue 1ae3d2 aed4o 2aee ae2eo ae2eō ae2eó ae3es ae2eu 2aeĕ aeé2r ae3és ae3g2 2aei2 ae3ic 2ae2ī 2aeí 2aen aení3t 2ae2o 2ae2ō 2aeó aepo6tés aepó6tes ae3q 4aeque. 4aequĕ. ae3r aer4i ae4rn ae4rq ae4rv ae5sci ae4scu ae4scú ae4spō ae2sq aes4te aesti5t4 aestí5t4 aetere6ri aete6re6rí aete6res aete6rés aete6ri. aeter5ii aeter5ií aeteri6mu aeteri6mú aeteri6n aete6ri6q aeteri6ti aeteri6tí aeteri6to aeteri6tó aeteri6tú aete4r5ī4 aeterī́6 aete6r5í6mu aete6rí6n aete6rí6q aete6rí6t aeter5íti aete6rí6u aete6rí6v a3e2tē ae5tĕr aeté6r5es aeté6ri. aeté6r5ii aeté6rite aeté6ri6ti ae2un ae3ut 2aeŭ 2aeú aex2 ae2xu aé2ru 1af afe4r afé2 ag2a a3gae a3ga͞ a3ga͡ a3gā. a3gān a3gāq a3gāu a3gāv a3gáe a3gál a3g2æ3 a3g2ǣ a2geb a2ger a2get 1a2gē a3gē. a3gēq a3gēu a3gēv a2géb a2gét a2gim agi6ste agi6str a2gím a2gít a2gn ag3ne ag3ni. ag3nin ag3niq ag3nis ag3niu ag3niv ag3nī ag3nín ag3níq ag3nís ag3níu ag3nív ag3no. ag5norum ag5norúm ag5nos. ag5nosn ag5nosq ag5nosu ag5nosv ag5noue. ag5nove. ag3nō ag3nón ag3nóq ag5nórum ag5nósn ag5nósq ag5nósu ag5nósv ag5nóue. ag5nóve. ag3nu ag3nú a3gri a3grī a3grí a2gun a2gún a1h ai2a aiad2 ai4an ai2á a1ib a1ie a1i2i a1iī a2i3m ai4mn ai4mq ai4mv ai2nu aio2s a1iō a1is a1it a1iu a1ī2b aīn3 aī2nu a1ī2r a1īs aī́2b aī́2r aī́2t a1í2b a1íi a2í3me a1í2r a1í2t a3la alae2 a3lá alæ2 alǣ2 2a3le ale2i alē2i 2a3lé a3li. a3lia a3lib a3lii a3lií a3lin a3lio a3liō a3lió a3liq a3lis a3lit a3liu a3liú a3liv 2a3lī 2a3lí 2alu a2l3ua a2luā a2l3uá a2l3uæ a2luǣ a2l3uǽ al3ue. al3uen al3ueq al3ueu al3uin al6uine. a4l5uis. a4l5uisn a4l5uisq a4l5uisu al3uīs al5uī́s a4l5uísn a4l5uísq a4l5uísu a3l4um al3uó a3l4us alu6ste a3l4ut al3uu al3uú alū6ste 2alú 2am. am2a 4amantē 6amantéa 6amantéæ 6amantée 6amantéi 6amantéo 6amantéu a4mantō 1a2mā 1amb am2be amb3és am4b5i4mu am4b5i4mú am4b5it. am6b5i6te. am6b5i6ten am6b5i6teq am6b5i6teu am6b5i6tev ambi4ti am4b5i4tí am4b5itn am4bi4to am4b5i4tó am4b5itq am6b5itue am4bitú am4b5itv am6bi6ui. am6bi6vi. am4bít am4b3u4r am4b3us ambūbā6i ambūbē6i am4bū4r am4b3ū́4 am4b3ú4r am2e ame3g am4es ame3sæ ame3sǽ am2ē am2é am4és amé3sa am2i 3a2mic 2amin ami4s3 ami6ste ami6str 3a2míc 2amm 2amn 3amnæ 3amnǣ 3amnǽ 1amo a2móe 1amœ 1amp 2amq 2a1mu am4uel am2uē am2ué a2mui a2muī a2m3uí a3mur a3mus 2a3mú 2amv 2an2a an2ā 2aná 2anæ 2anǽ 1anc an2cu 2and ande4s3 2ane a3nē 1anh 1ani a2nim 2anī 3a2ním 2a3n2o ano3p 2anō 2a3nó 2ans1 an2sa2 ans3ab3 ansabi4 ansabí4 an4sá4b3 an4s3ci an4scí an4sea an4seá an4seo an4seó an4si4b an4sig ansi4mi an4si4t ansi4u an4si4v an4sí4b an4síe an4síg an4sí4m an4sí4t ansí4ui ansí4vi an4sn an2sp an4sq ans3t an4sv 2ant. ante5re an4t5ero an4t5erō an4t5e4ró an5tes antes4t ante5stāti ante5stā́ti ante5stem. ante5stemn ante5stemq ante5stemue ante5stemv ante5stes ante5stēs ante5stḗs ante5stémn ante5stémq ante5stémue ante5stémv ante5stés anté5ii antés4t anté5stem anté5stes anté5stē 2antn 2antq 2antu 2antú 2antv 2a1n2u a2n3ue an2ū 2anú ao1n a2one ao3ni ao2ny ao2ný a1or aō2ny aō2ný a3ṓ4ny a3ó2ny aó1r 1ape1 ape2i ape3r4e aper4ē aper4i ape3r4ī aper4í aperí5tur aper4u 2aph a3pi apis3 api6str a3pí a2pn apo5str apo4su 1apó após3 1app appár4 apule4 aput3 a3pú a2qua a2quā a2quá a3que. a2quē a2quo a2quō a2quó a1r 2ar. ar2a arab2 1arā 2arám ardē2 ar2e 2are. are2i 2aren 2areq 2arer 3a4resc 2areu 2arev arē2i a3rēu a3rēv 2aré 3a4résc 2ar2i 3arid ari5do ari3ni 2arí 3aríd 1arm 2arn arpē4i 2arq ar2sp 3a2r3ua 3a2r3uā 3a2r3uá ar3uæ ar3uǣ ar3uǽ ar3ue. a4r3uen a4r3ueq ar4uer a4r3ueu ar4ui. ar4uin ar4uiq ar4uis ar5uis. ar5uisn ar5uisq ar5uisu ar4uiu ar3uī ar5uísn ar5uísq ar5uísu 2a3rum 2a3run a2r3uo a2r3uō a2r3uó a3rus aru3sp a2r3uu a2r3uú 2a3rú arú3sp 2arv 3arva 3arvā 3arvá 2as. 2asca 2ascá as6cendā as6cende as6cendī as6cendō as2cē as6céndā as6céndī as6céndō 2as3ci 2ascí 2asco 2ascó a3scr as4cri 2ascu 2ascú a3s2e ase2i as4er asē2i a3sé a3s2i a3sí 2asn 1asp as5per. as5pera as5perā as5perá as5peræ as5perǣ as5perǽ as5pere as5perē as5peré as5pe5ri as5pe5r4ī as5per4í as5perne. as5pero as5perō as5peró as5perq as5peru as5perú as5perv a4s3pē as5péra as6pérna as5pérq as5péru as5pérv a4spi as3pis a4s3pī a4spí as3pís as3po as3pō as3pó as3pum as3púm 2as3q 2ass as2tā as5te. as5teq as4ter as5teu as5tev as2tē 4a4s3ti. 4a4s3tin 4a4s3tiq 4a4stis 4a4stiu 4a4s3tiv 2as3tí a4stín a4stíq a4stís 3as4tít a4stíu a4stív as3to 2astr as4tras as4trau as5traue. as4trav as5trave. as4trát as4tráu as4tráv as4trid as4tríd as5trum as4trúe 2asu a3s2ua a4s3ue as3uis as3uís 2asv 2at at3a4g ata5str a2t3á4g ate4ie ate4io ate4ió ate4iú ate2ī ate3r4a ate3rǣ ate5re ate5ré ate3ri ateri5u ateri5v ate5rī aterī5u aterī5v ate3ro ate3rō a3ti ati4s atis5t ati6sta a3tí ato2i ató2i 1att a3tur a3tú a1u au3a͞ a2u1ǣ2 au3d2 2a3ue 2a3ué 1aug 2aui 2auí a2ul a2u1m a2un aupe5re aupe5ri auperi5n auperi5q auperi5ue auperi5v aupe5r4ī auperī5n auperī5q auperī5u auperī5v a2u1r a2ut 1auu a2ux au2xu 2av av3a͞ a2v1ǣ a3ve a3vé 1avu ax2 ax4eu a2xia a2xiá a2xiæ a2xiǽ a2xié a2xii a2xií a2xio a2xió a2xiú a2xía a2xíe ax3ue ax4us a2͞ 4a͞e. 2a͞ea 2a͞eā 2a͞eă 2a͞eá 2a͞eī 4a͞en 6a͞eque. 6a͞equĕ. a͞u6ste a͞u6stĕ 4á͞ea 4á͞eā 4á͞eă 4á͞eī 4á͞en a2͡ 4a͡e. 2a͡ea 2a͡eā 2a͡eă 2a͡eá 2a͡ei 2a͡eī 2a͡eí 4a͡en 6a͡eque. 6a͡equĕ. a͡ete6res a͡ete6rés a͡eté6r5es a͡u4st a͡u6ste a͡u6stĕ 4á͡ea 4á͡eā 4á͡eă 4á͡ei 4á͡eī 4á͡en 6á͡eque. 2āb2 āba2 ābá2 ābī3u ābī3v ābo2 āb4un 2ācĕ ācé2 2ācī 2ācĭ 1ā2cr 1āct ā2c3ue āda2 ādá2 ādē2s ā3do2 ād4or ādó2 āe1 āe3r āē2 āēr3 āḗ2 āĕ1 āĕ3r āĕr4ĕ āg2a ā2gā ā2gă ā3g2æ3 ā3g2ǣ ā2ge āge2r ā2gĕ ā2gé2 ā2gn ā2go2 ā2gŏ ā2gó ā1i ā2ia. āiad2 ā2iam ā2ian ā2iaq ā2iau ā2iav āi2ā ā4iāque ā4iāue ā4iāve ā6iā́que ā4iā́ue ā4iā́ve ā2iám ā2id ā2ien ā4iḗne ā6iḗque ā4iḗue ā4iḗve ā2iī. ā4iīne ā4iīque ā4iīue ā4iīve ā4iī́ne ā6iī́que ā4iī́ue ā4iī́ve ā2io ā2iō. ā4iōne ā4iōque ā4iōru ā4iōrú ā4iōs. ā4iōsne ā6iōsque ā4iōsue ā4iōsve ā4iōue ā4iōve ā4iṓne ā6iṓque ā4iṓru ā6iṓsne ā6iṓsque ā6iṓsue ā6iṓsve ā4iṓue ā4iṓve ā2ió ā2is ā2ium ā2ius ā2iús ā1ĭc ā2íe 2āl āle2r ā3li ālo2 2ā1m2 āme4r3 āmĭ́5c āmo2 ā3na ā3n2ā ā3nă ā3ná ā3næ ā3nǣ ā3nǽ ā3ne āne2r ā3nē. ā3nēn ā3nēq ā3nēu ā3nēv ā3n2ĕ āné2 āno2 ā3nō 2āns ān2s3a2 ānsab3 ān2să ānsá2 ān4s3áb3 ān4scī ān4s3ea ān4s3eā ān4s3eá ān4s3eo ān4s3eō ān4s3eó ān4s3ĕā ān4s3ĕă ān4s3ĕō ān4s3ĕŏ ān4s3i4b ān4sig ān4s3iī ān4s3i4t ān2s3ī2 ānsī́4m ānsī́4t ān4s3ĭ4b āns3ĭē ān4sĭg ān4s3ĭī ān4s3ĭ4t āns5ĭ́4b ān4s5ĭ́ĕ ān4s5ĭ́g ān4s3í4b ān4síe ān4síg ānsí4t āns5íta āns5íte āns5íti ān2sp ān4s3t ā1nu ā2n3ue ā3nus ā3nŭ ā3nú ā1ō āpē2 ā3pi ā3pĭ ā3p2t 2āq ā1r 2āra 2ārā 2ārá 2ā3r2e ā3rē ārē2i 2ārēm 2ārēr 4ārēs. 3ā4rēsc 4ārēsn 4ārēsq 4ārēsu 4ārēsv 2ārēt 2ārḗ 5ā4rḗsc 2ā3r2ĕ 2āré2 2āria 2āriā 2āriá 2āriæ 2āriǣ 2āriǽ ā2rid āri5dō 2ārie 2āriē 2āriī 2ārim 2ārin 2āriō 2āris 2ārit 2āriu 2āriú 2ārī 2ārĭ 3ā2rĭd ārĭ5dō 3ā4rĭ́d 2ārí 3ā2ríd āro2 2ārō āró2 ār2s3p ār2u ār3ue. 2ārum 2ārun 2ārŭ ār4ŭn 2ārú 2ās ās2ca ās2că ās3cī ās2i āsi2n āso2 ā2s3q ās5ter ās5tĕr ā2s3ti ā2s3tī ā2s3tĭ ā2s3tí ā2s3ue ā2s3uĕ 2āt āté2 āto2 ātō2i ātó2 2ā1u2 2āv āx2 ā2x3u 2ā2́ ā́b2 ā́4crĕ ā́4crĭ 3ā́ctē 3ā́cti ā́2f ā́2go ā́2gŏ ā́3ici ā́3iul ā́3ĭcĭ ā́3lu ā́1m2 ā́n4s5ea ā́n4s5eā ā́n4s5eo ā́n4s5eō ā́n4s5ĕā ā́n4s5ĕă ā́n4s5ĕō ā́n4s5ĕŏ ā́n4s5iī ā́n4s5i4t ā́n4s5ĭī ā́n4s5ĭ4t ā́3p2t ā́3rĕ 3ā́4rid 3ā́4rĭd ā́r4uī ā́5s4trŭ ă1ā2 ă3āt ă3ā́2 ăb1 ăb2a 2ăbă ăb2ăc ăbă4l ăb2ăq ăbă6stĕ ăb2ắ ăb3ắl ăb2á ăbæ3 ăb2e 2ăbē ăb2ēs ă2bi ăbī2m ăb4ĭēs ăb4ĭḗs ăb3ĭī. ăb3ĭīn ăb3ĭīq ăb3ĭīu ăb3ĭīv ăb5ĭī́n ăb5ĭī́q ăb5ĭī́u ăb5ĭī́v ăbĭ́4g ă2bl ăbŏ2 ăbŏ3lŭ ăbŏ́2 ăb3r ăb4ră ăb2sq ăb4stēm ăb6stḗm ăb4stĭ ăbs3tr ăb4strū ăb4strŭ ăb4stŭ ăb2su ăbū2 ăbū́4 ă2bŭ ă3bŭm 2ăca 2ăcā 2ăcă 2ăcá 2ăcæ 2ăcǣ 2ăcǽ 1ăcc 2ăcē ă3cĕ. ă3cĕn ă3cĕq ă3cĕu ă3cĕv 2ă3cī 2ăcĭ 2ă3cō ă2cu 1ă2c2ū 2ăcŭm 2ăcŭs ă3cŭ́m ăd1 ădă2 ăd2ăd ăd6ămāns ăd6ămās. ăd6ămāsn ăd6ămāsq ăd6ămāsu ăd6ămāsv ăd6ămā́ns ăd6ămā́sn ăd6ămā́sq ăd6ămā́su ăd6ămā́sv ădă6măntēs ădă6măntḗs ăd6ămăntĕ ăd6ămăntī ăd6ămăntĭb ăd6ămăntĭs ăd6ămăntĭŭ ăd6ămăntĭ́s ăd6ămắntē ăd6ămắntĕ ăd6ămắntī ăd6ămắntĭb ăd6ămắntĭs ăd6ămắntĭŭ ăd2ăn ădă4q ădæ2 ădǣ2 ă3d2e ăde4u ădē2d ădē2g ădē2s ădḗ4d ădḗ4g ădḗ4s ădĕ2d ădĕ2q ădĕ́4d ă2di ădī2m ădī2r ădī2t ădī́4m ădī́4r ădī́4t ădĭ2c ădĭ4ta ădĭ4tā ădĭ4tă ădĭ4tá ădĭ4tæ ădĭ4tǣ ădĭ4tǽ ădĭ4tī ădĭ4tū ădĭ́4c ădĭ́4tă ădĭ́4tĭ ădō2 ăd4ōc ăd5ṓ4rā ăd5ṓ6rănt ăd5ṓ6răt ăd5ṓ4rē ăd5ṓ6rĕm ăd5ṓ6rĕnt ăd5ṓ6rĕr ăd5ṓ6rĕt ădṓ6rŏr ă2dŏ2 ă2du ădū2 ădū́2 ădū́4l ădŭ2 ă1ĕ2 1ăf 1ăg ă3g2a ă2găr ă2găt ă3g2æ3 ă3g2ǣ ă2gē ă3gē. ă3gēq ă3gēu ă3gēv ă2gĕ ă3gĭb ăgĭ6stĕ ă2gĭt ă2gn ă3grī ă2gŭn ă1h 2ă1i ă1ī2b ă1ī2r ă1īs ăī́2b ăī́2r ăī́4t ă1ĭĕ ă1ĭĭ ă3ĭ2t ă3ĭ́ĕ ă3ĭ́ĭ ă3ĭ́2t 2ăj ălae2 ă3lă ălæ2 ălǣ2 2ălē 2ălĕ 2ă3lī ă3lĭă ă3lĭō ă3lĭŭ ă3lĭ́ ă2l1u ălū6stĕ 2ălŭ 2ăm. ă1ma 1ă2mā ă1mă 4ămăntē 3ă2măt 1ămb ăm2bĕ ăm4b5ĭt. ăm4b5ĭtn ăm4b5ĭtq ăm4b5ĭtu ăm6b5ĭtŭ́ ăm4b5ĭtv ăm6b5ĭ́tn ăm6b5ĭ́tq ăm6b5ĭ́tu ăm6b5ĭ́tv ămbūbā́5i ămbūbḗ5i ăm4bū4r ăm4b3ū́4 ăm4b3ŭs ăm2e ăm2ē ăm2ĕ 3ămīc ăm3ĭc ămĭ6stĕ 2ămm 2ămn 3ămna 3ămná 3ămnæ 3ămnǣ 3ămnǽ 1ămo 1ă2mó 1ămœ 1ămp 2ămq 2ămu 2ămv ăn2ā 2ă3n2ă 1ănc 2ănd ă3nē 2ă3n2ĕ 1ănh 2ă3nī 1ănĭ ă2nĭm 2ă3nō 2ă3n2ŏ 2ănt. ăn4t5ĕ4rō ăn5tĕs4 ăntĕ5stātĭ ăntĕ5stā́tĭ ăntĕ5stēs ăntĕ5stḗs ăntĕ5stĕm ăntĕ5stĕ́m ăntĕ́s4 ăntĕ́5stē ăntĕ́5stĕm 2ăntn 2ăntq 2ăntu 2ăntŭ 2ăntv ăn2ū 2ă3n2ŭ ăō2ny ă3ṓ4ny ă3pe 1ăpĕ ăpĕ3rĕ ăpĕ3rī ăpĕ3rŭ ă3pé ă2pn 1ăpŏ 1ăpp 3ă2quā 3ă2quă 3ă2quē 3ă2quō 3ă2quŏ 2ăr. ă1ra ă1r2ă ără3bŭ ă3răg ără3gĕ ă1ræ ă1rǣ ărdē2 ă3r2e ă3rēu ă3rēv ă1r2ĕ ă3rh ă1rī ă3r2ĭ 2ărn ă1ro ă1rō ărpē3i ărpḗ5i 2ărq ăr2su 2ăr1u 3ăruā ă1rū ă1rŭ 2ărv 3ărvā ă1ry 2ăs. 1ăsc ăsce2 ăs2cē ăs2cĕ ăscé2 ă3s2ĕ ăs4ĕr ă3sĭ 2ăsn ă2sp ă4s3pē ăs5pĕr. ăs5pĕra ăs5pĕrā ăs5pĕră ăs5pĕrá ăs5pĕræ ăs5pĕrǣ ăs5pĕrǽ ăs5pĕrē ăs5pĕ5rī ăs5pĕrnĕ. ăs5pĕrō ăs5pĕrq ăs5pĕru ăs5pĕrŭ ăs5pĕrv ă4s3pī ă4spĭ ăs3pĭs ăs3pō ăs3pŏ ăs2pŭ 2ăs3q 2ăst ăs2tā ăs4tăn ăs2tē ăs2tĕ ăs3tĕ. ăs3tĕq ăs3tĕu ăs3tĕv 4ăstr ăs3tră ăs3trō ă3strŏ ăs4trŭ 2ăs3u 2ăsv ă3ta ă3tā ătă5str ătắ2 ă4t3ắg ă3tá ă3tæ ă3tǣ ă3tǽ ă3tē ătḗ3i ătĕ2ī ătĕ3r4a ătĕ3rǣ ătĕ3rĕ ătĕ5rī ătĕrī5u ătĕrī5v ătĕ3rŭ ă3tī ă3tĭ ătĭ4s ătĭs5t ă3tr 1ătt ă2tu ă1u ă2u1a ă2u1á ă2uæ2 ă2u1ǣ2 ă2uǽ ă3uĕ ă3uŏ ă2v1a ă2v1á ă2væ ă2v1ǣ ă2vǽ ă3vĕ ăx2 ă2xu ắb5ĭī. 3ắbl ắb6stĭn ắb4s5tr ắ3bŭ ắdă4 ắd6ămān ắd6ămās ắd3ăq 3ắdd ắd3ĕŏ ắd3ĕs 3ắdh ắd3ĭ4c ắd3ĭĭ ắd5ĭ4ta ắd5ĭ4tā ắd5ĭ4tă ắd5ĭ4tæ ắd5ĭ4tǣ ắd5ĭ4tī ắd5ĭ4tū 3ắdj 3ắds ắ1ĕ 1ắf 3ắgg ắ4gĭĕ 2ắ1i ắ3ĭēn ắ3ĭī. ắ3ĭ2t 2ắj ắl3u ắm4b5ĭt 3ắmna 3ắmnæ 3ắmnǣ 3ắmp 3ắmt ắ4nĭm ắn2ŏ ắn6tĕrō 3ắntr ắ2r ắ3r2ă ắră3g ắ3rēn ắ3rĕ ắ3rī ắ3rĭ ắ3rŭ ắ2sp ắs4tān ắs4tăt ắs4tēs 5ắs4tĕm ắs6tĕnt 5ắs4tĕt 5ắstĭt 2ắ2t ắ3ta ắ3tā ắ3tă ắ3tæ ắ3tǣ ắ3tē ắ3tĕ ắ3tī ắ3tō ắ3tŏr ắ3tr 3ắtt ắ3tū ắ3tŭ ắ3uŏ áa2t áb2ac áb2a3q áb3aui áb3avi áb2eq áb2ia á2bie áb4ies 3á2biē áb4iēs 3á2bii áb4iis 3á2biī áb3iī. áb2iu 1ábī 3á2bl áb2o ábs2c áb5sci áb2sq áb5s4te áb4stin áb3sto áb4str á3bu 2áce áda2 ád6amans ád4amas ád4amān ád4amās 3ádd áde2d ád1ē 3ádh á2d3i2c ádi2g ád2ip ádi3pi 3ádj 1ádm á3do ád4ora ádo4ri á3dō 3áds ád1u á3eant á3eat áe2ă áe4cue áe3d2 áe2eo áe2eō áe3es áe3g2 áei2 2áen 2áe3q 3áequa 3áequā 3áequă 5áequem 5áequer 5áeques 5áequet 3áequē 5áequĕm 5áequĕr 5áequĕt 3áequo 3áequō 3áequŏ áe1r áer4i áes4ca áes4ci áes4ta áes4te áes4tē áes4tī áes4tō áete3 áetĕ3 áetĕ5r áe3ut áe2ŭ áe2x 1áf ág2a á3gæ 1áge á2ger 3ágg á2giā á2giæ á2giǣ á2giē á2gim á2git á2gn ág3no á3gr á1h ái2a á2ia. á2iae á2iam á3iane á3iaq á2ias á3iau á3iav á2ia͞ á2ia͡ á2iā á2iæ á2iǣ á3ieq á3ieu á3iev á2iis á3iit á1iī á1i2t á1iu 1álp á2l3ua á2luā á2l3uæ á2luǣ á2l3ue ál3uē ál3uin á4l3uis ál3uīs ál3uu ám1 á1m2a 1ámb ám4bes ám2bē ám4b3ia ám4biā ám4b3io ám4b3i4t ámb4iui ámb4iv ám2e áme3s ám2ē 2ám2i ám2ī 2ámn 3ámnæ 3ámnǣ á1mo 3ámp 2ámq 3ámt 2ámu á3m2uē 2ámv án2cu á2nim 3ánnu án2o3 án4s3ea án4s3eo án2si2 áns3it án4t3ea ánte3i ánt5ero ánt5erō 3ántr á1nu án2ua á2nue án2uī án2ū ápe3r á3pi á2pn 2áq á2qui á1r 2ár2a ár5cha 2árd 2áre 2ár2i 3árid 2áro ár2sp 2áru á2r3ua á2r3uā ár3uæ á2rue á4ruis á3rum á3run á2ruo á2r3uō á2ruu 2ás ás3c ás4er ás2i áspe3 ás3pī ás2pu ás4tān ás4tēs á4sti ás5ti. ás5tis 3ástit ás3to ás3tri ás5trum 2át át3a4g áte3r á5trix 3átt á1u 2áue á2ul á2u1m á2un áupe3 áupe5r á2u1r á2ut á2ux áu2xu 2áv áx2a áx4eu áx2i á2xia á2xiæ á2xii á2xio á2xiu áx2ī áx2o áx2ō áx4us æ1 2æa æa2b1 æa2m æ2a3n æ2a3q æ2a3r æ2as 2æ2ā 2æă æ2ăn æ2ă3q æ2ău æ2ăv æắ2 2æá æá2c æ2ám æ2án æ2ár 2æ2æ 2æ2ǽ æb2 æbe3r æ2c3ue 1æd2 æde2s ædē2s æ2di æ2dĭ æ3do æd4or æ3dŭ æd4ŭĕ 2æe2 æ2e3n æ2eo æ2eō æ2eó æ2e3q æe4ra æe4ro æe4rō æ3es æ2eu æ2eú æ2ev æex3 2æ2ē 2æĕ2 æ2ĕō æ2ĕ3q æĕ4rō æ2ĕŭ æĕ́2 2æ2é æ3é2r æ3és æ2g2 æge2 ægé2 æ3gn 2æi2 æ3ic æ2in æ2i3q æ2is æ2i3ue æ2i3v 2æ2ī æĭ2 æĭ́2 2æ2í æ3í2c æmo4nu æmō2 2æn æn2ā æ3ne æne3ī æ3nē æ3nĕ1 æ3né æ2nin æni3t æn1ī æní3t 2æ2o 2æ2ō æ2ŏ 2æ2ó æó2nu æó1r æpo6te6ri æpo6te6rí æpo4tes æpo4tés æpŏ4tĕs æpó4tes æ2qua æ2quā æ2quá 4æ3que. 4æquĕ. æ4quĕm æ4quĕr æ4quĕt æ4quĕ́ ær2 æ3ră æres3 æ3rē ærĕ2s3 æs2c æs3cu æs3cŭ æs3cú æs2i æs2p æspe3 æs3po æs3pō æs3pó æst2 æsti5t4 æstí3t4 æte5ram æte5ran æte5rar æte6re6ri æte6re6rí æte6reru æte4res æte4rés æte4r3i4 æte4r3ī4 æterī́4 æte4rí4 æter5ímu æter5íti æter5íu æter5ív æte3ro æte3rō æte5run ætĕ4r3ī4 ætĕrī́4 ætĕ4rĭē ætĕ4r5ĭī ætĕ4rĭt ætĕr5ĭ6tā ætĕrĭ6tĕ ætĕ5rĭtĭ ætĕrĭ6tō. ætĕrĭ6tōn ætĕrĭ6tōq ætĕrĭ6tōu ætĕrĭ6tōv ætĕrĭ6tṓn ætĕrĭ6tṓq ætĕrĭ6tṓu ætĕrĭ6tṓv ætĕrĭ́4 ætĕ6rĭ́ĕ ætĕ6rĭ́t ætĕ3rŭ ætĕ́6rĕ6rĭ ætĕ́4rī ætĕ́6r5ĭī ætĕ́6r5ĭt. ætĕ́6r5ĭ6tā ætĕ́6rĭ6tĕ ætĕ́6rĭ6tō æté6re6ri æté4r5es æté4ri. æté4rie æté4riē æté4r5ii æté4r5iī æté4r5is æté4rit ætér5it. ætér5ita ætér5i6tā ætéri6te ætéri6ti ætéri6to. ætéri6tō æ3tr æu2 æū2 2æŭ æ2ŭs æ2ŭ́ 2æ2ú æx2 æ2x3u ǣ1 2ǣa ǣa2b1 ǣa2m ǣ2a3n ǣ2a3q 2ǣ2ā 2ǣă ǣ2ăn ǣ2ă3q ǣ2ău ǣ2ăv ǣắ2 2ǣá2 ǣ2ám ǣ3ámb 2ǣ2ǣ ǣ2c3ue 1ǣd2 ǣda2r ǣdē2s ǣ2di ǣ2dĭ ǣ3do2 ǣd4or ǣdó2 ǣ3dŭ ǣd4ŭĕ 2ǣe2 ǣ2e3n ǣ2eō ǣ2e3q ǣe4ra ǣe4rō ǣ3es ǣ2eu ǣ2eú ǣ2ev 2ǣ2ē 2ǣĕ2 ǣ2ĕō ǣ2ĕ3q ǣĕ4rō ǣ2ĕŭ ǣĕ́2 ǣé2 ǣ3és ǣ2g2 ǣge2 ǣgé2 ǣ3gn ǣi2 ǣ3ic ǣ2is 2ǣ2ī ǣĭ2 ǣĭ́2 ǣí2 ǣmō2 2ǣn ǣn2ā ǣ3ne3 ǣ3nē ǣ3nĕ1 ǣni3t ǣn1ī ǣní3t ǣ2o 2ǣ2ō ǣ2ŏ ǣ2ó2 ǣpote4 ǣpo4t5er ǣpo4t5es ǣpoté4 ǣpo4tér ǣpo4t5és ǣpŏ4tĕs ǣpó4t3e ǣ2quā 4ǣ3que. 4ǣquĕ. ǣ4quĕm ǣ4quĕr ǣ4quĕt ǣ4quĕ́ ǣr2 ǣra2r ǣ3ră ǣrá2 ǣres3 ǣ3rē ǣrĕ2s3 ǣro2 ǣró2 ǣs2c ǣs3cu ǣs3cŭ ǣs3cú ǣs2i ǣs2p ǣs3pō ǣst2 ǣsti5t4 ǣstí3 ǣstít4 ǣte5ram ǣte5ran ǣte5rar ǣte6re6ri ǣte6re6rí ǣte6reru ǣte4r5es ǣte6réri ǣte4r5és ǣter5iē ǣter5iī ǣte5rim ǣter5i6tā ǣteri6te ǣte5riti ǣte5rití ǣte5rito ǣteri6tō. ǣteri6tōn ǣteri6tōq ǣteri6tōu ǣteri6tōv ǣteri6tṓn ǣteri6tṓq ǣteri6tṓu ǣteri6tṓv ǣte5ritó ǣte5r6i5tur ǣte5ritúr ǣte4r3ī4 ǣterī́4 ǣterí4 ǣte4ríe ǣte4rít ǣte3ro ǣte3rō ǣte5run ǣtĕ4r3ī4 ǣtĕrī́4 ǣtĕ4rĭē ǣtĕ4r5ĭī ǣtĕ4rĭt ǣtĕr5ĭ6tā ǣtĕrĭ6tĕ ǣtĕ5rĭtĭ ǣtĕrĭ6tō. ǣtĕrĭ6tōn ǣtĕrĭ6tōq ǣtĕrĭ6tōu ǣtĕrĭ6tōv ǣtĕrĭ6tṓn ǣtĕrĭ6tṓq ǣtĕrĭ6tṓu ǣtĕrĭ6tṓv ǣtĕrĭ́4 ǣtĕ6rĭ́ĕ ǣtĕ6rĭ́t ǣtĕ3rŭ ǣtĕ́6rĕ6rĭ ǣtĕ́4rī ǣtĕ́6r5ĭī ǣtĕ́6r5ĭt. ǣtĕ́6r5ĭ6tā ǣtĕ́6rĭ6tĕ ǣtĕ́6rĭ6tō ǣté6re6ri ǣté4r5es ǣté4riē ǣté4r5iī ǣté6r5it. ǣté6rita ǣté6r5i6tā ǣté6ri6te ǣté6ri6tō ǣu2 ǣ3ue. ǣue2r ǣ3uĕ. ǣū2 2ǣŭ ǣ2ŭs ǣ2ŭ́ 2ǣ2ú ǣ3úmb ǣ3ve. ǣ3vĕ. ǣx2 ǣ2x3u ǣ2́ ǣ́3da ǣ́3dă ǣ́3e2r ǣ́3es ǣ́3ĕ2r ǣ́2g2 ǣ́3gn ǣ́4gr ǣ́1i2 ǣ́1ĭ2 ǣ́3l ǣ́2mu ǣ́2mŭ 2ǣ́3n 3ǣ́4qua 3ǣ́4quā 3ǣ́4quă 5ǣ́4quem 5ǣ́4quer 5ǣ́4quet 3ǣ́4quē 5ǣ́4quĕm 5ǣ́4quĕr 5ǣ́4quĕt 3ǣ́4quo 3ǣ́4quō 3ǣ́4quŏ ǣ́s4ca ǣ́s4ci ǣ́s4cī ǣ́s4cĭ ǣ́s4ta ǣ́s4tă ǣ́s4tǣ ǣ́s4te ǣ́s4tē ǣ́s4tĕ ǣ́s4tī ǣ́s4tō ǣ́tĕ3 ǣ́4th ǽ1 2ǽ2a 2ǽ2ā ǽ2ă 2ǽæ ǽc3ue ǽ3da ǽ3dă ǽ2e ǽ3e2r ǽ3es ǽ2ĕ ǽ3ĕ2r ǽ3ĕs ǽg2 2ǽi2 ǽ2is 2ǽ2ī ǽĭ2 ǽ2mu ǽ2mŭ 2ǽn ǽ3ne ǽ3nĕ ǽ2o ǽ2ō ǽ2ŏ ǽ2qua 3ǽ2quā 3ǽ2quă 4ǽque. ǽ4quem ǽ4quer ǽ4ques ǽ4quet 3ǽ2quē 3ǽ4quĕm 3ǽ4quĕr 3ǽ4quĕt ǽ2quo 3ǽ2quō 3ǽ2quŏ ǽr2 ǽ3ră ǽst2 ǽ2stu ǽte1 ǽtĕ3 ǽu2 ǽ2um ǽ2ŭ ǽ3ŭt ǽ2x 1b 3ba. bab2o bab4u ba2c ba3ci ba3cí b2acu b2acú 2b1a2d3 3bae b2aeq b2aeu b2aev ba2g ba3gē ba3gu ba3gú ba3ian ba3ián ba3ion ba3ió ba2it ba3iú b1a2l b2ami b2an b2ap b1a2q ba3que ba2rā b2a2ru 5barum ba4sp bas5pe bas3t bas5te bas5tr b3a2tr ba4uen ba4ueq ba4ueu ba2uī ba2uo ba2uō ba2uó ba2uu ba2uú 3bav ba4ven ba4veq ba4vev b3a2vī b3a2vo b3a2vō ba2vó b3a2vu ba2vú 2b1a2x b1āc 2b1ā2g bā2ic bā2ĭ b2ān b2ār b3ā2tr b3ā́c 2b3ā́2g b1ăb 3bă2c bă3cŭ b1ă2d3 bă2g bă3gē bă3gŭ 3bă2l băm3 b2ăn b2ăp b1ă2q b3ă2rŏ 3bărr bă4sp băs5pĕ băs3t băs5tĕ băs5tr b2ăt bă4uĕn bă4uĕq bă4uĕu b3ă2uī b3ă2uō b3ă2uŭ bă4vĕn bă4vĕq bă4vĕv b3ă2vī b3ă2vō b3ă2vŭ b1ă2x 3bắc b3ắ2d3 b2ắn b3ắ2u b3ắ2v b3ắ2x b2áb b1ác 2b1á2d3 b2áeu b2áev 2b1á2g bá3ian b2án bá2ru b3ásp b2áu bá4uen bá4ueq bá4ueu bá4ven bá4veq bá4vev 2b1á2x b1æ2 b2æ3q b2æu bæ3ue bæ3uĕ b2æ3v b1ǣ2 b2ǣ3q b2ǣu bǣ3ue bǣ3uĕ b2ǣ3v b2ǣ́ b3ǣ́m b2ǽq b2ǽu b2ǽv 2bb2 b3ba bba3q b3bā b3bá b3bæ3 b3bǣ b3bǽ b3be3 b3bē b3bé b3bi b3bī bbī3u bbī3v b3bí b3bo b3bō b3bó b3bu b3bŭ b3bú 2bc 2bd bde2s bdē2s b3do bd4or bdū3r be2a 3beæ 3beǽ 3bec becī́3 b1ed2 be2dā be2de be2dē be2dé be2d4i be2dī be2dí be2d4o be2dō be2dó be2du be2dú 3be2e 3beé b1e2g 3bei be3iǣ be3iē 3beí b2el b2em b2en be4n3ia be2o b1e2q be3ra be5ra. be5raq be5rau be5rav be3r2æ3 be3r2ǣ ber2e 3berea 3bereá 3bereæ 3bereǽ be4rec 3beree 3bereé 3berei 3bereí 3bereo 3bereó 3bereú bere5x4 be3rē 3beréa be4réc 3berée b3eréx ber4i be3ria be3riá be3rib be3ri5c 3be3rie 3be3rié be3rii be3rií 3be3ri3n be5rite be3riu be3riú be3riv be3rī be4ríg 3berín be4rít be4rn be3ro be3rōr be3rōs be4rq 3berúm be4rún be4rv be2s be4sa be4si be4sn be4so be4sq 2best be4su be4sv b1e2u 2beun b1eú b2ev b1e2x b2ēb 2b1ē2d b1ē2g bē6iaene bē6iaeue bē6iaeve bē4iam bē4ian bē4iāne bē6iāque bē4iāru bē4iārú bē6iāsne bē6iāsue bē6iāsve bē4iāue bē4iāve bē6iā́ne bē6iā́ru bē6iā́ue bē6iā́ve bē6iáene bē6iáeue bē6iáeve bē4iám bē4iæne bē6iæque bē4iæue bē4iæve bē4iǣne bē6iǣque bē4iǣue bē4iǣve bē6iǣ́ne bē6iǣ́ue bē6iǣ́ve bē4iǽne bē6iǽque bē4iǽue bē4iǽve bē6iīsne bē6iīsue bē6iīsve b2ēm b2ēn bē3ne bē2s bē4sa bēs3tĭ b2ēu b2ēv 2b3ḗ2d bḗ2g bḗ3l2 b2ḗm bḗ2s b3ḗse b3ḗsĕ b3ḗsī b3ḗss b3ḗst b2ḗu b2ḗv 3bĕ. 3bĕa bĕ2ă 3bĕæ 3bĕǣ 3bĕc bĕcī́3 b1ĕd2 bĕ3da bĕ2dā bĕ4dă bĕ2dē bĕ2dĕ bĕ2dī bĕ2d4ĭ bĕ2dō bĕ2dŏ bĕ2dŭ 3bĕē 3bĕĕ 3bĕī 3bĕl b2ĕm 3bĕ2q bĕ3r2a bĕ3r2æ bĕ3r2ǣ bĕ3rē bĕ3r4ĕ bĕ3rī bĕ3rŏ b3ĕrŭn b1ĕs b2ĕt 3bĕu 2bĕŭn 3bĕv 2b1ĕx bĕ́4dĭ bĕ́2q bĕ́3rĕ b1éd bé2di b1é2g bé1i bé3ie bé3iē b2él b2é1m bé4n3ia 3béra 3bérie bé4rig bé4rim bé4riti bé2ru bé2s bé4sa b3ése b3ési b3éss b3ést b1é2x 2bf b1h bi2a 3b2ia. 3b2ian 3b2iaq 3b2iau 3b2iav b2iā b4iā́n 2biă 3b4iáni 3b4iáno b2iæ b2iǣ b2iǽ b1i2c b1ie 3bieg b1iē 2biĕ b1ié 3biég 2b1i2g 5bigena 5bigenā 5bigená 5bigenæ 5bigenǣ 5bigenǽ 5bigenen 5bigeneq 5bigeneu 5bigenev 5bigenē 5bigené 5bigeni 5bigenī 5bigení 5bigeno 5bigenō 5bigenó 5bigenu 5bigenú 5bigéna 5b4igéne bi4g3n b1ii 3b4iis. 3b4iisn 3b4iisq 3b4iisu 3b4iisv b2iī 3biīs 3biī́s 2biĭ 3b4iísn 3b4iísq 3b4iísu 3b4iísv b2il b1in b3int 3b2io bio2s b2iō b2ió 2b1i2r b4i3ter bi4tio bi4tiō 4b3i4tud 4bi4tui. 4bi4tuin 4bi4tuiq 4bi4tuiu 4bi4tuiv 4bi4tuī. 4bi4tuīn 4bi4tuīq 4bi4tuīu 4bi4tuīv 6bi6tuī́n 6bi6tuī́q 6bi6tuī́u 6bi6tuī́v 4bi4tuín 4bi4tuíq 4bi4tuíu 4bi4tuív 4b3i4tuú bi4tūd bi4tūs 4bi4túd b1iu bi3u2b 2bi2ue 2bi2ué 4bi4uim 4bi4uin 4bi4uiq 4bi4uis 4bi4uit 4bi4uiue bi3uī 2bi2uí 3biuía b2ium 2biun b2ius b2iús b1iv bi2ve 2bi2vé 4bi4vim 4bi4vin 4bi4viq 4bi4vis 4bi4vit 4bi4viv bi3vī 2bi2ví 3bivía bi2x3 b1ī 2bī2b 3bī3c bī2mi bī2mĭ bī2r b3ī2to b3ī2tŏ b3ī2tó bī2u bī2v bī́2b 3bī́c bī́2m bī́2r bī́4to bī́4tŏ bī́4ui bī́4uī bī́4uĭ bī́4vi bī́4vī bī́4vĭ b2ĭb b1ĭ2c b1ĭē b1ĭĕ 3bĭĕg 3bĭĕ́g 2b1ĭ2g 5bĭgĕna 5bĭgĕnā 5bĭgĕnă 5bĭgĕná 5bĭgĕnæ 5bĭgĕnǣ 5bĭgĕnǽ 5bĭgĕnē 5bĭgĕnĕn 5bĭgĕnĕq 5bĭgĕnĕu 5bĭgĕnĕv 5bĭgĕnī 5bĭgĕnō 5bĭgĕnŭ 5bĭgĕ́nă 5bĭgĕ́nĕ b4ĭīs b1ĭĭ b2ĭl b2ĭm b1ĭn b4ĭ3tĕr bĭ4tĭb bĭ4tĭō bĭ4tūd b3ĭ4tūs 4bĭ4tŭī. 4bĭ4tŭīn 4bĭ4tŭīq 4bĭ4tŭīu 4bĭ4tŭīv 6bĭ6tŭī́n 6bĭ6tŭī́q 6bĭ6tŭī́u 6bĭ6tŭī́v 4b3ĭ4tŭŭ bĭ́4cĭ 6bĭ́6gĕnĕ 4b5ĭ́4gĕq 4b5ĭ́4gĕr 4b5ĭ́4gĕu 4b5ĭ́4gĕv 4b3ĭ́4gĭ 4b3ĭ́gn 4b3ĭ́4gŭ bĭ́4tĭb 6bĭ́6tŭī. 4b5ĭ́4tŭŭ 3bía bí2ba bí2bo bí2bu bí2ci b1í2g 4bígene 4bígeq 4bíger 4bígeu 4bígev 2bígi 2bí4g3n 2bígu b1íi b2íl 2bí2mu b3ínt 2b1í2r 2bí2to bí4tui. 5bítuis 5bítuīs 5bítuo 5bítuō 5bítut 4bí4uer 4bí4ui. 4bí4uim 4bí4uit 4bí4ver 4bí4vi. 4bí4vim 4bí4vit bí2x 2bj bl2 2blŏ b3lu 2blŭ b2ly 2b1m2 2b1n2 bne3g bne3u2 bnĕ3g bné1 bnéu2 b3ni b3nĭ bno3b2 bnŏ3b2 b3nu bn4ue b1o 3bo2a bo4am boa3q bo2á bo2æ3 bo2ǽ3 bob2ú bo2e bo2ē bo3iá bo2ii bo2ií bo2i3q bo2iu bo2iv bo2ī boī3u boī3v boī́3u boī́3v bo2í bo2l b3olet bo3lín bo3líq bo3lís bo3líu bo3lív bol4u bo2m b2o1n bo3ni bo2o bo2ō bo2ó b2ora b2orá b2ore b2oré bo2ri bo3ri. bo3rin bo3riq bo3ris bo3riv borí3t bo4rn b2oro b2oró bo4rq bo2ru bo4rv 3bo2s bo4sn bo4sq b2o4su bo4sv bo3ue bo3v b1ō2m b2ōn b1ōr bṓ3i b3ṓ2m bŏ2ă b1ŏd bŏ2ē bŏ2ī bŏī3u bŏī3v bŏī́3u bŏī́3v bŏ2l b3ŏlĕt bŏ2ō b2ŏ3rĕ bŏ3rī. bŏ3rīn bŏ3rīq bŏ3rīs bŏ3rīu bŏ3rīv bŏ5rī́n bŏ5rī́q bŏ5rī́s bŏ5rī́u bŏ5rī́v bŏ2rĭ bŏ2s bŏ4́l bŏ́4lĕā bŏ́4lĕă bŏ́4lĕō bŏ́4lĕŏ bŏ́4lŭ bó3ia bó3iæ bó4lea bó4leā bó3len bó4leo bó4leō bó3leq bó3leu bó3lev ból2u b1ó2m b2óra b2óre bó4rie bó4riē b2ós b3ósc 2b1œ2 bœ4da bœ4dă bœ̄2 bœ̄4d bœ̄́2 bœ́2 br2 bra3d4 b2rā b2rá b4rác b2ræ bræ2ă b2rǣ brǣ2ă b2rǽ b1re bre2i brē2i 2bria 2briá b2rim b1rī b2rĭd b4rĭē 2brĭĕ b2rĭm b1ro b2rot b1rŏ b4rŏt b1ru b2rus b1rŭ b2rŭs b4rŭ́s b2rús b2ry b2rý 2b1s b4s5caen b6s5ca͞en b6s5cá͞en b6s5ca͡en b6s5cá͡en b4s5cáen b4s3cæn b4s3cǣn b4s5cǣ́n b4s3cǽn b2s3ce b2s3cē b2scĕ b2s3cé b4scid bs6cidera bs6ciderá bs6cidere. bs6ciderene bs6cidereq bs6cidereu bs6ciderev bs6cideri bs6ciderí bs6cidero bs6cideró bs6cideru bs6ciderú bs6cidére bs6cidérim bs6cidérit bs6cidéru bs6cidi. bs6cidimus bs6cidimús bs6cidin bs6cidiq bs6cidis bs6cidit. bs6ciditn bs6ciditq bs6ciditue bs6ciditv bs6cidiu bs6cidiv bs6cidín bs6cidíq bs6cidíss bs6cidíst bs6cidítn bs6cidítq bs6cidítu bs6cidítv bs6cidíu bs6cidív bs4ciss b2scī bs2cĭ b4scíd bs6cídera bs6cíderi bs6cídero bs6cídimus bs4císs b4scísu bs2e bs2q bs2ta bs2tā bs2tă bs2tá b5s4tem. b5s4temn b5s4temq b5s4temu b5s4temú b5s4temv b4sten b5s6tent. b5s6tentn b5s6tentq b5s6tentue b5s6tentv bs4tern bs4tes bs4tet b5s4tēmu b5s4tēmŭ b5s4tēmú bs4tēs bs4tēt b7s6tḗmu b7s6tḗmŭ bs4tḗs bs4tḗt bs4tĕm b4stĕn b5s6tĕnt. b5s6tĕntn b5s6tĕntq b5s6tĕntu b5s6tĕntv bs4tĕrn bs4tĕt bs4tĕ́m bs6tĕ́ntn bs6tĕ́ntq bs6tĕ́ntu b6stĕ́ntŭ bs6tĕ́ntv bs6tĕ́rn bs4tĕ́t b4stémi bs4témn bs4témq bs4tému bs4témv b5s6téntn b5s6téntq b5s6téntue b5s6téntv bs4térn bs4tés bs4tét b5stit b5stĭt b5s4tĭ́t b4stín bs4tít b2sto b3s4to. b3s4ton b3s4toq b3s4tou b3s4tov bs2tō b2stŏ b5s4tón b5s4tóq b5s4tóu b5s4tóv bs4trar bs4tras bs4trat bs4trau bs4trav bs4trār bs4trās bs4trāt bs4trāu bs4trāv bs6trā́r bs6trā́s bs6trā́t bs6trā́u bs6trā́v b4stră bs4trár bs4trás bs4trát bs4tráu bs4tráv b2sue 2bt2 btes5t bte6ste btē6ste btē6stĕ b3tu btū3s bu3b2 bu4lue 2bum 4b3undā b2uni b2uní buol5ue buol5ué buol5ui buol5uī buol5uí b1ur bur5ue 3bus b4us. busa4t bu2s3ā2 bu2se b4usn bu4so bu2só bu2sp b4usq bu2su bu2sú b4usv b1ūn b1ūr bū3rĭ bū2su 2b3ū́4s b2ŭē b2ŭĕ b2ŭī b2ŭĭ 2bŭm b2ŭ2s b4ŭs. b4ŭsn b4ŭsq b4ŭsu b4ŭsv 3b2ŭ́l b2úl 2búll 6búndans 6b5úndant 4b5úndat 4b5úndem 6b5úndent 4b5úndes 4b5úndet 3bú2s bú4sa b2y b2ȳ b2ý 1c c2a cab2 ca3d2 cad4u 3caena 3caenā 3caenă 3caená 3caene 3caenē 3caenĕ 3caené 3caeno 3caenō 3caenó 3caenu 3caenŭ 3caenú cae4sp ca2ie ca2ii ca2iō 3cam ca3ni ca3ní 3cant 3car ca3rē car4uī caspe3 cas3t cas5tr 3cat. cate3i 2catē catē3i catḗ5i caté3i 3catn 3catq 3catu 3catv ca2u3a ca2u3á ca2v3a ca2vá ca2x3 5ca͞ena 5ca͞enā 5ca͞enă 5ca͞ená 5ca͞ene 5ca͞enē 5ca͞enĕ 5ca͞enō 5ca͞enu 5ca͞enŭ 5ca͞enú 5cá͞ena 5cá͞enā 5cá͞enă 5cá͞ene 5cá͞enē 5cá͞enĕ 5cá͞enō 5cá͞enu 5cá͞enŭ 5ca͡ena 5ca͡enā 5ca͡enă 5ca͡ená 5ca͡ene 5ca͡enē 5ca͡enĕ 5ca͡ené 5ca͡eno 5ca͡enō 5ca͡enó 5ca͡enu 5ca͡enŭ 5ca͡enú 5cá͡ena 5cá͡enā 5cá͡enă 5cá͡ene 5cá͡enē 5cá͡enĕ 5cá͡eno 5cá͡enō 5cá͡enu 5cá͡enŭ cā5bun cā4iae. cā6iaene cā6iaeque cā6iaeue cā6iaeve cā6ia͞e. cā6ia͞ene cā6ia͞eque cā6ia͞eue cā6ia͞eve cā6iá͞ene cā6iá͞eque cā6iá͞eue cā6iá͞eve cā6ia͡e. cā6ia͡ene cā6ia͡eque cā6ia͡eue cā6ia͡eve cā6iá͡ene cā6iá͡eque cā6iá͡eue cā6iá͡eve cā2iā cā6iáene cā6iáeque cā6iáeue cā6iáeve cā4iæ. cā4iæne cā6iæque cā4iæue cā4iæve cā4iǣ. cā4iǣne cā6iǣque cā4iǣue cā4iǣve cā6iǣ́ne cā6iǣ́que cā6iǣ́ue cā6iǣ́ve cā4iǽne cā6iǽque cā4iǽue cā4iǽve cā4iīs. cā6iīsne cā6iīsque cā6iīsue cā6iīsve cā6iī́sne cā6iī́sque cā6iī́sue cā6iī́sve cā2iu cā2iú cā3s4uī cā́5suī c2ă căd2 că2ĭ 3căm că3nĭ 3cănt 3căr că3rē că3rĕ căs3 căs5tr 3căt. 2cătē 2cătĕ 3cătn 3cătq 3cătu 3cătv 3cắm cắ5nĭ 3cắr cắ3rē cắ3rō 3cáena 3cáenā 3cáenă 3cáene 3cáenē 3cáenĕ 3cáeno 3cáenō 3cáenu 3cáenŭ cá3ni cár4ui cár4uī cá2x c2æ 3cæ. cæ3d cæ3n2 3cæna 3cænā 3cænă 3cæná 3cænæ 3cænǽ 3cæne 3cænē 3cænĕ 3cæné 3cæno 3cænō 3cænó 3cænu 3cænŭ 3cænú 3cæq cæ2s3p c2ǣ 3cǣ. cǣ3d cǣn2 3cǣna 3cǣnā 3cǣnă 3cǣná 3cǣnǣ 3cǣne 3cǣnē 3cǣnĕ 3cǣnō 3cǣnu 3cǣnŭ 3cǣnú 3cǣq cǣ2s3p 3cǣ́na 3cǣ́nā 3cǣ́nă 3cǣ́nǣ 3cǣ́ne 3cǣ́nē 3cǣ́nĕ 3cǣ́nō 3cǣ́nu 3cǣ́nŭ 3cǽna 3cǽnā 3cǽnă 3cǽnæ 3cǽne 3cǽnē 3cǽnĕ 3cǽno 3cǽnō 3cǽnu 3cǽnŭ cǽ2sp 2cc2 2c2d2 c3du c3dŭ c2e 3ce2a 3ceá 3ceæ 3ceǽ 3ceb ce3d2 ced4o 3ce2e 3ceé 3ce2i 3ceí 3cemú 4c5e4nare 4c5e4naré 6c5e6nari. 6cenarib 6c5e6narin 6c5e6nariq 6c5e6naris 6c5e6narit 6c5e6nariue 6c5e6nariv 6c5e6narín 6c5e6naríq 6c5e6narís 6c5e6naríu 6c5e6narív 4c5e4náre 6c5e6nári. 6cenárib 6c5e6náris 6c5e6nárit 4c3ennā 3cent 3ce2o 3ceó cepe3 ce3ra ce3r2æ3 ce3r2ǣ 2cerb ce3rē ce3r4i ce3rī ce3ro ce3rō cer5ue cer3uē cer3ué ce3run ce2sp ce2sq ce2su 3cet cete3 cete5r4 ceteri5u ceteri5v ce4ua. ce4uam ce4uan ce4uaq ce4uau ce4uā. ce4uān ce4uāq ce4uāu ce4uā́ ce2uă ce2uá ce4uī́ ce2uí 3ceum ce2un 3ceus 3ceú 3cē. cē2i 4c5ē4nāre 4c5ē4nārē 4c5ē4nārĕ 4c5ē4nāré 6cēnārib 6c5ē6nāris 6c5ē6nārit 4c5ē4nārī 6cēnārĭb 6c5ē6nārĭs 6c5ē6nārĭt 6c5ē6nārĭ́s 6c5ē6nārís 6c5ē6nā́re 6c5ē6nā́rē 6c5ē6nā́rĕ 6cēnā́rib 6c5ē6nā́ris 6c5ē6nā́rit 6c5ē6nā́rī 6cēnā́rĭb 6c5ē6nā́rĭs 6c5ē6nā́rĭt cē3ne cēpe3 cēper4 cēpĕ5r 3cēq cēte3 3cēu 3cēv c2ĕ cĕ2ă cĕ3d cĕ2ĭ 4c3ĕnnā cĕ3r2a cĕ3r2æ cĕ3r2ǣ 2cĕrb cĕ3rē cĕ3r4ĕ cĕ3rī cĕ3rŏ cĕ3rŭ cĕ2s cĕ́3rĕ 3cĕ́u 3cĕ́v c2é 3céa 3céb céd2 3cée cé2i 3céne 3cént 3céq 2cérb 3cét 3céu cé4ua. cé4uan cé4uā. cé3ue 3cév 2ch. 5chane 3chă. 3chăm 3chănĕ 3chăq 3chău 3chăv 3chắm 4cháng che1 che2i che2s chē2i chĕ1 ch4lĭ 2chm 2chn 2cht c2i ci2a ci4an ci3b 3cida 3cidá cide4i cidē4i 3cido 3cidó 3cid4u 3cidú cig3 ci4gn ci2i cin2ā 2cind cin4e cin4é 3cisa 3cisá 3cisæ 3cisǽ ci4s3c cis5ci 3cise 3cis2i 3cisí 3ciso 3cisó 4cissa 4cissā 4cissá 4cissæ 4cissǣ 4cissǽ 4cissī 4cisso 4cissō 4cissó 4cissu 4cissū 4cissú ci4s3t cis5ta cis5tā cis5té 3cisú 3citā cī3s4uī c2ĭ cĭ3b cĭn2a cĭn2ā cĭn2æ 2cĭnd cĭnĭ5tĕ cĭnĭ5tō cĭ4st cĭs5tā cĭs5tă 3cĭtā 3cĭtă 4cĭ́nd 4cĭ́ssa 4cĭ́ssā 4cĭ́ssă 4cĭ́ssæ 4cĭ́ssǣ 4cĭ́ssī 4cĭ́ssō 4cĭ́ssū 4cĭ́ssŭ cí3b cí3d cíg3 cí4gn 2cínd 4císsa 4císsā 4císsæ 4císsǣ 4císsī 4císso 4císsō 4císsu 4císsū cís3t cí3tuī cí3tur cí3tuu 2cj c2l2 c4lei c4leī c4leí c4leo c4leō c4leó c4leu c4leú c4le͞ c4le͡ c3lĕg c3léc c3léx 2c2m2 2c1n2 cn4ē3m 3co. co2a3q co3ā coǣ4u coǣ4v c2o3b2 cobo3l coco5m coc5te co3ea co3eā co3eá co2ia co3it coī2 coī4n coī́4 coí2t co3l4u com1 co4me4d co4me4s co2mē comē4d comē4s comḗ4d comḗ4s co4mé4d comé4s co4mit comí4t co4míte 3con1 4conc co4nia co4niá co4niē co4niú cons2 co3ō co2pī 3coq 3cor co3re co3rī cot4e3 co5ter 3cou 3cov 2cōnc cōn3s2 cō3r cŏ3ā cŏǣ4u cŏǣ4v c2ŏb2 cŏcŏ3m4 cŏc5tĕ cŏī2 cŏī4q cŏī́4 cŏĭ2 cŏ3ĭt cŏĭ́2 cŏ2m1 cŏmē4d cŏmē4s cŏmḗ4d cŏmḗ4s cŏmĕ2 cŏm3ĕd cŏmĭ́4 cŏ3ō cŏ3pĕ cŏ2pī 3cŏr cŏ3rī cŏ4rs cŏ3t4ĕ cŏtĕ3r 3cŏ́ cŏ́3g2 cŏ́3ī cŏ́4m3ē cŏ́3rĭ cób2 cóbo3 có3ea có3eā có3em cóg2 có3ie có1ī có3l2u có4mes có2m3ē cómi4ta cóm5ita. cóm5i4tā cómi6te. cóm5itē cómi4ti cóm5iti. cóm5i4tī cómi4to cóm5i4tō cóm5i6tum 4cónc có4nia có4niu cón3s có2nu cót4e3 2cq cqui4 cquid3 cquí2 cquíd3 c2r2 3cra 3cră cræ2ă crǣ2ă cre3d4 cre5di cred6it cre5mi cre5mo cre2o cre3r cres3 crēs3 2crĕ. 2crĕq 2crĕu 2crĕv 2cri3n 2crip cri6spé 2crī 3crīm 3crī́m 2crĭă 2crĭb crĭ6spĕ 2crĭŭ 3crím cros2 3crō crŏs2 3crŭ 2ct ct3enn cte5re ct3ĕnn ctĕ3rĕ ct3énn c3tr cu3b2 cud2 cuda3 2c1uĕ cu3ia cu3iá cu3iæ cu3iǽ cu3ii cu3ií cu3io cu3ió cu3ium cu3ius cu3iú cule4i 4culix 4culíx 2culp 3cu2m1 cuma2 cu3men cum3i2 cumī́4 cumí2 cumín3 2c3unc 2c3unx c2uo cupe3 cuper4a cuper4ē cu3ré 3cus cus4á cu2s3p c2ūl c1ūn 3cūq cū3rē cū3rĕ cū3ré cū3rĭ 3cūs cū2su 3cūu 3cūv c2ŭ 2cŭăr 2cŭăt cŭ3b2 2cŭēs 2cŭĕt 2c3ŭ2lĭ 3cŭ2m cŭm3ē cŭmī́4 cŭm3ĭ cŭmĭ́4 cŭmĭ́n5 2cŭŏ cŭpĕ5rĕ 3cŭ2s 2cŭŭn cŭ́3b cŭ́m3ĭ 3cŭ́s cúb2 cú3ia cú3io cú3ium cú3ius 2cúlp 3cúm cú2ma cú2m3i2 2c3únc 2c3únx 3cús 2cv 2c2x2 cy4gn cype3 cý4gn 1d d2ab2 d1ac 2d1ad da2dó dad2u dad2ū dad2ú 3dae d2aeu d2aev 2d1a2g da4g3n d2al da4mab da4mand da4mane da4mans da6mant. d6amante da6mantn da6manto da6mantó da6mantq da6mantu da6mantú da6mantv da4maq da4mat da4mau da4mav da2má 2d3a2me 2d3a2mē da2mé d2a3mi 3damn 2da2mo 2d3a2mō da2mó 2danc da2ni da3ni. da3nib da3nin da3niq da3nis da3niu da3niú da3niv da2p d2a3re da3ri 3darii 3darií 3dario 3darió 3dariu 3dariú da3rí d2aru d2as3 da2x3 3dá͡e 2d1ā2g d2ān d2ār 2d3ā́4g d2ă3b2 d1ăc d1ăd dă3d2ū d2ăg 2d3ă2mē 2d3ă2mĕ 3dămn 2d3ă2mō 2d3ă2mŏ 2dănc dă2p dă3ră dăs3 d2ăt d2ắ d3ắmb 5dắmnā 5dắmnă 5dắmnē 5dắmnĕm 5dắmnĕn 5dắmnĕr 5dắmnĕt 5dắmnō 5dắmnŏ d3ắnĭ dắ3rē d3ắrg d2á 3dáe dá2g dá4gn 2d3ámb 2dámp 2dámt 4dántr dá2p 2d3árg dás3 2d3áus dá2x dæ2a dæ2ă dæ2á dæ2i d2æu dæ3ue dæ3uĕ dæ2ŭ d2æ3v dǣ2a dǣ2ă d2ǣu dǣ3ue dǣ3uĕ dǣ2ŭ d2ǣ3v d2ǣ́u d2ǣ́v d2ǽu d2ǽv 2dc2 2dd2 dde2s ddē2s d3do dd4or d2eb ded2 de2dā de2dē ded4i ded4o de2dō 3dee de3es de3é2r de3és d2ef 2d1eg de3go 3dei de2ia de2iá de4ien de2ii de2ií de4io. de4ioq de4ior de4iou de4iov de4ión de4ióq de4iór de4ióu de4ióv de2it de4ium 3deī 3deí de2ma de2má de4me. de4meb de4mem de4mend de4mene de4mens de6ment. de6mente. de6mentem de6menten de6menteq de6mentes de6menteu de6mentev de6mentém de6mentés de6menti. de6mentia de6mentib de6mentin de6mentiq de6mentis. de6mentisn de6mentisq de6mentisu de6mentisv de6mentiue de6mentium de6mentiúm de6mentiv de6mentía de6mentín de6mentíq de6mentísn de6mentísq de6mentísu de6mentísv de6mentíu de6mentív de6mentn de6mentq de6mentu de6mentú de6mentv de4meq de4mer de4mes de4meu de4mev de2mé d3e4mi. d3e4mim de4mine d3e4miq d3e4mis d3e4mit d3e4miu d3e4miv d3e2mí d2emn de4mo. de4mone de4moq de4mor. de4morn de4morq de4moru de4morv de4mou de4mov de4móne de4móq de4mórn de4mórq de4móru de4mórv de4móu de4móv de4munt de4múnt d2en 3deo depe4 deper5 deperi4 deper7iu deperí4 depé2 depér3 depéri4 2d3ept de1r d2e3r2e dere5x4 de3ré der4i deri5c de3rī der4í de3ríc de1s de4sca de4scá de4sci de4scí de4so de2só 2d3ess des2t 4dest. de4s3ta de4s5tā de4s3tá de4s5te de4s3tē de4s3té desti5t4 de4s3tī destí5t4 4destn de4s3to de4s3tō de4s3tó 4destq de4s3tú 4destv de4uĕ de2ul 2deun deu4ra deu4rá deu4re deu4ré deu4ri. deu4rin deu4riq deu4ris deu4rit deu4riu deu4riv deu4rín deu4ríq deu4rís deu4rít deu4ríu deu4rív de5u4ro. de5u4ron de5u4roq de5u4ror de5u4rou de5u4rov deu4ró de3u4s deu4tan deu4tat deu4tát de5u4tet de3uti deu4ti. deu4tin deu4tiq deu4tiu deu4tiv deu4tín deu4tíq deu4tíu deu4tív de3u4to de3u4tó de3utu de3utú deū4s deū́4 deú2 de3únc de3úr deú4s de3úsa de3úsæ de3úsi d2ev de2x dē1 d2ēb 2d1ēg dē2ia dē2iā dē2iá dē2iæ dē2iǣ dē2iǽ dē4ien dē2iī dē2iō dē2ma dē2mā dē2mă dē2má dē4me. dē4mene dē6mente. dē6mentem dē6menten dē6menteq dē6menteu dē6mentev dē6mentē dē6mentém dē6mentib dē6mentis. dē6mentisn dē6mentisq dē6mentisu dē6mentisv dē6mentium dē6mentiúm dē6mentī dē6mentísn dē6mentísq dē6mentísu dē6mentísv dē6mentu dē6mentú dē4meq dē4mer dē4met dē4meu dē4mev dē2mē dē4mĕ. dē4mĕnĕ dē6mĕntē dē6mĕntĕ. dē6mĕntĕm dē6mĕntĕn dē6mĕntĕq dē6mĕntĕu dē6mĕntĕv dē6mĕntĕ́m dē6mĕntī dē6mĕntĭb dē6mĕntĭs. dē6mĕntĭsn dē6mĕntĭsq dē6mĕntĭsu dē6mĕntĭsv dē6mĕntĭŭm dē6mĕntĭŭ́m dē6mĕntĭ́sn dē6mĕntĭ́sq dē6mĕntĭ́su dē6mĕntĭ́sv dē6mĕntŭ dē4mĕq dē4mĕr dē4mĕt dē4mĕu dē4mĕv dē4mĕ́ d3ē2mé dē4mim dē4mis d3ē4mit d3ē2mī dē4mĭm dē4mĭs d3ē4mĭt d3ē4mĭ́ dē2mí dē4mō. dē4mōne dē4mōnĕ dē4mōq dē4mōu dē4mōv dē6mṓne dē6mṓnĕ dē4mṓq dē4mṓu dē4mṓv dēm4ū d2ēn dē3ne dēpe2 dēper5 dēperi4 dēperī4 dēperī́6 dēpĕ2 dēpĕr5 dēpĕrī4 dēpĕrī́6 dēpĕrĭ4 dēpĕ́4 dēpĕ́r5 dēpĕ́rĭ6 dēpé2 dēpér3 dēpéri4 d2ēr dē2sā d2ēu d2ēv 2d3ḗg dḗ3ic dḗ3ĭc dḗ4ma dḗ4mā dḗ4mă d3ḗ4me dḗ4mē d3ḗ4mĕ dḗ4mim dḗ4mis dḗ4mit d3ḗ4mī dḗ4mĭm dḗ4mĭs dḗ4mĭt dḗ4mō dḗ4se dḗ4sĕ dḗ3sp dḗ5str d2ḗu d2ḗv dĕ5cĭm dĕd2 dĕ2dā dĕ4dă dĕ2dē dĕd4ĭ dĕ2dō dĕ2dŏ dĕ2dŭ 3dĕĕ dĕ3ĕ́ d2ĕf 3dĕ2ī dĕ2ĭ dĕ3ĭn dĕ3ĭ́n dĕ2ō 2d1ĕp dĕ3r4ĕ dĕ3rī dĕ3rŏ 4d3ĕrŭn dĕs5tĕ d2ĕt dĕū́2 2dĕŭ 3dĕŭm 3dĕŭs d2ĕ́f d3ĕ́mp 2d3ĕ́p dĕ́2q dĕ́3rĕ 3dée dé3es d2éf 2d1ég dé3in dé2ma 2d3é2me d3é4mi. d3é4mim dé4mis d3é4mit dé4mo. dé4mor. 2démp 2d1ép d2ér d3érr dé4sa dé4sn dé3sp dé4sq 2d3éss 4déstn 4déstq 4déstv d2ésu dé4sv dé2x 2df 2dg2 2d1h di2a d2ia. d2iab d2iam d2ian d2iaq d2iar d2ias d2iat d2iau d2iav d2iā 2diă d2iá 2d3i2ba 2d3i2bá di2be di2bé 4d3i4bim 4d3i4bis 4d3i4bit di4bím 4d3i4bís 4d3i4bít 2d3i2bo 2d3i2bó d2ibu 4d3i4bun d2ibú 4d3i4bún di3cem di3cen di3ces d2icé di3cém di3cén di3cés di3cib d2i3cu di4c3ue 4d3i4cul d2i3cú 4d3i4cúl d2id d2ieb d2iem d2ien d2ies d2iet d2iēb d2iēm d2iēs d2iēt d2iéb d2iém d2ién d2iés d2iét 2d3i2ga 2d3i2gā 2d3i2gá 2digæ 2digǣ 2d3i2gǽ 4d3i4ge. 4d3i4gea 4d3i4geā 4d3i4geá 4d3i4geb 4d3i4gem 4d5i4gend 4d5i4gene 4d5i4gens 4d5i4gent 4d3i4geo 4d3i4geō 4d3i4geó 4d3i4geq 4d3iger 4d5i4ges. 4d5i4gesn 4d5i4gesq 4d5i4gesu 4d5i4gesv 4d3i4get 4d3i4geu 4d3i4gev 2d3i2gē di2gé 4d3igéb 4d3igém 4d3igén 5digéna 4d3igéq 4d3igér 4d5igésn 4d5igésq 4d5igésu 4d5igésv 4d3igét 4d3igéu 4d3igév di2gi 2d3i2gī di2gí dig5no. di5gnore di5gnori di5gnorí dig5norum dig5norúm di6g5nos. di6g5nosn di6g5nosq di6g5nosu di6g5nosv di6g5noue. di6g5nove. di5g6nóre 2d3i2go 2d3i2gō 2d3i2gó 2d3i2gu 2d3i2gú d2iīs 2dim. 2d3i2ma 2d3i2mā 2d3i2má 2di2me 2d3i2mē di2mé 4diméb 4dimém 4dimér 4dimés 4dimét 4d3i4mi. 4d3i4mia 4d3i4miā 4d3i4miá 4d3imic 4dimie 4dimiē 4dimié 4dimii 4d3i4miī 4d3i4mií 4d3i4mim di4mine 4d3i4mio 4d3i4miō 4d3i4mió 4d3i4miq 4dimir 4d3imis 4d3imit 4d3i4miu 4d3i4miú 4d3i4miv 2d3i2mī 2dimí di4míe di4mím di4mín di4míq di4míu di4mív 2dimn 2d3i2mo 2d3i2mō 2d3i2mó 2dimq 4d3i4mun di3mú 4d3i4mún 2dimv din2ā din2d d4ine d4inē d4iné d4ini d4inī d4iní di2nu d4inú d2io. d2ioq d2ior d2iou d2iov d2iō 2diŏ d2ió d1ip di2pi di2pī d2ips d2iq dir5emé dir5e4mí di2rē2 dirḗ4 dir5éme diri4m di5s6cende di5s6cens dispe6r5 disperi6 disperī6 disperī́6 disperí6 dispé4r5 di3spi di3spí di5s4ta. di5s4tam di5s4taq di5s4tar di5s4tas di5s4tat di3s4tā di3stá dis4tám dis4tán dis4táq dis4tár dis4tás dis4tát di5s4tem di5s6tent. di5s6tentn di5s6tentq di5s6tentue di5s6tentv di5s6tern di5s4tes di5s4tet di3s4tē di5s4tém di5s6téntn di5s6téntq di5s6téntue di5s6téntv di5s6térn di5s4tés di5s4tét di5stím di5s4to. di5s4ton di5s4toq di5s4tou di5s4tov di3s4tō di5s4tón di5s4tóq di5s4tóu di5s4tóv di5s6trar di5s6tras di5s6trat di5s6trau di5s6trav di5s6trār di5s6trās di5s6trāt di5s6trāu di5s6trāv di5s6trā́r di5s6trā́s di5s6trā́t di5s6trā́u di5s6trā́v di5s6trár di5s6trás di5s6trát di5s6tráu di5s6tráv di5s4trī d2ite d2ité di4tiā 4d3i4tib d4itn d4itq 4d3i4tui 4d3i4tuī 4d3i4tuí di4tuum 4d3i4tuú di4tūs d4itv 4d3i4uia 4diuiā 4diuiá 4diuiæ 4diuiǣ 4diuiǽ 4d3i4uii 4d3i4uiī 4d3i4uií 4d3i4uio 4d3i4uiō 4d3i4uió 2di2uī 4d3i4uía d4ius 2diŭ d2iv d3i4via d3i4vii d3i4viī d3i4vií d3i4vio d3i4viō d3i4vió 2di2vī d3i4vía di2xu 2d1ī2b d2īne d2īnĕ dīo4n dīó2 d2īq d2īs. dīs2c d2īsn 2dīso 2dīsŏ 2dīsó d2īsq d2īsu d2īsv d2īu d2īv dī2xu 2d3ī́2b d2ī́n d2ī́q d2ī́u d2ī́v d2ĭ3b dĭ4cŭl d2ĭē d2ĭĕn d2ĭĕt d2ĭĕ́ dĭ2g 2dĭga 2d3ĭgā 2d3ĭgă 2dĭgá 2dĭgæ 2dĭgǣ 2dĭgǽ 2d3ĭgē 2dĭgĕ d3ĭgĕ. d3ĭgĕā d3ĭgĕă d3ĭgĕm 5dĭgĕna 5dĭgĕnā 5dĭgĕnă 5dĭgĕná 5dĭgĕnæ 5dĭgĕnǣ 5dĭgĕnǽ d5ĭgĕnd d5ĭgĕnĕ 5dĭgĕnī d5ĭgĕnt d3ĭgĕō d3ĭgĕq d3ĭgĕt d3ĭgĕu d3ĭgĕv d3ĭgĕ́ 5dĭgĕ́nă 2d3ĭgī 2d3ĭgō 2d3ĭgŭ 2d3ĭ2mā 2d3ĭ2mă 2d3ĭ2mē 2d3ĭ2mĕ 2d3ĭ2mī d3ĭ4mĭā d3ĭ4mĭă d3ĭ4mĭī d3ĭ4mĭm d3ĭ4mĭō d3ĭ4mĭŏ d3ĭ4mĭs d3ĭ4mĭt d3ĭ4mĭŭ d3ĭ4mĭ́ 2d3ĭ2mō 2d3ĭ2mŏ dĭ3mŭ 4d3ĭ4mŭn dĭn2a dĭn2ā dĭn2æ dĭn2d d4ĭnē d4ĭn2ĕ d4ĭnī d4ĭnĭ d4ĭnŭ d1ĭp dĭ2pī dĭ2rē2 dĭrḗ4 dĭr3ĕ dĭ2sĭ dĭspĕ4r5 dĭspĕrī6 dĭspĕrī́6 dĭs6pĕ́rn dĭ3s4pĭ dĭ3s4tā dĭs4tăt dĭ3s4tē dĭ5s6tĕnt. dĭ5s6tĕntn dĭ5s6tĕntq dĭ5s6tĕntu dĭ5s6tĕntv dĭ5s6tĕrn dĭ5s4tĕt dĭ5s6tĕ́ntn dĭ5s6tĕ́ntq dĭ5s6tĕ́ntu dĭ5s6tĕ́ntv dĭ5s6tĕ́rn dĭ5s6tĕ́t dĭ3s4tō dĭ5s6trār dĭ5s6trās dĭ5s6trāt dĭ5s6trāu dĭ5s6trāv dĭ5s6trā́r dĭ5s6trā́s dĭ5s6trā́t dĭ5s6trā́u dĭ5s6trā́v dĭ5s4trī d2ĭtĕ dĭ4tĭā d3ĭ4tĭb 4d3ĭ4tūs 4d3ĭ4tŭī 4d3ĭ4tŭŭ 2d1ĭ2u 2d1ĭ2v 4d3ĭ́4cŭ dĭ́2g 4d3ĭ́4gă 4d5ĭ́gĕā 4d5ĭ́gĕă 6d5ĭ́gĕnĕ 4d5ĭ́gĕō 4d5ĭ́gĕq 4d5ĭ́gĕt 4d5ĭ́gĕu 4d5ĭ́gĕv 4d3ĭ́gŭ 4d3ĭ́4mĕ 4d5ĭ́4mĭā 4d5ĭ́4mĭă 4d5ĭ́mĭē 4d5ĭ́mĭĕ 4d5ĭ́4mĭī 4dĭ́mĭĭ 4d5ĭ́4mĭm 4d5ĭ́4mĭō 4d5ĭ́4mĭŏ 4d5ĭ́4mĭt 4d5ĭ́mĭŭ 4dĭ́nt 4d3ĭ́nu 4d3ĭ́nv d2ĭ́p dĭ́2r3 dĭ́5spĭ dĭ́5s4tā dĭ́5s4tă dĭ́5s4tē dĭ́5s4tĕ dĭ́5s4tō dĭ́4tĭb 4d3ĭ́4tŭ 2d3ĭ́2u 2d3ĭ́2v d1íb 2dí2ba dí2be 4dí4bim 4dí4bis 4dí4bit 2dí2bo 2dí2bu dí4ciā dí4cie dí4ciē d2ícu dí4c3ue 4d3í4cul 2d3í2ga 4d3í4gea 4d3í4geā 4d5í4gene 4d3í4geo 4d3í4geō 4d3í4geq 4d3í4get 4d3í4geu 4d3í4gev dí4gia dí4gib dí4giu dí4g3n 2d3í2gu 2d3í2me 4d3í4mia 4d3í4miā 4d3í4mie 4d3í4miē 4d3í4mii 4d3í4miī 4d3í4mim 4d3í4mio 4d3í4miō 4d3í4mit 4d3í4miu 2dímn 2dímq 2dímv d2ín d3íns 2dínt d3ínte dí4nue 2d3ínv d2íq dí4r3i4m dí3spi dí3s4ta dí3s4tā dí3s4te dí3s4tē dí3s4to dí3s4tō 4d3í4tib 4d3í4tui 4d3ítuī dí3tur 4d3ítuu d2íu 4d3í4uia 4díuiā 4díuiæ 4díuiǣ 4d3í4uii 4d3í4uiī d2ív 4d3í4via 4díviā 4díviæ 4díviǣ 4d3í4vii 4d3í4viī dí2xu 2dj 2dl2 d3lu 2d1m 2d1n2 d3ne d3nĕ dnéx2 dob3r dob2ū d2oc doco2 doc5te do1e2 4d3olem 4d5oles. 4d5olesn 4d5olesq 4d5olesu 4d5olesv 4d5olēs. 4d5olēsn 4d5olēsq 4d5olēsu 4d5olēsv 6d5olḗsn 6d5olḗsq 6d5olḗsu 6d5olḗsv 4d3olém 4d5olésn 4d5olésq 4d5olésu 4d5olésv do4lib dol4u domi3 d2on 3don. do3ne do3ni d1op do2pé 2d3ord d4ori. d4orin d4oriq do4rit d6oriue. d6orive. d4orī. d4orīn d4orīq d6orīue. d6orīve. d4orī́n d4orī́q d6orī́ue. d6orī́ve. d4orín d4oríq d6oríue. d6oríve. 2d3o4rn do4rq do4rv d2os dos2p do3u do3v 3dōc d2ōn 3dōn. d2ōs 4dṓrd 4dṓrn dŏb2ū d2ŏc dŏc5tĕ 4d5ŏlēs. 4d5ŏlēsn 4d5ŏlēsq 4d5ŏlēsu 4d5ŏlēsv 6d5ŏlḗsn 6d5ŏlḗsq 6d5ŏlḗsu 6d5ŏlḗsv 4d3ŏ4lĕm 4d5ŏ4lĕ́m dŏ4lĭb dŏ4lĭs dŏ4lĭŭ dŏ3mĭ3 d2ŏn d1ŏp dŏ2r dŏ3ră d2ŏ3rĕ d4ŏrī. d4ŏrīn d4ŏrīq d3ŏrīs d6ŏrīuĕ. d6ŏrīvĕ. d4ŏrī́n d4ŏrī́q d6ŏrī́uĕ. d6ŏrī́vĕ. d3ŏrĭt dŏs2p 4d3ŏ́lĭ dŏ́4lĭb dŏ́4lĭŭ d4ŏ́rĕ dŏ́4rĭŭ dób3 d2óc dól2 2d3óli dó2pe dó1r 2d3órd dó4riā dó4rie dó4riē dó4rio dó4riō dó4riu d2órn 4dórna 4dórnem 4dórnen 4dórner 4dórnes 4dórnet 4dórno d2ós dós2p dó2xu 2dp 2dq d3qu dqui4 dquid3 dquí2 dquíd3 dr2 d2ra d2rā d2ră d2rá d2ræ d2rǣ d2rǽ d3rex2 dre5xi dri3e dri3é dri5re5 d2rĭă drĭ3ĕ d2rĭī d2rĭō d2rĭŭ d2rō d3rŏg d2ró d2ru d2rŭ dr4ŭn dr4ŭ́ d2rú 2d1s2 d2ua d2uá dub2 4d3u4cul 4d3u4cúl 2d3ueb 2d3uem 2d3uen 2d3ues 2d3uet d1uē 2d3uĕ d1ué 2d3uím d4ulæ d4ulǽ d4uli d4ulí d4ulu d4ulú du2m 2d3ume 2d3umé du2n d3unc d3und du3ni du3ní d2uo dupe3 duper4 du3r2u d4us. d4usn du3s4tr d4usu d4usv d1ut 2du2ta 2du2tá 2du2tæ 2du2tǽ 2du2te du2té 4du4ti. 4du4tib 4dutil 4du4tin 4du4tiq 4du4tis 4du4tiu 4du4tiv 2du2tí 2du2to 2du2tó 2du2tu 2du2tú 2d1u2u 2d1u2v d2ux du2xu 4d3ū4cul 4d3ū4cŭl 4d5ū4cŭ́l 4d3ū4cúl 2d1ū2m dū2n dūn4e dūn4ĕ dū3nī 2d1ū2t 3dūtia 3dūtiā 3dūtiá 3dūtiæ 3dūtiǣ 3dūtiǽ 3dūtiī 3dūtĭa 3dūtĭā 3dūtĭá 3dūtĭæ 3dūtĭǣ 3dūtĭǽ 3dūtĭī 4d5ū́4cul 4d5ū́4cŭl 2d3ū́2t 5dū́tia 5dū́tiā 5dū́tiæ 5dū́tiǣ 5dū́tiī 5dū́tĭa 5dū́tĭā 5dū́tĭæ 5dū́tĭǣ dū́4tĭb 5dū́tĭī d2ŭă dŭb2 d1ŭē 2d3ŭĕn 2d3ŭĕt 2d3ŭĕ́ 3dŭī 3dŭĭ 4dŭĭs. d4ŭnt dŭpĕ3r dŭ3str 2d1ŭ2u 2d1ŭ2v d2ŭx dŭ́3b d2ŭ́m d3ŭ́nc d3ŭ́nd dŭ́5str 2dŭ́u 2dŭ́v dúb2 4d3ú4cul dú2lo d2úm d3úmb dú2na 2d3únc 2d3únd dú3s4tr 2d1ú2t 3dútia 3dútiæ 3dútii 2d1ú2u 2d1ú2v dú2xu 2dv d3ve d3vĕ 2d2x2 d2y d2ý 2ea. eab2 e2ace ea2cu ea2cú ead2 2e2ae e2ami e2an 2eane 2e2a3q e2ar 2earú e2as ea3tr 2eau 2eav 2ea͞ e2a͞e e2á͞ e3á͞u 2ea͡ e2a͡e e2á͡ e3á͡u e2ā 2eā. 2eān 2eāq 2eāru 2eārú 2eāu 2eāv 2eā́n 2eā́q 2eā́u 2eā́v e1ă e2ăcĕ eă2cŭ e2ăn e2ăq e2ău e2ăv e2ắm e3ắmb e2á eá2cu 2eáe e3ál e3ámb 2eáne eá2nu 2eáq 2eáu e3áud 2eáv 2e2æ eæ2a eæ2á eæ2i 2e2ǣ eǣ2a 2e2ǽ eb2 eba3q ebæ3 ebe3d ebe3ia ebe3iá ebe3iæ ebe3iǽ ebe3ie ebe3ié ebe3io ebe3ió ebe3iú ebé3io e3bi ebī3u ebī3v eb4ri ebs3 e2bul e3bŭ 2ec e4c3enn ecen3s ecēn3s e4c3énn e5cént ec3le ec3lē ec3o2p ec3ue. ecu3ma ecu3mā ecu3má ecu3me ecu3m4i ecumi5q ecu3m4ī ecumī́5n ecumī́5q ecumī́5u ecumī́5v ecu3m4í ecumí5q ecumí5u ecumí5v 2ed. ed1a e3da. ed2ae ed5ama e3dane e3d2a3q e5dari. e5darin e5dariq e5dariv e5darín e5daríq e5daríu e5darív e5darum e3darú e3daue e3dav e3d4a͡e ed4á͡e ed3ā́c e2d3ác e4d3áni ede2g e2dem ed3eme ed3emé e3deō e3deó ede2s3 ede6ste e3deú edē2g ed3ēmē edē2s edḗ4g edĕ3r edé2g e2diǣ e2d3i2g ed3ime ed3imé edi4mis edi4mit ed3i4mí e2d3in e2di2p edi4s3 edis5c edi6sce edis7cen ed4it. ed5i4ta͞ e4d3i4tǣ edi4tiō e4d3i4tī ed5i4tōr ed5i4tōs e4d3i4tū edi5ue. edi5ve. edī5ue. edī5ve. e2d3í2g e4d3ínu ed5í4tiō e2d3o2l e2do2p e2dōr e2d3ó2l e2d3óp ed2r ed3ue. e2d3ul e2dun edu3no edu3nó ed2ū edū3n e3d2ŭ ed4ŭĕ ed3úlc 2e1e2 e2el e2em ee3mi ee3mu ee3mú e2en e2e3q ee4ra ee3re ee4ro ee4rō ee3ti ee3tí e2ev eex3 2e2ē eēn3 e1ĕ2 e2ĕō e2ĕ3q eĕ4rō e2ĕŭ eĕ́2 2eé e2éq eé2ru 2efe 2efé 2efi 2efí 2e3g2a e3g2æ3 e3ge. e3gen e3geq e3geu e3gev 2egm eg3no e2go e3go. e3gon e3goq e3gor e3gou e3gov e2gō e3gō. e3gōn e3gōq e3gōu e3gōv e3gṓn e3gṓq e3gṓu e3gṓv e2gót egu6ste e1h 2e1i ei2a e2ia͡ e3iát e2iæ e2iǣ e2iǽ ei2b e3i2ce ei2cé ei2ci ei2cí ei2cu ei2cú e2id ei2i ei2m ei2n e2i3na e2i3ni e2i3nī e2i3ní e2i3nú ei2o eio2s e2i3q ei2r e2is e3ist ei2t ei3ta ei3tā ei3tá eite3 e4i3ue e2iué e2iui e2iuí e3iur e2i3v 2eī e1ī2b e1ī2m e2īq e1ī2r e2īs e3īss e3īst e1ī2t e2īu e2īv e2ī́ e3ī́2b e3ī́2m e3ī́2r e3ī́2t e1ĭ2 eĭ́2 2eí e1í2b e1í2c e2íe e3íer e1íi e1í2m e3ínc e3índ e2íq e1í2r e3íst eí2te eí2to e2íu e2ív e3la. e3lae e3lam e3lan e3laq e3lar e3las e3lau e3lav e3la͡ e3láe e3lám e3lán e3láq e3lár e3lás e3láu e3láv 2e3læ 2e3lǽ 4e3le. e2leg ele2i 4e3len 4e3leq 4e3les elē2 3e2léc e3lis eli6sta e3lís 2ell e2l3ue el3uē el3ué el4ui e2l3u2t e1m 2em. em2am e4mani e4maní e2m3a2x e4m3áni e2m3áx e5mem. e5memn e5memq e5memv em2eq eme4s e4m3esa e4m3esá e4mesæ e4mesǽ e4m3ese e4m3esé e4m3esi e4m3esí 4emete 4emeté 2e3mēt e5mémn e5mémq e5mémv emé4s e4mésa e4m3ése e4m3ési em2i emi3ac emi3án emi3es 4emini 4eminí e5mité emi3u 2emne 1emp em3pn 2emq 1emt 2emu em2uē em2ué e2muī e5mul. em3ulc 2emú e2m3úl 2emv en2a en4an ena3ni ena3ní 5e4narib en2ā ená3ni 5e4nárib 2en3d2 end4u end4ú 2ene en3eat en3eát en2e2x e3nĕ1 eni3tu ení5tuī en2o eno3b2 en2ŏ en2sc en3s2i ensi5ti en4sn en4sq ens3t ens4ué en4sv 2ent ente5re e1n2u e1oc eo2g3n e2on eo3ni eo3p2 eo5rā́ eo3rá e3ors 2eorú 2e2os e2ōn 2eōr 2e2ōs 2eṓr 2eṓs e2ŏ e2ó eó2g eó2nu eó3p2 e3órs 2eós eper4ē eperi4b eperi4r eper4ī eperí4r epĕ3r epĕ5rĭ e3pé epére5r 3e4pisc epi5s4tr 3e4písc epo4ter epote6ri epote6rí epo4tes epŏ4tĕs 2eps ep4se. ep4sen ep4seq ep4seu ep4sev ep2su 4e3que 2er. 2e3ra. e3raba e3rabá e3rabe e3rabé e5rabil e5rabim e5rabis e5rabit e3rabí e3rabo e3rabó e5rabunt e5rabúnt era2c er3act era2d3 eradi4 eradí4 e3rae. e3raea e3raeā e3raeá e3raei e3raeī e3raeí e3raen er3aes e3raeu e3raev era2g er5ama e3rame e3ramé e5ramin e5ramur e5ramúr e3rand 4e5rane e3rané e3rans e5rante e5rantē e5ranté e5ranto e5rantō e5rantó e5rantú era2p 2e3raq e3rar. e5rare. e5rareq e5rareu e5rarev e5rari. e5raria e5rariá e5rariæ e5rariǽ e5rarie e5rarié e5rarii e5rarií e5rarim e5rarin e5rario e5rarió e5rariq e5raris e5rarit e5rariu e5rariú e5rariv e3rarí e3rarn e3rarq e5r6arum e5rarun e5r6arúm e5rarún e3rarv e3rass e5rasti. e5rastin e5rastiq e5rastis e5rastiu e5rastiv e5rastín e5rastíq e5rastís e5rastíu e5rastív eras4to eras4tō eras4tó e3rata e3ratá e3ratæ e3ratǽ e3rate e3rato e3rató e3ratr e3ratu e3ratú 2erau e3raue e3raué e3raui e3rauí 2e3rav e5ra͞e. e5ra͞ea e5ra͞eā e5ra͞eá e5ra͞eī e5ra͞en e5ra͞eu e5ra͞ev e5rá͞ea e5rá͞eā e5rá͞eī e5ra͡e. e5ra͡ea e5ra͡eā e5ra͡eá e5ra͡ei e5ra͡eī e5ra͡eí e5ra͡en e5ra͡eu e5ra͡ev e5rá͡ea e5rá͡eā e5rá͡ei e5rá͡eī e5rá͡en e5rá͡eu e5rá͡ev e3r2ă er3áct e2r3ád er3áes e2r3á2g er3áll e4r3ámb er3á4pe er5ás4te er5ás4to er5ás4tō er3áud er1æ2 e3ræ. e3ræa e3ræā e3ræá e3rææ e3ræǽ e3ræi e3ræī e3ræí e3ræn e3ræu e3ræv er1ǣ2 e3rǣ. e3rǣa e3rǣā e3rǣá e3rǣǣ e3rǣī e3rǣn e3rǣu e3rǣv e3rǣ́a e3rǣ́ā e3rǣ́ǣ e3rǣ́ī e3rǣ́n er3ǣ́s e3rǣ́u e3rǣ́v er3ǽs e1re 2e3re. 2erea 2ereá 2e3reæ 2e3reǽ ere4d4 ered6it 2e3ree 2e3reé ere2g 2e3re2i 2e3reí ere2l e3rem. e4r3e4ma er3e4mā e4r3e4má er3e4me er3e4mē er3e4mé er5e4mim e5remini e5reminí er5e4mis e4r5e4mit er3e4mī ere4mím ere4mín ere4mít ere4mo. ere4moq ere4mou ere4mov ere4mō. ere4mōq ere4mōu ere4mōv ere4móq ere4mór ere4móu ere4móv e3remq e3remu e4r5e4mun e3remú er5e4mún e3remv 2eren ere4na e3rend e3rene e3rent 2ere2o 2ereó 2ereq e5reque e3rer. er3era er3erā er3erá e3rere e3rerí e3rern er3ero er3erō er3eró e3rerq e5rerue er3erú e3rerv e3res. e3resn e3resq er3ess eres3t ere4su ere4sú e3resv e3ret 2ereu e3reue 2ereú 2erev e3reve 2erē e2rē2d erē2g erē2i e5rēminī e5rēmu e5rēmú e5rēne e5rēre e5rēri e5rērí e5rēue e5rēve erḗ4d e4rḗ4g e5rḗminī e5rḗmu er5ḗna e5rḗne e5rḗq e5rḗre e5rḗri e5rḗt e5rḗue e5rḗve e1rĕ erĕ2s3 2eré 3eréc eré2d e2ré2g eré4mer er5é4mim eré6miti eré6mito eré6mitō eré6mitu e4r3éna er3éss e2réx 2e3ri. e3ria. e3riae e3riam e3rian e3riaq e3riar e3rias e3riat e3riau e3riav e3ria͞ e3ria͡ e3riā er3iác e3riáe e3riám e3rián e3riáq e3riár e3riás e3riát e3riáu e3riáv e3riæ e3riǣ e3riǽ 2erib er3i4ba er3i4bá er3i4be er3i4bé er3i4bi er3i4bí eri4bo. eri4bon eri4boq eri4bor eri4bou eri4bov er3i4bó eri6bunt eri6búnt eri4cer er5i4cér er3i4ci e3ricu e3ricú e3ride e3ridē e3ridé e3ridi e3ridī e3ridí eri4dō eri4dó e3ridu e3ridú 2erie e3rie. e3rieb e3riem e3rien e3rieq er3ier e3ries e3riet e3rieu e3riev e3riē. e3riēb e3riēm er6iēne e3riēq er3iēr e5riēri e5riērí e3riēs e3riēt e3riēu e3riēv e5riḗb e5riḗm e5riḗri e5riḗs e5riḗt 2erié e3riéb e3riém e5riénd e5riént e3riéq er3iér e5riéris e3riés e3riét e3riéu e3riév er3iim er3iis e5riis. e5riisn e5riisq e5riisu e5riisv er3iit e3riīs e5riī́s e5riísn e5riísq er5iíss er5iíst e5riísu e5riísv er3iít er3i4ma er3i4mā er3i4má eri4me. eri4meb eri4mem eri4men eri4meq eri4mer eri4mes eri6met. eri6meti eri6metí eri6metn eri6metq eri6metu eri6metú eri6metv eri4meu eri4mev eri4mēb eri4mēm eri4mēn eri4mēr eri4mēs eri4mēt eri6mḗb eri6mḗm eri6mḗn eri6mḗr eri6mḗs eri6mḗt eri4mé er5i4mi. er5i4mim e6r5i6mine e5riminī er5i4miq er5i4mis er5i4mit er5i4miu er5i4miv er3i4mī er3i4mí eri4mo. eri4moq eri4mor eri4mou eri4mov eri4mō. eri4mōq eri4mōu eri4mōv eri4móq eri4mór eri4móu eri4móv e5rimue er5i4mun er5i4mún 2erin e3rio e3riō e3rió e3rip 2e3riq er3ire er3iré er3iri er3irí eri6sne eri6squ eri6sue eri6sve e3rité er5itib eri6tne e5ritōt e5ritṓt eri6tqu eri6tue er5itui er5ituī er5ituí er5ituú eri6tve 2eriu er6iue. er3iué er3iui er3iuí e5rium. e5riumn e5riumq e5riumu e5riumv er3iun e5riunt e3rius e3riúm er3iún e5riúnt e3riús 2eriv er3ivé er3ivi er3iví e3riz 2e1rī erī3ā er3ī2b e2rīn er3īr er3īss er3īst er3ī́4b er3ī́r er3í2b er3í4ci er3íer e2r3íi e4rí4men e4rí4meq erí4mer e4rí4meu e4rí4mev er5í4mim e5ríminī er5í4mit 2erín e4ríng 2eríq er3ír e4r5í4tib erí6tio. e4r5í4tui e4r5ítuī e4r5ítuu 2eríu er3íui 2erív er3ívi 2ern ero2b erod4 erodi5ue erodi5v e3ron ero4pu e3ror. ero4re ero4ré e3rorq e3roru e3rorú e3rorv er3o4sc ero4s3t 3erot e3rōq erō4re erō4rē erō4ré erō4rō e3rōru e3rōrú er3ōsc 3erōt erṓ4re erṓ4rē e5rṓru er5ṓsc 3erṓt e1rŏ e2rób e4ró4re er3ó4sc 3erót 2erq er5rue e2r3ua e2r3uā e2r3uá 2erue er5ue. e4r3uen e4r3ueq e4r3ueu er3uēm er3uēn er3uēs er3uēt er3uém er3uén er3ués er3uét e3rug er3uīs er3uía 2eru2m3 er3unc er3und e5runto e5runtō e5runtó e5runtú e2r3uo e2r3uō e2r3uó er3ur er3uss er3ust eru4su er5usur er3u4sú e2r3u2t e2r3uu e2r3uú e3rūg erū2r erū́4r e1rŭ 2erúm er3únc e4rúnd erú2r e2r3út 2erv e1ry e1rý 2es. 1e2sæ 1e2sǽ e3s2că es3cæ es4cid e3s2cī e3s2cĭ es4cíd es2cr e2scŭ es2e ese2i 3eséq 3esév e3s2i 2esn e1s2p espe5r4i espe5r4ī esper4í e2sph 2esq 4essat 4essát 3est. es4tān e3s2tă e2s3tæ e2s3tǣ e2s3tǽ es3te. es3teq es4ter es3teu es3tev e3s2tĕ e4s5tim e4stĭb e3s4tĭn e3stĭt es4tĭ́t 3es4tn es4tol 3estot es4tól 3estót 3es4tq e4strā es4tră es3tre es3trē es3tré es4tru es4trū e3s4trŭ e4stry e2stu e2stŭ 3es4tv es3ue. e2suĕ es2ué e2s3ui 2esv 2et e3ta eta3g et3eni ete5ram ete5ran ete5rar ete6reri ete6reru ete4r5ie eter5iē eter5ié eter5iī eteri6mini eteri6miní eter5i6ta eter5i6tā eter5i6tá eteri6te. eteri6ten eteri6teq eteri6teu eteri6tev eteri6to. eteri6ton eteri6toq eteri6tot eteri6tou eteri6tov eteri6tō. eteri6tōn eteri6tōq eteri6tōu eteri6tōv eteri6tṓn eteri6tṓq eteri6tṓu eteri6tṓv eteri6tón eteri6tóq eteri6tót eteri6tóu eteri6tóv ete4rīs eterī́6u eterī́6v ete4ríe ete6rí6mini ete6rí6te ete3ro ete3rō ete5run etĕ4r3ī4 etĕrī́4 etĕ4rĭē etĕ4r5ĭī etĕ4rĭt etĕr5ĭ6tā etĕrĭ6tĕ etĕ5rĭtĭ etĕrĭ6tō. etĕrĭ6tōn etĕrĭ6tōq etĕrĭ6tōu etĕrĭ6tōv etĕrĭ6tṓn etĕrĭ6tṓq etĕrĭ6tṓu etĕrĭ6tṓv etĕrĭ́4 etĕ6rĭ́ĕ etĕ6rĭ́t etĕ3rŭ etĕ́6rĕ6rĭ etĕ́4rī etĕ́6r5ĭī etĕ́6r5ĭt. etĕ́6r5ĭ6tā etĕ́6rĭ6tĕ etĕ́6rĭ6tō eté6re6ri eté4rie eté4riē eté4r5iī eté6r5it. eté6r5ita eté6r5i6tā etéri6te. eté6ri6to. eté6ri6tō e2t3ip e2t3íp eto2i etó2i e3tr etra3s 3ets e4tue. e2tuī e3tur e3tú 3etvi e1u 2eu. eua6ste e4uasv e4uāsv e2uǣ́ e2uǽ e2u3b2 eu2dă eu4dis eu2dī 2e3ue e3uĕ e4uīsv 2eum eu3ma 1eun e2und 2e2une e2uni e2uní e2uno e2unó euol5ue euol5ué euol5ui euol5uí 2euq eu4rat eu4rár eu4rát eu4reb eu4rem eu4ren eu4rer eu4réb eu4rém eu4rén eu4rér eu4rim eu4rím eu4rún 2eus e4us. e4usn e4usq eu2su e4usv 2e2ut eu4tami eu4tamú eu4tare eu4tari eu4tarí eu4támi eu4tánt eu4táre eu4tári e3u4tem e3u4ten e5u4tere e5u4teré eu6teris eu6terís e3u4tém e3u4tén e5u4tére e5u6téris e3u4tét eu4tim eu4tit e3u4tím eutru4 eu4tun eu4tún 2euu 2e2uv e2ux e1ū2 e2ū3m e2ū́m eū́2r eū́2t e1ŭ e2ŭs e3ŭt e2ŭ́ e3ŭ́mb e2ú e3úl 2eúm e3úmb 1eún e3úng e3únx eú2r 2eús e3úse e3úso e3úss e3úst e3úsu. e3úsum e3úsus e3ú2t eútru4 eva6ste 2e3ve e3vĕ ex2ă e2x3ea e2x3eā e2x3eá e2x3eo e2x3eō e2x3eó ex3e2q e2xeu e2x3eú e2xib e2xiē e2xié exin3 e2x3íe exō2 e3xṓ exṓ4ra exṓ4rā exṓ4re exṓ4rē exṓ4rō exó4ra exó4re exó4ri exó4ro ex5ter 2e2͞ 2e2͡ 2ē2a ēad2 ēa2m 2ē2ā ēā2nu 2ē2ă ēă3d2 ēắ3d 2ē2á 2ē2æ 2ē2ǣ 2ē2ǽ ēb2 ēba2 ēba3q ēbá2 ēbæ3 ēbe3i ēbī3u ēbī3v ēbo2 1ēbr ēbs3 ēbu2 ē2bul 3ē2bŭl ē4bŭ́l ē2búl ēce1 ē2ch ēd2 ēda2r ēdá2 ēdē2s ēdi3m ēd4it. ēd4itu ēd4ĭt. ēd4ĭtn ēd4ĭtq ēd4ĭtu ēd4ĭtv ē3do ēd4or ēd3ue ē3dŭ 2ē2e 2ē2ē 2ē2ĕ ē3g2a ēga2r ē3g2æ3 ē3g2ǣ ē3ge. ē3gen ē3geq ē3geu ē3gev ē3gĕ. ē3gĕn ē3gĕq ē3gĕu ē3gĕv ē2g3n ēgo2 1ēgr ēgu6ste ēgŭ6stĕ 2ē1i2 ē2ia. ē2iaq ēia2r ē2iau ē2iav ē3ic ē2id ē4iḗne ē6iḗque ē4iḗue ē4iḗve ē2i3p ē2ir ē2is ē2ium ē3iŭ 2ē2ī 2ēĭ2 ē1ĭc ē2ĭē ē2ĭĕ ē2ĭ3p ē3ĭ́2c ē2ĭ́ĕ ē2ĭ́p ē1í2c ē2íe 2ēj ēja2r ē2lab ē3lā. ē3lān ē3lāq ē3lār ē3lās ē3lāu ē3lāv ē3lā́n ē3lā́q ē3lā́r ē3lā́s ē3lā́u ē3lā́v ē3lă. ē3lăm ē3lăn ē3lăq ē3lău ē3lăv ē3lắ 2ē3lá 2ē3læ 2ē3lǣ 2ē3lǽ ē2leg ēle2r ēlē2i ē3lĕī ē3lĕō ē3lĕŭ ēlé2 ēli2n 2ē3lī ēlí2n 2ēll ēl2u ē2l3ue ē1m ē4mani ē4maní ēma2r ēmắ2 ē4m3áni 1ēm2e ē3me. ē3mem ē4mend ē4ment. ē6mentia ē6mentía ē4mentn ē4mentq ē4mentv ē3meq ē2m3es ē3meu ē3mev 3ē2mēr ēmē2s ē4m3ēse ē4m3ēsē ē4m3ēsĕ ē4m3ēsī 3ē4mḗr ēmḗ4s ē4m5ḗse ē4mḗsē ē4m5ḗsĕ ē4m5ḗsī 1ēmĕ ē3mĕ. ē3mĕm ē4mĕnd ē4mĕnt. ē6mĕntĭă ē6mĕntĭ́ă ē4mĕntn ē4mĕntq ē4mĕntu ē4mĕntv ē3mĕq ē2m3ĕs ē3mĕu ē3mĕv ē3mĕ́m ē4m3ĕ́s ē2m3és ēm2i1 3ēmim 4ēminī 3ēmis ē4miss 3ē4mit. 3ē4mitn 3ē4mitq 3ē4mitu 3ē4mitv ēm2ĭ 3ēmĭc ēmĭ3ĕ 3ēmĭm 3ēmĭnĕ 3ēmĭs ē4mĭss 3ē4mĭt. 3ē4mĭtn 3ē4mĭtq 3ē4mĭtu 3ē4mĭtv 3ēmĭ́n 5ē4mĭ́ss 5ē4mĭ́st 3ēmĭ́t 1ēmí ē4míss ē4míst 1ēmo ē3mo. ē3mon ēmo4nu ē3moq ē4mor. ē4morn ē4morq ē4moru ē4morv ē3mou ē3mov 1ēmŏ ē4mŏr. ē4mŏrn ē4mŏrq ē4mŏru ē4mŏrv ē4mŏ́rn ē4mŏ́rq ē4mŏ́ru ē4mŏ́rv ē4mórn ē4mórq ē4móru ē4mórv 1ēmp 1ēmt 2ēmu ē2m3ul ē2mun ēm3ū́ 2ēmŭ ē2m3ŭl ē2mŭn ē4m3ŭ́l ē4mŭ́n 2ēmú ē2m3úl ē2mún ē2nat ēn2ā ēnā3nē ēnā3nī 5ē4nārib 5ē4nārĭb 5ē6nā́rib 5ē6nā́rĭb ē3nă. ē3năm ē3năn ē3năq 3ēnăt ē3nău ē3năv ē3nắ 2ēne ē2n3ea ē2n3eā ē2n3eá ē2n3eō ē2neu ē2neú ē2n3ĕā ē2n3ĕă ē2n3ĕō ē2nĕŭ ē2n3ie ē2n3iē ē2n3ié ē2n3ii ē2n3ií ē2n3ī2m ē2n3ī2r ēn3īss ēn3īst ē2n3ī2t ēn3ī́4m ēn3ī́4r ēn5ī́ss ēn5ī́st ēn3ī́4t ē2n3ĭē ē2n3ĭĕ ē2n3ĭĭ ē4n3ĭ́ĕ ē4n3ĭ́ĭ ē2n3íe ē2n3íi ēn2sc ēn3si ēn4sn ēn4sq ēns4ué ēn4sv ē1n2u ē2n3ue ē3n4uen ēn4ueq ēn4ueu ēn4uev ēn2ŭ ē1o ē2on ē2os 2ē2ō ē1ŏ ē2ŏn ē2ŏs ē2ŏ́ ēó2 ēpa2 ēpar3 ēpá2 ēper4ē ēperī4n ēperī4q ēperī4r ēperī4u ēperī4v ēperī́6n ēperī́6q ēperī́6r ēperī́6u ēperī́6v ēperí4 ēpĕrī4n ēpĕrī4q ēpĕrī4r ēpĕrī4u ēpĕrī4v ēpĕrī́6n ēpĕrī́6q ēpĕrī́6r ēpĕrī́6u ēpĕrī́6v ēpĕ3rō ē2ph ēpo2 2ēq ē3qu ē1r2 ēra3g ē3ră ēræ2ă ērǣ2ă 2ē3re ē3rēm ē3rēs ē3rēt ē3rēu ē3rēv ē3rḗm ē3rḗs ē3rḗt 2ē3rĕ ē3ré2 2ērī 2ērí 1ē2ro ēro4s3 ērō3d4 ērō5dī ērōdī5u ērōdī5v 1ē2rŏ ēró2 ē2r3ue 2ērun 3ērŭd 2ērú 2ēs. ē2sa. ē2sae ē2sam ē2saq ē2sav 1ēsā 1ēsă ē2să. ē2săm ē2săq ē2său ē2săv 1ēsá ē2sáe ē2sám 1ē2sæ 1ē2sǣ 1ē2sǽ ē2sca ē2scă ē2scá ēs3cæ ēs3cǣ ē2scé ē2sci ēs3cī ē2scĭ ē2scí ē2scu ēs4cul ēsc3ū ē2scŭ ē2scú ēs2e 3ēsē. ēsē2i 3ēsēn 3ēsēq 3ēsēv ēs2ĕ 2ēsé ēs2i ēsi2n 2ēsn ē2so2 1ē2sō ē2sŏ ē2só ēs2p ēs3po ēs3pŏ ēs3pó ēs3pū 2ēsq 3ēst. ē2ste ēs5ter ē2stĕ ēs5tĕr ēs2ti ēsti5t4 ēs2tĭ ēs4tíl ēstí3t4 3ēs4tn 3ē2stō 3ēs4tq ēs2tr 3ē2stu ēs4tue 3ē2stŭ ē2stú 3ēs4tv ē2s3ue ē2s3uĕ ēs3ui 3ēsum 3ē2sus 1ē2sū 1ēsŭ ē2sŭs 1ē2sú ē3sún 2ēsv 2ēt ē3ta ē3tă ē3te ēter4a ēte5re ēte3ri ēte5rī ēterī5u ēterī5v ē3tĕ ētĕ3r4a ētĕ3rǣ ētĕ3rĕ ētĕ5rī ētĕrī5u ētĕrī5v ētĕ3rŭ ēti4tu ē3tī ē3to2 ē3tō ētō2i ē3tŏ ē3tó2 ē3tr ē1u2 ēuā6ste ēuā6stĕ 2ē3ue ē3uĕ ē3uī. ē3uīn ē3uīq ē3uīu ē3uī́ ē2um 1ēuo ēuol3u 1ēuŏ 2ē2ŭ 2ē2ú ēvā6ste ēvā6stĕ 2ē3ve ē3vĕ ē3vī. ē3vīn ē3vīq ē3vīv ē3vī́ 1ēvo 1ēvŏ ēx2 ē2x3u ē2́ 2ḗa 2ḗā 2ḗă 2ḗæ 2ḗǣ ḗb2 ḗ3bu ḗ3bŭ 2ḗe 2ḗē 2ḗĕ 3ḗgr ḗ4gre ḗ4grĕ 2ḗi ḗi2c ḗ3iēn ḗ4ir 2ḗī ḗĭ2c 2ḗj ḗ4loq ḗ4lŏq ḗ1m ḗ4mar ḗ4măr ḗ4mēn ḗ4mic 3ḗmim 4ḗminī 5ḗ4mit. 3ḗ4mĭc 3ḗmĭm 5ḗ4mĭt. ḗ4mor. ḗ4mŏr. 3ḗmp 3ḗmt 2ḗmu ḗ4mŭn 2ḗn ḗ4n3ea ḗ4n3eā ḗ4n3eō ḗ4n3ĕā ḗ4n3ĕă ḗ4n3ĕō ḗ4n3iē ḗ4n3ii ḗ4n3ĭē ḗ4n3ĭĭ 2ḗō 2ḗq 2ḗr ḗ3r2ă ḗ3rĕ 3ḗ4sa 3ḗ2sā 3ḗ2să 3ḗ2sæ 3ḗ2sǣ 3ḗsē. 2ḗsn ḗ2so 3ḗ2sō ḗ2sŏ 2ḗsq ḗ5s4tĭn 3ḗstn 3ḗstō 3ḗstq ḗs4trŭ 3ḗstu 3ḗstŭ 3ḗstv ḗ2su 3ḗsum 3ḗsus 3ḗsū ḗ4sū. ḗ3sūs 3ḗsŭ ḗ4sŭs 2ḗsv 2ḗt 2ḗue 2ḗŭ 2ḗve 2ĕ2a ĕ2ā 2ĕā. 2ĕān 2ĕāq 4ĕārŭ 2ĕāu 2ĕāv 4ĕā́n 4ĕā́u 4ĕā́v 2ĕă. ĕ1ăm ĕ2ăn 4ĕănĕ 2ĕ2ăq ĕ2ăr ĕ2ăt 2ĕ2ău 2ĕ2ăv ĕ2ắ ĕ3ắmb 2ĕ2á 2ĕ2æ ĕæ2ă ĕæ2ŭ 2ĕ2ǣ ĕǣ2ă ĕǣ2ŭ 2ĕ2ǽ ĕb2 ĕbĕ3d ĕbī3u ĕbī3v ĕ3bŭ 2ĕc ĕ4c3ĕnn ĕ4c5ĕ́nn ĕ2ch ĕc4ĭm ĕ2c3l ĕcŭ3mā ĕcŭ3mă ĕcŭ3mĕ ĕcŭ3m4ī ĕcŭmī́5n ĕcŭmī́5q ĕcŭmī́5u ĕcŭmī́5v ĕcŭ3mŭ ĕcŭpĕ3 ĕ2c3ŭ2t ĕ2d1a ĕd3ā́c ĕ2d1ă2 ĕdă4m ĕd5ămă ĕd3áu ĕdē2g ĕd3ēmē ĕdē2s ĕdḗ4g ĕ2dĕm ĕ3dĕō ĕdĕ6stĕ ĕdī5uĕ. ĕdī5vĕ. ĕ2dĭa ĕ2dĭá ĕ2dĭæ ĕ2dĭǣ ĕ2dĭǽ ĕ2d3ĭg ĕ2dĭm ĕ2d3ĭn ĕ2dĭp ĕdĭ4s ĕ4d3ĭ4ta ĕ4d3ĭ4tá ĕ4d3ĭ4tæ ĕ4d3ĭ4tǣ ĕ4d3ĭ4tǽ ĕ4d3ĭ4tī ĕ4dĭtĭ ĕd5ĭtĭō ĕd5ĭtōr ĕd5ĭtōs ĕ4d3ĭ4tū ĕd5ĭtŭm ĕd5ĭtŭs ĕ4d3ĭ́g ĕd5ĭ́4tă ĕd5ĭ́4tĭ 1ĕdō ĕ2dōr ĕ4dṓr 1ĕdŏ2 ĕ2d3ŏl ĕ2dŏp 3ĕdŏr ĕ4d3ŏ́4l ĕ4d3ŏ́p ĕd2r ĕd2ū ĕdū3n ĕ2d3ŭl ĕ2d3ŭn ĕ4d3ŭ́l ĕ4dŭ́n 2ĕē 2ĕ1ĕ ĕĕ2ă ĕ2ĕm ĕ2ĕq ĕĕ2r ĕĕ4rō ĕ2ĕt ĕĕ2x ĕ2ĕ́2 2ĕfă 2ĕfĕ ĕ2gn ĕ2gō ĕ3gō. ĕ3gōn ĕ3gōq ĕ3gōu ĕ3gōv ĕ3gṓn ĕ3gṓq ĕ3gṓu ĕ3gṓv ĕ1h ĕ1i ĕ3iē 2ĕī ĕ1ī2b ĕ1ī2m ĕ2īq ĕ1ī2r ĕ1ī2t ĕ2īu ĕ2īv ĕī́2b ĕī́2m ĕī́2r ĕī́4t ĕ1ĭ ĕ2ĭc ĕ2ĭnŭ ĕĭ2t ĕĭ3tā ĕĭ3tĭ ĕ2ĭu ĕ2ĭv ĕĭ́4tĕ 2ĕl ĕlă3s2 ĕllē3i ĕllḗ5i ĕ2l1u 2ĕm. ĕ1ma ĕ1mă 2ĕmn 1ĕmp ĕm3pn 2ĕmq 2ĕ2mu 2ĕmv 2ĕn ĕn2ā ĕn3d2 ĕnd4ŭ ĕ3n2e ĕ3n2ĕ ĕnĕ3rŭ ĕnĕ́s5 ĕ2ni ĕn2ŭ ĕ2ōn 2ĕōr 2ĕ2ōs ĕŏ2g3n ĕ2ŏr ĕŏ5rā́ ĕ3ŏrs ĕ2ŏ́ ĕ3pĕ ĕpĕ3r ĕpĭ5str ĕ3pŏ 2ĕps ĕp2su 4ĕquĕ 2ĕr. ĕr1a ĕ3rae. ĕ3raea ĕ3raeā ĕ3raeă ĕ3raeá ĕ3raeī ĕ3raen ĕ3raeu ĕ3raev ĕ5ra͞e. ĕ5ra͞ea ĕ5ra͞eā ĕ5ra͞eă ĕ5ra͞eī ĕ5ra͞en ĕ5ra͞eu ĕ5ra͞ev ĕ5rá͞ea ĕ5rá͞eā ĕ5rá͞eă ĕ5rá͞eī ĕ5ra͡e. ĕ5ra͡ea ĕ5ra͡eā ĕ5ra͡eă ĕ5ra͡eī ĕ5ra͡en ĕ5ra͡eu ĕ5ra͡ev ĕ5rá͡ea ĕ5rá͡eā ĕ5rá͡eă ĕ5rá͡eī ĕrās3 ĕr4āt ĕ1ră2 ĕ3ră. ĕr3ăc ĕ2răd ĕr5ămă ĕr3ămī ĕ3rănĕ ĕr3ăng ĕ3răq ĕ2r3ăs2 ĕ3rău ĕ3răv ĕrắ2 ĕ4r3ắd ĕ4r3ắg ĕ4r3ắl ĕ4r5ắmb ĕrắs6tō ĕr3áes ĕ2r3áu ĕr1æ2 ĕ3ræ. ĕ3ræā ĕ3ræă ĕ3rææ ĕ3ræǽ ĕ3ræī ĕ3ræn ĕ3ræu ĕ3ræv ĕr1ǣ2 ĕ3rǣ. ĕ3rǣā ĕ3rǣă ĕ3rǣǣ ĕ3rǣī ĕ3rǣn ĕ3rǣu ĕ3rǣv ĕ3rǣ́ā ĕ3rǣ́ă ĕ3rǣ́ǣ ĕ3rǣ́ī ĕ3rǣ́n ĕr3ǣ́s ĕ3rǣ́u ĕ3rǣ́v ĕr3ǽ2s ĕ3r2e 2ĕrē ĕ2r3ē2d ĕr3ē2g ĕ5rēmĭnī ĕ5rēmŭ ĕ5rēnĕ ĕ5rērĕ ĕ5rērĭ ĕr3ēss ĕr3ēst ĕ5rēuĕ ĕ5rēvĕ ĕr3ḗ4d ĕ4r3ḗ4g ĕ5rḗmĭnī ĕ5rḗmŭ ĕr5ḗnă ĕ5rḗnĕ ĕ5rḗq ĕ5rḗrĕ ĕ5rḗrĭ ĕr5ḗss ĕr5ḗst ĕ5rḗt ĕ5rḗuĕ ĕ5rḗvĕ 2ĕ1rĕ ĕ3rĕ. ĕr3ĕăt ĕr3ĕ4d4 ĕ2rĕf ĕrĕ2g ĕrĕ2m ĕr3ĕmā ĕ4r3ĕmă ĕr3ĕmē ĕr3ĕmĕ ĕr3ĕmī ĕr3ĕmĭ ĕ4r3ĕmō ĕr3ĕmŏ ĕr3ĕmŭ ĕ2r3ĕ2q ĕ5rĕquĕ ĕ2r3ĕ2s ĕ3rĕu ĕ3rĕv ĕr3ĕ́4d ĕrĕ́4m ĕr5ĕ́mĕ ĕr5ĕ́mĭ ĕ4r3ĕ́s ĕr1i 2ĕ1rī ĕrī3ā ĕr3ī2b ĕ2rīn ĕr4īq ĕr3ī́4b ĕr4ī́q ĕ4r3ĭ4cĕ ĕr3ĭ4cĭ ĕr3ĭ4dō ĕ5rĭĕ. ĕ5rĭĕn ĕ5rĭĕq ĕ5rĭĕu ĕ5rĭĕv ĕ4r3ĭ4mā ĕ4r3ĭ4mă ĕr5ĭ4mēb ĕr5ĭ4mēm ĕ4r5ĭ4mēn ĕr5ĭ4mēr ĕr5ĭ4mēs ĕr5ĭ4mēt ĕr5ĭ6mḗb ĕr5ĭ6mḗm ĕ6r5ĭ6mḗn ĕr5ĭ6mḗr ĕr5ĭ6mḗs ĕr5ĭ6mḗt ĕ4r3ĭ4mĕ ĕ4r3ĭ4mī ĕr5ĭ4mĭm ĕr5ĭ4mĭs ĕr5ĭ4mĭt ĕr5ĭ4mĭ́ ĕrĭ4mō. ĕrĭ4mōq ĕrĭ4mōu ĕrĭ4mōv ĕr3ĭ4mŏ ĕr5ĭ4mŭn ĕr5ĭ6mŭ́n ĕr3ĭng ĕr4ĭō ĕr4ĭŏ ĕr4ĭs ĕ4r5ĭ4tĭb ĕ5rĭtōt ĕ5rĭtṓt ĕ5rĭtŏ ĕrĭ4tūs ĕ4r5ĭ4tŭī ĕ5rĭtŭr ĕ4r5ĭ4tŭŭ ĕ5rĭtŭ́r ĕr4ĭŭ ĕr5ĭ́4cĭ ĕ4r3ĭ́ĭ ĕ6r5ĭ́6mĕn ĕ6r5ĭ́6mĕq ĕr5ĭ́6mĕr ĕ6r5ĭ́6mĕu ĕ6r5ĭ́6mĕv ĕr5ĭ́6mĭm ĕr5ĭ́6mĭt ĕrĭ́6tĭb ĕ4r5ĭ́4tŭ 2ĕrn ĕ1ro ĕ1rō ĕ3rōn ĕr3ō4rē ĕr3ō4rĕ ĕr3ō4rō ĕ3rōrŭ ĕ3rōs. ĕr3ōsc ĕ3rōsn ĕ3rōsq ĕ3rōsu ĕ3rōsv 3ĕrōt ĕrṓ4rē ĕrṓ4rĕ ĕ5rṓrŭ ĕr5ṓsc 3ĕrṓt ĕr1ŏ ĕr3ŏ́l ĕ3rŏ́r 2ĕrq 2ĕ2r1u ĕ3rūg ĕrū2r ĕr3ūt ĕr3ū́4r ĕr3ū́t ĕ3rŭē ĕ3rŭĕ ĕ3rŭī ĕ3rŭĭ ĕ3rŭ2m3 ĕ5rŭntō ĕ5rŭntŏ ĕ5rŭntŭ ĕ3rŭs. ĕ3rŭsn ĕ3rŭsq ĕr3ŭss ĕr3ŭst ĕ3rŭsu ĕ3rŭsv ĕr3ŭ2t ĕ3rŭ́l ĕ3rŭ́m ĕ5rŭ́sn ĕ5rŭ́sq ĕr5ŭ́ss ĕr5ŭ́st ĕ5rŭ́su ĕ5rŭ́sv 2ĕrv 1ĕ1sc ĕs2cī ĕs2cĭ ĕs2cŭ ĕ3s2ĕ ĕ3sō ĕ1sp ĕspĕ5rī ĕ2sph ĕs2pl ĕs2pō ĕs2pŏ ĕs2pŭ ĕ2sq ĕs2ta ĕ4stēs ĕ4stḗs ĕ4s3tĕ. ĕ4stĕm ĕ4s5tĕnĕ ĕ4s3tĕq ĕ4s3tĕu ĕ4s3tĕv ĕ4stĕ́m ĕ4s3tī. ĕ4s5tīnĕ ĕ4s3tīq ĕ4s3tīs ĕ4s3tīu ĕ4s3tīv ĕ6s5tī́nĕ ĕ4s5tī́q ĕ4s5tī́s ĕ4s5tī́u ĕ4s5tī́v ĕ4stĭ́c ĕs4tn ĕ2s3tō ĕs4tq ĕs3trē ĕs3trĕ ĕ2s4tu ĕs4tv ĕ2su ĕ3t2ă ĕtă3g ĕtĕ3rĕ ĕtĕ5rī ĕtĕrī5u ĕtĕrī5v ĕtĕ3rŭ ĕtĭ4ă ĕt3ĭp 3ĕts ĕ2t1u 2ĕ1u ĕ3uĕ ĕ1ū2 ĕ2ū3m ĕ2ū́m ĕū́2r ĕū́4t 1ĕŭ2 ĕ1ŭl 2ĕ2ŭm ĕ1ŭr 2ĕŭs ĕ1ŭt 2ĕ2ŭ́m 2ĕŭ́s ĕ4ŭ́sq ĕ3ŭ́t 2ĕv ĕ3vĕ ĕ2xă ĕx3áu ĕx3ĕ́m ĕ2xi ĕx3ĭī ĕxō2 ĕ3xṓ ĕxṓ4rā ĕxṓ4ră ĕxṓ4rē ĕxṓ4rĕ ĕxṓ4rō ĕx5tĕr ĕ2xu ĕ2́ 2ĕ́ă ĕ́b2 ĕ́2cl ĕ́4dăm ĕ́4dīs ĕ́4dĭa ĕ́4dĭæ ĕ́4dĭǣ ĕ́4d5ĭ4ta ĕ́4d5ĭ4tæ ĕ́4d5ĭ4tǣ ĕ́4d5ĭ4tī ĕ́4d5ĭ4tū ĕ́2dŏ 2ĕ́ĕ ĕ́3ĕō ĕ́3ĕŏ ĕ́3ĕ2r 1ĕ́f ĕ́1i ĕ́3iē 2ĕ́l 2ĕ́m 2ĕ́n ĕ́nd4 4ĕ́ps ĕ́ră4g ĕ́r5ĕăn ĕ́r5ĕăt ĕ́r3ī ĕ́4rīs ĕ́4r5ĭm. ĕ́4r5ĭ4mā ĕ́4r5ĭ4mă ĕ́4r5ĭmĕ ĕ́4r5ĭ4mī ĕ́4r5ĭ4mō ĕ́r5ĭ6tūs ĕ́2ru ĕ́4r3ŭt 3ĕ́sc ĕ́3s4cī ĕ́3sĕ ĕ́3spŭ 4ĕ́stā ĕ́5stĭtā ĕ́5stĭtī ĕ́5stĭtĭ ĕ́5stĭtō ĕ́4str 2ĕ́2t ĕ́3tā ĕ́3tă ĕ́3tē ĕ́3tĕ ĕ́3tī ĕ́3tō ĕ́3tŏ ĕ́3tr 3ĕ́ts ĕ́3tŭ ĕ́x3ĕā ĕ́x3ĕă ĕ́x3ĕō ĕ́x3ĭī 2é2a 2éæ 2éb2 éba3q ébe3 éb4ri ébs3 é3bu éce1 é2ch é2c3l éco1 écu3m4 é2c3u2t éda2m é4d3ama é4damā éd2i é2diǣ é2d3i2g éd3ime éd3i4mi éd4is éd3i4tǣ éd3i4tī éd3i4tū é2d3o2l éd3ue 2ée é1ea é1eā é1eo é1eō é1e2r é1es éfe1 1éff é3g2a é3gæ é2gl é2g3n é1h 2éi é3ian é3iaq é3iau é3iav é1i2c é1ie é3ieq é3ieu é3iev é1iē é3iit é2in é3ior é3iou é3iov é2is é3iul é2leg é3li élu2 é2l3ue é2l3ut é1m2a ém2e1 3é4mera ém2i é2mic 2émin 3é4mit. 2émn é1mo1 1émp 2émq 1émt 2ému 2émv 2én énd2 énd4u é2n3ea én2ex én3iit én3si é3n2ua é3n2uē é3n2uī én2ul é3n2uo 2éo épe1 épe3r 2éps ép4se. ép4sen ép4seq ép4seu ép4sev ép2su 4é3que é1r 2éra é3ra. é3rae é2ra2g ér2al éra2m é3ram. ér3ama é3ran é3raq éra2r ér3ara ér5are ér3aro é3ras é3rau é3rav é3ra͡ é3ræ 2ére ér3ean ér3eat ér3e2d4 ére2g ére2m é4r3ema ér3emā ér3eme ér3emē é4r3emi ér3emī é4r3emo é4r3emō é4r3emu é4r3eru é4rest é2rh é4riac é3riar 2érib ér5i4cit 2érie ér3ier é4r3iit é4r3i4ma é4r3i4mā é4r3i4me é4r3i4mē é4r3i4mi é4r3i4mī é4r3i4mo é4r3i4mō ér5i4mun é3rio é3rip é5ritor é5ritur éri4tūs ér3ī 2érn é3ro. 3é2rog é2r3o2p 2érq ér5rue 2éru é2r3ua é2r3uā é2rue é2r3uē é3rul é3rum é3run é2ruo é2r3uō é3rus ér3u2t é2ruu 2érv 1é2sa 1é2sæ é3s2cī és2i 2ésn 1é2so éspe3 és2pu 2és3q 4ésta 4éstā és3tib 3éstn 3éstq 3éstv 3é2su. é4s3ue és3ui 3ésum 3ésus 2ésv 2ét éte1 3éts 2éu é1ua é2uam é2uaq é2uau é1uā é1uæ é1uǣ éub2 é1ue é2uel é1uē é1ui é1uī éu1m é3unx éute3 éu4tra é1ū 2év é3ve éx2a é2x3ea é2x3eā é2x3eo é2x3eō éx2ib é2xiu éx2o éx2ō é2xue éx4us 2é͞ 2é͡ 1f f2a fa4c3ue fa1m fa2ru fas3 fās3 fá2c3u fá1m fá2ru fece3 fe2i fe3li fe3ra fe3r2æ3 fe3r2ǣ fe3rē fe3r4i fe3rī fe3ro fe3rō fe3ru fes5tā fes5te fe2x fē2i fĕ3r2a fĕ3ră fĕ3r2æ fĕ3r2ǣ fĕ3rē fĕ3r4ĕ fĕ3rī fĕ3rŏ fĕ3rŭ fĕ2s3 fĕs5tĕ fĕ́3ră fĕ́5r4ī fé2i fér4ī fé2ru fé2x 2ff file2 fi1s fis2i fĭĕ3 fí1m f2l2 flo3 flor2 fons3 fo3rī fŏ3rī fœ̄3d f2r2 fra3g fră3g fre3 frem2 fre5mi fre5mo fr4ē3n frḗ5n fr4ĕ́3 fré1 fré5na fu1s fú1s 1g gab2 2g1ae g2aeq g4aeue. g4aeuĕ. g4aeve. g4aevĕ. ga2i gao3 g2ar ga3re g2au 2g1a͞ g4a͞eq g6a͞eue. g6a͞euĕ. g6a͞eve. g6a͞evĕ. g4á͞eq g6á͞eue. g6á͞euĕ. g6á͞eve. g6á͞evĕ. 2g1a͡ g4a͡eq g6a͡eue. g6a͡euĕ. g6a͡eve. g6a͡evĕ. g4á͡eq g6á͡eue. g6á͡euĕ. g6á͡eve. g6á͡evĕ. gā4iae. gā6iaene gā6iaeque gā6iaeue gā6iaeve gā6ia͞e. gā6ia͞ene gā6ia͞eque gā6ia͞eue gā6ia͞eve gā6iá͞ene gā6iá͞eque gā6iá͞eue gā6iá͞eve gā6ia͡e. gā6ia͡ene gā6ia͡eque gā6ia͡eue gā6ia͡eve gā6iá͡ene gā6iá͡eque gā6iá͡eue gā6iá͡eve gā2iā gā6iáene gā6iáeque gā6iáeue gā6iáeve gā4iæ. gā4iæne gā6iæque gā4iæue gā4iæve gā4iǣ. gā4iǣne gā6iǣque gā4iǣue gā4iǣve gā6iǣ́ne gā6iǣ́que gā6iǣ́ue gā6iǣ́ve gā4iǽne gā6iǽque gā4iǽue gā4iǽve gā4iīs. gā6iīsne gā6iīsque gā6iīsue gā6iīsve gā6iī́sne gā6iī́sque gā6iī́sue gā6iī́sve gā2iu gā2iú găb2 gă3rĕ g4áeue. g4áeuĕ. g4áeve. g4áevĕ. gá2i gá3ian 2g1æ2 g2æ3q g4æue. g4æuĕ. g4æve. g4ævĕ. 2g1ǣ2 g2ǣ3q g4ǣue. g4ǣuĕ. g4ǣve. g4ǣvĕ. g2ǣ́3q g4ǣ́ue. g4ǣ́uĕ. g4ǣ́ve. g4ǣ́vĕ. g2ǽ3q g4ǽue. g4ǽuĕ. g4ǽve. g4ǽvĕ. 2gd g2e ge2e ge2i 3gena 3genā 3gená 3genæ 3genǣ 3genǽ 3genen 3geneq 3geneu 3genev 3genē 3gené 3geni 3genī 3gení 3geno 3genō 3genó 3genu 3genú ge1r ger2æ3 ger2ǣ ge3rē ge3rī ges3t ges5tā ges5te ges5tr 2getē 2geté 2getī ge2un 3gēd gē2i g2ĕ gĕ2ă gĕ2ī 3gĕna 3gĕnā 3gĕnă 3gĕná 3gĕnæ 3gĕnǣ 3gĕnǽ 3gĕnē 3gĕnĕn 3gĕnĕq 3gĕnĕu 3gĕnĕv 3gĕnī 3gĕnō 3gĕnŭ 3gĕ3r2a gĕ3ră 3gĕrá 3gĕ3r2æ 3gĕ3r2ǣ 3gĕrǽ gĕ3rē gĕ3r4ĕ gĕ3rī gĕ3rŏ 3gĕ3rŭ gĕs3 gĕs5tĕ 3gĕ́nă 3gĕ́nĕ gĕ́3rĕ gé2i 3géna 3génen 3géneq 3géneu 3génev 3géss 3gést 2gg2 g3ga g3gæ3 g3gǣ g2i 3gie gig3 gi4gn gi2i gi4lue gim2 gin2ā gis3 gi4sc gis5ci gispe3 gis5te g2ĭ 3gĭĕ gĭ5mĭn gĭn2ā gĭn2ĕ gĭs5tĕ 3gĭtī gíg3 gí2lu gí1m gí3tur g2la g2lā g2lá g2læ g2lǣ g2lǽ g2les g2lēs 2glĕ g2lés 2gli g2lī 2glĭ g2lí g2lo g2lŏ g2lu g2lū g2lú 2g1m2 g1n2 gn4an gna5ni. gna5nin gna5niq gna5nis gna5niu gna5niv gna5nín gna5níq gna5nís gna5níu gna5nív gnā3nī gná5ni. gná5nis gnæ4uŭ gnæ4vŭ gnǣ4uŭ gnǣ4vŭ 2gne g3nem g3nes g3nĕm gnĕ3rŭ g3nĕ́ 2gné g3ném g3nés g3nib g4nitæ g2no g3non gno2p g3noq g3nor. 3gnora 3gnorá 5gnorim 5gnorit 5gnorím 5gnorít g3norn 3gnoro 3gnoró g3norq 5gnorun 5gnorún g3norv 3gnos 3gnou 3gnov 3g4nóra 5g4nóre. 5g4nórim 5g4nórin 5g4nóris 5g4nórit 3g4nóro 5g4nórun 3g4nósc 3g4nóss 3g4nóst 5g4nóuer 3g4nóui 5g4nóver 3g4nóvi g2ob2 3gog go3n go5ni5c go4nn go4nq go4nue go4nv go2p g1o2t go3th 3gōg g1ō2t g3ṓ4t g2ŏ 2gŏ. gŏb2 2gŏm gŏ2p 2gŏq 2gŏu 2gŏv 3góg g1ót gó2ti gœ̄3d g2r2 gra3d4 3grae gra4ia gra4iá gra4iæ gra4iǽ gra4ie gra4ii gra4ií 3gra͡ grā6iāne grā6iā́ne grăd2 3gráe 3græ 3grǣ 3grǽ gre3d4 gre5di gre5dī gres3 grĕ3d4 grĕ5dī grĕ2s3 grĕ́s3 grés3 gré6sti gri3n 2grī g2u gumi3 gus3 gūn4e gūn4ĕ 2gŭæ gŭ4ĕ́ 2gŭīs gŭ3m2ĭ gý3t h2a hab2 ha4c3ue hae2c3 ha2i ha2ī ha1m h3ang ha2o ha3re ha3rē hā2c1 hā2i hā2ĭ h2ă hă3b2 hă2ī h3ăng hă3ră hă3rē hă3rĕ h3ắng há2c3u háe2c3 há2i h3áng hæ2a hæ2ă hæ2á hæ2c1 hæ2i hæ2ŭ hǣ2a hǣ2ă hǣ2c1 hǣ2ŭ hǽ2c1 h2e he2a hed2 he2e he3g he2ia he2iá he2ic3 he2ie he2ié he2ii he2ií he2io he2ió he2í heíc3 he2lu he2nu he2o he3r2a hera3g he3rá he3r2æ he3r2e he3r4i heris3 he3rī he3ro hero5d he3se he2s3p hespe3 he2sq he2st he2u he2ū heū3s he2x h2ē hē2ia hē2iā hē2iá hē2iæ hē2iǣ hē2iǽ hē2ie hē2iē hē2iī hē2iō hēmĭ3s hē2nu hē3r hē4rn hē4rq hē4ru hē4rv hē3se hē3sĕ hēs3t h2ĕ hĕ2ă hĕ2ĭ hĕ3r4ĕ hĕ3rī hĕ3rŭ hĕ2sp hĕ2ū hĕū3s hé2i hé1m hé3r2a héra3g hé2ru hé2x h2i hi4c3ue hi2i hin2ā hi2o hio2s hi3p2t hi4s3t his5ta his5tā his5te hi3uu h2ī hī2cu hī3p2 hī3sŏ hī́3p2 hĭn2a hĭn2ā hĭn2æ hĭŏ3p hĭ3p2t hĭ4st hĭs5tā hĭs5tă hĭs5tĕ hĭ́p4t hí2c3u híp2t h2l 2h1m2 hmĭ2ă hmo4nu h1n2 hno3b2 hnu3 hn4us hnū3 h2o ho2a ho3b2 hobī3u hobī3v ho2c3u ho2e ho2i hoi3q ho2ī hoī3u hoī3v hoī́3u hoī́3v ho2í hon3g4 hongæ3 hongǣ́5 hongǽ3 ho2o ho2ō ho2ó ho5rén ho3rī ho2s ho3se ho3si ho3sí ho3spe hō2cu hōne4 hō2nu hō2sp h2ŏ 2hŏ. hŏ2ă hŏ3b2 hŏbī3u hŏbī3v 2hŏd hŏ2ī hŏī3u hŏī3v hŏī́3u hŏī́3v hŏ2ĭ hŏn3g4 hŏngæ3 hŏngǣ́5 hŏngǽ3 hŏ2ō hŏ3rī hŏ2s hŏ́3rĭ hŏ́4s hób2 hó2c1 hó3l hó2nu hó2sp 2hœ h2r2 hras5t hrăs3t hu2cu hu1i2 huic3 huí2 huíc3 hum2e h2ū hū2cu hū3l hū́3l hŭ3mĭ hú2c1 hú3iu iab2 iabo3l iab4u 1iac 3iact iad2æ3 iad2ǣ iad2ǽ ia3d2e iad2ē iad2é iad2i iad2ī i2ae ia3iú i3alt iamb2 iam5bi iambī5q iambī5u iambī5v iambī́5q iambī́5u iambī́5v 3iamī i3ang i3ann i1ap i2aq ia3re ia4rid ia4ríd ia3s4pe ia3spé ias3t ias5te ias5tr ia4tra ia4trá ia4tro ia4tró i2au i1a2x i2a͞ i2a͡ 2iāc i2ān2 3iānĕ 3iāquĕ i2āru 3iārŭ 3iāsnĕ 5iāsquĕ 3iāsuĕ 3iāsvĕ iā4trā 3iāuĕ 3iāvĕ i1ā2x 3iā́nĕ 5iā́quĕ 3iā́rŭ 5iā́snĕ 5iā́squĕ 5iā́suĕ 5iā́svĕ 3iā́uĕ 3iā́vĕ 1iă iăd2 iábo3 3iácu 2iád i2áe i3ált iám3b2 i4áne i3áng 2iáq iá4rid iá4tro i1á2x i2æ iæ2a iæ2á iæ2i i2ǣ iǣ2a i2ǽ ib2 i3biu ibī3u ibī3v 2iboe 2iboē 2iboé ibo3l i3bum ib4un i5bund 4ibu2s3 i3bū ib4ū́ 4ibús3 2ic. 2i3ca 2i3cā 2i3cá 2i3cæ 2i3cǣ 2i3cǽ 2iceb 2icen i4c3enn 2icet i3cēn 2icén i4c5énni 2icéq 2icéu 2icév i3cia. i3ciaq i3ciau i3ciav i3cii i3cií i3cium i3ciúm 2i3cīs i3cī́s i3cía 2icl 2icn 2i3co 2i3cō 2i3có 2icq 2ict i2c3u2t ic2ū 2icv i3d2a 2i3d2e ide3mé ide2s 2i3dē idē4iē idē3m idē2s 2i3dé 2i3d2i idi3g id3ips idi4s 2i3dī 2i3dí i3do id4or 2i3d2u 2i3dú 2ie. 1iec iece3 ie2e 2ieg ie4gn 2ieī 2ieí i2em 2ieo 2ieō 2ieó 2i2eq ie1r ie3r2e ie3rī i3erm ie2s i3e4sa i3esá ies3c i3ese i3esé i3e4si i3esí i3e4so i3esó ies5tā i3esú 2iete iete5re 2ietē 2ieté 2ietī 2i2eu ie2un 2ieú 2i2ev 1iex iex2i ie2xu 2ie͞ 2ie͡ 2iē. 1iēc 2iēg i2ēn iē3na 2iē3ne 2iēq 3iēquĕ iē2s iē4sa iē3sū 4iēta. 4iētae. 6iētaene 6iētaeque 6iētaeue 6iētaeve 4iētam 4iētan 4iētaq 4iētau 4iētav 6iēta͞e. 6iēta͞ene 6iēta͞eque 6iēta͞eue 6iēta͞eve 6iētá͞ene 6iētá͞eque 6iētá͞eue 6iētá͞eve 6iēta͡e. 6iēta͡ene 6iēta͡eque 6iēta͡eue 6iēta͡eve 6iētá͡ene 6iētá͡eque 6iētá͡eue 6iētá͡eve 2iētā 5iētānĕ 5iētāquĕ 5iētārŭ 5iētāsnĕ 5iētāsquĕ 5iētāsuĕ 5iētāsvĕ 5iētāuĕ 5iētāvĕ 5iētā́nĕ 5iētā́quĕ 5iētā́rŭ 5iētā́snĕ 5iētā́squĕ 5iētā́suĕ 5iētā́svĕ 5iētā́uĕ 5iētā́vĕ 6iētáene 6iētáeque 6iētáeue 6iētáeve 4iētám 4iētæ. 4iētæne 6iētæque 4iētæue 4iētæve 4iētǣ. 4iētǣne 6iētǣque 4iētǣue 4iētǣve 6iētǣ́ne 6iētǣ́que 6iētǣ́ue 6iētǣ́ve 4iētǽne 6iētǽque 4iētǽue 4iētǽve 4iētē. 4iētēn. 4iētēne 6iētēnne 6iētēnque 6iētēnue 6iētēnve 6iētēque 4iētēs. 6iētēsne 6iētēsque 6iētēsue 6iētēsve 4iētēue 4iētēve 6iētḗne 6iētḗnne 6iētḗnque 6iētḗnue 6iētḗnve 6iētḗque 6iētḗsne 6iētḗsque 6iētḗsue 6iētḗsve 6iētḗue 6iētḗve 4iētīs. 6iētīsne 6iētīsque 6iētīsue 6iētīsve 6iētī́sne 6iētī́sque 6iētī́sue 6iētī́sve 2i2ēu 3iēuĕ 2i2ēv 3iēvĕ 1iēx 3iḗc 2iḗg iḗ2s 4iḗta 4iḗtā 4iḗtæ 4iḗtǣ 4iḗtē 4iḗtī i2ḗu i2ḗv 1iĕ iĕ1r iĕ3r4ĕ iĕs3 1iéc 2iég ié4gn i2é1m 2iéne 2iéq i3érm ié2s ié4sa i3ése i3ési 2iéte 2iéu 2iév 1iéx ié2xu 2ié͞ 2ié͡ 2if ife6ste ig2a 1ig2æ3 1ig2ǣ 4igena 4igenā 4igená 4igenæ 4igenǣ 4igenǽ 4igenen 4igeneq 4igeneu 4igenev 4igenē 4igené 4igeni 4igenī 4igení 4igeno 4igenō 4igenó 4igenu 4igenú 4igéna ig2l i2gn ig3nat ig3nāt ig5nā́t ig3nát ig3nē i3gr 2i1h i3ha ihí3 i1i2a iiam3 i1i2á i1ie i1iē i1io i1ió i1iu i2iue i1iú i2ī 3iīnĕ 3iīuĕ 3iīvĕ 1iĭ 2ij 2i3le ilē3i ilḗ3i 2i3lé i3li ili4g5n ilí4g3 4ille. 4illen 4illeq 6illeue. 6illeve. 4illi. 4illiq 4illis 4illiu 4illiv 2illī 6illíne. 4illíq 4illís 4illíu 4illív 2illo 2illō 2illó 4illum 4illus. 4illusn 4illusq 4illusu 4illusv 4illúm 4illúsn 4illúsq 4illúsu 4illúsv 2ilo 2iló i2l3ua i2luā i2l3uá i2l3uæ i2luǣ i2l3uǽ il3ue. il3ues i2l3uē il4uēr il3ués il5uis. il5uisn il5uisq il5uisu il3uīs il5uī́s il5uísn il5uísq il5uísu i2luo i2luō i2l3uó i2luu i2luú i1m 2im. i3ma. i2mad ima4lu im2am im2an i3maq im2as i3mau i3mav imás3 i3mæ i3mǣ i3mǽ im3b2 im5biv imbī3q imbī3u imbī3v imbī́5q imbī́5u imbī́5v im2e 2imed ime5dá ime5de ime5dé 2imel 4imetr 2imēd 2imēl 4imḗd 4imḗl 2iméd 2imél 4i5métr im2i imi2a i4micu i4micú 3i2mie 3i2miē 3i2mié 3i2mii i4minē 4i5minī 3i2mir i4mitæ i4mitǽ i4mitu 3i2míc 3i2míi 3i2mír imí5tur 1imm 2imn imo4nu i4m3ord i4m3órd 1imp impe5r6ii impe5r6iī impe5r6ií impe5rin impe5riue impe5riv impe5r4ī 2imq 2imue 2imv i1n i3na. i3nae in4al i3nam i3n4aq i3nar i3nas i3nau i3n4av i3na͡ i3náe in4ál i3nám i3náq i3nár i3nás i3náu i3náv i3næ i3nǽ indi5st in4d3ue in4d3ui in4d3uī in4d3uí in4d3úe 2i3ne ine2d ine2l ine2x in3e͞ in3e͡ i3né iné2d 1inf i3ni. i3nia i3niá i3nib ini2c in3ice in3ici i3nii i3nií ini2m i3nin i3nio i3nió i3nis i3nit i3niu i3niú i3niv iní4ciā iní4cie iní4ciē iní4ciō i3nín i3níq i3nís i3níu i3nív 1inj 2i3no 2i3nō 2i3nó in5réq 1in1s2 insi5ti instre5 instré5 4int. in5ter inte5ron inte5rōn inte5rṓn inté6r5is 2inth 4intn 4intq 2intu 4intv 1in1u2 inu4b 4inum 2i3nus in1ū2 inū́4b inú2b in3únd 1inv io1 io2a iob2 iobo3 io2bó iom2 iome3 iome5d 2ion io3n2i io5ni5c 3iono 3ionó 2iope 2iopē 2iopé io3rī 2ios io2st iot4e io5ten iot4é io5tén i2ō iō3d 3iōnĕ 3iōrŭ 3iōuĕ 3iōvĕ 1iŏ i1ó2b ióbo3 2ióc 2ióni 2iós 2ipa 2ipā 2ipá 2i3pe ipe3r iper4a iper4ā iper4æ iper4ǽ iper4e iper4ē iper4o iper4ó 2i3pē 2ipé 2iph 2i3pi. 2i3pib 2i3pin 2i3piq 4i3pis. 4i3pisn 4i3pisq 4i3pisu 4i3pisv 2i3piu 2i3piv 2ipī. 2i3pīn 2ipīq 2ipīu 2ipīv 4i3pī́n 4i3pī́q 4i3pī́u 4i3pī́v 2ipín 2ipíq i4písc 4ipísn 4ipísq 4ipísu 4ipísv 2ipíu 2ipív 2ipl ip2ne ipo4s3 2i3pu ipu3l 2ipú 2ir. i1r2a irad2 ira3g iras7cen iras5t i1r2æ iræ3d i1r2ǣ irǣ3d i1re i3re3d4 ire5di ir3e4me ire4mér ir5e4mim ir5e4mis ire4mít i3r2ex2 ire5xi ir1ē iré4mer ir5é4mim i1rh i1r2i i2r3i2b iri4be i2r3i2m iri3n i1rī ir3í2b i2r3í2m i1ro i1rō 1irr ir5réq 2irrh ir5rue i1ru i2rue i1ry i1rý 2is. is2ad i2s3al is3a4tr i2s3ā2 isā́2 is4ád 2i2sc is3cæ i5scendamus i5scendamú i5scendant i5scendat i5scendámus i5scendánt i5scendát i6scende. i6scendene i6scendeq i6scendeu i6scendev i5scendé i5scendim i5scendit i5scendít i5scendun i5scendún is7cens. is7censn is7censq is7censv i5scéndant i5scéndat i5scéndens i5scéndent i5scénder i5scéndes i5scéndet i5scéndim i5scéndit i5scéndun i5s6cénsa i5s6cénsæ i5s6cénse i5s6cénsi i5s6cénso i5s6cénsu. i5s6cénsum i5s6cénsus is4cid i3s4cis i4s5cis. i4s5cisn i4s5cisq is5cisu i4s5cisv is3ciu is3civ is3cī is4cíd i5s4císs 2is2e 2isi i2s3i2c i2sie i2siē is4iue 2isí i2s3í2c 2ism 2isn 2iso 3i2sod 2isó 3isód i3spec is3per i5sperg isperi6n isperi6q isper7i6u isperi6v isperī6n isperī6q isperī6u isperī6v isperī́6n isperī́6q isperī́6u isperī́6v isperí6n isperí6q isperí6u isperí6v i5spers i3spex i3spéc i5spérg i5s4pérn i5spérs i3spéx is3pī 2i2s3q i3s4tab i3s4tan i5s4taue i5s4taué i5s4tave i5s4tavé is4tāb is4tāt is4tāu is4tāv i3s4táb i4s5táe is5the is5thé i2sti i3stil i2stī i2stí i3s4tíl i3stír is3to i5strin 2isu i4sue is3uis is3uís 2isú 2isv 2it. itas3t ita6ste 4itatem 4itates 4itatém 4itatés 4iter. ite3ra ite5re ite3ri iteri5ue iteri5v 4itern ite3rō 4iterq 4iteru ite5run 4iterv i3tē. i3tēn i3tēq i3tēu i3tēv i3téq 4itérn 4itérq 4itéru 4itérv i3téu i3tév 2ith i4tial i4tiál 2itn 4itōt 4i5tṓt 2itq i3tr it4ri 2itt 2itud i4t3ue. 2itūd 2itúd 2itv 2iu. 2i1ua 2i1uā 2i1uá 2i1uæ 2i1uǣ 2i1uǽ 1iub2 1iuc 1iud 2iud. iu2d3u i1ue i3ue. i4uerō 2i1uē i1ué 1iug i1ui 2iuia 3i2uiā 3i2uiá 3i2uiæ 3i2uiǣ 3i2uiǽ iuid4 iui3g4 2iuii 2iuiī 2iuií 2iuio 2iuiō 2iuió i5uis. i5uisn i5uisq i5uisu 4iuium 4iuius 2iuiú 2i1uī i1uí 2i3uía iuí3g4 i3uísn i3uísq i3uísu 3iulī 3iulu i2um iu3ma i3und 3iung 3iunx 2iuo 2i1uō 2i1uó 1iur iu2s3 i4us. 3iusd i4usn 3iusp i4usq i4usu i4usv 3iuua 3iuue 2i3uum 3iuuo 2i3uus 2i1uú 1iuv 1iu2x3 1iū iūn4e iūn4ĕ i2ūr iū3rē iū2s iū2x3 1i2ŭ iŭ2s iŭ́3b i2ú iúb2 1iúd iú2du 1iúg iú3lu 2iúm i3únd 3iúng 3iúnx 1iúr iú2s3 1iú2x 2iva 2ivá 2ivæ 2ivǽ i3ve. 2ivia 3i2viā 3i2viá 3i2viæ 3i2viǣ 3i2viǽ ivi3g4 2ivii 2iviī 2ivií 2ivio 2iviō 2ivió i5vis. i5visn i5visq i5visv 2iviu 2iviú 2ivī 2i3vía iví3g4 i3vísn i3vísq i3vísv 2ivo 2ivó 2ivu 2ivú 2ix2 ix4eu ixo3r ixu3 i2x3ue ix4us 2iz ī2a īa2m īa2t ī2ā īā2tr īā́4tr ī2ă ī2á2 ī2æ ī2ǣ ī2ǽ īb2 ība2 ī3bas ī3băs ībá2 ī3bás ībe3rō ībĕ3rŭ ībī3u ībī3v ībo2 2īc īca2r ī5cene ī4c3enn ī3cē ī5cĕnĕ ī4c3ĕnn īc3énn ī3ci ī3cī ī3cĭ ī3cí ī2c3ue ī2c3u2t ī2c3ŭt ī3cú 2īd2 īda2r īde2s īdē2s ī3do īd4or ī3du īdū2 ī2e īe2t ī2ē ī2ĕ īé2 īg2 ī3ga2 īgá2 ī3gæ3 ī3gǣ ī3gn īg4ne īg4nu īgo2 2ī1h ī3ha ī3hă ī1i ī2ī 2īl īle2i īle2r īlé2 īlo2 ī1m īm2a īm2e īm2i īm2ĭ īmo3 ī1n īn2ā īne2r īn2ĕ īné2 1īnf īno2 1īn1s2 īn2u ī2n3ue īn2ŭ 2īo īo3n īo4nn īo4nq īo4nv 2ī2ō 2īŏ 2īó 2ī2p ī3pa ī3pā ī3pă ī3pá ī3pæ ī3pǣ ī3pǽ ī3pe3 īper2 ī3pē ī3pĕ īpĕ3r4 īpĕ́3 ī3pé ī3ph ī3pi ī3pī ī3pĭ ī3pō ī3pu ī3pū ī3pŭ ī3pú ī1r īr2a īra3g īra2r īrās3 ī3r2ă īræ2ă īrǣ2ă ī3rēu ī3rēv īro2 īró2 īsa2r īsá2 īs3cæ īs3cǣ īs3cī 2īs2e 2ī3s2ĕ īs2i 2īsī 1ī2so 2īsō 1ī2sŏ 1īsó ī2sq īs4tíl īs3tr ī2sue ī2suĕ 2īsŭ 2īsú īta2r īta6ste ītăs5t ītă6stĕ īte5re 2ītē ītĕ3rĕ ī1u2 2īua 2īuā 2īuă 2īuá 2īuæ 2īuǣ 2īuǽ īuid4 īui3g4 īuĭ3g2 īuĭ́3g4 īuí3g4 ī2um ī2un īuo2 2īuō 2īuu 2īuŭ 2īuú 2īū ī2ŭ ī2ú 2īva 2īvā 2īvă 2īvá 2īvæ 2īvǣ 2īvǽ īvi3g4 īvĭ3g2 īvĭ́3g4 īví3g4 2īvō 2īvu 2īvŭ 2īvú īx2 īx4eu īxo4r ī2x3ue īx4us īxū3r ī2́ ī́b2 2ī́c ī́3ce ī́3cĕ ī́3cī ī́3cĭ 2ī́d2 ī́3g2 ī́g4n 2ī́h ī́5hai ī́5hăĭ ī́1i ī́3lu ī́1m2 ī́3met ī́3mĕt 3ī́n3s2 ī́3r2ă ī́3sĕ ī́4s3t ī́s5tr 2ī́ū 2ĭa 2ĭā ĭā4trā ĭ1ā2x 4ĭā́n ĭ3ā́2x 2ĭă ĭăb2 ĭă4cĕ́ ĭ2ăcŭ ĭăd2a ĭă2dă ĭăd2æ ĭăd2ǣ ĭăd2ǽ ĭăd2ē ĭă3d2ĕ ĭăd2ī ĭămb2 ĭămbī5n ĭămbī5u ĭămbī5v ĭămbī́5n ĭămbī́5u ĭămbī́5v ĭăm5bŭ ĭă2m3ĭ ĭ3ăng ĭă2nĭ ĭ2ănt ĭ1ă2p ĭ2ăq ĭ2ăr ĭă3rĕ ĭă3s4pĕ ĭăs3t ĭăs5tĕ ĭăs5tr ĭ2ăt ĭ2ău ĭ2ăv ĭ2ắc ĭắ3d ĭ3ắl ĭ2ắm ĭắm3b4 ĭắ2n ĭ3ắng ĭ2ắr 2ĭá 2ĭæ ĭæ2ă ĭæ2ŭ 2ĭǣ ĭǣ2ă ĭǣ2ŭ 2ĭǽ ĭbĕ3rŭ ĭb2ī ĭbī3u ĭbī3v ĭb2ĭ ĭb2ō ĭbŏ3l ĭb2r ĭ3b2ū ĭb4ū́ ĭ3bŭm 2ĭ3ca 2ĭ3cā 2ĭ3că 2ĭ3cá 2ĭ3cæ 2ĭ3cǣ 2ĭ3cǽ ĭ3cēn 2ĭ3cīs ĭ3cī́s 2ĭ3cō 2ĭ3cŏ ĭ2cu ĭc2ū 2ĭd ĭ3dă ĭ3dē ĭdē3m ĭdē2s ĭ3d2ĕ ĭ3dī ĭ3dĭ ĭdĭ3g ĭdĭ́3g ĭd3ĭ́p ĭ2d1u ĭ3d2ŭ ĭd4ŭĕ 2ĭ2e2 2ĭē. 2ĭēg 4ĭēnĕ 2ĭēq ĭē2s ĭ3ēsa ĭ3ēsē ĭ3ēsĕ ĭ3ēsī ĭēs3p ĭēs3t 2ĭēu 2ĭēv 2ĭḗg 4ĭḗq ĭḗ2s ĭ3ḗsē ĭ3ḗsĕ ĭ3ḗsī 4ĭḗu 4ĭḗv 2ĭĕ. 2ĭ1ĕg 2ĭĕī 2ĭ2ĕm 2ĭĕō 2ĭĕq ĭĕ3r2ĕ ĭ3ĕrm 2ĭĕtē 2ĭĕtĕ 2ĭĕtī 2ĭĕtĭ 2ĭĕtŭ 2ĭĕu 2ĭ2ĕŭ 2ĭĕv 2ĭ3ĕ́g ĭĕ́3rĕ 4ĭĕ́tĕ 4ĭĕ́tĭ 2ĭé ĭfĕ6stĕ 1ĭg2a 1ĭgá 1ĭg2æ3 1ĭg2ǣ 1ĭgǽ 4ĭgĕna 4ĭgĕnā 4ĭgĕnă 4ĭgĕná 4ĭgĕnæ 4ĭgĕnǣ 4ĭgĕnǽ 4ĭgĕnē 4ĭgĕnĕn 4ĭgĕnĕq 4ĭgĕnĕu 4ĭgĕnĕv 4ĭgĕnī 4ĭgĕnō 4ĭgĕnŭ 3ĭgĕs 4ĭgĕ́nă 4ĭgĕ́nĕ 3ĭgĭă 3ĭgĭb 3ĭgĭŭ ĭ2gn ĭg3nāt ĭg5nā́t ĭg3nē ĭg3nĭ ĭ3gr ĭ1h ĭhĭ́3 ĭ1i 2ĭī ĭ3ĭ2ă ĭĭăm3 2ĭle 2ĭ3lē ĭlē3i ĭlḗ3i 2ĭ3lĕ 2ĭlé 2ĭ3lī 2ĭ3lĭ 2ĭllĕ 2ĭllī 2ĭllō 2ĭllŭ ĭ2l1u ĭ1m ĭ2măd ĭmăs3 ĭm3b2 ĭmbī3n ĭmbī3u ĭmbī3v ĭmbī́5n ĭmbī́5u ĭmbī́5v 4ĭ5mĕtr 4ĭmĕ́tr ĭm2ĭ ĭmĭ2ă 3ĭ2mĭē 3ĭ2mĭĕ 3ĭ2mĭĭ 2ĭmĭn ĭ4mĭnē ĭ4mĭnĕ 1ĭmm 1ĭmp ĭmpĕ5rī ĭ2mu 2ĭmŭr ĭn1a 2ĭ3nă ĭn4ăn ĭn4ăq ĭn4ău ĭn4ăv ĭn1æ ĭndĭ5st ĭn4d3ŭĕ ĭn4d3ŭī ĭn4d3ŭĭ ĭn4d5ŭ́ĕ ĭn4dŭ́ĭ ĭn3e 2ĭ3nĕ ĭnĕ2d ĭn4ĕn ĭn4ĕu ĭn4ĕv ĭnĕ2x ĭnĕ́4d 3ĭngr 1ĭ2n1i 2ĭnī ĭ3n4ĭb ĭn5ĭbĭ ĭnĭ2c ĭ3n4ĭs ĭnĭ2t ĭnĭ́4cĭ ĭ3nĭ́s 1ĭnj 2ĭ3nō ĭnŏ4p ĭnŏ3s2 4ĭnt. 3ĭntĕ ĭntĕ5rōn 4ĭntn 4ĭntq 4ĭntu 4ĭntv 1ĭnu ĭn1ū2 ĭnū́4b 1ĭnŭ 1ĭnv 2ĭō 2ĭŏ ĭŏb2 ĭŏ2bŏ ĭŏm2 ĭ2ŏn ĭ2ŏr ĭŏ3rī ĭŏ2s ĭŏ́2b ĭ2ŏ́n ĭ2ŏ́r 2ĭpā 2ĭpē 2ĭpĕ ĭpĕ3rĕ ĭpĕ3rō ĭpĕ3rŏ 2ĭpī. 2ĭ3pīn 2ĭpīq 2ĭpīu 2ĭpīv 4ĭ3pī́n 4ĭ3pī́q 4ĭ3pī́u 4ĭ3pī́v 2ĭ3pĭ 2ĭpl ĭp2n 2ĭps. 2ĭpsn 2ĭpsq 2ĭp2su 2ĭpsv 2ĭpŭ 2ĭq ĭ3qu ĭ1r2a ĭ1ră ĭ1r2æ3 ĭ1r2ǣ ĭrǣ3d ĭr1ē ĭ1rh ĭ1rī ĭ2r1ĭ2 ĭrĭ́2 ĭ1rō ĭ1rŏ 2ĭrrh ĭ1rŭ ĭr4ŭn ĭ1ry 2ĭs ĭ2s3ā2 ĭsā́2 ĭ2s1ă ĭs2ăd ĭ2sc ĭs3cī ĭ3s4cĭs ĭ5s6cĭ́ss ĭ2si ĭs1ĭ ĭsĭ2c ĭsĭ́4c ĭ3spĕc ĭs3pĕr ĭ5spĕrg ĭspĕrī6n ĭspĕrī6q ĭspĕrī6u ĭspĕrī6v ĭspĕrī́6n ĭspĕrī́6q ĭspĕrī́6u ĭspĕrī́6v ĭspĕ4r5ĭ ĭ5spĕrs ĭ3spĕx ĭ5spĕ́c ĭspĕ́4r5 ĭ5spĕ́rg ĭ5spĕ́rn ĭ5spĕ́rs ĭ5spĕ́x ĭs3pī 3ĭssĭs ĭs4tāb ĭs4tāns ĭs4tāt ĭs4tāu ĭs4tāv ĭs4tā́b ĭ3s4tăn ĭ3s4tĕm ĭ5s4tĕ́m ĭ3s4tĭm 2ĭt. ĭ3tē. ĭ3tēn ĭ3tēq ĭ3tēu ĭ3tēv ĭ3tōt ĭ3tṓt 2ĭtŏ ĭ3tr ĭ2tu 2ĭ3tŭr ĭ3tŭ́r ĭ1u ĭ3uĕ 2ĭuī ĭ1ūs 2ĭŭ2 ĭ1ŭb ĭ3ŭnd ĭ3ŭ́nd ĭ3vĕ 2ĭvī ĭx2a ĭx2ā ĭx2ă ĭx2ǣ ĭx2ĕ ĭx2ī ĭx2ĭ ĭx2ō ĭx2ŏ ĭ2xu ĭx2ŭ ĭ2́ 2ĭ́ă ĭ́b2ī ĭ́bŏ3l ĭ́b2r 2ĭ́d ĭ́2d3u ĭ́2ĕ 2ĭ́ĕt 3ĭ́gĭă 3ĭ́gĭb 3ĭ́gĭŭ 2ĭ́l ĭ́5lĭn ĭ́l3u ĭ́m3b2 3ĭ́mĭĭ ĭ́4mĭnē ĭ́5mĭnī 3ĭ́mm ĭ́n4d5ŭī ĭ́n4dŭĭ ĭ́n3ĕs ĭ́n3ī 3ĭ́nj ĭ́nŏ4p 3ĭ́ntĕ5 ĭ́n5ŭīs ĭ́n5ŭōs ĭ́n5ŭŭm ĭ́n5ŭŭs ĭ́ŏ1 ĭ́rĭ4m 2ĭ́s ĭ́4spĕr 5ĭ́ssĭs ĭ́5s4tān ĭ́s4tĕm 2í2a íad2 ía3g ía1m ía1s íb2e íbe3r íb2i íb2ī íb2o íbo3l íb2r íb2u í3bum 2íc. 2íca 2íce. 2ícem 2íces 2ícet 2í3ci. 2í3cis 2ícl 2ícn 2íco 2ícq 2íct í2c3u2t 2ícv 2íd í3d2e íd2i íd2u í3duu í2e1 2íei 2íeī 2íen 2íeo 2íeō 2íeq 2íet 2íeu 2íev 2íf ífe1 íg2a í3gæ 4ígena 4ígenā 4ígenæ 4ígenǣ 4ígenē 4ígeni 4ígenī 4ígeno 4ígenō 4ígenu í2giī í2giō í2gn 2í1h í3ha í1i 2íi. í2im 2í2is í2it í3li 2ílle 4ílli. 4íllis 2íllī 2íllo 2íllō 2íllu íl1u í2lua í2luā í2luæ í2luǣ í4luis íl4uit í4luiu í4luīs í2luu 2í1m2a 2ím3b2 ím2e 2ímet ím2i í4minē í5minī 1ímm 2ímn í1mo ímpe3 2ímq ím2uī 2ímv ín2a ín3de ín4d3i4g índo4 ín4d3ol ín4due ín4d3ui ín4d3uī 2íne íni4cit ín1ī 1ínj ín3o4p 1ín1s2 ín2t ínte3 ínte5r 2ínth 2íntn ín3to 2íntq 2íntu 2íntv í1nu ín2ua ín2uā ín2uē ín2ul í3nus 2í2o1 2íp ípe3 í3pi í2pn ípte3 ípu3l í1r ír2a íra3g ír3i4be ír3i4bē ír3i4ma ír3i4mā ír3i4me ír3i4mē ír3i4mi ír3i4mī ír3i4mo ír3i4mō 1írr ír5rue í2rue 2ís í2s3c ís4cid ís2i í2s3i2c í4sper ís3pī ís3q ís4tans í3s4tān ís4tem ís5tim ís5tin ís3to ís3uis íte1 í2tu í3tu. í3tui 4ítuis 4ítuīs í3tum 2ítuo 2ítuō í3tus 2ítut í1u2 2íu. í3ub 2íud 2íuia 3í2uiā 3í2uiæ 3í2uiǣ 2íuii 2íuiī 2íuio 2íuiō 2íuiu 2í2um í2un íuo1 2ívia 3í2viā 3í2viæ 3í2viǣ 2ívii 2íviī 2ívio 2íviō 2íviu ívo1 2íx íx2a íx4eu íx2i íx2ī íx2o íx2ō í2xue íx4us 1j j2a jab2 jad2 jadæ3 ja2x3 jān2 2jāx jăd2 já2x jece3 je1r jes5tā jex2i je2xu jē3sū jĕ1r jĕ3r4ĕ jĕs3 jé2xu jo1 jo2a jon2 jo2s jón2 jub2 ju3ma ju3ri ju2s3 ju2x3 j2ū jūn4e jūn4ĕ jū3rē jū2s jū2x3 j2ŭ jŭ2s jŭ́3b júb2 jú2s3 jú2x 1l l2a la3b2 lab4a labī3u labī3v lab4u la3cr la4c3ue la3cū lad2 lae4s5t la3g la2i la3s4pe la3spé las3t las5tr late4i latē2 la3tr la5trí la͞e4st la͡e4st l2ā lā3cr lā3g lā2ia lā2ic lā4iīs. lā6iīsne lā6iīsque lā6iīsue lā6iīsve lā6iī́sne lā6iī́sque lā6iī́sue lā6iī́sve lā2iu lā2iú lā2ĭ lā́3cr l2ă lă3b2 lăbī3u lăbī3v lă3cū lăs3t lăs5tă lăs5tr lă5trĭ l2á láb2 lá4c3ue láe2c3 láes5t lá3g lá2i læ2a læ2ă læ2á læ3d læ2i læ3q læ2st læ3ue læ3uĕ læ2ŭ læ3v lǣ2a lǣ2ă lǣ3d lǣ3q lǣ2st lǣ3ue lǣ3uĕ lǣ2ŭ lǣ3v lǽ2c1 lǽ2st 2lb2 l3bi lbī3u lbī3v l3bu l3bŭ 2lc lce1 2ld lda1 lde3 l2e le3br le3bu le2e le3go le3gō le2iá le2ii le2ií le2io le2ió le2iu le2iú le3l lelu3 le1r ler2æ3 lere3ā ler4i le3rī 2l3ers 2l3ert les3c le2s3p les3t le2un le2ur leu5rá leu5re leu5ré lex2 le3x4e le3xi lexu3r lexū3r l2ē lē3bu lē3bŭ lē2iá lē2ie lē2iō lē2iu lē2iú lē3ne lē3nĕ lē2sp lēs3t 3lēx l2ĕ lĕ2ă lĕ3gō lĕ2ĭ 2lĕp lĕ3r4ĕ lĕrĕ3ā lĕ3rī lĕ3rŏ 2l3ĕrs 2l3ĕrt lĕ3rŭ lĕs3 lĕx2 lĕxū3r l3ĕ́rs l3ĕ́rt lĕ́s3 lé3br 3lég lé3iō 2l3érs 2l3ért lés3t lé3uō léx2ī 2lf 2lg2 l3ga l3gæ3 l3gǣ l2i li2a 3libe li3g4ni li2i 3liī lin2ā lino3s li3q li4s3c lis5ci li4st lis5ta lis5tā li3u2b 4liud 2lix lī3q lī2xu lī́3q l2ĭ lĭ4ắ 3lĭbĕ lĭ4ēn 3lĭĕ 3lĭī 3lĭm 3lĭn lĭn2a lĭn2ā lĭn2æ lĭn2ĕ lĭnĭ5tĕ lĭnĭ5tō lĭs3 lĭ4st lĭs5tā lĭs5tă 2lĭŭd lí4c3ue lí3q lí3tur 2lj 2ll2 lle2i lle2x llē2i lli4c3u llu2d3 llū2 l3lŭ llú2 2l1m2 2l1n2 l2o lo2a3 lo2ā lo2á lo3b2 lo4bn lo4cue lo2e logæ3 longǣ4u longǣ4v lo3ni lo5ni5c lo5níc lo4rn lo4rq lo4rv lo2sp los3t lo2x3 lō3d2 lōe2 lō3r lṓr2 lṓ4s5t l2ŏ lŏ2ā lŏb2 lŏngǣ4u lŏngǣ4v lŏ2s ló2x 2lp lpe3r2 lpĕ3rĕ l3pi l3pĭ lpo4s3 2lq 2l1s2 l2s3t 2lt lte1 lter4a lte5re lte5ré lteri5ue lteri5v lte5rī lterī5ue lterī5v ltĕ3r4a ltĕ3rǣ ltĕ5rī ltĕrī5u ltĕrī5v ltéri5t l1uā l1uă l1uǣ l2u3b2 lu3do l3uea l3ueā l3ueá l3uee l3uei l3ueī l3ueí l3ueo l3ueō l3ueó 2lues lue6ste l3ueú 2l3uĕ luĕ6stĕ l3uée 2l3uia 2l3uiā 2l3uiá 2l3uiæ 2l3uiǣ 2l3uiǽ 2l3uic 2luif 2l3uii 2l3uiī 2l3uií 2l3uio 2l3uiō 2l3uió l3uium l3uius 2l3uiú l1uĭ 2l3uía 2luíc 2luíf l3uína l5uínen l5uíneq l5uíneu l2um lumi3 3l2un l1uō lu1r luru3 lusa4t lu2s3ā2 lu2tī lu3xo lū3d lūru3 lŭ3b2 2lŭc 2l1ŭ2t lŭ́4s lŭ́s5t lŭ́3u lŭ́3v lúb2 lú3ia lú1r 2lv2 lve6ste lvĕ6stĕ 2l2x2 lx3u lý2c 2lz 1ma. 1mab2 m1ad ma2du 3m2ae ma2ga ma2gā ma2gá ma2ge ma2gé ma2gī ma4g3n ma2gō ma2gu ma2gú ma1i ma4ia. ma4iae ma4iam ma4ian ma4iaq ma4iar ma4ias ma4iau ma4iav ma4ia͞ ma4ia͡ ma4iā. ma4iān ma4iāq ma4iār ma4iās ma4iāu ma4iāv ma4iā́n ma4iā́q ma4iā́r ma4iā́s ma4iā́u ma4iā́v ma4iáe ma4iám ma4ián ma4iár ma4iás ma4iáu ma4iáv ma2iæ ma2iǣ ma2iǽ ma4iis ma4iīs ma4iī́s ma4iís ma3io ma3ió ma2iq ma4iue ma3iú ma2iv 1mal mali3g4 malí3g4 mal4ui ma4l3uī m1am mam4b3i4 mambī4 mambī́4 mam4b3í4 m2ami 1man ma3ni. ma3nin ma3niq ma3nis ma3niu ma3niv ma3nín ma3níq ma3nís ma3níu ma3nív man3s man5s4i mansi5u mansi5v man5s4í 1m2a3q ma2rā m2aru 3masi 3masí mas2p mas3t 1mat ma3tr 1m2au 1mav 3m2a͞ 3m2a͡ 1m2ā m3āc mān3sa mān3să mān5s4i mān3s4ī mānsī5n mānsī5q mānsī5u mānsī5v mān5s4ĭ 2m3ā2x m3ā́c mā́n5s6i mā́n5s6ĭ 2m3ā́2x 1mă. m1ăd mă2gā mă2gă mă2gī mă2gō mă2gŏ mă2gŭ mămbī4 mămbī́4 măm4b3ĭ 1m2ăn 3mănĕ 2m3ănĭ mă4nĭ́ 3măntē 3m2ă3q m3ă2rā mă4răn mă4răt mă4rĕr mă4rĕt m3ă2rŏ măs2p 1m2ăt 3m2ău 3m2ăv 1m2ắ 4m3ắnĭ 1má 3m2áe má4gn má1i má4iīs má3io má4luī mám4b3i m2án mán3s4i m2ár 2máræ m2áu 1m2æ mæ2a mæ2ă mæ2á mæ2i mæ2st mæ2ŭ 1m2ǣ mǣ2a mǣ2ă mǣ2st mǣ2ŭ 1m2ǽ 2mb m2b3ag mb2al m4baru m4barv m2bă m3bắr mb2ác mbæ3 m3be. m3bea m3beá m2be4d m3ben m3beo m3beó m3b2eq mb3es m3beu m3beú m3bev m2b3ēs m2bĕd m3bĕn mb3ĕ́4d m2bé2d m2bés m4b3iam m4b5iant m4b3iar m4b3ias m4b5iat. m6b5iatis m6b5iatís m4b5iatn m4b5iatq m4b5iatu m4b5iatú m4b5iatv m4b3iām m4b3iār m4b3iās m4b5iāti m4b5iātí m4b5iātu m4b5iātú mb3iā́ m4biā́m m4biā́r m4biā́s m4biā́t m2b3iá mb2i3c m2bie mbi3eg m2biē m2bié mbi3ég mb6igene m2bii m2b3iī m2b3ií m4b3i4mi mbi4mur mbi4múr m4b3io. m4b3ion m4b3ioq m4b5ior. m4b5iorn m4b5iorq m4b5ioru m4b5iorv m4b3iou m4b3iov m2b3iō m2b3ió m4b3iss m4b3ist m4b3i4ta m4b3i4tá m4b3i4tæ m4b3i4tǽ m4b3iti mbi4ti. mbi4tib mbi4tin mbi4tió mbi4tiq mbi4tiu mbi4tiv mbi4tín mbi4tíq mbi4tíu mbi4tív mb3ito mbi4tor mbi4tos mbi4tór mbi4tós m4b5i4tu. m4b5i4tum m4b5i4tun m4b5i4tuq m4b5i4tur m4b5i4tus m4b5i4tuu m4b5i4tuv m4b3i4tū mb3i4tú m2b3iú m4bive m2bī2 mbī́2 mbī́4t m4b3ĭām m4b3ĭār m4b3ĭās m4b5ĭātĭ m4b5ĭātŭ mb3ĭā́ m4bĭā́m m4bĭā́r m4bĭā́s m4bĭā́t m2b3ĭă mb2ĭ3c m2bĭē m2bĭĕ mb6ĭgĕnĕ m2b3ĭī m2bĭĭ m2b3ĭō m4b5ĭŏr. m4b5ĭŏrn m4b5ĭŏrq m4b5ĭŏru m4b5ĭŏrv m4b3ĭŏ́ m4b3ĭtĭ m4b3ĭ4tū m4b5ĭ4tŭm m4b5ĭ4tŭs mbĭ6tŭ́m mbĭ6tŭ́s m2b3ĭŭ m4b3ĭ́ĕ m4b3ĭ́ĭ m4b5ĭ́4tĭ mb1í mb2í3c m2bíe mb4ígen m2bíi m4bí4mi m4b3íss m4b3íst mbí2t mbí4tu. mb4ítui mb4ítuī mbí4tum mbí4tus mb2l mb2o mbo3r mb2ō m3b2r m3bu m5bus. m5busn m5busq m5busu m5busv m2b3ūs m3bŭ 2mc2 2md2 mde3d mde2s mdē2s mdĕ3d m3do md4or 1me mea3p2 meá3p2 m2eb med2 me4dam me4dan me4dat 2me2dā me4dám me4dán me4dár me4dát me4deb me4den me4der me4det 2me2dē me4déb me4dén me4dér me4dét med4i me4dim 2me2dī me4dím me4dít med4o me4dor me4dō. me4dōq me4dōu me4dōv me4dór me4due me4dún me2e mee3ri mee3rí m1eg me2ge me2gé me2gi me3go me3iá me3ie me3io me3ió me2it me3iú me3íp m2em m2en 3mena 3mená men2e me3neu 3mené 3meni 3mení me3p2 m1eq m2er me3ra me3rē me3ri 4merim me3rī 2m3erm me3ro me3rō me3r2u 2m3eso me4so. me4son me4soq me4sor me4sou me4sov 2m3e2só me2sp 2m3ess 5messat 5messát mes3t me2su m4esue 4m3esum 4m3esus 2m3e2sú 3mete mete3r meteri5ue meteri5v 3meté 2mets me2un m2ev m2e2x 1mē mē4der mē4dēr mē4dĕr mē4dér mē4dim mē4dit mē4dĭm mē4dĭt mē4dít mē2du m1ēg mē2ge mē2gē mē2gĕ mē2gé mē2gi mē2gĭ mē2gí mē3i m2ēl m2ēm m2ēn mē3ne mē3p2 3mēq m2ēr 2m3ē4sa 2mē2sā 2mē2să 2mē2sá 2mēsæ 2mēsǣ 2mēsǽ 2mēsō mēs3t mē2su 4mēsum 4mēsus 2mē2sŭ 2mēsú 3m2ēu 3m2ēv mḗ4der mḗ4dĕr mḗ4dim mḗ4dit mḗ4dĭm mḗ4dĭt mḗ4gi mḗ4gĭ mḗ3i mḗ3p2 4mḗsa 4mḗsā 4mḗsă 4mḗsæ 4mḗsǣ 4mḗsō 4mḗsum 4mḗsus 4mḗ4sŭ m2ḗu m2ḗv 1mĕ mĕ2ă m1ĕd2 2mĕ2dā 2mĕ4dă 2mĕ2dē 2mĕ2dĕ 2mĕ2dī 2mĕd4ĭ mĕ4dĭs mĕ4dō. m2ĕdŏ mĕ4dŏr 2mĕ2dŭ mĕ2ĕ 2mĕg mĕ2ĭ mĕ3ĭp m2ĕm m2ĕr 4mĕrăm mĕ3rē mĕ3r4ĕ mĕ3rī 4mĕrĭm 4mĕrĭn 2m3ĕrm 3mĕ3rŏ mĕ3rŭ mĕ2sp m2ĕt mĕ2t3ĭ 2mĕts m2ĕ́ m3ĕ́2d 5mĕ́ntĕr 5mĕ́ntĭŏ 5mĕ́ntĭŭs m3ĕ́2q mĕ́r6ĕă 4m3ĕ́rm 5mĕ́tr 4mĕ́ts 1mé mé4der mé4dim mé4dit mé2du mé3i mé4is m2ém 5ménter 5méntio 5méntius mé3p2 m2ér mér4e 4mérim 2m3érm mér4ui mér4uī 4mérun 2mésæ 2méso 2m3éss 4méste 4méstn 4mésto 4méstq 4méstu 4méstv mé2su 4mésu. m4ésue 4mésum 4mésus 2méts 3méu 3mév mé2x 2mf mge6ste mgĕ6stĕ 2m1h 1mi m2ia. mi3ad m2iae mi3a2g mi3al m2iam miam4b3 mia2p m2ias mi3ass mi3atr m2ia͞ m2ia͡ m2iā mi3ātr mi3ā́x mi3áss m2iæ m2iǣ mi2be mi2bé m3ict m2id 3mie. 3mieq 3mieu 3miev m2ig m2iīs m2il mi3n4a min2ā min4e min2i mini3m min4in min4iq min4is min4iu min4iv mi3n4ī miní4ci min4ín min4íq min4ís min4íu min4ív m2i3n4u minu3d min2ū minū3d mi3nú m2io mio2s m2iō m2ió m2is mi3sa mi3sá mi4s5ci mi3scr mis2i mi4sn mi3s2p mi4sq mi4s5ta mis5tā mis5te mi4sv m6itate. 5mitatem m6itatene m6itateq 5mitates m6itateu m6itatev 5mitatém 5mitatés m4itati m4itatí m6itatum m6itatúm m4itáte 5mitátem 5mitátes m4itáti m6itátum mi2tū mi4um 2miur m2i1ū m2iú mi3úst 1mī 2mīc m2īn mī3nĕ m2ī3q m2īs. mī2sc m2īsn mī3so mī3sŏ m2īsq m2īsu m2īsv mī3ue. mī3uĕ. mī3ve. mī3vĕ. mī́4ba mī́4bā mī́4bă mī́4be mī́4bĕ mī́4bo mī́4bō mī́4bŏ mī́4bu mī́4bŭ 2mī́c m2ī́n m2ī́q 1mĭ 3mĭa 3mĭā mĭ3ātr mĭ1ă 3mĭă. mĭă2g 3mĭăm 2mĭăr 3mĭá 3mĭæ 3mĭǣ 3mĭǽ 3m2ĭb mĭ4cĭt 2mĭcŏ 3mĭĕ. mĭ4ĕn 3mĭ4ĕq 3mĭ4ĕu 3mĭ4ĕv 3mĭīs 3m2ĭl mĭn2ā mĭn4ĕ 4mĭnĕŏ mĭ3n4ī mĭn2ū mĭnū3d mĭnū3t 3m2ĭ3n4ŭ 3mĭō mĭ3r mĭ3s4ă mĭ3scr mĭ3s2p mĭs5tā mĭ4s5tă mĭs5tĕ m3ĭ2tū mĭ1ū 3mĭŭ 3mĭ́ă mĭ́4cĭ mĭ́3d mĭ4́n mĭ́3sp mĭ4́t 1mí mí2ba mí2be mí2bu m3íct mí1m mí3n4u mí3s2p mí4tiō mí4tiu mí3tuu 2ml2 m3lu 2m1m2 mmi6sta 2m1n2 m3ne m3nē m3né 1mo. 2mob mob3r 1moc modes3 m2oe mo2ī 1mol 1m2on mo3ni monó3 mon4s3 mo3n2u 1moq 1m2or mo3rī 3m2os 1mou 1mov 1mox m2o͡ 1mō m2ōn mōn4s3 2mōrd m2ōs mōs3t mṓn4s 4mṓrd 1mŏ 3mŏ. mŏ2c mŏ2ī 3mŏn 3mŏq m2ŏr mŏ3rĕ mŏ3rī 3mŏs mŏs2p 3mŏu 3mŏv mŏ́b3 m2ŏ́r mŏ́3rĭ 1mó 2m1ób mó2c m2óe món4s3 m2ór 3m2ós m2œ 2mp mpe4ior mpe4iór mpe4iu mpe4iú mpe3r4a mper4ā mpe5rem mpe5r4er mpere5ra mpere5ri mpere5rō mpe5res mper4ē mperi4b mpe6riens mper6iere mper6ieris mper6ierís mper6iēn mper6iēre mper6iḗn mper6iḗre mper6iére mper4im mpe5rimi mpe5rimur mperi6mus mpe5rimúr mperi6mús mper4ir mperi6re. mperi6rem. mpe5riremi mperi6remn mperi6remq mperi6remue mpe5riremur mperi6remus mpe5riremúr mperi6remús mperi6remv mperi6rene mperi6rent. mperi6rentn mperi6rentq mperi6rentue mpe5rirentur mpe5rirentú mperi6rentv mperi6req mpe5rirer mperi6res mperi6ret mperi6reu mperi6rev mpe5rirémi mperi6rémn mperi6rémq mperi6rémue mpe5rirémur mperi6rémus mperi6rémv mperi6réntn mperi6réntq mperi6réntue mpe5riréntur mperi6réntv mpe5rirér mperi6rés mperi6rét mpe5riri mpe5rirí mpe6risse mpe6rissé mpe6risti mpe6ristí mper4it mperi6te mperi6ti mperi6tí mperi6to. mperi6ton mperi6toq mpe5ritor mperi6tot mperi6tou mperi6tov mperi6tón mperi6tóq mpe5ritór mperi6tót mperi6tóu mperi6tóv mperi6tu mperi6tú mpe5riú mpe6rī6mus mpe6rī6mús mper4īr mpe6rī6re. mpe6rī6rem mpe6rī6rene mpe6rī6rent. mpe6rī6rentn mpe6rī6rentq mpe6rī6rentue mpe6rī6rentv mpe6rī6req mpe6rī6ret mpe6rī6reu mpe6rī6rev mpe6rī6rēmus mpe6rī6rēmús mpe6rī6rēs mpe6rī6rēt mpe6rī6rḗmus mpe6rī6rḗs mpe6rī6rḗt mpe6rī6rém mpe6rī6réntn mpe6rī6réntq mpe6rī6réntue mpe6rī6réntv mpe6rī6rét mpe4rīs mpe6rī6te mpe6rī6ti mpe6rī6tí mpe6rī6tō mpe6rī6tu mpe6rī6tú mpe6rī́6mus mper6ī́r mpe6rī́6re. mpe6rī́6rem mpe6rī́6ren mpe6rī́6req mpe6rī́6ret mpe6rī́6reu mpe6rī́6rev mpe6rī́6rē mpe6rī́s mper6ī́sn mper6ī́sq mper6ī́su mper6ī́sv mpe6rī́6te mpe6rī́6ti mpe6rī́6tō mpe6rī́6tu mper6ī́u mper6ī́v mpe4ríe mper4ím mpe6rí6mus mper4ír mpe6rí6re. mpe6rí6rem mpe6rí6ren mpe6rí6req mpe6rí6res mpe6rí6ret mpe6rí6reu mpe6rí6rev mpe6rísse mpe6rísti mpe4rít mperí6te mperí6ti mperí6to. mpe5rítor mper4íu mper4ív mpe3r4o mpe3rō mper4ó mpe6ste mpē4iē mpĕ4rĕā mpĕ4rĕă mpĕ4r5ĕō mpĕ6rī6mŭs mpĕ6rī6mŭ́s mpĕ6rī6rēmŭs mpĕ6rī6rēmŭ́s mpĕ6rī6rēs mpĕ6rī6rēt mpĕ6rī6rḗmŭs mpĕ6rī6rḗs mpĕ6rī6rḗt mpĕ6rī6rĕ. mpĕ6rī6rĕm mpĕ6rī6rĕnĕ mpĕ6rī6rĕnt. mpĕ6rī6rĕntn mpĕ6rī6rĕntq mpĕ6rī6rĕntu mpĕ6rī6rĕntv mpĕ6rī6rĕq mpĕ6rī6rĕt mpĕ6rī6rĕu mpĕ6rī6rĕv mpĕ6rī6rĕ́m mpĕ6rī6rĕ́ntn mpĕ6rī6rĕ́ntq mpĕ6rī6rĕ́ntu mpĕ6rī6rĕ́ntv mpĕ6rī6rĕ́t mpĕ4r5īs mpĕr6īs. mpĕr6īsn mpĕr6īsq mpĕr6īsu mpĕr6īsv mpĕ6rī6tĕ mpĕ6rī6tĭ mpĕ6rī6tō mpĕ6rī6tŭ mpĕ6rī́6mŭs mpĕ6rī́6rē mpĕ6rī́6rĕ. mpĕ6rī́6rĕm mpĕ6rī́6rĕn mpĕ6rī́6rĕq mpĕ6rī́6rĕt mpĕ6rī́6rĕu mpĕ6rī́6rĕv mpĕ6rī́s mpĕr5ī́ss mpĕr5ī́st mpĕ6rī́6tĕ mpĕ6rī́6tĭ mpĕ6rī́6tō mpĕ6rī́6tŭ mpĕ6rĭēn mpĕ6rĭērĕ mpĕ6r5ĭērŭ mpĕ6rĭḗn mpĕ6rĭḗrĕ mpĕ6r5ĭḗrŭ mpĕ6r5ĭĕr mpĕ6r5ĭĕ́r mpĕ6rĭtn mpĕ6rĭtq mpĕ6rĭtu mpĕ6rĭtv mpĕ6r5ĭ́ĕ mpĕ6rĭ́t mpĕ3rō mpĕ3rŏ mpĕ6stĕ mpĕ́6r5ĕā mpĕ́6r5ĕă mpĕ́6r5ĕō mpĕ́6rĭēn m3pé mpé4r5ea mpé4r5eā mpé4r5eo mpé4r5eō mpére5r mpé4ri. mpé6riens mpé6riēn mpé4rit m2pn mp2ne mp2su 2mq m3qu m1r mro3 mrod4 mro5di mrodi5u mrodi5v mrō3d4 mrō5dī mrōdī5u mrōdī5v 2m1s2 msed4 mse5di msēd4 msē5di msē5dĭ mso3 m2s3q m3st m2s3u 2mt mte3r4 mte5re mter6it mteri5tur mteri5u mteri5v mte5rī mterī5u mterī5v mtĕ3r4 mtĕ5rĕ mtĕrĕ5r mtĕ5rī mtĕrī5u mtĕrī5v mto1 mto2s m1ua m1uā m1uă m1uá 2m1ue 4m3ue. m1uē m1uĕ m1ué m1ui m2ui. 2mui2c3 m2uim m2uin m2uiq 2muir m2uit m2uiu m1uī2 m2uī. muīc3 m2uīn m2uīq m2uīu m1uĭ 2m3uír 1m2ul 3m2um 2m3unc muol3u m1uó 1m2ur 1mus 2m3ust 1mū m3ūnc 2m1ūs mū2su 1mŭ m2ŭl 3m2ŭm m2ŭs m2ŭ́ 3mŭ́m 1mú 3m2úm 2m3únc m2ús 2m3úst 2mv2 m3ve mvi2c3 mvī2 mvīc3 m2x2 1m2y my2s 1mý 2mz 1na nab2o na2br na2cr n1ad n2ada nae2s n2aeu n2aev na3ge na3gr na2i nai4m na2ī 3nal na2ni n3a2ní na2o na3q n2ar nas7cend n4aue na2x3 n2á͞ n2á͡ 1nā nā5bun 3nāc nā2i nā2ĭ n1ā2n nās3 nā́4ni nā́4nĭ 1nă n1ăb nă2br n1ăd n2ădă n2ăg nă3gĕ nă3gr nă2ī nă2nĭ n2ăp nă3q năs2p 2năth nắ2n 1ná n2áb ná2i 3nál ná2ni n2ár ná2x 1næ næ2a næ2ă næ2á næ2i n2æu næ2ua næ2uā næ2uă næ2uá næ2uæ næ2uǽ næ4uen næ4ueq næ4ueu næ2uē næ4uĕn næ4uĕq næ4uĕu næ2ué næ2ui næ2uī næ2uí næ2uo næ2uō næ2uó næ4uum næ4uus næ4uŭm næ4uŭs næ4uúm næ4uús næ2ŭ n2æv næ2va næ2vā næ2vă næ2vá næ2væ næ2vǽ næ4ven næ4veq næ4vev næ2vē næ4vĕn næ4vĕq næ4vĕv næ2vé næ2vi næ2vī næ2ví næ2vo næ2vō næ2vó næ4vum næ4vus næ4vŭm næ4vŭs næ4vúm næ4vús 1nǣ nǣ2a nǣ2ă nǣ2ua nǣ2uā nǣ2uă nǣ2uá nǣ2uǣ nǣ4uen nǣ4ueq nǣ4ueu nǣ2uē nǣ4uĕn nǣ4uĕq nǣ4uĕu nǣ2uī nǣ2uō nǣ4uum nǣ4uus nǣ4uŭm nǣ4uŭs nǣ4uúm nǣ4uús nǣ2ŭ nǣ2va nǣ2vā nǣ2vă nǣ2vá nǣ2vǣ nǣ4ven nǣ4veq nǣ4vev nǣ2vē nǣ4vĕn nǣ4vĕq nǣ4vĕv nǣ2vī nǣ2vō nǣ4vum nǣ4vus nǣ4vŭm nǣ4vŭs nǣ4vúm nǣ4vús nǣ́4ua nǣ́4uā nǣ́4uă nǣ́4uǣ nǣ́4uen nǣ́4ueq nǣ́4ueu nǣ́4uē nǣ́4uĕn nǣ́4uĕq nǣ́4uĕu nǣ́4uī nǣ́4uō nǣ́4uum nǣ́4uus nǣ́4uŭm nǣ́4uŭs nǣ́4va nǣ́4vā nǣ́4vă nǣ́4vǣ nǣ́4ven nǣ́4veq nǣ́4vev nǣ́4vē nǣ́4vĕn nǣ́4vĕq nǣ́4vĕv nǣ́4vī nǣ́4vō nǣ́4vum nǣ́4vus nǣ́4vŭm nǣ́4vŭs 1nǽ nǽ2ua nǽ2uā nǽ2uă nǽ2uæ nǽ4uen nǽ4ueq nǽ4ueu nǽ2uē nǽ4uĕn nǽ4uĕq nǽ4uĕu nǽ2ui nǽ2uī nǽ2uo nǽ2uō nǽ4uum nǽ4uus nǽ4uŭm nǽ4uŭs nǽ2va nǽ2vā nǽ2vă nǽ2væ nǽ4ven nǽ4veq nǽ4vev nǽ2vē nǽ4vĕn nǽ4vĕq nǽ4vĕv nǽ2vi nǽ2vī nǽ2vo nǽ2vō nǽ4vum nǽ4vus nǽ4vŭm nǽ4vŭs 2nc n3cr n2c3ue n2c1ū 2nd n2d3ág nd2e nde4sc nde3un nde3ún ndē4sc ndĕ3ŭn ndi4ger n4d3igi n4d3igí ndi4g3n ndi3m n2di2p n4d3ĭgĭ nd2ĭn n2dĭp ndĭ4sp n4d5ĭ́gĭ n4d3í4gi n3do ndo3l n4d5o4le. ndo4lem n6d5o6lene n4d5o4leq ndo6les. ndo6lesn ndo6lesq ndo6lesu ndo6lesv n4d5o4leu n4d5o4lev ndo6lēs. ndo6lēsn ndo6lēsq ndo6lēsu ndo6lēsv ndo6lḗsn ndo6lḗsq ndo6lḗsu ndo6lḗsv ndo4lém ndo6lésn ndo6lésq ndo6lésu ndo6lésv n4d3o4li n4d3o4lī n4d3o4lí nd4or ndŏ6lēs. ndŏ6lēsn ndŏ6lēsq ndŏ6lēsu ndŏ6lēsv ndŏ6lḗsn ndŏ6lḗsq ndŏ6lḗsu ndŏ6lḗsv n4d5ŏ4lĕ. n6d5ŏ6lĕnĕ n4d5ŏ4lĕq n4d5ŏ4lĕu n4d5ŏ4lĕv n4d3ŏ4lī n4d3ŏ4lĭ n4d5ŏ́4lĕ ndó2l n4d3óle ndó3lu nd2r n2d3ua n2d3uā n2d3uá nd3ue. nd3ueq nd3ueu nd3uev n2duē n2dué nd3uit n2d3uo n2d3uō n2d3uó n2d3uú n2d3ŭā n2d3ŭă n2dŭē nd3ŭĕ. nd3ŭĕq nd3ŭĕu nd3ŭĕv nd3ŭĭt n2d3ŭō n2d3ŭŏ n2d3ŭŭ nd3ŭ́ĭ nd3úen nd3úeq nd3úeu nd3úev n2d3úi 1ne 3ne. ne2a ne3bu ne2cl ne2co ne4c3u4t ned2 ned4i ne2e nee3ri nee3rí n1ef ne2gl 3nei ne2ia ne2iá ne2ie ne2ié ne2ii ne2ií ne2io ne2ió ne2it ne2iu ne2iú 3neí ne2lu ne2na n4ene ne2nu 3neo 3neó 3nep nepo5t ne1r nera5b nerab6u ner2æ3 ner2ǣ ne3rē ne3rī ne4ss nes5tā nes5te nes5tr n4et. n4etn n4etq 2nets n4eue 2ne2un ne2ur neu5re neu4ter neu4tér ne3u4tr 2neún n4eve n1ex n2ex. nex2a ne3x2i nexi3u nexi3v nex2ī n2exn ne2xo ne2xō nex2ó n2exq n2ex2u nexu3r nex2ū nexū3r nex2ú n2exv 1nē nē2br n1ē2d nē3du nē2i n1ēl nē2lă nē2lĕ nē2lu nē2me nē2mĕ nē2mo nē2mŏ nē2nā nē2nu nēs3t nē2uī nē2vī nḗ4br nḗ2d 1nĕ 3nĕa nĕ2ă 3nĕæ 3nĕǣ nĕ2cŏ nĕd2 3nĕē 3nĕ2ĕ n1ĕf nĕ2gl 3nĕī nĕ2ĭ 3nĕp nĕ3r2a nĕ3r2æ nĕ3r2ǣ nĕ3rē nĕ3r4ĕ nĕ3rī nĕ3rŏ n3ĕrs n3ĕrŭn nĕs3t nĕs5tĕ n4ĕt. n4ĕtn n4ĕtq 4nĕts 2n3ĕŭn n1ĕx n2ĕx. nĕx2a nĕx2ă nĕx4ĕ́ nĕx2ī nĕx2ĭ n2ĕxn nĕ2xō n2ĕxq n2ĕxu nĕx2ū nĕxū3r nĕx2ŭ n2ĕxv 3nĕ́p nĕ́3rĕ nĕ́3s4c 1né né2i 3n1ép né3q 2néts néu4ter né3u4tr néx2ī néx4ui 2nf 2ng n3gae. n3gaen n3gaeq n4gani n4ganí n5ga͞e. n5ga͞en n5ga͞eq n5gá͞en n5gá͞eq n5ga͡e. n5ga͡en n5ga͡eq n5gá͡en n5gá͡eq n4gă4nĭ n4g5ắnĭ n2gáe n3gáen n3gáeq ng3áeu ng3áev n4g3áni n3gæ. n3gæn n3gæq n3gǣ. n3gǣn n3gǣq ngǣ́2 n3gǣ́n n3gǣ́q n2g1ǽ2 n3gǽn n3gǽq ngu6ste ngŭ6stĕ n1h nhe3 1ni ni2a n2ia. n2ian n2iaq nia6ste n2iau n2iav 2niă 2n3i2ba 2n3i2bá ni2be ni2bé 2n3i2bi 2n3i2bí 2n3i2bo 2n3i2bó 4n3i4bun 4n3i4bún nic4e 4ni4cer n2i3cē 4ni4cér ni4cim 4ni4cím 4ni4cít n2i3cu n2i3cú 3nid 2niec 2niex 2niēc 2niēx 2niéc 2niéx n2i3g2 nig4n n2il ni3mam ni3man ni3mar ni3mas ni3mā ni3má ni3me ni3mē ni3mé ni3mi. ni3mie ni3mii ni3min ni3miq ni3mis ni3miu ni3miv ni3mī. ni3mīn ni3mīq ni3mīs ni3mīu ni3mīv ni3mín ni3míq ni3mís ni3míu ni3mív 2nimm ni3mo ni3mō ni3mó ni3mu ni3mú 2nins n2i2o n2ió n2ip n3i4qua n3i4quá n3i4quæ n3i4quǽ n5i4quen n5i4queq n5i4queu n5i4quev n3i4qué n3i4qui n3i4quí n3i4quo n3i4quó n3i4quu n3i4quú n2is ni4sc nis5ci nise4r3 nisé2 nis2i 3ni3sp n2iue n2iué 2niug n2ium 2niux 2niū 2niŭ 2niúd 2niúg 2niúr 2niúx 1nī 2n1ī2b 2nīns 2n3ī́2b 4nī́ns 1nĭ 3nĭa nĭă6stĕ 3nĭæ 3nĭǣ n3ĭ2bĭ nĭ3cē 4n3ĭ4cĕr nĭ4cĭm nĭ4cĭŏ nĭ4cĭs nĭ4cĭt nĭ3cŭ 3nĭd 3nĭī nĭ3mĭĕ 2nĭmŏ nĭ2ŏ nĭ3s2p nĭ3tĕr nĭ3tĕ́ nĭ3tĭs nĭ5tĭ́s nĭ3tŏ n3ĭ4tūs 4n5ĭ́4cĕr nĭ́4cĭm nĭ́4cĭŏ nĭ́4cĭt n4ĭ́s nĭ́3sp nĭ́4s5t 1ní 2n1í2b 4ní4cer ní4cian ní4ciar ní4ciat ní4cim ní5cis ní4cit ní4ciun 3níd n2í3g2 níg4n n2íl ní1m 2nímm 2níns 4n3í4qua 4n3í4quæ n5í4quen n5í4queq n5í4queu n5í4quev 4n3í4qui 4n3í4quo 4n3í4quu 3ní3sp ní3tur 2nj 2n1n2 n3ne n3nu nn4ue 1no no2a no2á no2æ3 no2ǣ noǣ́3 no2ǽ3 no2ba nob2ī nobī3u nobī3v nob2í no2bó 3noc noc5te no2e no2ē no2i no2ī no2í no3l4u nom2 n2on no3ni 3nop n2ope no2pi no2pu no2pú n2or no3rī n2os nos3c no4sn no4sq nos3t nos5te no4sue no4sv no2xu 1n2ō nōs3t 1nŏ nŏ2a nŏ2á nŏ2æ3 nŏ2ǣ nŏǣ́3 nŏ2ǽ3 nŏb2ă nŏb2ī nŏbī3u nŏbī3v nŏc5tĕ nŏ2ē nŏ2ī nŏ2ĭ n1ŏp nŏ4pī. nŏ4pĭ nŏ2pŭ nŏ3rī nŏ4sn nŏ4sq nŏ4su nŏ4sv nŏ3t nŏ2u3ĕ nŏ2v3ĕ nŏ́4p 1nó nób2i nó3l2u nóp2 n2ór n2ós nó2xu 1nœ npo3 npó1 2nq n3qu n1r2 n3rĕ nr4ĕ́3 2ns n3sa. ns3a2c n3s4ae n3s4am ns4an n3s4aq n3sar n3sas n3s4av n3să. ns3ăc n3săm n3săn n3săq n3său n3săv nsắ2 ns3ắb ns3ắl n2sál n1sc ns2ce ns2cē ns2cĕ ns2cé ns2ci ns2cĭ ns2cr n2scu n2scŭ n2scú n2se2g n2seú n2s3ég nsér4ui nsér4uī n2s3i2c n2sie n2siē n2sié ns3iér nsi2g ns3ige n2s3ii n2sií ns3iís nsi3l4u nsi4mur nsi4múr nsi2r ns5i4ta͞ n4s3i4tǣ nsi4ti n4s3i4tī ns3i4tō n4s3i4tū n2siu nsi4ui nsi4vi nsī2r nsī́4r nsī́4to nsī́4tŏ nsī́4ui nsī́4uĭ nsī́4vi nsī́4vĭ n2s3ĭ2c n2sĭē ns3ĭēn ns3ĭēr n2s3ĭĕ ns3ĭgĕ n4s3ĭ4ta ns5ĭ4tă. ns5ĭ4tăm ns3ĭ4tá n4s3ĭ4tæ n4s3ĭ4tǣ ns3ĭ4tǽ ns5ĭ4tĕ. n4s3ĭ4tī ns3ĭ4tĭ ns3ĭ4tō n4s3ĭ4tū n4s3ĭ4tŭ n4s3ĭ́4c nsĭ́4g nsĭ́4t n4s5ĭ́tă n4s5ĭ́tĕ n4s5ĭ́tĭ n4s5ĭ́tŭ n2s3í2c ns3íer nsí2g ns3íge n2s3íi nsíl4u nsí4mi nsí2r ns5ítuī ns5ítuu nsí4uer nsí4uim nsí4uit nsí4ver nsí4vim nsí4vit n1sp ns2pa ns2pă ns2pá n3spec n3spĕc n5spĕ́c n3spéc n3s2pi n3s2pĭ n3s2pí n2sq n3s2ta n3s2tā n3s2tă n3s2tá n3s2te n3s2tē n3s2tĕ n3s2té n3sti5t4 n3stĭt nstí3t4 n3s2to n3s2tō ns2tó nstren6u nstrē5n4 nstrḗ5n6 nstrén6u ns2tu n3s2tŭ n4s3ue. n3s2uī 2nt n3ta nta3g n3tā n3tæ n3te n4t3eā nte4ia nte4iá nte3ī4 nteī́4 nte5ram. nte5ramne nte5ramq nte5ramu nte5ramú nte5ramv nte5rant nteri4 nter5ib nter5ic nte4r5ie nter5iē nter5ié nter5ii nter5iī nter5ií nte4rim nter5im. nte5ri5min nte5ri5mur nte5ri5múr nter5ita nter5itā nter5itá nte5ri5tor. nte5ri5torn nte5ri5torq nte5ri5torue nte5ri5torv nte5ri5tórn nte5ri5tórq nte5ri5tórue nte5ri5tórv nte4r3ī4 nterī́4 nte4r5í4c nte4ríe nte6r5í6mu nte6r5í6ti nte4rí4u nte4rí4v nte4ron nte5rō. nte5rṓq nte5rṓu nte5rṓv nte4rós nte5runt nt4es nte5stas nte5stās nte5stātí nte5stā́s nte5stás nte5sto. nte5ston nte5stoq nte5stou nte5stov nte5s4tō nte5stón nte5stóq nte5stóu nte5stóv ntē4ia ntē4iā ntē4iá ntē4iæ ntē4iǣ ntē4iǽ n2t3ĕā ntĕ3ă ntĕ3ī4 ntĕī́4 ntĕ4r3ī4 ntĕrī́4 ntĕ4r5ĭ4c ntĕ4rĭē ntĕ4r5ĭī ntĕ6r5ĭm. ntĕ6r5ĭ6tā ntĕ6r5ĭ́6c ntĕ6rĭ́ĕ ntĕ4rōn ntĕ4rōs ntĕ5rŭnt ntĕ5rŭ́ nt4ĕs ntĕ5stās ntĕ5stā́s ntĕ5stō ntĕ́4rī ntĕ́6r5ĭ6c ntĕ́6r5ĭī ntĕ́6r5ĭt. ntĕ́6r5ĭ6tā ntĕ́5stās ntĕ́5stō nté4r5es nté4ri. nté4r5i4c nté4rie nté4riē nté4r5ii nté4r5iī nté6r5it. nté6r5ita nté6r5i6tā nté5stas nté5stās nté5sto. nté5s4tō n3th n3ti ntis4t nti5stá nti5sti nti5stí n3tī n3tĭ ntĭs4tā ntĭs4tă ntĭ5s4tĭ ntĭ́5s6tā ntĭ́5s6tă ntí5s4ta ntí5s4tā ntí5sti nto2s3 n3tō ntŏ́2 n4t3ŏ́p n2t3óp ntó2s3 n3tr ntra3e ntrān4 ntrá3e ntro3i4 ntro3í4 ntró3i n3tum n3tus3 ntús3 n1ua n2uam n2uan n2uar n2uat 1n1uā n2uām n2uār n2uāt n1uă n2uám n2uán n2uár n2uát 1nuæ 1nuǣ 1nub2 nu3bi n3ud n4udæ n4udǽ n4udi n4udí n4u3du n4udú n1ue 2n3ue. n2ueb 3n4uel 3n2uem 3nueq 3n2ues n2uet 3nueu 3nuev n1uē n2uēb n2uēm n2uēn n2uēr n2uēs n2uēt 2n3uĕ n2uéb n2uém n2ués n2uét 1nui n2uim n2uis n1uī n1uĭ 1nuí n2uím n2uís 1n1ul n2u3la n2u3lā n2u3lá n2u3le nule4i n2u3lé n2u3li n2u3lī n2u3lí 3num n4um. n4u4mn n4u4mq n4u4mu n4u4mv 1n1u2n 1nuō n1uó n3u2r 1nu2s n3usi nu4sn nu4sq n3uss n3ust nu4su nu4sv n2u3ta n2u3tá n2u3tæ n2u3tǽ n2u3te nu3ti. nu3tin nu3tiq nu3tis nu3tiu nu3tiv nu3tín nu3tíq nu3tís nu3tíu nu3tív n2u3to n2u3tó nu3tr n2u3tu n2u3tú 1nuu n2uun n2uún n1u2x 1nū n1ūd nū2n nū3nĕ n1ū2r n1ū2s n2ū3ta n2ū3tā n2ū3tă n2ū3tá n2ū3tæ n2ū3tǣ n2ū3tǽ n2ū3te n2ū3tĕ n2ū3tī n2ū3tō n2ū3tu n2ū3tū n2ū3tŭ n2ū3tú nū́2m nū́2r nū4́s 1nŭ n1ŭl n2ŭlā n2ŭlă n2ŭlī n4ŭm. nŭ3mĭ n4ŭmn n4ŭmq n4ŭmu n4ŭmv n1ŭn n1ŭr nŭ2s nŭ́3mĕ 1nú núb2 n2úla n2úle nú2mi n4úmn n4úmq n4úmu n4úmv 2n3úng n1ú2r 2nv n3ve 2nx2 n3xi n2x3u 1ny 2nyma 2nymā 2nymæ 2nymǣ 1ný 2o1a2 o2a3b oad3 oade4 oadé2 oadi4 oadí2 oadṓ4 oadó2 oadú2 oa3ne oa3né oa3ru o2as oas3t oa3t oau6ste o1ā o2ān o2ār 2o1á oá2d3 oáde2 o2án 2o1æ2 o2æ3q o1ǣ2 o2ǣ3q oǣ́2 oǣ́3q 2o1ǽ2 o2ǽ3q 1ob1 ob2ab o3bam o3ban o3b2a3q o3bar o3b2as obe4ra obe4rā obe4rá obe4ro obe4rō obe4ró ob2ēr obé2q obi2b ob3i4c obi2m ob2iq ob3it. ob3itn ob3itq ob3itv o2bi2u obi2v obī2m ob2īn ob2īq ob2īt obí2b obí2c obí2m ob2íq ob3íss ob3íst o2bl o2bo ob4ole. ob6olene ob4oleq ob4oleu ob4olev o2br ob3rá obri3 ob5rue obs2 ob3st ob5ste obur3 o3ca o3cá 1occ 2o3ce o3cē 2o3cé 2o3ci o3cī 2o3cí oco2i ocoi3q oco2í oco5me oco3m4ē ocomi5te ocomi5té oc4ten oc3ue. o3cú o3dam. o3dami o3damq o3damu o3damú o3damv o3dan o3dar o3das o3dat o2d3ác 2ode o4d5eam. o4d5eamn o4d5eamq o4d5eamu o4d5eamú o4d5eamv o4d3ean o4d3eas o4d3eat o4d5eámn o4d5eámq o4d5eámu o4d5eámv o4d3eán o4d3eás o4d3eát ode4cé ode2g ode2i od3eo. od3eon od3eoq od3eou od3eov o2d3eó ode4st ode4u5t o2deú odē2i odé2g od2i o4d3ibi o4d3ibí o2d3i2g od4iue. o5dium o5dius od4ive. 2o3dī 2odí o2dí2b odí5ci o2d3í2g od6íue. od6íve. 2o3do od4or 2odō 2odó 2odu od3ue od3ui od3uī od3uí 2odú 2oea o3eat 2oeā o3eām o3eāt 2oe2ă 2oeá o3eát oe3b oecu3 oe3d2 oe2e o1e2g 2oe2i 2oeī oe2ĭ 2oeí o2el o3e2le o4e3leu o4e3lev o1e2m o5e4mēti o5e4mētí o5e4mētu o5e4mētú o3emu o3emú oepe3 o1er oe3ro oete5r o1e2u o4eue oe2ŭ o1eú o1e2x3 2o1ē2 o2ēn3 o2ēs o2ēu o2ēv oḗ2g oḗ2m 2o1é oé2g oé2m o2éq o2és 1off ofo1 og2 o3ga o3gæ ogæ3v o3gǣ o1h oho4s ohó2 2o1i2 o2iad2 o2iā o2iǣ o3ic o2id o4iene o2iī o2io oio2s o2iō o2ió o1ī oī2b oī2m oī2r oī2t oī2u oī2v oī́2b oī́2m oī́2r oī́2t oī́2u oī́2v 2o1í oí2b oí2c oí2m oí2r o3íss o3íst oí2ta oí2te oí2to oí4tu oí2ui oí2vi o3la o3lā o3lá o3læ o3lǣ o3lǽ ole3ii ole3ií ole3io ole3ió ole5ium ole3iú olé3ia olé3ii olé3io olé3iu 2o3li. o3lia o3lii o3lií 2o3lin o3lio o3liō o3lió 2o3liq 2o3lis 2o3liu 2o3liv 2o3lī o3lía 2olín 2olíq 2olís 2olíu 2olív 2oll 2o3lo 2o3lō 2o3ló o2l3ua o2luā o2l3uá o2l3uæ o2luǣ o2l3uǽ ol3ue. ol3ueb ol3uem ol3uen ol3ueq ol5uerē ol5ueré ol3ues ol3uet ol3ueu o2l3uē o2lué ol3uéb ol3uém ol3uén ol5uéris ol3ués ol3uét ol5uimi ol5uimur ol5uimúr ol5uis. ol5uisn ol5uisq ol5uisu ol3uit ol3uīs ol5uī́s ol3uím ol5uísn ol5uísq ol5uísu ol5uíte 2o3l4um o2luo o2luō o2l3uó 2o3l4u2s3 o2l3uu o2l3uú 2o3lúm 2o3lús o1m2a om2á omb2 ombu3r ombú3r ome4da ome4dá om2eq ome4sa ome4sá ome4so om1ē o3mēt o3mḗt o4mé4sa om2i2a om2ib om2ic om2im om2in4 omini5c om2iq omi2t o5mit. om6itas. om6itasn om6itasq om6itasu om6itasv om6itásn om6itásq om6itásu om6itásv om4ite. om6itene om4iteq om4iteu om4itev om6itis. om6itisn om6itisq om6itisu om6itisv om6itísn om6itísq om6itísu om6itísv o5mitn om4ito o5mi5tot om4itó o5mi5tót o5mitq o5m4itue o5m4i5tur o5m4i5túr o5mitv om2iu om2iv om2ī om2íc om2ím om2íq om4íte o4mí4ti om4ítn om4ítq om4ítu om4ítv om2íu om2ív o1mo omo4nu o1mœ ompere5r ompe6ri. omperi6n ompe6ri6q ompe6ris. ompe6risn ompe6risq ompe6risu ompe6risv omperi6u omperi6v ompe6rī. omperī6n ompe6rī6q ompe6rī6u ompe6rī6v ompe6rī́6n ompe6rī́6q ompe6rī́6u ompe6rī́6v ompe6rí6n ompe6rí6q ompe6rísn ompe6rísq ompe6rísu ompe6rísv ompe6rí6u ompe6rí6v ompē4ia ompē6iā. ompē6iāq ompē6iās ompē6iā́q ompē6iā́s ompē4iá ompē4iæ ompē4iǣ ompē4iǽ ompē4iī ompē4iō ompé6r5ii ompé6r5iī ompé6r5is o1m2u om3ue o3m2ū2 om2ú o3n2a o3n2ā o3n2á 3onc on3d on2e 2one. one4u5t 2o3n2é 2oni o5nia. o5nian o5niaq o5niau o5niav o4ni4ci on4ier on4iér on2ii on2ií on2im on2in on2iq on2it o2niu o3niue o3niué o3n4iui o3n4iuí o3nium o5niúm on2iv on2ī 2oní o4ní4ci on2íe on2íq on2ít on2íu on2ív on2o ono3pi ono3s4t on2ó onós4t ons2c on5sci on3s2i onsi5u onsi5v on3s4p ons2u on3t2 onte4i ontes5 ontē4i 2onu o4nue. on2uī on2ul 2on2ú 2o1o2 o2o3n oo3ru o2os oo3u oo3v o1ō o2ōn o2ōs 2oó o1ór oó2re oó2ri 1ope1 o2pem oper4a oper4æ oper4ǣ oper4ǽ ope3r4e oper4ē oper4i ope3r4ī oper4í operí5tur oper4o oper4ó oper4u o2pém o2pér opér4u o3pic 1opī o3pīs opo4s3 1opp op2su 2oq o3qu 2or. o1ra or3ang o3r2ā o3ræ o1rǣ o3rǽ 2orc o1r2e 2o3re. 2o3rea 2o3reá 2o3reæ 2o3reǽ 2o3ree 2o3reé 2o3rei 2o3reí 4o3rene 2o3reo 2o3reó 2o3req 2o3reu 2o3reú 2o3rev o3rē 2o3réa 2o3rée o1r2i o3riæ o3riǽ 2o3rib oric4 ori5ce o3rii o3rií ori3ni 4oris. 4orisn 4orisq 4orisu 4orisv o3ría o3ríc o2rír 4orísn 4orísq 4orísu 4orísv orí5tur 4orne. o1r2o o3ron. o3ronn o3ronq o3ronu o3ronv o3rorú 2o3ros oro4s3t 2o1rō o3rónn o3rónq o3rónu o3rónv 2o3rós 2orq ort2 or3tu 2o1ru o2rue or3ue. o3rum o3rus 2o3rú 2orv o1ry 2os. os2a os2cǽ os4ch os3cit o4sco o4scó os2cr o4scu o4scú os2e ose2i os2i osíl2 o1s2m 2osn o1sp o2spa o2spá os2pe ospe5ri ospe5r4ī osper4í os2pé os2pl 2o2sq 2ost os4t3ea os4t3eā os4t3eá ost5ill osti5t4 os4t5íll ostí3t4 os3to os4to. os4ton os4toq os4tou os4tov os5tri os5trī os3trí os3tru os3trú os4tué 2osue o4s3ue. os2ué os2uī 2osv o3ta o4t3ann o4t3ánn o4t3enn o5ter. o4t3e4ra o4t3e4rā o4t3e4rá o5te5re ote5rii ote5rií o4t5erim ote5rin o4t5erit ote5riu oteri5ue ote5ri5v ote5rī oterī5u oterī5v o4t5e4rít o5tern o5terq o5terue o4t5erun o4t3e4rú o5terv o4t5este o4t5esti o4t5estí o4t5esto o4t5estó o4t3énn o4t5é4rim o4t5é4rit o4t3ést o2tl o3t2u 2o1u2 ou3enn ouē5nī ou3énn o2um ou4st o1ū2 oū́2 2oú2 o1út 2ov ov3enn ovē5nī ov3énn 2ox2 ox4eu o3xi oxu3 o2x3ue o͞e2i o͡e2i ō2a ōab2 ōa2m ōăb2 ōb2 ōba3q ōbæ3 ōbe3 ōbī3u ōbī3v ōbo3 ōbŏ3r ōbŏ́3 ō3bu ō3bŭ 2ōc ō2ch ō2c3ue ō2d1a2 ō3dam. ō3damq ō3damu ō3damv ō3d2an ō3d2ar ō3dat ō2dāc ō4d3ā́c ō2d1ă ō3dăm. ō3dămq ō3dămu ō3dămv ō3d2ăn ō3dăr ō3dăt ō5dắmn ō5dắmq ō5dắmu ō5dắmv ō3dắn ō3dắr ō3dắt ōdá2 ō4d5eam. ō4d5eamn ō4d5eamq ō4d5eamu ō4d5eamv ō4d3ean ō4d3eat ō2d3eā ō4d5eámn ō4d5eámq ō4d5eámu ō4d5eámv ō4d3eán ō4d3eát ō2d3eō ō4d3e4ru ō4d3e4rú ō2d3e2s ō2deu ō3deue ō2deú ōdē2g ōdē2s ōdḗ4g ō2d3ĕā ō4d5ĕăm. ō4d5ĕămn ō4d5ĕămq ō4d5ĕămu ō4d5ĕămv ō4d3ĕăn ō4d3ĕăt ō6d5ĕắmn ō6d5ĕắmq ō6d5ĕắmu ō6d5ĕắmv ō4d5ĕắn ō4d5ĕắt ō2d3ĕō ō4d3ĕrŭ ō2d3ĕs ō4d3ĕ́s ō2d3és ō2d3i2g ōd4īue. ōd4īuĕ. ōd4īve. ōd4īvĕ. ōd6ī́ue. ōd6ī́uĕ. ōd6ī́ve. ōd6ī́vĕ. ō2d3ĭg ō4d3ĭ́g ō2d3í2g ō3do ōd4or ō2e ōe2m ō2ĕ ōg2 ōga2 ōgá2 ōgo2 ō1h ō1i2 ō2iad2 ō2i3b ō3ic ō2ien ō2iēn ō2is ō1ĭ2 ō2ĭ3b ō2ĭē ō2ĭĕ ōĭ́2 ō2ĭ́ĕ ō1í2 ō2íe ōle3i ōle2r ōlé3i ōl3ue. ō1m2 ōma2r ōna2r ōn2ā ōná2 1ōnc 2ō3n2e ōneu5t 2ōnē 2ō3n2ĕ 2ō3né 2ōn2i 2ōnī 2ōnĭ 2ōní ōno2 ōns2c ōns4i ōnsi5t ōns4ĭ ōnsĭ5t ōn3s4p 2ō1n2u ō2n3ue 2ōn2ŭ 2ōnú ōp2 ō3pi ō3pĭ ō3pt 2ōq ō3qu ō1r 2ō3ra. 4ō3rane 2ō3raq 2ō3rau 2ō3rav 2ō3ră. 4ō3rănĕ 2ō3răq 2ō3rău 2ō3răv 1ōrd ōr2e 2ō3re. 2ō3rea 2ō3reā 2ō3reá 2ō3reæ 2ō3reǣ 2ō3reǽ 2ō3ree 2ōreē 2ō3reī 4ō3rene 2ō3reō 2ō3req 2ō3reu 2ō3reú 2ō3rev ōrē2i ō3rēu ō3rēv ōr2ĕ 2ō3rĕ. 2ō3rĕa 2ō3rĕā 2ō3rĕă 2ō3rĕá 2ō3rĕæ 2ō3rĕǣ 2ō3rĕǽ 2ōrĕē 2ō3rĕĕ 2ō3rĕī 4ō3rĕnĕ 2ō3rĕō 2ō3rĕq 2ō3rĕu 2ō3rĕŭ 2ō3rĕv 4ō3rĕ́ă 4ō3rĕ́ĕ ōré2 2ō3réa 2ō3rée 2ō3ri 2ō3rī 2ō3rĭ 2ō3rí 1ōrn ōro2 2ō3ron 2ō3ros 2ō3rōr 2ō3rōs ō3rṓr ō3rṓs ōrŏ2 2ō3rŏn 2ō3rŏs ō3rŏ́n ō3rŏ́s ōró2 2ō3rón 2ō3rós 2ō3r2u ōr3ue. ō4ruĕ 2ō3rŭ ōr4ŭn 2ō3rú 2ōs. ōs2cǽ ō3s4ch ōs3cit ōs3cī ōs3cŭ ōsē2i ōs4ēm ōs2i ōsi3l4 ōsi2n ōsíl2 2ōsn ō1s2p ōspe3r ōsper4ī ōspĕ5rī 2ō2s3q 2ōst ōs2ta ōs2tā ōs2tă ōs2tá ōs2te ōs2tē ōs2tĕ ōs2té ōs2ti ōsti5t4 ōs2tĭ ōstí3t4 ōs2tō ōs5tri 2ō2s3ue 2ō2s3uĕ 2ōsv ōt2 ō3ta ō3tă ōté2 ō2th ōtó2 ō3tu 2ō1u ō3ue ō3uĕ ō2um 2ōv ō3ve ō3vĕ ō2x 2ō2́ ṓb2 ṓ3bu ṓ3bŭ ṓ4d3ea ṓ4d3eā ṓ4d3eō ṓ4d5eru ṓ4d3es ṓ4d3ĕā ṓ4d3ĕă ṓ4d3ĕō ṓ4d3ĕs ṓ2ĕ ṓ3g2 ṓi2 ṓ3ic ṓĭ2 ṓ3ĭc ṓ3lo ṓ3lŏ ṓ3luī ṓm2 ṓ3mu 3ṓnc ṓns4i5 ṓns4ĭ5 ṓ3p2 3ṓrd ṓ3rĕ 3ṓrn ṓ3spe ṓ3s4pĕ ṓ3spi ṓ3spĭ ṓ3s4ta ṓ3s4tā ṓ3s4tă ṓ3s4te ṓ3s4tē ṓ3s4tĕ ṓ3s4tō ṓ5s4trē ṓ4s5tru ŏ1a ŏau6stĕ ŏ1ā ŏ2ān ŏ2ār 2ŏ1ă2 ŏăd3 ŏădĕ4 ŏădĕ́4 ŏădṓ4 ŏ2ăs ŏắ2 ŏắd3 ŏắdĕ4 ŏ1á ŏ1æ2 ŏ2æ3q ŏ1ǣ2 ŏ2ǣ3q ŏǣ́2 ŏ1ǽ2 ŏ2ǽ3q 1ŏb1 ŏ2ba ŏbă2 ŏb2ăb ŏb2ăq ŏb2ău ŏb2ăv ŏbắ2 ŏb2ēr ŏbĕ4r ŏbĕ́2 ŏ2bi 2ŏbī ŏbī2m ŏb2īn ŏb2īq ŏb2īt ŏbĭ2 ŏbĭ4c ŏb3ĭt ŏbĭ́2 ŏ2bl ŏ2bo ŏ2bó ŏ2br ŏbs2 ŏb5stĕ ŏ3că 1ŏcc ŏ3cē ŏ3cĕ ŏ3cī ŏ3cĭ ŏcŏ3m4ē ŏcŏ3mĕ ŏcŏmĭ5tĕ ŏc4tĕn ŏ2cu ŏ3cŭ 2ŏdĕ ŏdĕ4c3ĕ ŏdĕs3 2ŏ3dī ŏd2ĭ 2ŏdō ŏ2d1u 2ŏdŭ ŏ1ē2 ŏ2ēn ŏē3nĕ ŏ2ēs ŏ2ēu ŏ2ēv ŏḗ2g ŏḗ2m ŏ1ĕ2 ŏ2ĕ3q ŏ3ĕ́2 ŏfŏ1 ŏg2 ŏ3ga ŏ3gæ ŏgæ3u ŏgæ3v ŏ3gǣ ŏ1h ŏ1i ŏ1ī ŏī2b ŏī2m ŏī2r ŏī2t ŏī2u ŏī2v ŏī́2b ŏī́2m ŏī́2r ŏī́4t ŏī́2u ŏī́2v ŏ1ĭ ŏ2ĭu ŏ2ĭv ŏ3la ŏ3lā ŏ3lá ŏ3læ ŏ3lǣ ŏ3lǽ ŏ3lēn. 2ŏ3lĕ. 4ŏ3lĕnĕ 2ŏ3lĕq 2ŏ3lĕu 2ŏ3lĕv 2ŏ3lī 2ŏll 2ŏ3lō 2ŏ3lŏ ŏ2l1u 2ŏ3lŭm 2ŏ3lŭs 4ŏ3lŭ́m 4ŏ3lŭ́s ŏ1ma ŏ3m2ă ŏmb2 ŏmbū3r ŏmbū́3 ŏm1ē ŏ3mēt ŏ3mḗt ŏ3mĕ. ŏ3mĕm ŏ3mĕn ŏ3m2ĕq ŏ3mĕu ŏ3mĕv ŏ3m2ī ŏ3mĭă ŏm2ĭn ŏmĭnĭ5c ŏ3mĭs ŏmĭ2t ŏm3ĭtŏ ŏ3mĭ́s ŏm3p2 ŏmpḗ5i ŏmpĕ6rī. ŏmpĕrī6n ŏmpĕ6rī6q ŏmpĕ6rī6u ŏmpĕ6rī6v ŏmpĕ6rī́6n ŏmpĕ6rī́6q ŏmpĕ6rī́6u ŏmpĕ6rī́6v ŏmpĕ6r5ĭī ŏmpĕ6rĭt ŏmpĕ́6r5ĭī ŏ3m2ū2 ŏ3n2ā ŏn3d2 ŏn2gá ŏ2n1i ŏn5ĭ4cĕ́ ŏ4n3ĭ4cĭ ŏ4n5ĭ́4cĭ ŏn2ŏ ŏnŏ3s2 ŏntĕs5 ŏn2ŭ ŏ1ō ŏ2ōn ŏ2ōs ŏ1ŏ2 ŏŏ́4r 2ŏpa 2ŏpā 2ŏpæ 2ŏpǣ ŏpe2 ŏ2pĕ ŏpĕ3r4a ŏpĕ3r4æ ŏpĕ3r4ǣ ŏpĕ3rĕ ŏpĕ3rī ŏpĕ3rŏ ŏpĕ3rŭ 1ŏpī ŏ3pīs 2ŏ3pŏ ŏpŏ3t ŏp2su ŏptĕ4 ŏptĕ́4 2ŏr. ŏ1ra ŏ3r2ā 2ŏ1ră ŏ1ræ ŏ1rǣ 2ŏrc ŏ1re ŏ3rē ŏ1r2ĕ 2ŏ3rĭb 2ŏ3rĭs 4ŏ3rĭ́s 2ŏrn 2ŏ1rō ŏ1r2ŏ 2ŏrq ŏr2su 2ŏru 2ŏ3rŭ 2ŏrv ŏs2ă ŏ3s2ĕ ŏ1s2m ŏ1sp ŏ2spă ŏs2pĕ ŏspĕ5rī ŏ2s3pĭ ŏs2pl ŏs3q ŏs4t3ĕā ŏs5tĕr ŏst5ĭll ŏs6t5ĭ́ll ŏs5trī ŏ3strŏ ŏs3u ŏ4t3ănn ŏtĕ2 ŏ2t3ĕr ŏtĕ3rĕ ŏtĕ5rī ŏtĕrī5u ŏtĕrī5v ŏ4t3ĕs. ŏ4t3ĕsn ŏ4t3ĕsq ŏ4t5ĕstĕ ŏ4t5ĕstĭ ŏ4t3ĕsu ŏ4t3ĕsv ŏ4t5ĕ́rĭ ŏ4t3ĕ́s ŏ2tl ŏ1u ŏuē5nī ŏ3u4ĕm ŏ1ū2 ŏū́2 ŏū́4t ŏ1ŭ ŏ2ŭm ŏ2ŭs ŏ2ŭ́ ŏvē5nī ŏ3v4ĕm 2ŏx2 ŏx4eu ŏ2xu ŏxŭ3 ŏxŭ́3 ŏ2́ ŏ́3ă ŏ́b3ĕŏ ŏ́b3ĕ4r ŏ́bĭ2 ŏ́b3ĭt ŏ́b5ŏlē 3ŏ́2br ŏ́bs2 2ŏ́c 3ŏ́cc 2ŏ́d ŏ́2d3u ŏ́1ĕ ŏ́ĕ2m ŏ́1i ŏ́ĭ2 ŏ́3ĭē ŏ́3ĭt 4ŏ́lĕn 4ŏ́lĕq 4ŏ́lĕu 4ŏ́lĕv 2ŏ́ll ŏ́l3u ŏ́4m3ĕs ŏ́mĭ4tĭ ŏ́mĭ4tŏ ŏ́m3p2 ŏ́3nĭb ŏ́3ŏ ŏ́4pĕr ŏ́4pī ŏ́2r 2ŏ́3ră ŏ́3rē ŏ́3rĕ ŏ́3rī ŏ́3rĭa ŏ́3rĭæ ŏ́3rĭǣ 4ŏ́3rĭb ŏ́3rĭc ŏ́3rĭd ŏ́3rĭī ŏ́3rĭs 2ŏ́rn ŏ́3rō 2ŏ́rq 2ŏ́ru ŏ́3rŭ 2ŏ́rv ŏ́3sĕ ŏ́3s4pĕ ŏ́3sph ŏ́s4t5ĕā ŏ́t5ĕ4rā ŏ́t5ĕ4ră ŏ́t5ĕ4rĭ ŏ́t5ĕrŭ 2ŏ́x ó1ad ób1 ób2ab ób2a3q ób3a2r ób2a͡ ób2eq óbe4r ób3es óbi4c ób3i2t ób2iu ób2o1 ób5olen ób5oles ób3olē óbo3r 1ó2br ób2ri ób3ru ób5rue 1ób3s2 ób5ste ó3b2u 1ócc óco3m óco5me ó2c3ue 2ód ód2a ó2d3ea ó4d3eo ó4d3e4ru ó4dest ó2d3i2g ó3ear ó3eat óe2ă óe3b óed2 óe2e óe2i ó1e2m óepe3 óe2ŭ ófe1 ófo1 óg2o3 ó1h ói2 ó3ian ó3iaq ó3iau ó3iav ói3b ó1ic ó3ien ó1iē ó3iit ó2in ó2i3q ó3it ó1iu ó2i3ue ó2i3v 2ólen 2óleq 2óleu 2ólev 2óll ó2l1u ó3lub ó3lum ó3lus ó1m óm2a óm2e ó2m3e2d óm2i ó5mit. óm5i4tan óm5i4tat ómi4tān óm5i4tem óm5i4ten óm5i4tes óm5i4tet ómi4tēs ómi4tor ó5mitur ómpe3 ómpe5r óm2ui óm2uī ó3m2ū 2ó1n 3ónc ón3g2 ón5i4cit ón3t2 ó2nue ón2uī ón2ul ó3nus óo2 ó1or ópe1 ó2pe3r ó3pi óp2su ópu3 2óq ó3qu ó1ra 4órane 2óraq 2órau 2órav ó1ræ ó1re 2óre. 2órea 2óreæ 2óree 2órei 4órene 2óreo 2óreq 2óreu 2órev ó1ri 2óri. ó4riat 2órib 2óris ó1rī 3órna 4órne. 3órnem 3órnen 3órner 3órnes 3órnet 3órno ó1ro ó1rō 2órq órt2 ór3tu 2óru ó2rue ó3r2ui ó3run 2órv ós4ch ós2i 2ósn ó1sp ós2pe3 2ós3q 2óst óste3 ós4t3ea ós4t3eā ós5tri 2ósue ós3uis ó3s2uī 2ósv ó5ter. ót3e4ra ót3e4rā ót3eru ó4test ó2tl 2ó1u2 ó2um 2óv 2óx óx4eu ó3x2i óxu3 ó2xue 2œa œa2m 2œā 2œă 2œá 2œæ œæ2i œæ2ŭ 2œǽ œb2 œ3bi œbī3u œbī3v œ3bu œ3bŭ œce2 œcu3 œde3 œdĕ3r œen3 œēn3 œén3 2œi 2œī 2œí œ1m œ1n2 œno3b2 œó1r œpe3 œper2 œpĕ3r œpĕ5rĭ œ1r œte5re œ́3b2 œ́2i œ́3l œ́1n œ́2s 1p p2a pab2 3pa3d2 pada3 pae4nī pan3sa pan5s4i pansi5u pansi5v pans4í 2parg 2pars par2u pa4ruī pa3tr p2ā pān3sa pān3să pān3s4ī pānsī5n pānsī5q pānsī5u pānsī5v 3pă3d2 pă3ră 2părg pă3rŏ 2părs păs3t păs5tă 2păth pắ3rē 4pắrg 4pắrs p2á pán3si 2párg 2párs pá4ruī pæ2a pæ2ă pæ2á pæ2i pæ2nī pæ2ŭ pǣ2a pǣ2ă pǣ2nī pǣ2ŭ p2e 3pe. 3pe2a pe4ae pe4am pe4as pe4a͞ pe4a͡ pe4ās pe3d2 pe2e 3pei pe4ia. pe4iae pe4iam pe6iane. pe4iaq pe4iar pe4ias pe4iau pe4iav pe4iáe pe4iám pe6iáne. pe4iár pe4iás pe4iáu pe4iáv pe4ien pe2ié pe2ii pe2ií pe4io. pe4ioq pe4iou pe4iov pe4ión pe4ióq pe4ióu pe4ióv pe4is pe4ium pe2ī pe4īs 3pe2í pe4mn pe4mq pe4mv 3pen pe4nt pe2nu 3pe2o pe4os pe2ō pe4ōs 3peó pepe3 peper4 pepere5 3peq per1 per5a6b5únd pe5ram. pe5ramn pe5ramq pe5ramu pe5ramú pe5ramv pe3ran per6ane pe5ras. pe5rasn pe5rasq pe5rasu pe5rasv pe5rat. pe5rati pe5ratí pe5ratn pe5ratq pe5ratv pe4rāc pe5rāt per5ā́c pe5rā́t pe4r3ác pe2re pere4s pere4x3 perexi4 perexí4 pe5rē. pe4rēb pe5rēq perē4s pe5rēt perḗ4s pe4r5énn peré4s peré4x3 per5i4ce peri4cī peri4cí peri4mo peri4mō peri4mó perin5i4 peri4n5í4 per5i6ta͞ peri6tā. peri6tān peri6tāq peri6tār peri6tāu peri6tāv peri4tǣ peri4tī peri4tō peri6tū. peri6tūn peri6tūq peri6tūr peri6tūu peri6tūv pe4rí4ce pe4rn pero4s per5osa per5osá per5osæ per5osǽ per5ose per5osé per5osi per5osí per5oso per5osó per5osú pe3rō. pe3rōn perō4s pe3rōu pe3rōv pe5rṓn pe5rṓq perṓ4s pe5rṓu pe5rṓv pe4róp peró4s perpe5t4 perpé5t4 pe4rq pe4rt pe4rv 3pes pe4sn pe4sq pes3t pes5te pe4su pe4sv 3pet pete5r pete7rer pe4tn pe4tq pe3tuī pe4tv 3peu pe4um pe2un pe2uo pe2uō pe2uó pe4us 3peú 3pev pex2 pe3x4e pexu3 pexū3r 3pe͞ 3pe͡ p2ē pē4iam pē4ian pē6iāne. pē4iāru pē4iārú pē4iāue pē4iāve pē6iā́ne. pē6iā́ru pē6iā́ue pē6iā́ve pē4iám pē4iæne pē4iæue pē4iæve pē4iǣne pē4iǣue pē4iǣve pē4iǽne pē4iǽue pē4iǽve pē4ien pē4iīne pē4iīue pē4iīve pē4iōne pē4iōru pē4iōrú pē4iōue pē4iōve pē2iu pē2iú pē2nu pē3r p2ĕ 3pĕ. 3pĕā 3pĕ2ă 3pĕ3d2 3pĕf 3pĕn pĕ4nt 3pĕō 3pĕq pĕ4r3ā4c pĕ5rāt pĕr5ā́c pĕ5rā́t pĕ5rē. pĕr3ēb pĕ5rēq pĕrē4s pĕ5rēt pĕrḗ4s pĕr3ĕā pĕr3ĕă pĕ4r3ĕŏ pĕ6r5ĕ́nn pĕ4r5ĭ4cī pĕr6ĭĕ. pĕr6ĭĕn pĕr6ĭĕq pĕr6ĭĕu pĕr6ĭĕv pĕr5ĭmĭ pĕ4r5ĭ4mō pĕ4rĭn pĕ5rĭō pĕ5rĭŏ pĕ5rĭs pĕ4r5ĭ4ta pĕr5ĭtā. pĕr5ĭtān pĕr5ĭtāq pĕr5ĭtār pĕr5ĭtāu pĕr5ĭtāv pĕ4r5ĭ4tă pĕ4r5ĭ4tá pĕ4r5ĭ4tæ pĕ4r5ĭ4tǣ pĕ4r5ĭ4tǽ pĕr5ĭtĕ. pĕr5ĭtĕn pĕr5ĭtĕq pĕr5ĭtĕu pĕr5ĭtĕv pĕ4r5ĭ4tī pĕ4r5ĭ4tō pĕr5ĭtū. pĕr5ĭtūn pĕr5ĭtūq pĕr5ĭtūr pĕr5ĭtūu pĕr5ĭtūv pĕ4r5ĭ4tŭ pĕ5rĭŭ pĕ6r5ĭ́6cĕ pĕr5ĭ́mĭ pĕ5rĭ́s pĕrĭ́4t pĕr5ĭ́tă pĕr5ĭ́tĕ pĕ2rō pĕ3rō. pĕ3rōq pĕrō4s pĕ3rōu pĕ3rōv pĕ5rṓn pĕ5rṓq pĕrṓ4s pĕ5rṓu pĕ5rṓv pĕr5ŏ́p pĕr3ū́ pĕr5ŭ́n 3pĕ2s pĕs5tĕ 3pĕt 3pĕu 3pĕv 2pĕx2 pĕxū3r pĕ́4r3ē pĕ́6rĕăn pĕ́6r5ĕăr pĕ́6rĕăt pĕ́4r5ĕŏ 4pĕ́rg pĕ́4rī pĕ́6r5ĭ6cĕ pĕ́6r5ĭ6cī pĕ́6r5ĭt. pĕ́6r5ĭ6ta pĕ́6r5ĭ6tă pĕ́6r5ĭ6tæ pĕ́6r5ĭ6tǣ pĕ́6r5ĭ6tī pĕ́6r5ĭ6tō pĕ́6r5ĭ6tū pĕ́6r5ĭ6tŭ 6pĕ́rnān 6pĕ́rnăr 6pĕ́rnăt 6pĕ́rnĕr 6pĕ́rnĕt 4pĕ́rnĭ 4pĕ́rnŏ 3pĕ́4s pĕ́s5t 3pĕ́t 3péa 2péc 3péi 3péo pér5ear pér5eor pé2r3ē 2pérg pér5i4ce pér5i4ci pér5i4cī pé4r5it. pér5i4tæ pér5i4tǣ pér5i4tī pér5i4to pér5i4tō pér5i4tu pér5i4tū pé2rī 2pérm 4pérnān 4pérner pér4ui. pér4uī. 3pés 3pét 3péu pé2uo péx2ī 3pé͞ 3pé͡ 2ph. phe2i phē2i 2phēx phi6sta 2phn 3pho 3phŏ 3phó 2pht p2i 3pi2a piad2 3piā 3piá 3piæ 3piǣ 3piǽ 2pic pic4e pi5cen 3pid 3pie 3piē 3pié pig3n 3pi2i 3piī 3pií 3pil pin2ā pin4i pini3c 3pio. 3pion 3pioq pio2s 3piou 3piov 3pión 3pióq 3pióu 3pióv pi3r2 pirí3t pi4s3c pis5ci pi4s3tr 3pit pi5ter 3pium 3piúm pi2x3 3pī. 3pīm 3pīq pīrí3t pīs3 3pīu 3pīv 3pĭă 2pĭc pĭn2a pĭn2ā pĭn2æ pĭr2 pĭ4str 3pĭt pĭ5tĕr pĭ́3d pĭ́4s5t 3pĭ́t 3pía 3píd 3píe píg3n 3píl pí1m pí4s3t 3pít pí3tur pí2x p2l2 p1n2 p3nem p3nen p3ner p3nes p3net 2pni 2pní p2o 3po. 2pond po3ni 3poq 3por pos3c posí3t po3s2u po4t5e4ro po4t5e4rō po4t5e4ró 3pou 3pov 3pō. 3pōq 3pōr 3pōs 3pōu 3pōv 3pṓs p2ŏ pŏ3ĭ 2pŏn 3pŏny pŏ3rĕ pŏ3rī pŏs4trŏ pŏtĕ4r pŏtĕ́4 pŏ́3rĭ pŏ́4t5ĕ4r 3póq 3pór pó3s4tr pó4te4r pót5eri pót5ero pót5erō 3póu 3póv 2pp ppule4 p2r2 prae3 prae5s4 praete6ris praete6rís praeté6r5is pra3s2 pra͞e5 pra͞es4 prá͞e5 prá͞es6 pra͡e5 pra͡es4 prá͡e5 prá͡es6 prā1 prās2 práe3 práes4 prá3s4t præ3 præs4 prǣ3s prǣ3ŭ prǣ́3 prǣ́s4 prǽ3 prǽs4 pre3d pre5mi pre5mo prē3m pr4ĕ́ pri5mi pri4s3 prĭ4s 3pro pro6de6ri pro6de6rí pro4des pro4dés pro4di. pro6di6mus pro6di6mús pro4di4n pro4di4q pro4dis pro6dit. pro6di6te pro6di6tis pro6di6tís pro6ditn pro6di6to. pro6di6ton pro6di6toq pro6di6tot pro6di6tou pro6di6tov pro6di6tón pro6di6tóq pro6di6tót pro6di6tóu pro6di6tóv pro6ditq pro6ditue pro6di6tur. pro6di6turn pro6di6turq pro6di6turue pro6di6turv pro6di6túrn pro6di6túrq pro6di6túrue pro6di6túrv pro6ditv pro4dí4n pro4dí4q pro4dís pro6dí6te pro6dítn pro6dítq pro6dítu pro6dítv pro4d5í4u pro4d5í4v pro4li 3prō1 prō6de6ri prō6de6rí prō6dĕ6rĭ prō6dit. prō6ditn prō6ditq prō6ditue prō6ditv prō4dī. prō4dī4n prō4dī4q prō6dī́6n prō6dī́6q prō6d5ī́s prō6d5ī́6u prō6d5ī́6v prō6dĭt. prō6dĭtn prō6dĭtq prō6dĭtu prō6dĭtv prō6dĭ́tn prō6dĭ́tq prō6dĭ́tu prō6dĭ́tv prō6dítn prō6dítq prō6dítu prō6dítv prō4li prō4lĭ prōs2 prō3s4t prṓ6de6ri prṓ6dĕ6rĭ prṓ6dit. prṓ4d5ī prṓ6dĭt. prṓ5s4t 3pró pró6de6ri pró4des pró4di. pró4dis pró6dit. pró4li prós2 pró3st 2p1s2 psa3c p3sá p2s3q p2s3ue p2s3uĕ 2pt2 p4t3enn pte3r4a pte3rǣ pte5re pte6rea pte6reā pte5ré pte3ri pteri5u pteri5v pte5rī pterī5u pterī5v pte3ro pte3rō p4t3ĕnn ptĕ3r4a ptĕ3rǣ ptĕ3rĕ ptĕ5rī ptĕrī5u ptĕrī5v ptĕ3rŭ p5tĕ́nd pt5ĕ́nn p4t3énn pti4s ptis5t pti6sta ptĭ4s ptĭs5t p3tr p3tu p2u 2pua 2puā 2puá 3pu3b2 pu4gn pu2lu pul3ue pul3ué pu3lum pu1m 2puo 2puō 2puó 2puu 2puú 3pūb pū2s 2pūt p2ŭ 2pŭā 2pŭă 3pŭg 2pŭō 2pŭŏ 2pŭr 2pŭŭ 3púb2 pú4gn 2pút 1q q2u2 qu4ắ qu4ám quás3 qu4át que6ste 3quĕ quĕ6stĕ qu4ia qui4d5ue qui4d5ui qui4d5uī qui4d5uí 2quit quí4d5ue quí4d5ui quí4d5uī quo2s3 quó2s3 ra3a2 rab4a r2ab2e ra3bib rabi3c r4abis ra3biu rab2ī rabī3u rabī3v r2abí rab2o ra3bu ra4b5und ra3ci ra3cí ra2cr rad2a rad2e rad2ē rad2é rad2ī radō5rō rad2ó ra3eat ra3eāt ra3eát raes2 r2aeu r2aev r1ag ra2gā ra2gá ra3g2n ra2gr 2rah ra1i2 ra3ic ra3i4n ra2io ra2ió ra3is ra3it rai4u ra4ium ra4ius ra4iús rai4v ra1ī2 raī4n raī́4 ra1í2 ra3í4n ra3ís r1al r2a3li ra3mam ra4man ra3mas ra4mán ra4már ram3b2 ram5bi rambī5q rambī5u rambī5v rambī́5q rambī́5u rambī́5v ram5bu r2a3me r2a3mé r3amna r3amnā r3amná r3amni r3amnī r3amní ra5ne. 4rang ran4si. ran4si4m ran4s5i4n ran4si4q ran4s5is rans5it ran4s5í4n ran4sí4q ran4s5ís ran4sí4u ran4sí4v r2ant ra1o ra1ō r2aq ra5que ra4rab r4aram ra4rar ra4rau ra4rav ra2rā ra4ráb ra4rár ra4ráu ra4ráv rar5ch r4arem r4aret r3a2rē ra4rid 4ra4ríd r2aro r3aror r3a2rō r2aró r3arór ra4rue ra4rué ra4rui ra4ruí ra5rum r3a4rúe r3a4rúi ra5rúm rasce5u ra4sn ra4s2p ra4sq ra4ss ras4ta ras4tá ras4te ras4tém ras4tén ras4tés ras4tét ras4tic ras4tíc ras5tra ra4sui ra4suí ra4sv ra5te. ra5ten ra5teq ra5teu ra5tev ra5ti. ra5tic ra5tim ra5tin ra5tiq ra5tis ra5tiu ra5tiv ra5tíc ra5tín ra5tíq ra5tís ra5tíu ra5tív ra5to. ra5ton ra5toq ra5tor ra5tos ra5tou ra5tov ra5tón ra5tóq ra5tór ra5tós ra5tóu ra5tóv ra3tr r3att ra5tum ra5tus ra5túm ra5tús ra5ue. ra5ve. ra2xu r4a͞eu r4a͞ev r4á͞eu r4á͞ev r4a͡eu r4a͡ev r4á͡eu r4á͡ev 1rā rā5bun rā4cer rā4cĕr rā4cér 2rācr 2rāct rāi2 rā4iae. rā6iaene rā6iaeque rā6iaeue rā6iaeve rā6ia͞e. rā6ia͞ene rā6ia͞eque rā6ia͞eue rā6ia͞eve rā6iá͞ene rā6iá͞eque rā6iá͞eue rā6iá͞eve rā6ia͡e. rā6ia͡ene rā6ia͡eque rā6ia͡eue rā6ia͡eve rā6iá͡ene rā6iá͡eque rā6iá͡eue rā6iá͡eve rā4iā. rā4iāru rā4iārú rā4iās. rā6iāsne rā6iāsque rā6iāsue rā6iāsve rā6iā́ru rā6iā́sne rā6iā́sque rā6iā́sue rā6iā́sve rā6iáene rā6iáeque rā6iáeue rā6iáeve rā4iæ. rā4iæne rā6iæque rā4iæue rā4iæve rā4iǣ. rā4iǣne rā6iǣque rā4iǣue rā4iǣve rā6iǣ́ne rā6iǣ́que rā6iǣ́ue rā6iǣ́ve rā4iǽne rā6iǽque rā4iǽue rā4iǽve rā3ic rā4iīs. rā6iīsne rā6iīsque rā6iīsue rā6iīsve rā6iī́sne rā6iī́sque rā6iī́sue rā6iī́sve rāĭ2 rāĭ́2 rā1í2 r2ān rānsī4 rānsī́4 rān6s5ĭ́t rān4s5ít 4rārēsc 6rārḗsc rā4rue rā4ruē rā4rué rā4rui rā4ruī rā4ruí r3ā4rŭē r3ā4rŭĕ r3ā4rŭī r3ā4rŭĭ rā4rŭ́ĕ rā4rŭ́ĭ r3ā4rúe r3ā4rúi rā́4cer rā́4cĕr r3ā́cr 4rā́ct rā́i2 rā́3ic rā́ĭ2 rā́3ĭc rā́n4s5ī rā́r2 r5ā́4rui r5ā́4ruī rā́4rŭī rā́4rŭĭ r4ā́t 2r1ăb răb2ă răb2ē răb2ĕ răb2ī răbī3u răbī3v răb2ĭ răbĭ3c 2răc r1ăd răd2ē răd2ĕ răd2ī rădō5rō ră3d2ŏ 2răf 2răg ră3g2n ră4gŏr ră4grē ră4grĕ ră4grō ră4grŏ 2răh ră1ī2 răī4q răī́4 ră3ĭē ră3ĭī 2r1ăl 2rămā 2r3ă4mă 2răm3b2 rămbī5n rămbī5u rămbī5v rămbī́5n rămbī́5u rămbī́5v răm5bŭ 2rămī 4rămna 4r3ămnā 4r3ămnă 4rămná 4rămnæ 4rămnǣ 4rămnǽ 4r3ămnī 2rămo 2rămó 2rămœ 2rămp 2răng 2rănh ră1ō 2răpĕ 2răpp r2ă3q 2r1ă2r răr3c r4ăsĭ ră4sn ră4sp ră4sq răs5trī ră4su ră4sv 2rătt r2ău r2ăv 2rắb rắb4ĭ rắbĭ5c 2rắf rắ3gn rắm3b4 4rắmna 4r5ắmnā 4r5ắmnă 4rắmnæ 4rắmnǣ 4r5ắmnī 4rắpĕ r3ắrd r3ắrm 4r5ắs4tā 4r5ắs4tă 4r5ắstē 4rắstĕ 4rắs4tĭ 4rắstō 4rắtt 1r2á ráb2i rábi3c 2rábl rá4cer 2r3á2cr 2ráct 4ráequa 4ráequā 4ráequă r5áequen 4ráequē 4ráequo 4ráequō 4ráequŏ 2ráes 2r3áf rá3g2n r4ágr rá3ian rá3iā rá3iǣ rá3i2c rá3ien rá3iē rá2iu rá3li 2ráll rám3b2 4r3ámna 4r3ámnā 4rámnæ 4rámnǣ 4r3ámni 4r3ámnī 2rámp ráns5is 2rápe 2r3árd 4rá4rid 2r3árm 4r3á4r4ui 2r3ásp 4r3ás4ta 4r3ás4tā 4ráste rás4tem rás4tes rás4tet 4r3ástē rá5s4tic 4rástit 4rásto 4rástō 2rátt 2ráud rá2xu ræa2 ræă2 ræs2 ræ5sci ræ5stō r2æu ræ3ue ræ3uĕ r2æ3v rǣa2 rǣă2 rǣs2 rǣ5stō r2ǣu rǣ3ue rǣ3uĕ r2ǣ3v r2ǣ́ 1rǽ 4rǽqua 4rǽquā 4rǽquă rǽ4quen 4rǽquē 4rǽquo 4rǽquō 4rǽquŏ 2rǽs2 r2ǽu r2ǽv 2rb2 rba3q rba3r rbæ3 rbe1 r3bi rbi3c rbi3r rbi5ti rbī3r rbī3u rbī3v rbī́3m rbī́3r rbĭ3c rbĭ5tĭ r3bí rbí3m rbí3r rbí3to rbí5tur rbo3ri rbs3 r3bu r3bŭ 2rc2 r4chan r2chă rci6sta rcum3 rcumi4 rcumī4 rcumí4 rcŭm3 rcŭmī4 rcú2m3 2rd2 rde4sc rdē4sc r3di rdi4g3 r3do rd4or r3du rd4ue r3dŭ rd4ŭĕ re3a4tr re3ā4tr reā́4tr re3á4tr rec4e re5cen rec4é re5cén 2red re2da2 red7aman re2dā re4d3ea re4d3eā re4d3eá re4d3eo re4d3eō re4d3eó re4deú re2dē re4d3ii re4d3iī red5iít re4d3i4r re4diss re4dist red5i4tā red5iti redi4u red5iuer red5iué red5iui. red5iuim red5iuin red5iuiq red5iuis red5iuit red5iuín red5iuíq red5iuís red5iuít re4di4v red5iver red5ivé red5ivi. red5ivim red5ivin red5iviq red5ivis red5ivit red5ivín red5ivíq red5ivís red5ivít re4dīm re4d3ī4r re4d3īs re4dīt red5ī4te red5ī4tō red5ī4tu red5ī4tú re4d3ī4u re4d3ī4v re4dī́m re4d5ī́4r re4dī́s red5ī́ss red5ī́st re4dī́t red5ī́6te red5ī́6tō red5ī́6tu red5ī́6ui red5ī́6uī red5ī́6vi red5ī́6vī re4d3íe re4d3íi re4d3í4r re4díss re4díst red5í4to redí4tu red5í4ui red5í4vi re4dúl re2er ree3ri ree3rí re2es 3reē r1ef 2r1eg reg2l re4gn re3go re3gō re2ia re2iā re2iá re3ic re4ien re2ii re2iī re2ií re2io re2iō re2ió re2iu re2iú re2ī 2r1el re2le re2lo 2remā 2reme 2remē 2remé re4mic 4remim re4mine re4miné 4remis 2remī 4remím re4míss re4míst 4remít 4remo. 4remoq 4re4mor 4remou 4remov 4remō. 4remōq 4remōu 4remōv 4remóq 4remór 4remóu 4remóv 2remp 2remt 4remún re5nar re5nas re5nau re5nav re1o re1ō repe3r r2ere r2eri re3rin re3riu re3riv 3rerī r2erí re4rn re4rq 2r3err re4rv re4sa re2sá re4so re2só re2sq 2ress res2t 4rest. 4reste re4ste. re6stem. re6stemn re6stemq re6stemue re6stemv re6s5tene re4steq re4stes re4steu re4stev re4stēs re6stḗs re6stémn re6stémq re6stémue re6stémv re4stés 4resti re4s5ti. re6s5tine re4s5tiq re4stis resti5t4 re4s5tiv re4s5tī. re6s5tīne re4s5tīq re4s5tīs re4s5tīu re4s5tīv re6s5tī́ne re6s5tī́q re6s5tī́s re6s5tī́u re6s5tī́v 4restí re6s5tíne re4s5tíq re4stís restí5t4 re4s5tíu re4s5tív 4restn 4r3esto 4r3es3tō 4r3estó 4restq 4r3estu 4restv re4su. r4esue re4sum re4sun re4suq re4suu re4suv re4súm re4sún re4súq re4súu re4súv rete5re 2reun re4uol reu5sum reu5sus 2reún re3únc re4vol 2r1ex r2exé rexi4t re4xiu re4xiv re2x3ī4 rexī́4 rexí4t rexí4ui rexí4vi re2xu 1rē 2rēbu 2rēbŭ 2rēg rē2gr rē2iā rē2iu rē2iú 2r1ē2l r2ē3la r2ē3lă 2rē2me rē3men 4rēmēr 2rē2mĕ rē3mĕn 4r3ē4mér 4rē4mic 4rē4mim rē4mine rē4minē rē4miné 4rē4mis 4rēmit. 4rēmitn 4rēmitq 4rēmitu 4rēmitv 4rē4mĭc 4rē4mĭm r5ē4mĭnē rē4mĭnĕ 4rē4mĭs 4rēmĭt. 4rēmĭtn 4rēmĭtq 4rēmĭtu 4rēmĭtv rē4mĭ́n 4rē4mĭ́t 4rē4mín 4rē4mít 2rē2mo 2rē2mŏ 2rē2mó 2rēmp 2rēmt 2rēna 2rē2nă rē3ne rēpe3r rēpĕ3r r2ēri 2rēro 2rērŏ 2r3ē4sa 2rē2sā 2rē2să 2rē2sá 2rēsæ 2rēsǣ 2rēsǽ r2ēsc 2rē2se 2r3ē2sĕ 2rēsō 2rēss 2rēst rēs3tĭ r2ē2su 2rēsū 2rē2sŭ 2rēsú 2rēu rē2uo rē2uŏ 2rēv rē2vo rē2vŏ rḗ3b rḗ3ic rḗ3ĭc 4rḗ4le 4r3ḗ4lĕ r3ḗlŏ 4r5ḗ4mer 4r5ḗ4mĕr 4rḗ4mim rḗ6mine rḗ6minē 6rḗmit. 4rḗ4mĭm r5ḗ6mĭnē r5ḗ6mĭnĕ 6rḗmĭt. 4rḗ4mo 4r3ḗ4mŏ 4rḗmp 4rḗmt rḗ4nat rḗ4năt 4r3ḗro 4r3ḗrŏ r4ḗsc rḗ4se r3ḗ4sĕ 4rḗss 4rḗst r4ḗsu rḗ4sŭ 4rḗ4uo 4r3ḗ4uŏ 4rḗ4vo 4r3ḗ4vŏ r4ĕān r4ĕāq rĕ3ā4tr r4ĕāu r4ĕāv rĕā́4tr rĕ2ă r4ĕă. r4ĕăq r4ĕău r4ĕăv 2rĕd rĕ2dā rĕ2dá rĕ2dē rĕ4d3ĕā rĕ4d3ĕă rĕ4d3ĕō rĕ4dīm rĕ4d3ī4r rĕ4d3īs rĕ4dīt rĕd5ī4tĕ rĕd5ī4tō rĕd5ī4tŭ rĕ4d3ī4u rĕ4d3ī4v rĕ4dī́m rĕ4d5ī́4r rĕ4dī́s rĕd5ī́ss rĕd5ī́st rĕ4dī́t rĕd5ī́6tĕ rĕd5ī́6tō rĕd5ī́6tŭ rĕd5ī́6uī rĕd5ī́6uĭ rĕd5ī́6vī rĕd5ī́6vĭ rĕ4d3ĭ4c rĕd5ĭĕr rĕ4d3ĭī rĕ4d3ĭĭ rĕd5ĭtā rĕd5ĭtă rĕ4d5ĭ́ĕ rĕ4d5ĭ́ĭ rĕ4dĭ́t 3rĕē r1ĕf 2r1ĕg2 rĕ3gō rĕ2ī rĕ2ĭĕ 2rĕmā 2rĕmē 2rĕmĕ 2rĕmī 2rĕmĭ 4r3ĕmnē 4r3ĕmnī 4r3ĕmnĭ 2rĕmŏ 2rĕmŭ rĕ5nĕ. 2r3ĕnn rĕ1ō r2ĕq rĕ5quĕ r2ĕr rĕ3r4ĕ 2r3ĕrr 2r3ĕrŭ rĕ1s rĕs3cĭ rĕs2p rĕs2t r2ĕt rĕ5uĕ. 2rĕŭ rĕ5vĕ. 2r1ĕ2x3 rĕ4xă rĕxī4 rĕxī́4 2rĕ́d rĕ́4d5ĕā rĕ́4d5ĕă rĕ́4d5ĕō rĕ́4d3ī rĕ́4d5ĭī rĕ́4d5ĭĭ 2rĕ́f 4rĕ́mĕ 4rĕ́mĭ 4r5ĕ́mnē 4r5ĕ́mnī 4r5ĕ́mnĭ 4r5ĕ́nnā 4r5ĕ́nnă 4r5ĕ́nnē 4r5ĕ́nnĕ 4r5ĕ́nnī 4r5ĕ́nnō 2r3ĕ́2q 4r3ĕ́rr rĕ́3sp rĕ́5s4tā rĕ́5s4tă rĕ́5s6tĕnt rĕ́5s6tĕt rĕ́5strŭ 2r3ĕ́2x3 1ré 2réd ré4d3ea ré4d3eā ré4d3eo ré4d3eō ré4d3iī ré2d3ī ré2e 2r1éf 2ré2le 2ré2lo 4rémer 4rémic 4rémim 4r5é4mine 4rémit. 4rémiti 4rémito 4rémitō 4rémitu 4r3émnē 4r3émni 4r3émnī 2rémo ré4mor 2rémp 2rémt ré4nat 4r3énna 4r3énnā 4rénne 4r3énnē 4r3énnī 4r3énno 4r3énnō 4réqui r2ér 2réro 2r3érr ré2ru 2ré4sa 2résæ 4ré4se. 2réso ré3sp 2réss ré3s4ta ré3s4tā 4réste ré5s6tent ré5s4tet 4résti ré5stit 4réstn 4r3ésto 4r3éstō 4réstq rés4tru 4r3éstu 4réstv r2é2su 4résu. 4résum 4résus 2r3é2uo 2r3é2vo ré4xeu ré4xiē ré4x3is ré2xī ré2xu 2rf 2rg2 r3ge r3gĕ r1h r2hy r2hý ri2a r2ia. r2iae r2iam r2ian r2iaq r2iar r2ias r2iat ri3atr r2iau r2iav r2ia͞ r2ia͡ r2iā 2riă r2iáe r2iám r2ián r2iár r2iás r2iát ri3átr r2iáu r2iáv r2iæ r2iǣ r2iǽ 2ribe 2ribē ri4bē. 3riboe 3riboē 3riboé ri5bus ri5bús ri4cie ri4ciē ri4cié ri4cim ri4cio ri4ciō ri4ció 4ricit r3i4cím r3i4cít 3ricl r2icu r2icú 2rido ri4don 2ridō ri4dōn 2ridó r2ieb 3riei 3rieí r2iem r2ien ri3enn r2ies r2iet r2iēb 3riēī r2iēm r4iēri r4iērí r2iēs r2iēt r4iḗb r4iḗm r4iḗne r4iḗq r4iḗri r4iḗs r4iḗt r4iḗu r4iḗv 2riĕ r2iéb 3riéi r2iém r2ién ri3énn r4iéris r2iés r2iét ri3ga ri3gæ ri3gǣ ri4g3n r4iis. r4iisn r4iisq r4iisu r4iisv r2iīs r4iī́s r4iísn r4iísq r4iísu r4iísv 2rij r1il 3rile 3rilé 5rille. 5rillen 5rilleq 5rilli. 5rilliq 5rillis 5rilliu 5rilliv 3rillī 5rillíq 5rillís 5rillíu 5rillív 3rillo 3rillō 3rilló 5rillum 5rillus. 5rillusn 5rillusq 5rillusu 5rillusv 5rillúm 5rillúsn 5rillúsq 5rillúsu 5rillúsv 3rim. 3rimed 3rimel 5rimetr 3rimēd 3rimēl 5rimḗd 5rimḗl 3ri5méd 3ri5mél 5rimétr ri3min 3rimn 3rimq 4rimun ri3mur r4i3mus r2imú ri3múr ri3mús 3rimv ri2ni rin3ic ri2n3ī2 rinī́4 ri4n3í4c r3inq rinte5r6 rinteri5 rinterī5n rinterī5q rinterī5u rinterī5v rinterī́5 rinterí5u rinterí5v 3rinth ri2nu ri4nún r2i2o r2iō r2ió r2ip ri3pi r2iq ri2ra ri2rá ri3r4e rir6emi ri3r4ē ri5rē5m 3rirrh 1r2is ri3sa ri4sat ri3sá ri4sát ri4s3p ris5pe ris5pé ris5ti ri6stri ri4sui ri4suí r2ita r4itāt r2itá r4i5ter r2ité ri5tér 3rith r2iti 3ritia 3ritiá 3ritiæ 3ritiǽ 3ritii 3ritií 5ritior r5itiō. r5itiōn r5itiōq r5itiōu r5itiōv 5ritiór 5ritiss 5ritius 3ritiú r2ití 3ritía 5ritíss ri5tōt 3ritt r4itue r4iue. 2riug r4ium. r4iumn r4iumq r4iumu r4iumv r4iunt r2ius 2riŭ r4iúnt r2iús r4ive. rī3āt 2rīb rī4c5ĕ́n rī4cén 2rīg r2īm rīmi3 r2īne r4īnĕ r2īq 2r3ī2rā r2īs. r2īsn r2īsq r2īsu r2īsv r2īt r2īu r4īue. r4īuĕ. r4īus r2īv r4īve. r4īvĕ. 2rī́b rī́3d r2ī́m r4ī́ne r4ī́nĕ r2ī́q r2ī́t r4ī́uĕ. r4ī́vĕ. 1rĭ rĭ4bē. r2ĭc rĭ3cē rĭ3cĕ rĭ3cī 2rĭcĭ rĭ4cĭă rĭ4cĭē rĭ4cĭĕ rĭ4cĭm rĭ4cĭō rĭ4cĭŏ rĭ4cĭŭ rĭ3cŭ 2rĭdă 2rĭdō rĭ4dōn r2ĭē r4ĭē. r4ĭēq r4ĭēu r4ĭēv r2ĭĕ r4ĭĕ. r4ĭĕn rĭ3ĕnn r4ĭĕq r4ĭĕu r4ĭĕv rĭ5ĕ́nn rĭ3ga rĭ3gæ rĭ3gǣ 2rĭi 2r1ĭĭ 2rĭj 2r1ĭl 3rĭle 3rĭlé 3rĭllĕ 3rĭllī 3rĭllō 3rĭllŭ 4rĭmăr 4rĭmăt 2r3ĭmb 4rĭmēb 4rĭmēm 4rĭmēr 4rĭmēs 4rĭmēt 4rĭmḗb 4rĭmḗm 4rĭmḗr 4rĭmḗs 4rĭmḗt 4rĭmĕt 5rĭmĕtr 5rĭmĕ́tr 4rĭmĭm 4rĭmĭs 4rĭmĭt 4rĭmĭ́ 2rĭmm 2rĭmŏ 2rĭmp 4rĭmŭn 4rĭmŭ́n rĭ2n1 rĭ3nā 2r3ĭnc 2r3ĭnd 2rĭni 2r3ĭnī4 rĭnī́4 2r3ĭnĭ rĭnĭ́4 2rĭnj 2r3ĭnq rĭntĕ5r rĭntĕrĕ5r rĭntĕrī5n rĭntĕrī5q rĭntĕrī5u rĭntĕrī5v rĭntĕrī́5 5rĭnth 2rĭnu 2rĭnŭ 2rĭnv rĭ2ŏ 2rĭpē 2r1ĭr rĭ3r4ē rĭ5rē5m 3rĭrrh rĭ3s4ă rĭ4sp rĭs5pĕ rĭs5tĭ rĭ5strŏ r2ĭt 4r5ĭ4tĭō. 4r5ĭ4tĭōn 4r5ĭ4tĭōq 4r5ĭ4tĭōu 4r5ĭ4tĭōv 2rĭu 2rĭv r2ĭ́c rĭ́3cĕ 4r5ĭ́4cĕr 4rĭ́cĭ rĭ́4cĭā rĭ́4cĭă rĭ́4cĭē rĭ́4cĭĕ rĭ́4cĭm rĭ́4cĭō rĭ́4cĭŏ rĭ́4cĭŭ 4rĭ́mĕr 4rĭ́mĭm 4rĭ́mĭt rĭ́2n r3ĭ́nc 4r3ĭ́nd3 r3ĭ́n3ĭ4 2r3ĭ́r r4ĭ́s 4r5ĭ́4tĭō 1rí 2ríb 4r3í4cer 2ríci rí5ci. rí4ciā rí4ciē rí4cim rí4cio rí4ciō rí5cis r2ícu rí3d 2rída rí3ga rí4g3n 2ríj 4rílli 4rímer 4rímim rí3min 4rímit 2rímm r2ímu 2rínc 2rín2d3 4rí4n3i4c 2rínj 2ríns 4rínte r2íq 2rírr rís3t rí4sui r2ít 4rítio. 4r3í4tiō rí2xu 2rj 2rl2 r3lu 2r1m2 rmĭ2ă rmí5tur 2r1n2 r3ne rne3g r3nĕ rnĕ3g rn4i3m rn4ĭ3m rní5ci 1ro. ro3áq rob2a rob2e rob2ē rob2é ro3b2i rob2ī rob2í ro3b2o3 rob2ó rob3r r1oc ro2da ro4deo ro4d5e4ra ro4d5e4rá rod5e6rim rod5e6rit rod5e6rít ro4d5e4ro ro4d5e4ró ro4d5e4ru ro4d5e4rú rod5est ro6d5é6rim ro6d5é6rit rod5ést ro4d3ie ro4d3ié ro4d3ii ro4d3ií ro4dio ro4diō ro4dió ro4d3i4r rod5iss rod5ist ro4d3i4u ro4d3i4v ro4d3íe ro4d3íi ro4d5í4mu ro4d3í4r rod5íss rod5íst rod5í6te. ro6d5í6tis ro4d5í4to rodí4tu rod5ítur rod5í4ui rod5í4vi ro4em ro4en ro3eo ro3eō ro3eó ro4eq ro4es ro4ev ro2ē ro2é ro4ia. ro4iae ro4iam ro6iane. ro4iaq ro4iar ro4ias ro4iau ro4iav ro4ia͡ ro4iáe ro4iám ro6iáne. ro4iár ro4iás ro4iáu ro4iáv ro2iæ ro2iǽ ro4iis. ro4iisn ro4iisq ro4iisu ro4iisv ro3iī ro4iísn ro4iísq ro4iísu ro4iísv ro3it ro4ium ro4ius ro4iús roī4n roī2q roī́4n roī́4q roí2t roí2u roí2v 2r1ol ro2le ro2lē ro2lé ro4li. ro4lin ro4liq ro4lis ro4liu ro4liú ro4liv ro2lí ro2l4u ro2lú r2on ro3ni rons3 ro2pe3 ro2pé 1roq ro2ra ro2rá r3ord ro4rer ro4ret ro4rén ro4rér ro4rét ro4ro. ro4ron ro4roq ro4ror ro4rou ro4rov ro4rón ro4róq ro4rór ro4róu ro4róv r2os ro3s2c ro2s3m ro3só ro3s2t ro4s3ui ro4s3uí 1rou 1rov 1ro͞ 1ro͡ rō4d5e4ra rō4d5e4rā rō4d5e4rá rōd5e6rim rōd5e6rit rōd5e6rít rō4d5e4rō rō4d5ĕ4rā rō4d5ĕ4ră rōd5ĕ6rĭm rōd5ĕ6rĭt rōd5ĕrĭ́t rō4d5ĕ4rō rō6d5ĕ́6rĭ rō4d5é4ri rō4d3ie rō4d3iē rō4d3ié rō4d3ii rō4d3iī rō4d3ií rō4d3ī4m rō4d3ī4r rō4d3īs rō4d5ī4te rō4d5ī4tĕ rō6d5ī6tis rō6d5ī6tĭs rō6d5ī6tĭ́s rō6d5ī6tís rō4d5ī4tō rō4d5ī4tu rō4d5ī4tŭ rō4d5ī4tú rō4d3ī4u rō4d3ī4v rō4d5ī́4m rō4d5ī́4r rōd5ī́ss rōd5ī́st rō6d5ī́6te rō6d5ī́6tĕ rō6d5ī́6tis rō6d5ī́6tĭs rō6d5ī́6tō rō6d5ī́6tu rō6d5ī́6tŭ rōd5ī́6ui rōd5ī́6uī rōd5ī́6uĭ rōd5ī́6vi rōd5ī́6vī rōd5ī́6vĭ rō4d3ĭē rō4d3ĭĕ rō4d3ĭī rō4d3ĭĭ rō4d5ĭ́ĕ rō4d5ĭ́ĭ rō4d3íe rō4d3íi rō4ia. rō4iae. rō6iaene rō6iaeque rō6iaeue rō6iaeve rō4iam rō4ian rō4iaq rō4iau rō4iav rō6ia͞e. rō6ia͞ene rō6ia͞eque rō6ia͞eue rō6ia͞eve rō6iá͞ene rō6iá͞eque rō6iá͞eue rō6iá͞eve rō6ia͡e. rō6ia͡ene rō6ia͡eque rō6ia͡eue rō6ia͡eve rō6iá͡ene rō6iá͡eque rō6iá͡eue rō6iá͡eve rō4iā. rō6iāne. rō6iāque rō4iāru rō4iārú rō4iās. rō6iāsne rō6iāsque rō6iāsue rō6iāsve rō4iāue rō4iāve rō6iā́ne. rō6iā́que rō6iā́ru rō6iā́sne rō6iā́sque rō6iā́sue rō6iā́sve rō6iā́ue rō6iā́ve rō6iáene rō6iáeque rō6iáeue rō6iáeve rō4iám rō4iæ. rō4iæne rō6iæque rō4iæue rō4iæve rō4iǣ. rō4iǣne rō6iǣque rō4iǣue rō4iǣve rō6iǣ́ne rō6iǣ́que rō6iǣ́ue rō6iǣ́ve rō4iǽne rō6iǽque rō4iǽue rō4iǽve rō4iī. rō4iīn rō4iīq rō4iīs. rō6iīsne rō6iīsque rō6iīsue rō6iīsve rō4iīu rō4iīv rō4iī́n rō4iī́q rō6iī́sne rō6iī́sque rō6iī́sue rō6iī́sve rō4iī́u rō4iī́v rō2iō rō4ium rō4ius rō4iús rō2le rō2lē rō2lĕ rō2lé rō4lis rō4liu rō4liú rō2lī rō4lĭs rō4lĭŭ rō4lĭ́ rō2lí r2ōn rō2ra r3ō2rā r3ō2ră rō2rá 2rōrd rō4rer rō4ret rō4rēm rō4rēr rō4rēt rō4rĕr rō4rĕt rō4rén rō4rér rō4rét rō2ro rō4rō. rō4rōn rō4rōq rō4rōu rō4rōv r3ō2rŏ rō2ró 2rōs2c 2rōt rṓ6d5e6ra rṓ6d5e6rā rṓd5e6rit rṓ6d5e6rō rṓ6d5ĕ6rā rṓ6d5ĕ6ră rṓd5ĕ6rĭt rṓ6d5ĕ6rō rṓ4d5iē rṓ4d5ii rṓ4d5iī rṓ4d5ĭē rṓ4d5ĭī rṓ4d5ĭĭ rṓ2l rṓ4lĕ r3ṓ4ra r3ṓ4rā r3ṓ4ră 4rṓrd rṓ4rer rṓ4ret rṓ4rĕr rṓ4rĕt r3ṓ4ro r3ṓ4rō r3ṓ4rŏ 4rṓsc rṓ5stĭ 2rṓt rŏb2ē rŏb2ĕ rŏb2ī rŏb2ŏ rŏ2bŭ r1ŏc r1ŏd rŏ2dĭ rŏ2ē rŏī2n rŏī4q rŏī́4n rŏī́4q rŏ3ĭ2 rŏĭ́4 2r1ŏl rŏ2lē rŏ2lĕ rŏ2lŭ rŏm2ĕ r2ŏn rŏ2pŭ 1r2ŏr r2ŏs r2ŏ́ rŏ́3ĭ rŏ́4lĕ rŏ́4lŭ rŏ́m2 4rŏ́t 1ró rób2e 2rócc ró4d5e4ra ród5e6rit ró4d5e4ro ró4d3ie ró4d3ii ró3eo ró3eō ró3iī ró3in ró4ium ró4ius 2ról2 ró2le ró4li. ró4lis ró4liu ró3m róm4e ró1r 2ró2ra 2r3órd ró4rer ró4ret 4rórna 4rórno 2ró2ro 2ró3sc ró3sta ró3ste ró3sti ró3sto rós3ue ró4sui 2rót 1rœ rœ̄3d 2rp rpe2i rpe3r rper4e rper4ē rpĕ3ră rpĕ3rĕ rpo1 2rq r3qu 2r1r2 rra3d4 r3ră r3re rre2o rre3r rres3t rrex2 rre5xi r3rē r3rĕ rrĕ4s3t rr4ĕ́ rrĕ́3q r3ru 2r1s2 r3se rsed4 rse5di rse2i rsēd4 rsē5di rsē5dĭ rsē2i r3sĕ r3si rs4ig rsĭ3gĕ r2s3q r3st r2s3ue r2s3uĕ 2rt r3ta rta3g r3tā rte3r rte5re rtĕ3rĕ r3ti r3tī rtran4 rtrān4 rtrāns5 rua6ste ruā6ste ruā6stĕ 2r1uă 2ruæ 2r1uǣ 2ruǽ ru3b2 rubī3q rubī́3 2ru3d r1ue 4rue. r4uera r4uerā r4uerá r4ueri r4uerī r4uerí r4uero r4uerō r4ueró r4ueru r4uerú ruete5 r4uēru r4uērú 2r3uĕ ru4gn r1ui rui4g3n r2uim r4uiss r4uist r2uit r1uī 2ruīs r4uīv 2r1uĭ ruí4g3n r2uíq r4uíss r4uíst r2uít 1r2ul 1r2um rum2e ru3m2ī ruol6uere. ruol6uerene ruol6uereq ruol6uereu ruol6uēre ruol6uēru ruol6uērú ruol6uḗre ruol6uḗru ruol6uit. ruol6uitn ruol6uitq ruol6uitue 2ruŏ ruól6ui. ruól6uit. ruól4uī rupe3r ruperi5mus ruperi5mú ruperi5ti ruperi5tí r1u2r ru4rs 1rus ru2sp 2russ 2rust 4rusur 2rusú ru2tr ru3tu r1uu 2ruŭ ru2xu rū3d r1ūn r1ūr rū2ra rū2rā rū2ră rū2rá rū2rē rū2rī rū2ro rū2rō rū2rŏ rū2ró rū2ru rū2rŭ rū2rú rū4sp rū2ti rū2tĭ rū2tí rū3tu rū2xu r4ū́g rū́4ra rū́4rā rū́4ră rū́4re rū́4rē rū́4rĕ rū́4rī rū́4ro rū́4rō rū́4rŏ rū́4ru rū́4rŭ rŭb2 rŭ3bī rŭ2bĭ 2rŭd 1rŭl r2ŭm rŭ3mă rŭm2ĕ rŭ3m2ī r3ŭnd r3ŭng r1ŭr 3rŭsī 3rŭsĭ rŭs2p rŭ4tĕr 2rŭtr r2ŭ́ rŭ́3b r3ŭ́ng r3ŭ́r 3rŭ́sĭ rŭ́3sp 1rú r2úe rú4gn r2úi r2úl r2úm 2rúnc 2rúng 2rúnx 2r1úr rú2ra rú2re rú2ro r2úsi r2úsq 2rúss 2rúst rú2tr rú2xu 2rv2 rva6ste rvā6ste rvā6stĕ r3ve rvete5 r3vĕ rvi4g3n rví4g3n 2r2x 1sa 2saa sab4a sab3ea sab3eā sab3eá sab3eo sab3eō sab3eó sab3iī sab3i4n sab3i4q sabi4te sabi4to sabi4tó sabi4u sabi4v sa2bī4 sabī́4 sab3í4n sab3í4q sabí4t sab3í4u sab3í4v sab2o s1ac sa2ci 2s1a2d3 sa3do s2ae sa2i sali4g5 salí4g3 s3alp sa2l3u s2am sa3ma 3s2an s2a3q s2ar sa3re s2as sa4tro sa4tró sa4tru sa4trú s4aue s3aus s4a͞e s4á͞ s4a͡e s4á͡ 1sā sā5bun 2s1āc sā2i 2s3ā́c sā́4tr 1să 2săă 2s1ăb săb2ă să2bĕ să2bī4 săbī́4 să2b3ĭ s1ăc să2cĭ 2s1ă2d3 să3g s3ălp să3rĕ sắb3ĕ sắb3ĭ s3ắd 1sá sá4b3ea sáb3eā sá4b3eo sáb3eō sá4bi. 2sá2bī 2s1ác 2s1á2d1 s2áe sá2lu s2ám s2án s2ár s3átr sá4tri sá4tro sá4tru s2áu 1s2æ sæ2a sæ2ă sæ2á sæ2i sæ2ŭ 1sǣ sǣ2a sǣ2ă sǣ2ŭ 1s2ǽ 2sb2 s3bi sbī3u sbī3v s3bu s3bŭ 2scam 2scas 2scā 2scám 2scás 1s2cæ 1s2cǣ 2sce. 2sceb 2scem s6ce6naria. s6ce6narian s6ce6nariaq s6ce6nariau s6ce6nariav s6ce6narium s6ce6nariúm s6ce6naría s6ce6nária. s6ce6nárium s6cendamus s6cendamú s6cendant s6cendat s6cendámus s6cendánt s6cendát s6cendeb s6cendem s6cender s6cendes s6cendet s4cendē s4cendé s6cendim 5s6cendiss 5s6cendist s6cendit s6cendím 5s6cendíss 5s6cendíst s6cendít s6cendun s6cendún s4c5enna s4c5enná 6scens. 6scensn 6scensq 6s7censue 6scensv 2sceq 2scer 2sces 2scet 2sceu 2scev 2scēb 2scēm s6cē6nāria. s6cē6nārian s6cē6nāriaq s6cē6nāriau s6cē6nāriav s6cē6nārium s6cē6nāriúm s6cē6nārĭă. s6cē6nārĭăn s6cē6nārĭăq s6cē6nārĭău s6cē6nārĭăv s6cē6nārĭŭm s6cē6nārĭŭ́m s6cē6nārĭ́ă s6cē6nāría s6cē6nā́ria. s6cē6nā́rium s6cē6nā́rĭă. s6cē6nā́rĭŭm 2scēs 2scēt 2scĕ. 2scĕq 2scĕr 2scĕt 2s3cĕu 2s3cĕv 2scéb 2scém s6céndant s6céndar s6céndat s6céndens s6céndent s6cénder s6céndes s6céndet s4céndē s6céndim s6céndit s6céndor s6céndun 2scér 2scés 2scét 2s3ch 3s4cho 3s4chŏ 3s2cia 3s2ciā s2ciá 3s2ciǣ 3scid 5s6ciderā 5s6ciderī 5s6ciderō 5s4cidē s7cidis. s7cidisn s7cidisq 5scidissē 5scidistī s7cidisu s7cidisv 5s4cidī 5scidíssē 5scidístī 3s2cie 3s2ciē s2cié 3s2cii 3s2ciī s2cií 3scind 3s2cio 3s2ciō s2ció s2cir 4scisa 4scisá 4scisæ 4scisǽ 4scise 4scisé 4scisi 4scisí 4sciso 4scisó 4scisu 4scisú s4citæ s4citǽ s2ciu s2ciú s2civ 2scīd s2cīm s2cīr s2cīt s2cīu s2cīv 3s2cĭā 3s2cĭă 3s2cĭǣ 3s2cĭd 3s2cĭē 3s2cĭĕ 3s2cĭī 3s2cĭĭ 3scĭnd 3s2cĭō 3s2cĭŏ 4s5cĭs. 4s5cĭsn 4s5cĭsq 4s5cĭsu 4s5cĭsv 3s2cĭŭ 3s4cĭ́d 5scĭ́nd s2cía 3scíd 5s6cíderā 5s6cíderī 5s6cíderō s2cíe s2cíi s4címu 3scínd s2cír 4scísa 4scísæ 4scíse 4scísi 4scíso s4cíta s4cítæ s4cíti s4cíto s4cíui s4cívi 2s3c2o sco3p 2scō 2sc2ŏ scŏ3p 2s3có 2s3cœ 3s4crib 3scrip s5cris 3scrīb 3scrīp s3crīs 5scrī́b 5scrī́p s5crī́s s2crí 3scríb 3scríp s3crís 2scun s2cū 2scún 2sd sde3d sde2s sdē2s sdĕ3d s3do sd4or 1se se3b 3sec se3d2 sed4i3m se4d3i4t se5dit. se5ditn se5ditq se5d4itu se5ditv sedí4t se4d5íti sed4o sed4u se2e s1eg se2gi se2gí se2gn se2iā se2ie se2ié se4in se4iq se4ir se4iv se3íp 3sem semi5as semi5ás se4m5iss se4m5íss se4mul s2en 3sep s2e3q s2e1r ser2a ser2æ3 ser2ǣ se3rē ser4i seri5c se3rī se3rō ser2u 3ses ses3q 2se2un se2ur s1eú s2ev se2xe se2xé se2xi se3x4ie se3x4iē 1sē sēdĕ4c3 sēdi2 sē4d3it sē5dit. sē5ditn sē5ditq sē5ditu sē5ditv sēdĭ2 sē4d3ĭt sē5dĭt. sē5dĭtn sē5dĭtq sē5dĭtu sē5dĭtv sēdĭ́4 sē6d5ĭ́tĭ sēdí2 sē4d5íti 2s1ē2g sē2ie sē2iē sē4ir s2ēm sēmi5ās sēmi5ā́s sē4m5is. sē4m5isn sē4m5isq sēm5iss sē6m5isue sē4m5isv sēmĭ5ās sēmĭ5ā́s sē4m5ĭs. sē4m5ĭsn sē4m5ĭsq sēm5ĭss sē4m5ĭsu sē4m5ĭsv sē6m5ĭ́sn sē6m5ĭ́sq sēm5ĭ́ss sē6m5ĭ́su sē6m5ĭ́sv sē4m5ísn sē4m5ísq sēm5íss sē4m5ísu sē4m5ísv sē2mū sē3ne sēs4cō sēs3q sēs3t 2s3ḗ2g sḗmi3 sḗ4m5is sḗmĭ3 sḗ4m5ĭs 1sĕ sĕ2ă sĕ3d sĕd4ĭ3 sĕp4tĕ́ sĕ3r2a sĕ3ră sĕ3r2æ sĕ3r2ǣ sĕ3rē sĕ3r4ĕ sĕ3rī sĕ3rō sĕ3rŏ sĕ3rū sĕ3rŭ sĕ2s 2sĕŭ sĕ2x3ĕ sĕx2ĭ sĕ́3ră sĕ́x4ĭ 1s2é s1é2g sé4ir 3sém sémi3 sé3q 3sés sé3x4ie séx4iē sg2 s3ga s3gæ3 s3gǣ 1si s2i2a 2si2ba 2si2bá 2si2be 2si2bé si3bi si4bis si4bit si4bís si4bít 2si2bo 2si2bó si4bun si4bún s1ie 3sie. s1iē 3siē. 2siĕ 2siéc 2s3i2ga 2s3i2gā 2s3i2gá 2s3i2gē 2s3igé 2s3i2gi 2s3i2gī 2s3i2gí si4g3n 2s3i2go 2s3i2gō 2s3i2gó 2s3i2gu 2s3i2gú s3iít 3s2il si5lum si5lus 3sim si3mus s2in sin2ā sino3p si2o sio2s 2s1ir si2re si2ré si2rí si4s3t sis5ta sis5tā sis5ti s1iu 3s2ium 2siun 2s3iur s2ius s2i3uu 2s3iū 2siŭ 2s3iún 1sī 2s1ī2b s3ī2mi s3ī2mĭ 2s1īr sī2re sī2rē sī2rĕ sī2ré sī2rī sī2rí sī4st s3ī́2b sī́4mi sī́4mĭ sī́4mur sī́4mŭr s3ī́r sī́4re sī́4rē sī́4rĕ sī́4rī sī́4tur sī́4tŭr 1sĭ 3sĭa 3sĭā 3sĭă 3sĭæ 3sĭǣ s2ĭb 3sĭē. 3s4ĭĕ. s4ĭĕn s4ĭĕq s4ĭĕu s4ĭĕv sĭ2g 2s3ĭgā 2s3ĭgă 2s3ĭgē 2s3ĭgī 2s3ĭgĭ 2s3ĭgō 2s3ĭgŏ 2s3ĭgŭ 3sĭī 2s1ĭĭ s2ĭn sĭn2a sĭn2ā sĭn2æ sĭs3 sĭ4st sĭs5tā sĭs5tă sĭs5tĭ sĭ4́g 4s3ĭ́4gĭ 2s3ĭ́ĭ s2ĭ́n sĭ́s3 1sí 2sí2ba 2sí2be sí3bi sí4bis sí4bit 2sí2bo sí4bun 2s3í2gi síg3n s2íl sí4mur sí2nu 2s1ír sí2re sí4s3t 2sj s1m2 2s3me 2s3mé 2s1n2 s3ne s3nĕ snŭ́3 1s2o so3b2 so4l3ue sol3ué so4l3ui so4l3uī so4l3uí 3so1n so3ni son2u 3so3p sos2p 1sō sō4lue sō2s3p sṓ4s 1s2ŏ sŏ3b2 sŏl4lĕ 3sŏn sŏs2 1s2ó 2sód sól2l só2s sp2 3sparg 3spars 3spărg 3spărs 5spắrg 5spắrs 3spárg 3spárs spár4ui 4spe. s2pec 4s3pem 4spen 4speq spe3r4a speras7c sper4ā spe3r4æ spe3r4ǣ sper4ǽ spe5rem spe5req spe5rer spe5r4es spe3r4ē sper4é s4perg speri4b sper5i4m speri4r spe5r4it spe4r5ī4m spe4rī4r sperī́6m sperī́6r spe4r5í4m spe4rí4r 3s4pern spe3r4o spe3rō sper4ó s4pers spe3rū 2spes 4speu 4spev s2pex 4spĕ. s2pĕc 4s3pĕm 4spĕn 4spĕq spĕ3r4a spĕ3r4æ spĕ3r4ǣ spĕ3rē spĕ4rĕā spĕ4rĕă spĕ4r5ĕō spĕ5rĕq s4pĕrg spĕ4r5ī4m spĕ4r5ī4r spĕrī́6m spĕrī́6r spĕ4r5ĭĕ 3s4pĕrn spĕ3rō spĕ3rŏ s4pĕrs spĕ3rū spĕ3rŭ 2spĕs 4spĕu 4spĕv s4pĕ́c 4spĕ́n s6pĕ́rnē s6pĕ́rnō s6pĕ́rnŭ s4pĕ́rs 4spĕ́s s4pĕ́x 4s3pém 2spén spé4r5ea spé4r5eā spé4r5eo spé4r5eō spé4ri. s4pérno s4pérs 4spés s2péx s2phæ s2phǣ s2phǽ 4sphen 4sphén s2phr s3pi. 4spia s3pib s3pin s3pio s3piō s3pió s3piq s2pir 2spit s3piu s3piú s3piv s2pī 4spĭă s3pĭb 2spĭt s3pĭŭ 4spĭ́t s2píc s3pín s3píq 2spít s3píu s3pív 2spn s2pod 3s2pol 3spond 2s3pos 2spōs 1spŏ s2pŏd s2pŏl 2spŏr 2spŏs s4pŏ́l 4spŏ́s s2pód 3s2pól 2s3pós 2spub s2pue s2puē s2pué s2pui s2puī s2puí s3pus s2pŭē s2pŭĕ s2pŭī s2pŭĭ s3pŭm s3pŭs 2spúb s2púe s2púi s3pús s2qua s2quā 2s3que 2squĕ s3qui s1r2 2s1s2 s3sa s3sā s3să s3sá s3sæ s3sǣ s3sǽ s3se ssed4 sse5di s3sē ssēd4 ssē5di ssē5dĭ ss4ēm s3sĕ s3sé ssér4ui ssér4uī s3si ssi3l4 s3sī s3sí ssíl2 s3su ssupe5rí 2st. 4s5taté s5tatib 4s5tātē 4s5tāté s5tātib s5tātĭb st2ă s2tág st4án s5tátib ste2ī 4stemí ste3r4a ste3rǣ ste5re ste5ré 4sterg ste3r4i ster6i5c steri5ue steri5v ste5rī sterī5u sterī5v 5s4terne 5sternē 5sterné 5s4terno 5s4ternō 5s4ternó 5s4ternu 5s4ternú ste3ro ste3rō 4sterr 4sters 3s4tete 3steté 5s4teti. 5stetim 5s4tetin 5s4tetiq 5stetit 5s4tetiu 5s4tetiv 5s4tetín 5s4tetíq 5stetít 5s4tetíu 5s4tetív 4stēmí 3s4tēte 3stētē 3s4tētĕ 3stēté 5stētim 5stētit 3stētī 5stētĭm 5stētĭt 5stētít 5s4tḗte 5stḗtĕ 5stḗtim 5stḗtit 5stḗtī 5stḗtĭm 5stḗtĭt stĕ2ī stĕ3r4a stĕ3rǣ stĕ3rĕ 4stĕrg stĕ5rī stĕrī5u stĕrī5v stĕ5r4ĭ stĕrĭ5c 5stĕrnē 5s4tĕrnĕ 5s4tĕrnĭ 5s4tĕrnō 5stĕrnŏ 5s4tĕrnŭ 4stĕrr 4stĕrs stĕ3rŭ 3s2tĕs 6stĕ́nta 6stĕ́ntā 6stĕ́ntă 6stĕ́ntæ 6stĕ́ntǣ 6stĕ́ntĕ 6stĕ́ntī 6stĕ́ntō 6stĕ́ntū 4stĕ́rg 5s6tĕ́rnē 5s6tĕ́rnĭ 5s6tĕ́rnō 5stĕ́rnŏ 5s6tĕ́rnŭ 4stĕ́rr 4stĕ́rs 4stérg stéri5t 5s4térnē 5s4térni 5s4térno 5s4térnō 5s4térnu 4stérr 4stérs 3s4téte 5stéti. 5stétim 5stétit s2t1h 2s3tia 2s3tiā 2s3tiá s2tib sti4bi. sti4bī 4s3tibu 4s3tibú 2stic 2s3tim 3s4timu 3s4tinā 3s4tinc 3s4ting 3s4tinō 3s4tinx 2s3tio 2s3tiō 2s3tió s2tip 3s2tir s3tis s2tit 3stitǣ 3stitū 2s3tiu 2s3tiú 3s4tīnc 3s4tīnx s4tī́nc 2s3tĭā s3tĭă stĭ4bī 4s3tĭbŭ 2stĭc 2s3tĭm 3stĭnā 4stĭnāx 3s4tĭnă 4stĭnē. 4stĭnēn 3s4tĭng 3s4tĭnō 3s4tĭnŏ 2s3tĭō s2tĭp 3stĭr 2s3tĭs s2tĭt 3stĭta 5stĭtā. 5stĭtān 3stĭtă 3stĭtá 3stĭtæ 3stĭtǣ 3stĭtǽ 5stĭtĕm 5stĭtĕt 5stĭtīs 5stĭtŭm 2s3tĭŭ 4s3tĭ́m 5stĭ́mŭ 5s4tĭ́ng 3s4tĭ́r 4s3tĭ́s s3tía 2stíc 2s3tím 3s4tínc 3s4tíng 3s4tínx s2típ s3tís s2tl 2stn 2stoc 2stor 2s3tot 2stōr s3tōt st4ṓ 4stṓr 2stŏc 4stŏ́c 2stóc 4stóre 4stóri 2s3tót 2stq 4strac 4strah stra3p4 4strax 4stra͞ 4stra͡ 4strāx 4strā́x 4s5tră. 4s5trăm s5trănĕ 4s5trăq 4s5trău 4s5trăv s5trắm 4strác 4stráh 4stráx s3træ s3trǣ s3trǽ s3tri. 5strict 3strig s5trine s3triq 4s3tris s3triu s3triú s3triv 4striz s3trī. s3trīq 4s3trīs s3trīu s3trīv 5strĭct 3s4trĭē 3s4trĭĕ 3strĭg 3strĭn 4strĭz 5strĭ́ct 5strĭ́gĭ 5strĭ́gŭ 5strĭ́n 5stríct 5strígi 5strígu 5stríng 5strínx s3tríq 4s3trís s3tríu s3trív 4stríz 2stro 3s4trom 3strop 2strō 3s4trōm 5strṓm 2stró 3stróm 4strud 4strus 4strūd 4strūs 4strū́d 4strū́s s5trŭm s5trŭ́m 4strúd 4strús 2strȳ 2strý s4tue. s4tuĕ 2stul 3s2tup s3tur 2stū 4stŭl 3s2tŭp 3s4tŭ́p 2stúl 2stún s2túp 2stúq 2s3túr 2stúu 2stúv 2stv 1s2ty 1stȳ 1s2tý s1u 1su. 3s2uam 3s2uan 3s2uar 3s2uas 3s2uat 1s2uā 1s2uá 1s2u2b1 su5ber. sube4ra su5bera. su5berane su5beraq su5berau su5berav sube4rá su5beren su5beri. su5berib su5beriq sube6ris su5beriu su5beriv su5beríq sube6rís su5beríu su5berív su5bern sube4ro sube4ró su5berq su5berue su5berv sub3es sub3ē subḗ4 su5bérib su5bérn su5bérq su5béru su5bérv sub3és subi4 sub3is sub3it subí4 sub3ís sub3ō 1su3d 2sue. 3s2ueb 3s2uem 3s2uen 3s2ueq 3s4uera 3s4uerā 3s4uerá 3s4uere 3s4uerē 3s4ueré 3s4ueri 3s4uerī 3s4uerí 3s4uero 3s4uerō 3s4ueró 3s4ueru 3s4uerú 3s2ues 3s2uet 3s2ueu 3suev 1s2uē 2suēx 4suḗx 3s2uĕn 3s2uĕq 3s2uĕu 3suĕv 1sué s2uéb 2suéc 2suéh s2uém s2uén 4suérb s4uére s4uéri 4suérs 4suért s4uéru s2ués s2uét s2uéu 2suéx 1sug 1s2ui s3uir s2uī. 3s2uīn 3s2uīq 3s2uīu 3suīv 1s2uí 1s2ul 2sulm 1s2um su3ma sum2e su3mun 1s2un 3s2uo. 3s2uon 3s2uoq 3s4uor. 3s4uorn 3s4uorq 3s4uoru 3s4uorv 3s2uou 3s2uov 1s2uō 3s2uón 3s2uóq 3s4uórn 3s4uórq 3s4uóru 3s4uórv 3s2uóu 3s2uóv 3sup supere6ri supe6re6rí supe6res supe4rē supe6rés supe6ri. super5im supe6riq super5it superī́6 supe4rí4 super5ím super5ít supé6r5es 1suq 1s2ur 1sus su3spi su3spí 1s2ut 1s2uu 1s2uŭ 1s2uú 1s2uv 1sū sūbe3 sū3d 2sūri 2sūrĭ 2sūrí sū2su sū3sum 1sŭ sŭ2b1 sŭb3ē sŭbḗ4 sŭbī4 sŭbī́4 sŭbĭ2 sŭbĭ́4 sŭb3ō 2sŭlm sŭpĕ4rē sŭ5pĕ́ sŭs4pĭ sŭ́b3 sŭ́bĭ4 sŭ́5bĭă sŭ́5bĭīs sŭ́5bĭō sŭ́5bĭŭ sŭ́3sp 1s2ú sú2b1 sú5ber. sú5bera. súbe6ran súbe6ras súbe6rat sú5bere sú5beri. súbe6ris súbe4ro súb3es súbi2 súb3is súb3it sú3lui sú3luī súm2i sú1r sú3sp 2sv s3ve s3vĕ 1sy sy2lu 1sȳ 1sý 1t t2a tab2 ta4c3ue tad2 2ta2g ta4g3n ta3go ta2i ta3ma ta3q tasce4 tascé4 ta3s2p tas5te ta2s3u 5tatem 5tates 3tatém 3tatés t2ā tā5bun 2tāg 5tātem 5tātĕm 5tātĕ́ 5tā́tē tăd2 2tă2g tă4gĭ tă3gŏ tămĕ4n t2ăn tă3rĕ t2ăs tă3s2p tăs3pĕ tăs3pĭ tăs3t tăs5tĕ tăs4trŏ tá4c3ue tá2ge tá2s3u 5tátem 5tátes t2æ t2ǣ tǽ2cu 2tc t2e te1a te2a͞ te2a͡ te4gn te3go te3gō te3gr te3iss te3it te2iu te1ī te3íp te3íss te3í2t te4nim te4nt te5ra. te3rab te5rami ter3ap te5raq te5rara te5rará te5rarem te5raren te5rarer te5rares. te5raresn te5raresq te5raresu te5raresv te5raret te5rarém te5rarén te5rarér te5rarésn te5rarésq te5rarésu te5rarésv te5rarét te5rari te5raro te5raró te5raru te5rarú te3ras te3rat te5rau te5rav ter3a͞ ter3a͡ ter5ā́c te3r4æq te3r4ǣq te4r3ea te4r3eā te4r3eá te6r5e6mi. te6r5emine te6r5e6miq te6r5e6miu te6r5e6miv te4r5e4mí te4r5e4mo te4r5e4mō te4r5e4mó te4r3eo te4r3eō te4r3eó te4r3eq te4re4ra te4re4rā te4re4rá te6r5erim te6r5erit te6r5e6rít te4re4ro te4re4rō te4re4ró te6r5erun te4re4rú ter5est te4rēmē te4r5ē4mī te4rēmí te3rēu te3rēv te6r5ḗ6mī te4r5é4me te6r5é6mi. te6r5é6mit te4r3éq te6r5é6rim te6r5é6rit ter5ést ter5ibo ter5ibun ter5ibún ter5ice te3rid ter5iēn ter5ime ter5imē ter5imé ter4imi ter5imo ter5imō ter5imó ter4imu ter4imú ter4ine teri5ni ter4iq teri4r ter4is. ter4isn ter4isq te4r5iss te4r5ist ter4isu ter4isv ter4it. ter5i6ta. ter5i6tae ter5i6tam ter5i6tan ter5i6taq ter5i6tar ter5i6tau ter5i6tav ter5i6ta͞ ter5ita͡ ter5i6tā. ter5i6tān ter5i6tāq ter5i6tār ter5i6tāu ter5i6tāv ter5i6táe ter5i6tám ter5i6tán ter5i6táq ter5i6tár ter5i6táu ter5i6táv ter5itæ ter5i4tǣ ter5itǽ ter4ite ter5i6ti. ter5i6tin ter5itio ter5itiō ter5itió ter5i6tiq ter6itis ter5i6tiu ter5i6tiv ter5i4tī ter5i6tín ter5i6tíq ter6itís ter5i6tíu ter5i6tív ter4itn ter6ito. ter6iton ter6itoq ter6itor. ter6itorn ter6itorq ter6itorue ter5itorum ter5i6torú ter6itorv ter5i6tos ter6itot ter6itou ter6itov ter6itō. ter6itōn ter6itōq ter5i6tōr ter5i6tōs ter6itōu ter6itōv ter6itṓn ter6itṓq ter5i6tṓr ter5i6tṓs ter6itṓu ter6itṓv ter6itón ter6itóq ter6itórn ter6itórq ter6itórue ter5itórum ter6itórv ter5i6tós ter6itót ter6itóu ter6itóv ter4itq teri4tu ter5itu. ter5itum ter5itun ter5ituq ter5itur ter6itur. ter6iturn ter6iturq ter6iturue ter6iturv ter5itus ter5ituu ter5ituv ter5i4tū ter5i6túm ter5i6tún ter5i6túq ter5i6túra ter5itúræ ter5i6túre ter5i6túri ter6itúrn ter5i6túro ter6itúrq ter6itúrue ter5itúrum ter5itúrus ter6itúrv ter5i6tús ter5i6túu ter5i6túv ter4itv teri4u ter5iue ter3i4v te4r5ī4mi te3r4īn ter6īne ter4īq ter6īqu te4rī4r te4r5ī4te te4r5ī4to te4r5ī4tō te4r5ī4tó te4r5ī4tu te4r5ī4tú te4r3ī4u ter6īue. te4r3ī4v ter6īve. terī́6mi ter6ī́n ter6ī́q te4rī́4r terī́6te terī́6to terī́6tō terī́6tu ter6ī́ue. terī́6ui terī́6uī ter6ī́ve. terī́6vi terī́6vī te4r5íme te6r5í6mur te4rí4r te4r5íss te4r5íst te4r5í4ta te6r5í6te. ter5ítio te4r5í4to te6r5ítur ter6íue. ter5í6uer te4rí4ui ter6íve. ter5í6ver te4rí4vi te4rn 4ternām 4ternē 4terné 4ternim 4terním 4ternít te3rop te5rorn 4terot 4terōt te3rōu te3rōv te4róni 4terót te4rq te4rr te4rt ter3uē ter3uí ter3ū2 te4rv te2sq 2t3ess 4test. te5s4ta. te5stabam. te5stabamn te5stabamq te5stabamue te5stabamus te5stabamús te5stabamv te5stabant. te5stabantn te5stabantq te5stabantue te5stabantv te5stabas te5stabat. te5stabati te5stabatí te5stabatn te5stabatq te5stabatue te5stabatv te5stabámn te5stabámq te5stabámue te5stabámus te5stabámv te5stabántn te5stabántq te5stabántue te5stabántv te5stabás te5stabáti te5stabátn te5stabátq te5stabátue te5stabátv te5stabimus te5stabimús te5stabis te5stabit. te5stabiti te5stabití te5stabitn te5stabitq te5stabitue te5stabitv te5stabís te5stabít te5stabo. te5stabon te5staboq te5stabou te5stabov te5stabón te5stabóq te5stabóu te5stabóv te5stabunt. te5stabuntn te5stabuntq te5stabuntue te5stabuntv te5stabúntn te5stabúntq te5stabúntue te5stabúntv te5stamus te5stamús te5stane te5stant. te5stantn te5stanto. te5stanton te5stantoq te5stantou te5stantov te5stantō te5stantón te5stantóq te5stantóu te5stantóv te5stantq te5stantue te5stantv te5s4taq te5starem. te5staremn te5staremq te5staremue te5staremus te5staremús te5staremv te5starent. te5starentn te5starentq te5starentue te5starentv te5stares te5staret. te5stareti te5staretí te5staretn te5staretq te5staretue te5staretv te5starémn te5starémq te5starémue te5starémus te5starémv te5staréntn te5staréntq te5staréntue te5staréntv te5starés te5staréti te5starétn te5starétq te5starétue te5starétv te5stat. te5statn te5statot te5statót te5statq te5statue te5statv te5s4tau te5s4tav te5s4tā. te5stābam te5stābant. te5stābantn te5stābantq te5stābantue te5stābantv te5stābat te5stābāmus te5stābāmús te5stābās te5stābāti te5stābātí te5stābā́mus te5stābā́s te5stābā́ti te5stābám te5stābántn te5stābántq te5stābántue te5stābántv te5stābát te5stābimus te5stābimús te5stābis te5stābit. te5stābiti te5stābití te5stābitn te5stābitq te5stābitue te5stābitv te5stābís te5stābít te5stābō te5stābunt. te5stābuntn te5stābuntq te5stābuntue te5stābuntv te5stābúntn te5stābúntq te5stābúntue te5stābúntv te5stāmus te5stāmús te5stāne te5s4tāq te5stārem te5stārent. te5stārentn te5stārentq te5stārentue te5stārentv te5stāret te5stārēmus te5stārēmús te5stārēs te5stārēti te5stārētí te5stārḗmus te5stārḗs te5stārḗti te5stārém te5stāréntn te5stāréntq te5stāréntue te5stāréntv te5stārét te5stātōt te5stātṓt te5s4tāu te5s4tāv te5stā́bam te5stā́ban te5stā́bat te5stā́bā te5stā́bimus te5stā́bis te5stā́bit. te5stā́biti te5stā́bō te5stā́bu te5stā́mus te5stā́ne te5stā́q te5stā́rem te5stā́rent te5stā́ret te5stā́rē te5stā́u te5stā́v te5stábam te5stában te5stábas te5stábat te5stábimus te5stábis te5stábit. te5stábiti te5stábo. te5stábu te5stámus te5stáne te5stántn te5stánto. te5stántō te5stántq te5stántue te5stántv te5s4táq te5stárem te5stárent te5stáres te5stáret te5státn te5státq te5státue te5státv te5s4táu te5s4táv te5stemus te5stemús te5stent. te5stentn te5stentq te5stentue te5stentv te6ster te5stet. te5steti te5stetí te5stetn te5stetq te5stetue te5stetv te5stēmus te5stēmús tes4tēt te5stēti te5stētí te5stḗmus te5stḗti te5stémus te5sténtn te5sténtq te5sténtue te5sténtv te5stéti te5stétn te5stétq te5stétue te5stétv tes3ti 4testn 4t3estō 4testq 4t3estu 4testv te2su tete5r 2teté 4tetim 4tetit 4tetít te2un te3x4e tex2i tex2ī tex2o tex2ó tex2u tex2ú t2ē tē2ie tē2iē tē3ne tēte3 2tētē 2tēté 4tētim 4tētit 2tētī 4tētĭm 4tētĭt 4tētít 4tḗtī t2ĕ 3tĕa 3tĕă 3tĕæ 3tĕǣ 3tĕē 3tĕĕ tĕ3gō tĕ3gr 3tĕ1ī tĕ3ĭ 3tĕl t3ĕ2nĭ 3tĕō 3tĕ1ŏ tĕ3q t4ĕr. tĕr5ā́c tĕ5ră. tĕ3răr tĕr5ắp tĕ3r4æq tĕ3r4ǣq tĕ4rēmē tĕ4r5ē4mī tĕ6rēmĭ́ tĕ3rēu tĕ3rēv tĕ6r5ḗ6mī t4ĕrĕ tĕ4r3ĕā tĕ4r3ĕă tĕ3rĕn tĕ4r3ĕō tĕ4r3ĕŏ tĕ4r5ĕ4rā tĕ4r5ĕ4ră tĕ4rĕ4rĭ tĕr5ĕrĭm tĕr5ĕrĭt tĕr5ĕrĭ́t tĕ4r5ĕ4rō tĕ6r5ĕ́6rĭ t4ĕrī tĕ3rī. tĕ3rīn tĕ3rīq tĕ4r3ī4r tĕ3rīs tĕ4r3ī4u tĕ4r3ī4v tĕrī́4r tĕr3ĭē tĕ4r3ĭĕ tĕ4r5ĭ4mē tĕ4r5ĭ4mō tĕ4r5ĭ4ta tĕr5ĭ6tā. tĕr5ĭ6tān tĕr5ĭ6tāq tĕr5ĭ6tār tĕr5ĭ6tāu tĕr5ĭ6tāv tĕ4r5ĭ4tă tĕ4r5ĭ4tá tĕ4r5ĭ4tæ tĕ4r5ĭ4tǣ tĕ4r5ĭ4tǽ tĕ4r5ĭ4tī tĕ6r5ĭ6tĭō tĕ6r5ĭ6tōr tĕ6r5ĭ6tōs tĕ6r5ĭ6tṓr tĕ6r5ĭ6tṓs tĕ4r5ĭ4tū tĕ6r5ĭ6tŭm tĕ6r5ĭ6tŭs tĕ6r5ĭ6tŭ́m tĕ6r5ĭ6tŭ́s tĕr5ĭ́ĕr tĕ6r5ĭ́mĕ tĕ6r5ĭ́6tă tĕ6r5ĭ́tĭ t4ĕrn 4tĕrnām 4tĕrnăr 4tĕrnăt 4tĕrnē 4tĕrnŏ 4tĕrōt t4ĕ3rŏ t4ĕrq t4ĕru tĕr3ū2 tĕ3rŭs t4ĕrv 2t3ĕss 4t3ĕst. tĕ5stā. tĕ5stābāmŭs tĕ5stābāmŭ́s tĕ5stābās tĕ5stābātĭ tĕ5stābā́mŭs tĕ5stābā́s tĕ5stābā́tĭ tĕ5stābăm tĕ5stābănt. tĕ5stābăntn tĕ5stābăntq tĕ5stābăntu tĕ5stābăntv tĕ5stābăt tĕ5stābắm tĕ5stābắntn tĕ5stābắntq tĕ5stābắntu tĕ5stābắntv tĕ5stābắt tĕ5stābĭmŭs tĕ5stābĭmŭ́s tĕ5stābĭs tĕ5stābĭt. tĕ5stābĭtĭ tĕ5stābĭtn tĕ5stābĭtq tĕ5stābĭtu tĕ5stābĭtv tĕ5stābĭ́s tĕ5stābĭ́t tĕ5stābō tĕ5stābŭnt. tĕ5stābŭntn tĕ5stābŭntq tĕ5stābŭntu tĕ5stābŭntv tĕ5stābŭ́ntn tĕ5stābŭ́ntq tĕ5stābŭ́ntu tĕ5stābŭ́ntv tĕ5stāmŭs tĕ5stāmŭ́s tĕ5stānĕ tĕ5stāq tĕ5stārēmŭs tĕ5stārēmŭ́s tĕ5stārēs tĕ5stārētĭ tĕ5stārḗmŭs tĕ5stārḗs tĕ5stārḗtĭ tĕ5stārĕm tĕ5stārĕnt. tĕ5stārĕntn tĕ5stārĕntq tĕ5stārĕntu tĕ5stārĕntv tĕ5stārĕt tĕ5stārĕ́m tĕ5stārĕ́ntn tĕ5stārĕ́ntq tĕ5stārĕ́ntu tĕ5stārĕ́ntv tĕ5stārĕ́t tĕ5stātōt tĕ5stātṓt tĕ5stāu tĕ5stāv tĕ5stā́bā tĕ5stā́băm tĕ5stā́băn tĕ5stā́băt tĕ5stā́bĭmŭs tĕ5stā́bĭs tĕ5stā́bĭt. tĕ5stā́bĭtĭ tĕ5stā́bō tĕ5stā́bŭ tĕ5stā́mŭs tĕ5stā́nĕ tĕ5stā́q tĕ5stā́rē tĕ5stā́rĕm tĕ5stā́rĕnt tĕ5stā́rĕt tĕ5stā́u tĕ5stā́v tĕ5stănt. tĕ5stăntn tĕ5stăntō tĕ5stăntq tĕ5stăntu tĕ5stăntv tĕ5stăt tĕ5stắntn tĕ5stắntō tĕ5stắntq tĕ5stắntu tĕ5stắntv tĕ5stắt tĕ5stēmŭs tĕ5stēmŭ́s tĕ5stētĭ tĕ5stḗmŭs tĕ5stḗtĭ tĕ5stĕnt. tĕ5stĕntn tĕ5stĕntq tĕ5stĕntu tĕ5stĕntv tĕ6stĕr tĕ5stĕt tĕ5stĕ́ntn tĕ5stĕ́ntq tĕ5stĕ́ntu tĕ5stĕ́ntv tĕ5stĕ́t 4t3ĕstn 4t3ĕstō 4t3ĕstq 4t3ĕstu 4t3ĕstv 2tĕtr 3tĕŭ tĕx2ă tĕx2ĕ tĕx2ī tĕx2ĭ tĕx2ŏ tĕx2ŭ tĕ́3ĭ tĕ́5răr tĕ́4r5ĕā tĕ́4r5ĕă tĕ́4r5ĕō tĕ́4r5ĕŏ tĕ́6r5ĕ6rā tĕ́6r5ĕ6ră tĕ́6r5ĕ6rĭt tĕ́6r5ĕ6rō tĕ́6r5ĭēn tĕ́6r5ĭ6ta tĕ́r5ĭ6tā. tĕ́6r5ĭ6tă tĕ́6r5ĭ6tæ tĕ́6r5ĭ6tǣ tĕ́6r5ĭ6tī tĕ́6r5ĭ6tōs tĕ́6r5ĭ6tū tĕ́6r5ĭ6tŭm tĕ́6r5ĭ6tŭs 6tĕ́rnăr 6tĕ́rnăt 6tĕ́rnĕr 6tĕ́rnĕt 4tĕ́rnŏ 5tĕ́stā tĕ́5stā. tĕ́5s4tă tĕ́5stĕnt tĕ́5stĕt tĕ́x4ĭ té4gn té3iī té4r3ea té4r3eā té4r3eo té4r3eō té4r5era té4r5e4rā té6r5erit té4r5e4ro té4r5erō tér5ien tér5iēn té4r5im. téri4ta tér5ita. tér5itae tér5itam tér5ita͞ tér5ita͡ tér5i6tā. té4r5i4tæ té4r5i4tǣ té6r5i6ti. té4r5i4tī té6r5i6tos té6r5i6tōs té6r5i6tu. té6r5i6tum té6r5i6tus té4r5i4tū té2rī 4térnar 4térnat 4térner 4térnes 4térnet té2ru 2t3éss 5tésta té5s4ta. té5stant té5s4tat 5téstā té5s4tā. té5stent té5s4tet 4téti. 4tétim 4tétit téx2i téx2u 2tf 2tg 2th. 3t2he the2i 3t2hē thē2i 3t2hĕ 3t2hé 3thī 3thĭă 3thĭī 3thĭō 3thĭŭ 3thl 2thm 2thn 3tho tho3sp 3thō thŏ3sp 3thó 2thp 3thr 3thu 3thú t2i tiad2 3tiae 3tia͞ 3tia͡ ti2á ti4ám 3tiæ 3tiǣ 3tiǽ ti3b tibe3 t3ibi. t3ibī 3tic tic4e ti5cen 4tiche ti4c3ue ti4d3ea ti4d3eā ti4d3eo ti4d3eō 2tigi 2till 3tilo 3tiló ti3m2 ti4mn ti4mq ti4mv tin2ā 5tināx tin2u ti2o ti3q ti2s ti3s2p ti4sper ti3sta ti3stā ti3s4te ti3s4tē ti3s4té ti3s4to ti3s4tō ti3s4tó ti3s4tr ti3t2 ti4tn ti4tq ti4tv ti3uu 2tīgi 2tīgĭ 2tīp tī3q tī́3q t2ĭ 3tĭa 3tĭá 3tĭæ 3tĭǣ 3tĭǽ 2t3ĭbī 4tĭchĕ 3tĭcŭ tĭ4d3ĕā tĭ4d3ĕō 2tĭll 3tĭlŏ tĭn2ā tĭ2ŏ 2tĭr tĭ3rĭ tĭ3s2p tĭ4spĕr tĭ3stā tĭs4tām tĭs4tār tĭ3stă tĭs4tăt tĭ3s4tē tĭ3s4tĕ tĭ3s4tō tĭ3s4tŏ tĭ3s4tr 3tĭt. 3tĭ́cŭ tĭ́4d5ĕā tĭ́4d5ĕō 4tĭ́mŭ tĭ́3sp tĭ́5s6tăt tĭ́5s4tē tĭ́5s4tĕ tĭ́5stĭt tĭ́5s4tō tĭ́5s4tŏ tĭ́5str 4tĭ́tă 4tĭ́tŭ tí3b 3tíc 4tíche tí4c3ue tí4d3ea tí4d3eā tí4d3eo tí4d3eō 4tígie 3tílo tí1m 4tímul tín4uī tí3q 2tírp tí2s tí3sp tís4tat tí3s4te tí3s4tē tí3s4to tí3s4tō tí3s4tr tís3u 4títer 4títib 4títim 4títua 4títuā 4títuē 4títui 4tí3tuī 4títuo 4títuō tí3tur 4títuu t2l t3li t3lī t3lĭ t3lí 2t1m2 tme1 tmĭ2 2t1n t3ne t2o to3b2 to4cue to2ia to2iá to2iæ to2iǽ to2ie to2ié to2ii to2ií to2í 2tola tom2 ton3g4 tongæ3 tongǣ́5 tongǽ3 to3ni to5ni5c tons3t ton2u 2t3o2pe to3rī tos3t t2ō tō3d tō2ia tō2iā tō2iá tō2iæ tō2iǣ tō2iǽ tō2ie tō2iē tō2iī tō2iō tō2ĭ 2tōl 2tṓl t2ŏ tŏb2 tŏm2 tŏn3g4 tŏngæ3 tŏngǣ́5 tŏngǽ3 2t3ŏpĕ tŏ3rĕ tŏ3rī tŏ́3rĭ tó2cu 2tólo tó2pe 2tp tpo3 tpó1 2tq t3qu t2r2 trab2 tra3d4 tradi5ce tradi5cé tradi5ci tradi5cí trado3 tra3e4t tra3g tra3i4 3tral tra5ma tra5má 4trang 4tratē trā3ĭ tră3bŭ trăd2 tră3g 4trăng tră3s2 3trăt 4trătē 4trắng trắ5st trá3i 3trál 4tráng trá3p2 trá2s3 træ2ă trǣ2ă 3tre. tre2i tre5mi tre5mo 2trep 3treq 3treu 3trev trē2i trē3m trĕ2ĭ 2trĕp 4trĕ́p 2trép 3tria 3trib tri5ci 4trict 4trida 4tridá 4tride 4tri5do 4tridó 2trig 3trige 3trigé 3trii 3triī 3trií 2tr4in tri3ni 3trio 3triō 3trió 3trit 2trīd 2trīg 4trīnx tr4ī́ 4trī́d 4trī́g 4trī́nx 3trĭă 3trĭb 4trĭct 4trĭgĭ 4trĭgŭ 2tr4ĭn 3trĭs 3trĭt 3trĭŭ 4trĭ́ct 4trĭ́gĭ 4trĭ́gŭ 4trĭ́n 3tría 4tríct 4trída 4trído 4trídu 4trígi 4trígu 4tríng 4trínx trí5tur tro3e 4troph trō4iē 4trṓm 4trŏph trŏ2s tró3ea tró3eā 2tróm 4tróph 4truct 3trud 3trus 2trux 4trūct 3trūd 3trūs 2trūx 3trū́d 3trū́s 4trū́x 2trŭĭ 2trŭŏ 2trúc 3trúd 2trúi 3trús 2trúx 2t1s2 2tt2 tte2i tte5re ttē2i ttĕ3r 3tua 3tuā 3tuá tu2cu tu2d3u 2t1ue t2uea t2ueā t2ueá t2ueb 3t2uem 3t2uen tu3enn t2ueo t2ueó 3t2ueq t2uer 3tuer. 3tuere 3tueri 3tuerí 3tuern 3tuerq 3tueru 3tuerv 3t2ues 3t2uet 3t2ueu 3tuev 3tuē 2t1uĕ 3tué tu3énn 2t3uic 3tuīs 3tul tule4i tu3ma tum2e tu3m2ī 3t2uo tuo2r 3tuō 3tuó tupe3r4 ture5ia. ture5iaq ture5iau ture5iav ture5ii ture5ií ture5io ture5ió turé3 tu2sp 3tut 3tuun tū2c1 tū2su tū3sum tū3sus 3tŭa 3tŭā 3tŭă 3tŭæ 3tŭǣ 3tŭc 3tŭē 3tŭĕ 3tŭl tŭ3mă tŭm2ĕ tŭ3m2ī tŭ3mĭ tŭ3mŏ 3tŭō 3tŭŏ tŭpĕ3r tŭ2s tŭ́3mĭ tú2cu tú2du túm2i 2tv t3ve 2tȳ tý3l uab2 uab4u 1uac ua3d2 uad4o uae4st 2uaev u2a3g ual4u u2a1m u2an ua3p2 u2a3q u2ar u2as uas3p uas3t uas5te uas5tr ua4sui ua4suí u2au 2uav ua2x3 ua͞e4st ua͡e4st u2ā 1uād 2uāv 2uā́v u2ă uă3d2 uă3g uă2m1 uăs3p uăs5tr 2uăv uắs3 1uác 1uád2 u2ág u2ám u2án uá3p2 u2ár uás3p uá4sui u2áu 2uáv uá2x 2uæd uæ2dī uæ2dí u2æq uæ2s3t u2æu 2u2æv u2ǣq uǣ2s3t u2ǣu 2u2ǣv uǣ́2d uǣ́3r 2u1ǽ2d u2ǽq uǽ2s3t u2ǽu u2ǽv uba3g uba4i ub2ă ubá3g ube2i ube4rā u5bere. u5bereq u5bereu u5berev ub4eris ub4erís ube4rō u5berum ubē2r ubé4ia. ubé4iae ubé4iam ubé4ias ubé4ia͡ ubé4iæ ubé4ii u3bére 2ubi ubi2b ub3ice ub4ii. ub4iin ub4iiq ub4iiu ub4iiv ub4iín ub4iíq ub4iíu ub4iív u3biō u3bió ub2iq ubi2u ub4iue. u3bium u3biú ubi2v ub4ive. u2bī2 ub2ī4n ub2īq ub4īue. ub4īve. ubī́2 ub4ī́4n ub4ī́q ub6ī́ue. ub6ī́ve. 2ubí ubí2b ubí2c ub2íq ub3íss ub3íst ub4íue. ub4íve. u2bl ubo2 u2bō ubŏ3 u3b2œ u2b1r ub3s2 ub5ste u3b2ul u2b1ū u3búl 2uc u3ca u3cá u3ce u3cé u3ci u3cí u3c2o uco2i uco5n4i5 ucon4í u3có u3cr u2c3ue u3cun u3cú 2ud ud2ac u3dam. u3damq u3damv u2d3ap u3da͡ ud2ā u2dăp u3dámn u3dámq u3dámv u3dæ u3dǽ u3de. u3dene u3deq ude2s3 ude6ste u3deu u3dev udē2s u3déne u3déq u3déu u3dév u3d2i udi4g3 u4diso u4disó u3dí ud2o ud4or u3dorú u3dos ud2ŏ udŏ3p u3dós ud2u u3dú u2e1 ue2a ue3b ue3d2 ued4i ue2e 2uef ue2ī ue2í 4uel. 2ueln 2uelq 2uelu 2uelú 2uelv ue2ma ue2má ue4mui ue4m3uí ue4n3ea ue4n3eá ue4n3eo ue4n3eó ue4n3ii ue4n3ií ue4n3íi 2uenn ue2o ue2ō uer2æ3 ue3r4e ue5rem uere5me uere5mé uer6e5mi uere5mí ue3r4ē ue5rē5m ue3rī 3uert ue2s ue3sá ues3c ue3sí ue4s3p ues5pe ue4s3t ues5tā ues5te ues5tr uete5re uete5ri ueteri5u uete5rī ueterī5u ueterī́7 ue2un 2uev ue3x2 uex4e uē3b 3uēnē 3uēné 3uēni uē4n3iī 3uēnī uē4nīs uē4n3ĭī 3uēní uē3r uēs3t 3uēx uḗ4n5iī uḗ4n5ĭī 3uḗx u2ĕ uĕ2ă uĕ2ĭ uĕ2m3ă uĕ3ră uĕ3r4ē uĕ5rē5m uĕ3r4ĕ uĕ3rī uĕ3rŏ uĕ3rŭ uĕ2s3 uĕ4sp uĕs5pĕ uĕs5tĕ 2uĕv uĕ3x2 uĕ́3ră uĕ́3rĕ uĕ́x2 u2é 1uéc 2uéf 1uéh ué1i 1uél ué4n3eo 3uéni ué4n3ii 2uénn 2uéra 2uéro 3uérs 3uért ués3 2uév 1uéx2 2uf 2ug u3g2a u3g2æ3 u3g2ǣ u3g2l u2g3n u1h u3hœ ui2a u2ic 3uice ui4c5énn 1uif uile3i uilé3i u2in uin2ā ui3oc ui3o2p ui3óp ui3p2t ui3r4i ui3r4í u2is 3uisc ui3s2i 2uisv uiu2 ui3ul ui3uu 2uiv u2ī 1uīc uī4cen uī4cĕn uīc5ĕ́n uī4cén uī2ni uī2n3ĭ uī2ní uī3p2 uī3q uī3so uī3sŏ uī3u 2uī3v uī́3p2 2uī́v u2ĭ uĭ3ăl uĭn2a uĭn2ā uĭn2æ uĭn2ĕ uĭnĭ3t uĭ1ŏ uĭŏ2p uĭŏ́2 uĭ3ŭl uĭ́3ŏ4 u2í 1uíc 1uíf 1uíg uí1m uí3o2p uí3p2t 3uísa 3uísæ 3uíse 3uísi 3uíso uí3tur 2uív 1uíx 2u3læ 2u3lǣ 2u3lǽ ule4ie ule6ine ule6iqu ule6iue ule6ive ulē2i 3ulix 3u2líx 3ulm ul3ua ul3uá ul3uæ ul3uǽ u4l3ue. ul3uīs ul3uó u3lus 2um. 2uma u3ma. uma2g u3m2an u3maq uma4tr u3mau u3mav u3mā. u3mān u3māq u3mār u3mās umā4tr u3māu u3māv 2u1mă 2umá umá2g u3mán u3máq u3már u3máu u3máv u3mæ u3mǣ u3mǽ um3b2 umb4e umb4ē umb4i um5bit umb6itu umbi5tur umbi5tú umbí5te 2ume u3me. ume3d ume5de ume2g ume2q u3mev umē2g umḗ4g umé2g umi2b umi2c umi2n3 uminí4c umi2r umi2u u2m3iū umi2v u2m1ī2 umī́4b umī́4m umī́4r umī́4t umí2b umíni4c umí2r 2umn 2umo u3mo. u3mon u3moq u3mor u3mou u3mov u3m2ō 2umŏ 2umó u3món u3móq u3mór u3móu u3móv umpe3r 2umq 2umu u4mue um3uí u3mus u3mús 2umv un3áni un3d2 3undab 3undáb une3b une3d une6ste un2ē 2un2ĕ un2é uné3b 2unī 2unĭ u3nos 2unō u3nós un3s uns4i un4sn un4sq un4sue un4sv 2unt unte5io unte5ió unte5iu unte6iue unte5iú untē3i untḗ5i unté3i u1n2u 1u2o uob2 uo2du 2uoe uo3i uo4in uo4i3q uo4iue uo4iv uo4lue uol5uere uo4lui uo4luī uo4luí uom3p2 uo3ni uo4n3ia uo3p2 uo3rī uo2sp uos3t uos5te uo3u uo1ú 2uo͞ 2uo͡ u2ō uō3d uō3i uō2sp uōs3t uṓ3i 1u2ŏ uŏ2ĭ 2uŏn3 uŏ2nĭ uŏ3rī uŏ4t5ắn uŏ2t3ĕ uŏ3ŭ uŏ́2n3 u2ó uód1 uó2du uó1i uó3io 1uól uóm3p2 uó4n3ia uó3p2 uó2sp 2uœ 2up upe5raeq upe5r6ara upe5r6ará upe5r6are upe5raré upe5raro upe5raró uperas6c upe5ra͞eq upe5r6á͞ upe5ra͡eq upe5r6á͡ upe5ræq upe5rǣq upe5rǣ́ uper4ǽ upe5remn upere6ra upere6rā upere6rá uper5erim uper5erit uper5e6rít upere6ro upere6rō upere6ró upere6rú upe6r5é6rim upe6r5é6rit upe6résc uperi4 upe4r5ie uper5ié upe4rī4 uper5īm uper5īt uper5ī́6m uperī́6r uper6ī́s uper5ī́6t uper6ī́u uper6ī́v upe4rí4r uper5íte uper5íto uper4íu uper4ív upe5rorn upe5ros upe5rōs upe5rṓs upĕ3rĕ upĕ3rī upĕ3rŭ u3pé upé4r5ea upé4r5eā upé4r5eo upé4r5eō upé4r5e4r upé4ri. upé4r5ie upé4r5iē upo4s3 u3pŏ 2uq u3qu 2ur. u1r2a u3ra. urad2 u3rae u3rane u3raq u3rarú u3rau u3rav u3ra͡ 2urā 2u3r2ă u3ráe u3ráne u3ráq u3ráu u3ráv 2u3ræ 2u1rǣ 2u3rǽ u1r2e ure3d ure2i ure5iae ure5iam ure5iar ure5ias ure5ia͡ ure5iáe ure5iám ure5iáq ure5iár ure5iás ure5iáu ure5iáv ure3iæ ure3iǽ ure5ium ure3iú ures3t 2u3rē urē3ia urē5iā. urē5iāq urē5iār urē5iās urē5iāu urē5iāv urē5iā́q urē5iā́r urē5iā́s urē5iā́u urē5iā́v urē3iu urē3iú urḗ3i 2u1rĕ ur2é u3réf u1rh u1r2i u3ria u3riá u3riæ u3riǽ u3rii u3rií ur4in uri3ni 2urio 2urió 2u1rī 2urĭ ur2í u3ría 2urío urí5tur 2urn 2u1r2o 2u1rō 2u1r2ŏ ur2ó u3rós 2urq ur3ua ur3uā ur3uá ur3uē ur2ui u3rum ur3uō ur3uó u3rus 2u1rŭ ur2ú u3rúm u3rús u1ry u1rý 2us us2a usa3b2 u3s2ă usă3b2 usá4tr u2s3c use2i us2i u2sm u1sp us5per u2spē us2pĕ us4pit us2pĭ us2pí us4pít u2s3q u2sta u2stā u2stă u2stá u2stæ u2stǣ u2stǽ u2ste us5ter u2stē u2stĕ us5tĕr u2sté u2sti u2stī u2stí u3s4tom u2stō u3s4tŏm u5s4tŏ́m u3s4tóm u2s3tr us5tro u2stu u2stŭ u2stú us2ua 4u2sue u2suĕ u2sui u2suí 1ut. 3u4tar. 3u4tarn 3u4tarq 3u4tarv 3u4tárn 3u4tárq 3u4tárv 3u2teb ute2ī ute3r4a ute3rǣ ute5re ute3ri uteri5ue uteri5v ute5rī uterī5u uterī5v ute3ro ute3rō utĕ1 utĕr4a utĕ5rī utĕrī5u utĕrī5v utĕ5r4ĭ 3u2téb 2utia 2utiá 2utiæ 2utiǽ 2utii 2utií u2til 2utio u2tíl 3u2trā 3u2træ 3u2trǣ 3u2trǽ ut4ri 3u2trī 3u2trō 3u2tru 3u2trú ut2u ut3ut u1u 2u3ue 2uuĕ 1u2ul uul3ui uul3uī uul3uí u2um1 u2un u2u1r u2uu u2uv uū2s 1uŭ 1uúl uúl3u uú1r 2u3ve ux2 u3xe ux4eu u3xé u3xi uxi3n u3xí u2xo3 u2xō uxu3 u2x3ue ux4us uy2s ū1 ūb2 ūba2 ūbā6iāne ūbā6iāru ūbā6iārú ūbā6iæne ūbā6iæue ūbā6iæve ūbā6iǣne ūbā6iǣue ūbā6iǣve ūbā6iǽne ūbā6iǽue ūbā6iǽve ūbá2 ūbe3ri ūbe3rō ūbĕ3rŭ ūbī3u ūbī3v ūbo2 ūca2r ūco2 ū3cr ū2c3ue ūd2 ū3da. ū3dam ū3dane ū3daq ūda2r ū3dau ū3dav ū3da͞ ū3da͡ ū3dă. ū3dăm ū3dănĕ ū3dăq ū3dău ū3dăv ū3dắm ūdá2 ū3dám 2ū3dæ 2ū3dǣ 2ū3dǽ ū3de. ū3dene ū3deq ūde2s3 ūde6ste ū3deu ū3dev ū3dē. ū3dēn ū3dēq ūdē2s ū3dēu ū3dēv ū3dḗn ū3dḗq ū3dḗu ū3dḗv ū3dĕ. ū3dĕnĕ ū3dĕq ūdĕ6stĕ ū3dĕu ū3dĕv 2ū3dī ūdo2 ūd4or ū3dōr ū3dōs ū3dṓr ū3dṓs ūdó2 2ū3du 2ū3dŭ 2ū3dú ū2ē 2ūg ū3g2a ū3g2æ3 ū3g2ǣ ū2gn ū3iú 1ūl ū2la ū2lā ū2lă ū2lá ūle3i ūle2r ūlé3i ū2lo2 ū2lŏ ū2ló ū2l3ue ūm2a ūma2r ūmá2 ūm2e ūm2ĕ ūm2i ūm2ĭ ūmo2 ūna2 ūn2ā ūnă2 ūná2 ūn3áni ūne3b ūne6ste ūn3et ūnĕ6stĕ ūn3ĕt ūn2é ūné3b 2ūni 2ūnĭ 2ūní ūno2 ū3nōr ū3nōs 2ūns ūn3s2i ūn3s4ĭ ūn2u ūn2ŭ ūpe3r2 ūpĕ3r ūpĕ5rĭ 2ūq ūr2a ūra2r ūr2ă 2ūræ ūræ2ă 2ūrǣ ūrǣ2ă 2ūrǽ ūr2e ūres3 ū3rēu ū3rēv ūr2ĕ ūrĕ2ĭ ūrĕ2s3 ūr2é ū3réf ūr2i ūr4in ūr2ĭ ūr4ĭn ūrí2n ūro2 ūró2 ūr2u ū2sc ūs2ie ūs2iē ūs2iu ūso2 ū2sp ūs5per ūs5pĕr ū2s3q ū2s3t ūs5ter ūs5tĕr ū2sue ū2suĕ ūs2uī ūt2 ūta2r ūtá2 ūte5re ūtĕ3rĕ 2ū3tia 2ū3tiā 2ū3tiá 2ūtiæ 2ūtiǣ 2ūtiǽ 2ū3tiī 2ūtĭa 2ū3tĭā 2ūtĭá 2ūtĭæ 2ūtĭǣ 2ūtĭǽ 2ū3tĭī ūtí2n ūto2 2ūu 2ūv ūx2 ūx4eu ū2x3ue ūx4us ūxū3r ū2́ ū́b2 ū́3cr ū́d2 2ū́g ū́1i ū́2lā ū́4lă ū́4lĕr ū́4lĕt ū́2lo ū́2lŏ ū́3mu ū́n3si 2ū́q ū́rĭ5m ū́r2u ū́2sp ū́s5pe ū́4st ū́s5tr 4ū́tia 4ū́3tiā 4ū́tiæ 4ū́tiǣ 4ū́3tiī ū́4til 4ū́tĭa 4ū́tĭā 4ū́tĭæ 4ū́tĭǣ 4ū́tĭī ū́4tĭl 2ū́u 2ū́v ŭă3p2 ŭắ3p2 ŭbē2r ŭbĕ2 ŭbĕ4r ŭbĕ́2 ŭ2bi ŭ2bī2 ŭb2īn ŭb2īq ŭb4īuĕ. ŭb4īvĕ. ŭbī́2 ŭb4ī́n ŭb4ī́q ŭbī́4t ŭb6ī́uĕ. ŭb6ī́vĕ. ŭ3bĭă ŭbĭ3cŭ ŭ3bĭīs ŭ5bĭī́s ŭ3bĭō ŭb3ĭt. ŭ3bĭŭ ŭ3bĭ́ă ŭbĭ́4c ŭbĭ́4g ŭ2bl ŭ2bō ŭ2bŏ2 ŭ2b1r ŭbs2 ŭb5stĕ ŭ2b1ū ŭ3b2ŭl ŭ2cu ŭdē2s ŭ2du ŭ3d2ŭ ŭd4ŭĕ ŭĕ2ă ŭ3ĕnn ŭĕ3r4ĕ ŭĕ3rī ŭĕ3rŭ ŭ3ĕ́nn ŭ3g2a ŭ3g2æ3 ŭ3g2ǣ ŭ2gn ŭ1i ŭī3p2 ŭī́3p2 ŭ2ĭ ŭĭn2 2ŭĭs 2ŭla 2ŭlá 2ŭlæ 2ŭlǣ 2ŭlǽ ŭlē3i ŭlḗ3i 1ŭlm ŭ2l1u ŭm1 2ŭm. ŭ3ma ŭ3mā. ŭ3mān ŭ3māq ŭ3mār ŭ3mās ŭmā4tr ŭ3māu ŭ3māv ŭmă2 ŭ3mă. ŭ3măn ŭmắ2 ŭ3má ŭ3mæ ŭ3mǣ ŭ3mǽ 1ŭm3b ŭmb4ē ŭmb4ĭ ŭm5bĭt ŭmē2g ŭm2ēs ŭm2ḗ ŭmḗ4g ŭ3mĕ. ŭ3mĕn ŭmĕ2q ŭ3mĕu ŭ3mĕv ŭ2m3i ŭ2mī2 ŭmī́4b ŭmī́4m ŭmī́4r ŭmī́4t ŭ2mĭ2 ŭmĭn3 ŭmĭnĭ́4 ŭm3ĭt ŭmĭ́4c ŭmĭ́nĭ6c ŭmĭ́4t 2ŭmn ŭ3m2ō ŭ2mŏ ŭmpĕ3r 2ŭmq 2ŭmu ŭ3mŭs 2ŭmv ŭn3d2 ŭndĕ3ŭ ŭn2ē ŭn2ĕ ŭnĕ3d 2ŭnt ŭntḗ5i ŭŏ2r1 ŭpĕ5raeq ŭpĕ5ra͞eq ŭpĕ5r6á͞ ŭpĕ5ra͡eq ŭpĕ5r6á͡ ŭpĕr5ắs ŭpĕ5ræq ŭpĕ5rǣq ŭpĕ5rǣ́ ŭpĕrĕ4 ŭpĕ4rĕā ŭpĕ4rĕă ŭpĕ4r5ĕō ŭpĕ6r5ĕrā ŭpĕ6r5ĕră ŭpĕ6r5ĕrĭ ŭpĕ6r5ĕrō ŭpĕrĕ́4 ŭpĕ6r5ĕ́rĭ ŭpĕ4r3ī4 ŭpĕr4īs ŭpĕrī́4 ŭpĕr6ī́s ŭpĕ4r3ĭ4 ŭpĕrĭ́4 ŭpĕ5rṓs ŭpĕ́6r5ĕā ŭpĕ́6r5ĕă ŭpĕ́6r5ĕō ŭpĕ́6r5ĕ6r ŭpĕ́6r5ĭē ŭr1 ŭ1r2a ŭr2ā ŭ1r2ă ŭ1r2æ ŭ1r2ǣ ŭr2ǽ ŭ3r2ē ŭrē3i ŭrḗ3i ŭ1r2ĕ ŭ1r2ī ŭ3r2ĭ ŭ1r2ō ŭ1rŏ ŭ1rŭ 2ŭs. ŭ2s3ā2 ŭsā́2 ŭ2s3c ŭ2si 2ŭsn ŭ1sp ŭ2spē 2ŭsq ŭs3t ŭs5tĕr ŭs4trĭ ŭs5trŏ 2ŭsu 2ŭsv 1ŭt. ŭtĕ2ī ŭtĕ3rĕ ŭtĕ5rī ŭtĕrī5u ŭtĕrī5v ŭtĕ3rŭ ŭ2tĭ. 1ŭ2tr ŭ2tu ŭ1u 1ŭ2x2 ŭ́2 ŭ́bĕ2 ŭ́b4ĭī ŭ́bs2 ŭ́3bŭ ŭ́3cĕ ŭ́3cī ŭ́3cĭ ŭ́3cl ŭ́3dē ŭ́3dĕ ŭ́3dĭ ŭ́3g ŭ́4gn ŭ́3i ŭ́3j 2ŭ́lă ŭ́3lī ŭ́3lĭ ŭ́l3u ŭ́3lŭī ŭ́3lŭĭ ŭ́m3ă4r ŭ́m3b4 ŭ́m5bĭ ŭ́m3ĕā ŭ́m3ĕă ŭ́3mĕn ŭ́m3ĕō ŭ́m3ĕŏ ŭ́3mĕq ŭ́3mĕu ŭ́3mĕv ŭ́m3ī ŭ́m3ĭ4c ŭ́m3ĭē ŭ́m3ĭĭ ŭ́3mĭn ŭ́m3ĭ4t 2ŭ́mn 2ŭ́mq 2ŭ́mu ŭ́3mŭ 2ŭ́mv ŭ́3nē ŭ́3nĕ ŭ́3nĭ ŭ́3pĕ ŭ́3ră ŭ́3rĕ ŭ́3r2ĭ ŭ́3rŏ ŭ́3sĭ 2ŭ́sn ŭ́3spĕ ŭ́s3t ŭ́s4trĭ 2ŭ́su 2ŭ́sv ŭ́3tă ŭ́3tĕ 3ŭ́4tr 1ŭ́u ŭ́3uā ŭ́3uă ŭ́3uē ŭ́3uĕ ŭ́3uō ŭ́3uŏ 1ŭ́v ŭ́3vā ŭ́3vă ŭ́3vē ŭ́3vĕ ŭ́3vō ŭ́3vŏ úbe4ram úbe4rā úb4eris ú5berum úb4ii. ú3b4iis ú3biō ú3b2iu úbi5ui úbi5vi ú2bī úb2o úb3s2 úb5ste ú3b2u 2úc ú2c3ue úd2i úd3ue úe1 úe2a úe2o 2úg ú3g2a ú3gæ ú3gǣ ú2g3n ú1iæ ú1ii ú2in ú2la. ú2lat ú2let ú2lu úl3ua úl3uæ úl3ue úl3uis úl3uīs ú3lum úm1 ú1ma úma2g ú3m2an ú3maq úma2r ú3mau ú3mav úm3b2 úmb4e úmb4ē úmb4i úm5bi5t úmb6itu úm2e ú2m3eā ú2m3eō úmi2c úm2im úm2in úm2iu ú2m3ī 2úmn ú1mo 2úmq 2úmu ú3mun 2úmv 5úndans 3úndān 2úni ún3s4i 2únt ú1n2u úpe1 úpe3r 2úq úr1 ú1r2a 2ú1ræ ú1r2e ú1r2i 2úrn ú1r2o 2úrq ú3r2ui úru3m ú2run ú2s3c ús2i 2úsn ús3q ús3t 2úsu ú2sui 2úsv ú2tar úte3r 2ú3tia 2útiæ 2ú3tii ú2til ú1u 2úue ú2um ú2un 2úve 2úx úx2a úx4eu úx2i úx2o ú2xue úx4us 1v vab2 va3d2 vad4o va3g val4u vas3p vas5te v2ă vă3d2 vă3g văs3 vắs3 v3áed vás3p 2væ2d vǣ2d vǣ́2d 2v1ǽ2d vb2 vbi2 ve1 ve2a ve2ia ve2iá ve4iene ve2ii ve2ií ve4io. ve4ioq ve4ior ve6ioue. ve6iove. ve4ión ve4ióq ve4iór ve6ióue. ve6ióve. ve2iu ve2iú ve2ī ve2í ve2lu ve4n3ea ve4n3eá ve4n3eo ve4n3eó ve4n3ii ve4n3ií ve4n3íi 2venn ve2o ve2ō ver2æ3 ve3rē ve2s ve3sá ve3sí ve4s3p ves5pe ve4s3t ves5te ves5tr vete5re vete5ri veteri5v vete5rī veterī5v veterī́7 ve2u vex2 vex4e vē4iae. vē6iaene vē6iaeque vē6iaeue vē6iaeve vē4iam vē4ian vē6ia͞e. vē6ia͞ene vē6ia͞eque vē6ia͞eue vē6ia͞eve vē6iá͞ene vē6iá͞eque vē6iá͞eue vē6iá͞eve vē6ia͡e. vē6ia͡ene vē6ia͡eque vē6ia͡eue vē6ia͡eve vē6iá͡ene vē6iá͡eque vē6iá͡eue vē6iá͡eve vē4iā. vē4iāne vē6iāque vē4iāru vē4iārú vē4iās. vē6iāsne vē6iāsque vē6iāsue vē6iāsve vē4iāue vē4iāve vē6iā́ne vē6iā́que vē6iā́ru vē6iā́sne vē6iā́sque vē6iā́sue vē6iā́sve vē6iā́ue vē6iā́ve vē6iáene vē6iáeque vē6iáeue vē6iáeve vē4iám vē4iæ. vē4iæne vē6iæque vē4iæue vē4iæve vē4iǣ. vē4iǣne vē6iǣque vē4iǣue vē4iǣve vē6iǣ́ne vē6iǣ́que vē6iǣ́ue vē6iǣ́ve vē4iǽne vē6iǽque vē4iǽue vē4iǽve vē4iene vē4iī. vē4iīne vē6iīque vē4iīs. vē6iīsne vē6iīsque vē6iīsue vē6iīsve vē4iīue vē4iīve vē6iī́ne vē6iī́que vē6iī́sne vē6iī́sque vē6iī́sue vē6iī́sve vē6iī́ue vē6iī́ve vē4iō. vē4iōne vē6iōque vē4iōru vē4iōrú vē4iōs. vē6iōsne vē6iōsque vē6iōsue vē6iōsve vē4iōue vē4iōve vē6iṓne vē6iṓque vē6iṓru vē6iṓsne vē6iṓsque vē6iṓsue vē6iṓsve vē6iṓue vē6iṓve vē2iu vē2iú vē4n3iī vē4nīs vē4n3ĭī vē3r vḗ4n5iī vḗ4n5ĭī v2ĕ vĕ2ă vĕ3rē vĕ3r4ĕ vĕ2s3 vĕ4sp vĕs5pĕ vĕs5tĕ vĕ3x2 vĕ́3rĕ vĕ́x2 vé2lu vé4n3eo vé4n3ii 2vénn vés3 véx2 v2i vi2a vi4c5énn vid4u vin2ā vi3r4i v2ī vī4cen vī4cĕn vīc5ĕ́n vī4cén vī3so vī3sŏ v2ĭ vĭn2a vĭn2ā vĭn2æ ví3d ví3tu 2vj 2voe vo3l4u vo1n vo3rī vos3t vos5te 2vo͞ 2vo͡ vōs3t vŏ3rī vó3l2u vó3ru 2vœ vr2a vri2 v̄2 v̆2 v̆́2 v̆́4t v́2 1x1 xab2 xae2 x2aeq xaes3 x2aeu x2aev x2ag 2xal xam4b3i4 xambī4 xambī́4 xam4b3í4 x2ami x2an x2aq x2are x2aru xas3 x2āg x2ān x2āri x2āru x3ā́c 3xă. 3xăm xămbī4 xămbī́4 xăm4b3ĭ 3x2ăn 3x2ăq 3x2ăr xăs3 3x2ăt 3x2ău 3x2ăv 3xắ x2ắn x2ắr x2á x3ác x3áes3 2x3ál x3ámb xám4b3i x3árs xás3 x3áud xæ2 x2æ3q xæs3 x2æ3u x2æ3v xǣ2 x2ǣ3q xǣs3 x2ǣ3u x2ǣ3v x2ǣ́q xǣ́s3 x2ǣ́u x2ǣ́v x2ǽq xǽ2s3 x2ǽu x2ǽv 2xc2 xcí3 x2e1 xe2a xe2e x3e4ger x3e4gér x3e2gi x3e2gí xe2i xe2ī xe2í x3emp x3enn xe2o xe2ō xe4qui xe4quī x3erc xe2s x3e2u 3x4eue x2ē x3ē2ge x3ē4gēr x5ē4gḗr x3ē2gĕ x3ē2gé x3ē2gi x3ē2gī x3ē2gĭ x3ē2gí x3ḗ2g xĕ2ă x3ĕăr x3ĕăt 2x2ĕd x3ĕnn 2x3ĕŏ x3ĕ4quī xĕ4quĭ x2ĕrā x2ĕră xĕ3r4ĕ x2ĕrĭ x2ĕrō x2ĕt x3ĕŭn x2ĕ́d xĕ́2q x2é x3é2g x3émp x3énn xé4qui x3érc 2xh x2ia x2iā x2iæ x2iǣ xi2ba xi2bá xi2be xi2bé xi2bi xi2bí xi2bo xi2bó xi4bun xi4bún x2ic 2xie 3x2ies 3x2iēs 2xi2g xi2i x2im xi2n xin3ā xinā́4 xi3ni xi3nī xi3ní xi3nu xi4nue xi3nú x2io x2iō x2iq 2xi2r x2iss xi2tæ xi2tǣ xi2tǽ xi2tī xi2tū xi4uer xi4uér 2xi2ui xi2uí x2i3uu 2x3iŭ xi4ver xi4vér 2xi2vi xi2ví 2xī2b 2xī2m x2īn xīō2 x2īq 2xī2r 2xī2t xī2ué xī2ui xī2uĭ xī2uí xī2vé xī2vi xī2vĭ xī2ví xī́2b xī́2m xī́2r xī́4t xī́4ui xī́4uĭ xī́4vi xī́4vĭ x2ĭb x2ĭc x2ĭēs 2xĭ2g 2xĭĭ x2ĭm xĭ2n xĭn3ā xĭnā́4 xĭn2ĕ xĭ3nī xĭ3nŭ xĭ2ta xĭ4tā. xĭ2tă xĭ2tá xĭ2tæ xĭ2tǣ xĭ2tǽ x2ĭtĕ xĭ2tī x2ĭtĭ xĭ4tōs xĭ2tū xĭ4tŭm xĭ4tŭs xĭ́2g x2ĭ́m xĭ́4tă x2í 2x3í2b 2x3í2g x3íi 2x3í2mu 2x3í2r x3í2ta x3í4te. 2x3í2ti 2x3í2to x3ítur x3í4uer x3í4uim x3í4uit x3í4ver x3í4vim x3í4vit 2xj x2l2 2xn x3ne x3nĕ xo2 3xo. x2o3d 3xon 3xoq xorí3t xo4rn xo4rq xo3ru xo4rv 3xos xo4sa xo4sn xo4so xo4sq xo4su xo4sv x2o3t 3xo3u 3xo3v 3xō. 3x2ōn 3xōq 3xō2s xō4sa x2ō3t 3xōu 3xōv xṓ4rat xṓ4rān xṓ4răt xṓ4rer xṓ4ret xṓ4rĕr xṓ4rĕt x3ṓ4ro x3ṓ4rŏ x3ṓrs xṓ4s x3ṓsa x3ṓsā x3ṓsă x3ṓsæ x3ṓsǣ x3ṓsc x3ṓse x3ṓsē x3ṓsĕ x3ṓsī x3ṓsō x5ṓsum x5ṓsus x3ṓsŭ xŏ2 2x2ŏ3d xŏ́2n xó4ner xó4rat xó4rer xó4ret xó4riē xó4ror xó2s xó4sa x2ót 2xp x3pé 2xq x3qu 2xs2 x3sp xs4pe xsu4lu xsupe3 2xt x3ta x3tā x3tă x3tá x3tæ x3tǣ x3tǽ x3te1 xter4a xte5re xte5ré xteri5ue xteri5v xte5rī xterī5u xterī5v x3tĕ xtĕ3r4a xtĕ3rǣ xtĕ3rĕ xtĕ5rī xtĕrī5u xtĕrī5v xtĕ3rŭ xtéri5t x3ti1 x3tī x3tĭ x3tí x3to x3tō x3tó x3tr x3tu x3tū x3tŭ x3tú xu2 3xu. 2x3ue. x3uev 2x3uĕ x2ui. x2uis x2uī x2uís 3x2um xum2e xum2ī xu4mn xu4mq xu4mv x2une xu1r xu3ro 3x3us x4us. x4u4sn x4u4sq x4u4su x4u4sv x2uum x2uúm xū2b xūbe3 x2ūne x2ūnĕ xū2re xū2rē xū2rĕ xū2ré xū2ri xū2rĭ xū2rí xū2ro xū2rŏ xū2ró x2ū2s xū2t xū́2b xū́4rē xū́4ri xū́4rĭ xū́4ro xū́4rŏ x2ū́s xū́2t xŭ2 2xŭā 2xŭă x2ŭī 2xŭl x2ŭm xŭ3mā xŭ3mă xŭ3mē xŭ3m2ĕ xŭ3m2ī xŭ3mŭ 2xŭō 2xŭŏ x2ŭŭm xŭ́4l x2ŭ4́m xú2b xú2l x2úm x2úne xú1r x2úsq xú2t xú2ui xú2vi 2xv x3ve x3vĕ x2x2 y2a yad2 ya1m ya2nu yā2nu yá2nu yb2 ybe2 ybē2 ybé2 ybé4i yd2 yda3m yde2s ydē2 ye2 yes3 yē2 yé2 yés3 y2g3n y2i yi2i yin2 yio2s yis3 yi4sc yis5ci yl3ui yl3uí y1m ym2a ym2e yme3d yme5de y1n yn2ā yne2 yn2i yo3ne yo3ni yó1 yper4í y1r yr2a y3rá yr4ás ys2i ysta4 yste3 y1su yte3r yteri5ue yteri5v yte5rī yterī5u yterī5v yx4eu y2xu ȳ1 ȳ2a ȳad2 ȳ2ă ȳăd2 ȳ2á ȳ2i ȳ2ĭ ȳ2í ȳló2 ȳmo3 ȳn2 ȳne2 ȳ3rē ȳré2 ȳro2 ȳró2 ȳs2 ȳso2 ȳsó2 ȳ2́ ȳ́3l ȳ́1n ý2a1 ýb2 ýd2 ýda3 ý2g3n ý2i ý2l1u ý1m ým2e ý1nu ý1r ýs2i ýste3 ýte1 ý2th ýx4eu ý2xu 1z z2a zab2 za3r ză3r zá1m ze3b zé2ru z2i zmă3 zo1 zo2s zū2 ̄1 ̄2a ̄a2m ̄2ā ̄2ă ̄2á ̄2ǣ ̄ǣ2ŭ ̄b2 ̄be3 ̄bī3u ̄bī3v ̄3bu ̄3bŭ ̄ce2 ̄2cl ̄2cū ̄de3 ̄dĕ3r ̄2dī ̄2e ̄2ē ̄ēn3 ̄2ĕ ̄2f ̄2i ̄2ī ̄2ĭ ̄2í ̄n2 ̄no3 ̄2ō ̄pe3 ̄per2 ̄pĕ3r ̄pĕ5rĭ ̄r2 ̄2s ̄to2 ̄2u ̄2ŭ ̄2ú ̄2́ ̄́3b2 ̄́2cl ̄́3l ̄́1n ̄́2s ̆ăd2 ̆b2 ̆d2 ̆dă3m ̆dē2 ̆ĕs3 ̆2gn ̆2ĭ ̆ĭ2ă ̆ĭn2 ̆ĭs3 ̆2lu ̆1ma ̆1mă ̆m2e ̆m2ĕ ̆1n ̆n2ā ̆1ra ̆3r2ă ̆1ræ ̆1rǣ ̆1rī ̆1rō ̆1rŏ ̆rsĭ3 ̆1rŭ ̆stă4 ̆tĕ5rī ̆tĕrī5u ̆tĕrī5v ̆tĕ3rŭ ̆2th ̆3thĭ ̆x2 ̆2xu ̆́b2 ̆́d2 ̆́dă3 ̆́m2ĕ ͞e1 ͞ea2b3 ͞eắ2 ͞eá2 ͞e3ác ͞e3áp ͞e3b ͞e4cue ͞e3d2 ͞ed4o ͞e2eō ͞e3es ͞eé2 ͞e3és ͞e3g2 ͞ei2 ͞e2iā ͞e3ic ͞e2iī ͞e2ī ͞e2ō ͞eó2 ͞epe3 ͞epote4 ͞epot5er ͞epot5es ͞epo6t5és ͞epó4t5e ͞e3q ͞e3r ͞es4ca ͞es4cá ͞es4ci ͞es4cí ͞e4scu ͞e4scú ͞e4spō ͞e2sq ͞es4ta ͞es4tā ͞es4tá ͞es4te ͞es4tē ͞es4té ͞es4tin ͞esti5t4 ͞es4tī ͞estí3 ͞es4tít4 ͞es4tō. ͞es4tōn ͞es4tōq ͞es4tōs ͞es4tōu ͞es4tōv ͞es4trú ͞e5ter ͞etere6ri ͞ete6re6rí ͞ete6r5es ͞ete6r5és ͞ete5rim ͞ete5riti ͞ete5rití ͞ete5rito ͞ete5ritó ͞ete5r6i5tur ͞ete5ritúr ͞ete4r5ī4 ͞eterī́6 ͞ete6rít ͞e5tĕr ͞eté6r5es ͞eté6rite ͞e3ut ͞ex2 ͞e2xu ͞2u1 ͞u2a ͞u2ǣ ͞u3b2 ͞u3do ͞uō2 ͞upe5re ͞upe5ri ͞upe5r4ī ͞uperī5n ͞uperī5q ͞uperī5u ͞uperī5v ͞u2su ͞u3sum ͞u3sus ͞u2xu ́͞2 ͡e1 ͡ea2b3 ͡eắ2 ͡e3ác ͡e3áp ͡e3b ͡e4cue ͡e3d2 ͡ed4o ͡e2eo ͡e2eō ͡e2eó ͡e3es ͡eé2r ͡e3és ͡e3g2 ͡ei2 ͡e2iā ͡e3ic ͡e2ii ͡e2iī ͡e2ií ͡e2ī ͡e2o ͡e2ō ͡epe3 ͡epo6tés ͡epó6tes ͡e3q ͡e3r ͡er4i ͡es4ca ͡es4cá ͡e5s4ci ͡es4cí ͡e4scu ͡e4scú ͡e4spō ͡e2sq ͡es4ta ͡es4tā ͡es4tá ͡es4te ͡es4tē ͡es4té ͡es4ti. ͡es4tig ͡es4tin ͡es4tiq ͡es4tis ͡esti5t4 ͡es4tiv ͡es4tī ͡es4tíg ͡es4tín ͡es4tíq ͡es4tís ͡es4tí5t4 ͡es4tíu ͡es4tív ͡es4to. ͡es4ton ͡es4toq ͡es4tos ͡es4tou ͡es4tov ͡es4tō. ͡es4tōn ͡es4tōq ͡es4tōs ͡es4tōu ͡es4tōv ͡es4tón ͡es4tóq ͡es4tós ͡es4tóu ͡es4tóv ͡es4trú ͡e5ter ͡etere6ri ͡ete6re6rí ͡ete4ri4 ͡eter5ii ͡eter5ií ͡ete4r5ī4 ͡eterī́6 ͡ete4rí4 ͡eter5ímu ͡eter5íti ͡e5tĕr ͡eté6ri. ͡eté6r5ii ͡eté6r5is ͡eté6rite ͡eté6ri6ti ͡e3ust ͡e3ut ͡ex2 ͡e2xu ͡2u1 ͡u2a ͡u3b2 ͡u3do ͡uō2 ͡uó2 ͡upe5re ͡upe5ri ͡uperi5n ͡uperi5q ͡uperi5ue ͡uperi5v ͡upe5r4ī ͡uperī5n ͡uperī5q ͡uperī5u ͡uperī5v ͡u2xu ́͡2 ́2ă ́ăd2 ́ă3g ́b2a ́ba3q ́3bas ́b2ă ́4băc ́bă2r ́b3ărā ́b3ără ́b3ărē ́b3ărĕ ́b3ărō ́3băs ́b2e ́be3r ́b2ē ́b4ĭă ́bĭ4cŭ ́b4ĭēs ́2bĭĭ ́b4ĭō ́b4ĭŭ ́b2o3 ́b2ŏ1 ́b5ŏlĕn ́2bri ́b2rī ́b2sq ́b5s4tĕ ́b2su ́b2u ́3bŭm ́2by ́3că ́ce1 ́3cē ́3ci ́cŏ3 ́2cre ́2crē ́2cri ́2c3ue ́2c3u2t ́cŭ3m ́2c3ŭ2t ́dă2m ́d3ămă ́de4run ́2d3ĕ2d ́d4ĕp ́d3ĕst ́2d3i2g ́d2in ́d2ĭ ́2d3ĭg ́4d3ĭmĭ ́d3ŏ2l ́d2rē ́d2rŏ ́2d3ue ́2dū ́d2ŭ ́e2ă ́e3b ́e4cue ́e3d2 ́e2eo ́e2eō ́e3es ́e3g2 ́ei2 ́e4ia. ́e4iam ́e4ias ́e4ia͞ ́e2iā ́e2ii ́e2iī ́epe3 ́e3q ́e1r ́er4i ́e3s4ca ́e3s4ci ́e3s4ta ́e5s4tā. ́e5stān ́e3s4te ́e3s4tē ́e5s4ti. ́e5s4tin ́e5s4tis ́e5stit ́e3s4tī ́e5s4to. ́e5s4tos ́e3s4tō ́es5tră ́e5stru ́es3tu ́ete3r ́etĕ5r ́e3ut ́e2ŭ ́e2x ́ĕ1 ́1ĕā ́1ĕ2ă ́ĕ2mŏ ́2ĕq ́4ĕr. ́1ĕ2s ́ĕ2ŭ ́fe1 ́2fē ́fĕ1 ́fŏ1 ́3g2a ́3gă ́3gæ ́3gǣ ́gĕ1 ́2gl ́2gn ́g3no ́2gŭa ́2gŭā ́2gŭă ́2gŭǣ ́2gŭē ́2gŭĕ ́2gŭō ́2gŭŭ ́1h ́2he ́3ian ́3iaq ́3iar ́3iat ́3iau ́3iav ́i2ā ́i3b ́i2ci ́3iem ́3ien ́3ieq ́3iet ́3ieu ́3iev ́3iēs ́1ii ́1io ́3iun ́3iuu ́ĭ3b ́ĭ2cĭ ́1ĭĭ ́2ĭn2 ́3ĭn. ́3lă ́2leg ́3lĕ ́4lĕg ́4lĕp ́3lix ́2lu ́3lub ́l3ue ́l3uē ́3lui ́3lum ́3lus ́1m2a ́1mă ́mă2g ́m3ără ́m3ă4rō ́m3bă ́m4bĭā ́m4b3ĭŏ ́m2e ́4mera ́4merā ́mĕ4dĭ ́4mĕdŏ ́m2in ́4minē. ́4minēn ́m2ĭ ́4mĭăn ́4mĭăt ́4mĭēn ́4mĭēs ́4mĭĕn ́4mĭĕt ́2mĭĭ ́4mĭnē. ́4mĭnēn ́4mĭŭn ́1mo1 ́mŏ1 ́mpĕ5r ́mpĕr6ī ́2mun ́3m2ū ́n2ā ́n2ă ́n3dĕ ́n4d3ĭg ́n4d3ŏ4l ́n4dŭĕ ́nd3ŭĭ ́n2ĕ ́n3ĕst ́n3g2 ́4n3ĭcĭ ́n2o ́nŏ1 ́ns2c ́n4sig ́ns5i4tæ ́ns5i4tu ́n4sĭg ́ntĕ3r ́nt5ĕrōs ́3n2ua ́n2uā ́3n2uē ́3n2uī ́n2ū ́n2ŭ ́o1 ́2ŏ ́ŏ3p ́3pă ́pe1 ́pe3r ́pĕ3r ́pĕ5rĭ ́3pi ́3pĭ ́3pl ́2pn ́pŏ3 ́3pr ́pu3l ́3pŭī ́3pŭĭ ́1r ́r2a ́ra3g ́4r2ăb ́ră4gā ́ră4gă ́ră4gĭ ́r2ăl ́r3c ́r2e ́3rē. ́r3ĕ2d4 ́rĕ2g ́rĕ2m ́r3ĕmā ́4r3ĕmă ́r3ĕmē ́r3ĕmĕ ́r3ĕmī ́r3ĕmĭ ́4r3ĕmō ́r3ĕmŏ ́r3ĕmŭ ́2r3ĕs ́2rh ́rĭ4bē ́rĭ4bĕ ́r3ĭ4cĭ ́rĭ4măn ́rĭ4măr ́rĭ4măt ́4r3ĭ4mē ́rĭ4mĕ ́4r3ĭ4mĭ ́r3ĭ4mŏ ́r5ĭ4mŭn ́3rĭŭ ́2rog ́2rŏg ́2r3ŏp ́r3ua ́r3uā ́r3uæ ́2rue ́r3uē ́r2ui ́ru3m ́r3uō ́3rū ́2sc ́s4cid ́s3cr ́s2ĕ ́s4ĕr ́3sĕŭ ́s2i ́2s3ĭ2c ́s4per ́spĕ3 ́s5pĕs ́s3pī ́s3q ́s4tes ́s3tib ́3s4tin ́3stit ́5stĭtē ́5stĭtĕn ́s4trat ́s4tret ́s5tri ́3s4trŏ ́3s4tru ́s5trum ́s4trŭā ́s4trŭă ́s4trŭē ́s4trŭĕ ́s4trŭī ́s4trŭō ́s4trŭŭ ́s3ui ́3sumu ́3sun ́4tăg ́te3r ́tĕ2ī ́tĕ3ra ́t6ĕră. ́2t3ĕs ́3tha ́3thā ́3thă ́3thæ ́3thǣ ́3tĭ ́4tĭq ́2tl ́to1 ́tŏ1 ́5trīx ́1u ́2u1m ́2un ́uŏ1 ́upe3 ́upe5r ́u1r ́u2xu ́1ūn ́ŭ2 ́1ŭb ́1ŭt ́vŏ1 ́x2a ́x2ă ́x4eu ́x2ĕ ́x3ĕăn ́x2i ́2xia ́2xiā ́2xiæ ́2xiǣ ́2xiē ́2xiī ́2xiō ́2xiu ́x2ī ́x2ĭn ́x2o ́x2ō ́x2ŏ ́xtĕ3 ́2xu ́x4us ́x2ŭĭ ́x3ŭĭs", ["lefthyphenmin"]=1, - ["length"]=5322, - ["n"]=740, + ["length"]=216039, + ["n"]=26076, ["righthyphenmax"]=1, }, ["version"]="1.001", diff --git a/tex/context/patterns/mkiv/lang-bg.lua b/tex/context/patterns/mkiv/lang-bg.lua index 36ee29044..4e372a1f8 100644 --- a/tex/context/patterns/mkiv/lang-bg.lua +++ b/tex/context/patterns/mkiv/lang-bg.lua @@ -6,7 +6,7 @@ return { ["metadata"]={ ["mnemonic"]="bg", ["source"]="hyph-bg", - ["texcomment"]="% no comment", + ["texcomment"]="% \n% \\message{Bulgarian hyphenation patterns (options: --safe-morphology --standalone-tex, version 21 October 2017)}", }, ["patterns"]={ ["characters"]="абвгдежзийклмнопрстуфхцчшщъюя", diff --git a/tex/context/patterns/mkiv/lang-de.lua b/tex/context/patterns/mkiv/lang-de.lua index 65661c4aa..e76968cd8 100644 --- a/tex/context/patterns/mkiv/lang-de.lua +++ b/tex/context/patterns/mkiv/lang-de.lua @@ -6,7 +6,7 @@ return { ["metadata"]={ ["mnemonic"]="de", ["source"]="hyph-de-1996", - ["texcomment"]="% no comment", + ["texcomment"]="% \n% \\message{German Hyphenation Patterns (Reformed Orthography, 2006) `dehyphn-x' 2019-04-04 (WL)}", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzßàáâäçèéêëíïñóôöü", diff --git a/tex/context/patterns/mkiv/lang-deo.lua b/tex/context/patterns/mkiv/lang-deo.lua index 1c194407b..235b6f453 100644 --- a/tex/context/patterns/mkiv/lang-deo.lua +++ b/tex/context/patterns/mkiv/lang-deo.lua @@ -6,7 +6,7 @@ return { ["metadata"]={ ["mnemonic"]="deo", ["source"]="hyph-de-1901", - ["texcomment"]="% no comment", + ["texcomment"]="% \n% \\message{German Hyphenation Patterns (Traditional Orthography) `dehypht-x' 2019-04-04 (WL)}", }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzßàáâäçèéêëíïñóôöü", diff --git a/tex/context/patterns/mkiv/lang-eo.lua b/tex/context/patterns/mkiv/lang-eo.lua new file mode 100644 index 000000000..6b0328ef4 --- /dev/null +++ b/tex/context/patterns/mkiv/lang-eo.lua @@ -0,0 +1,20 @@ +return { + ["comment"]="% generated by mtxrun --script pattern --convert", + ["exceptions"]={ + ["n"]=0, + }, + ["metadata"]={ + ["mnemonic"]="eo", + ["source"]="hyph-eo", + ["texcomment"]="% \n% \\begingroup\n% \\def\\adj#1{#1a. #1aj. #1ajn. #1an. #1e.}\n% \\edef\\nom#1{\\adj{#1} #1o. #1oj. #1ojn. #1on.}\n% \\def\\ver#1{#1as. #1i. #1is. #1os. #1u. #1us.}", + }, + ["patterns"]={ + ["characters"]="abdefgijklmnoprstuvŝ", + ["data"]="a1 e1 i1 o1 u1 2aj. 2ajn. 2an. 2as. en. is. 2oj. 2ojn. 2on. 2os. 2us. a3a e3a i3a o3a u3a a3e e3e i3e o3e u3e a3i e3i i3i o3i u3i a3o e3o i3o o3o u3o a3u e3u i3u o3u u3u e2sper 2jn. 2lp. 2lt. 2nk. 2ns. 2nt. 2st. .bl4 .br4 .dr4 .dl4 .fl4 .fr4 .gl4 .gn4 .gr4 .kl4 .kn4 .kr4 .kv4 .pl4 .pr4 .ps4 .pt4 .sf4 .sk4 .skl4 .skr4 .skv4 .sl4 .sm4 .sn4 .sp4 .spl4 .spr4 .st4 .str4 .sv4 .ŝl4 .ŝm4 .ŝn4 .ŝp4 .ŝr4 .ŝpr4 .ŝt4 .ŝtr4 .ŝv4 .tr4 .vr4", + ["lefthyphenmin"]=1, + ["length"]=438, + ["n"]=91, + ["righthyphenmax"]=1, + }, + ["version"]="1.001", +} \ No newline at end of file diff --git a/tex/context/patterns/mkiv/lang-es.lua b/tex/context/patterns/mkiv/lang-es.lua index 3c3cd9ef4..c6d6c3aa2 100644 --- a/tex/context/patterns/mkiv/lang-es.lua +++ b/tex/context/patterns/mkiv/lang-es.lua @@ -10,10 +10,10 @@ return { }, ["patterns"]={ ["characters"]="abcdefghijklmnopqrstuvwxyzáéíñóú", - ["data"]="1b 4b. .b2 2bb 2bc 2bd 2bf 2bg 2b1h 2bj 2bk 2bm 2bn 2bp 2bq 2bs 2bt 2bv 2bw 2bx 2by 2bz 1c 4c. .c2 2cb 2cc 2cd 2cf 2cg 2cj 2ck 2cm 2cn 2cp 2cq 2cs 2ct 2cv 2cw 2cx 2cy 2cz 1d 4d. .d2 2db 2dc 2dd 2df 2dg 2d1h 2dj 2dk 2dl 2dm 2dn 2dp 2dq 2ds 2dt 2dv 2dw 2dx 2dy 2dz 1f 4f. .f2 2fb 2fc 2fd 2ff 2fg 2f1h 2fj 2fk 2fm 2fn 2fp 2fq 2fs 2ft 2fv 2fw 2fx 2fy 2fz 1g 4g. .g2 2gb 2gc 2gd 2gf 2gg 2g1h 2gj 2gk 2gm 2gn 2gp 2gq 2gs 2gt 2gv 2gw 2gx 2gy 2gz 4h. 2hb 2hc 2hd 2hf 2hg 2h1h 2hj 2hk 2hl 2hm 2hn 2hp 2hq 2hr 2hs 2ht 2hv 2hw 2hx 2hy 2hz 1j 4j. .j2 2jb 2jc 2jd 2jf 2jg 2j1h 2jj 2jk 2jl 2jm 2jn 2jp 2jq 2jr 2js 2jt 2jv 2jw 2jx 2jy 2jz 1k 4k. .k2 2kb 2kc 2kd 2kf 2kg 2k1h 2kj 2kk 2km 2kn 2kp 2kq 2ks 2kt 2kv 2kw 2kx 2ky 2kz 1l 4l. .l2 2lb 2lc 2ld 2lf 2lg 2l1h 2lj 2lk 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2lv 2lw 2lx 2ly 2lz 1m 4m. .m2 2mb 2mc 2md 2mf 2mg 2m1h 2mj 2mk 2ml 2mm 2mn 2mp 2mq 2mr 2ms 2mt 2mv 2mw 2mx 2my 2mz 1n 4n. .n2 2nb 2nc 2nd 2nf 2ng 2n1h 2nj 2nk 2nl 2nm 2nn 2np 2nq 2nr 2ns 2nt 2nv 2nw 2nx 2ny 2nz 1p 4p. .p2 2pb 2pc 2pd 2pf 2pg 2p1h 2pj 2pk 2pm 2pn 2pp 2pq 2ps 2pt 2pv 2pw 2px 2py 2pz 1q 4q. .q2 2qb 2qc 2qd 2qf 2qg 2q1h 2qj 2qk 2ql 2qm 2qn 2qp 2qq 2qr 2qs 2qt 2qv 2qw 2qx 2qy 2qz 1r 4r. .r2 2rb 2rc 2rd 2rf 2rg 2r1h 2rj 2rk 2rl 2rm 2rn 2rp 2rq 2rs 2rt 2rv 2rw 2rx 2ry 2rz 1s 4s. .s2 2sb 2sc 2sd 2sf 2sg 2s1h 2sj 2sk 2sl 2sm 2sn 2sp 2sq 2sr 2ss 2st 2sv 2sw 2sx 2sy 2sz 1t 4t. .t2 2tb 2tc 2td 2tf 2tg 2t1h 2tj 2tk 2tm 2tn 2tp 2tq 2tt 2tv 2tw 2ty 1v 4v. .v2 2vb 2vc 2vd 2vf 2vg 2v1h 2vj 2vk 2vm 2vn 2vp 2vq 2vs 2vt 2vv 2vw 2vx 2vy 2vz 1w 4w. .w2 2wb 2wc 2wd 2wf 2wg 2w1h 2wj 2wk 2wl 2wm 2wn 2wp 2wq 2wr 2ws 2wt 2wv 2ww 2wx 2wy 2wz 1x 4x. .x2 2xb 2xc 2xd 2xf 2xg 2x1h 2xj 2xk 2xl 2xm 2xn 2xp 2xq 2xr 2xs 2xt 2xv 2xw 2xx 2xy 2xz 1y 4y. .y2 2yb 2yc 2yd 2yf 2yg 2y1h 2yj 2yk 2yl 2ym 2yn 2yp 2yq 2yr 2ys 2yt 2yv 2yw 2yx 2yy 2yz 1z 4z. .z2 2zb 2zc 2zd 2zf 2zg 2z1h 2zj 2zk 2zl 2zm 2zn 2zp 2zq 2zr 2zs 2zt 2zv 2zw 2zx 2zy 2zz 1ñ 4ñ. c4h 4ch. 2chb 2chc 2chd 2chf 2chg 2chh 2chj 2chk ch2l 2chm 2chn 2chp 2chq ch2r 2chs 2cht 2chv 2chw 2chx 2chy 2chz l4l 4ll. 2llb 2llc 2lld 2llf 2llg 2llh 2llj 2llk 2lll 2llm 2lln 2llp 2llq 2llr 2lls 2llt 2llv 2llw 2llx 2lly 2llz b2l 4bl. 2bl2b 2bl2c 2bl2d 2bl2f 2bl2g 2bl2h 2bl2j 2bl2k 2bl2l 2bl2m 2bl2n 2bl2p 2bl2q 2bl2r 2bl2s 2bl2t 2bl2v 2bl2w 2bl2x 2bl2y 2bl2z c2l 4cl. 2cl2b 2cl2c 2cl2d 2cl2f 2cl2g 2cl2h 2cl2j 2cl2k 2cl2l 2cl2m 2cl2n 2cl2p 2cl2q 2cl2r 2cl2s 2cl2t 2cl2v 2cl2w 2cl2x 2cl2y 2cl2z f2l 4fl. 2fl2b 2fl2c 2fl2d 2fl2f 2fl2g 2fl2h 2fl2j 2fl2k 2fl2l 2fl2m 2fl2n 2fl2p 2fl2q 2fl2r 2fl2s 2fl2t 2fl2v 2fl2w 2fl2x 2fl2y 2fl2z g2l 4gl. 2gl2b 2gl2c 2gl2d 2gl2f 2gl2g 2gl2h 2gl2j 2gl2k 2gl2l 2gl2m 2gl2n 2gl2p 2gl2q 2gl2r 2gl2s 2gl2t 2gl2v 2gl2w 2gl2x 2gl2y 2gl2z k2l 4kl. 2kl2b 2kl2c 2kl2d 2kl2f 2kl2g 2kl2h 2kl2j 2kl2k 2kl2l 2kl2m 2kl2n 2kl2p 2kl2q 2kl2r 2kl2s 2kl2t 2kl2v 2kl2w 2kl2x 2kl2y 2kl2z p2l 4pl. 2pl2b 2pl2c 2pl2d 2pl2f 2pl2g 2pl2h 2pl2j 2pl2k 2pl2l 2pl2m 2pl2n 2pl2p 2pl2q 2pl2r 2pl2s 2pl2t 2pl2v 2pl2w 2pl2x 2pl2y 2pl2z v2l 4vl. 2vl2b 2vl2c 2vl2d 2vl2f 2vl2g 2vl2h 2vl2j 2vl2k 2vl2l 2vl2m 2vl2n 2vl2p 2vl2q 2vl2r 2vl2s 2vl2t 2vl2v 2vl2w 2vl2x 2vl2y 2vl2z b2r 4br. 2br2b 2br2c 2br2d 2br2f 2br2g 2br2h 2br2j 2br2k 2br2l 2br2m 2br2n 2br2p 2br2q 2br2r 2br2s 2br2t 2br2v 2br2w 2br2x 2br2y 2br2z c2r 4cr. 2cr2b 2cr2c 2cr2d 2cr2f 2cr2g 2cr2h 2cr2j 2cr2k 2cr2l 2cr2m 2cr2n 2cr2p 2cr2q 2cr2r 2cr2s 2cr2t 2cr2v 2cr2w 2cr2x 2cr2y 2cr2z d2r 4dr. 2dr2b 2dr2c 2dr2d 2dr2f 2dr2g 2dr2h 2dr2j 2dr2k 2dr2l 2dr2m 2dr2n 2dr2p 2dr2q 2dr2r 2dr2s 2dr2t 2dr2v 2dr2w 2dr2x 2dr2y 2dr2z f2r 4fr. 2fr2b 2fr2c 2fr2d 2fr2f 2fr2g 2fr2h 2fr2j 2fr2k 2fr2l 2fr2m 2fr2n 2fr2p 2fr2q 2fr2r 2fr2s 2fr2t 2fr2v 2fr2w 2fr2x 2fr2y 2fr2z g2r 4gr. 2gr2b 2gr2c 2gr2d 2gr2f 2gr2g 2gr2h 2gr2j 2gr2k 2gr2l 2gr2m 2gr2n 2gr2p 2gr2q 2gr2r 2gr2s 2gr2t 2gr2v 2gr2w 2gr2x 2gr2y 2gr2z k2r 4kr. 2kr2b 2kr2c 2kr2d 2kr2f 2kr2g 2kr2h 2kr2j 2kr2k 2kr2l 2kr2m 2kr2n 2kr2p 2kr2q 2kr2r 2kr2s 2kr2t 2kr2v 2kr2w 2kr2x 2kr2y 2kr2z p2r 4pr. 2pr2b 2pr2c 2pr2d 2pr2f 2pr2g 2pr2h 2pr2j 2pr2k 2pr2l 2pr2m 2pr2n 2pr2p 2pr2q 2pr2r 2pr2s 2pr2t 2pr2v 2pr2w 2pr2x 2pr2y 2pr2z r2r 4rr. 2rr2b 2rr2c 2rr2d 2rr2f 2rr2g 2rr2h 2rr2j 2rr2k 2rr2l 2rr2m 2rr2n 2rr2p 2rr2q 2rr2r 2rr2s 2rr2t 2rr2v 2rr2w 2rr2x 2rr2y 2rr2z t2r 4tr. 2tr2b 2tr2c 2tr2d 2tr2f 2tr2g 2tr2h 2tr2j 2tr2k 2tr2l 2tr2m 2tr2n 2tr2p 2tr2q 2tr2r 2tr2s 2tr2t 2tr2v 2tr2w 2tr2x 2tr2y 2tr2z v2r 4vr. 2vr2b 2vr2c 2vr2d 2vr2f 2vr2g 2vr2h 2vr2j 2vr2k 2vr2l 2vr2m 2vr2n 2vr2p 2vr2q 2vr2r 2vr2s 2vr2t 2vr2v 2vr2w 2vr2x 2vr2y 2vr2z 2b3p2t 2c3p2t 2d3p2t 2l3p2t 2m3p2t 2n3p2t 2r3p2t 2s3p2t 2t3p2t 2x3p2t 2y3p2t 4pt. 2b3c2t 2c3c2t 2d3c2t 2l3c2t 2m3c2t 2n3c2t 2r3c2t 2s3c2t 2t3c2t 2x3c2t 2y3c2t 4ct. 2b3c2n 2c3c2n 2d3c2n 2l3c2n 2m3c2n 2n3c2n 2r3c2n 2s3c2n 2t3c2n 2x3c2n 2y3c2n 4cn. 2b3p2s 2c3p2s 2d3p2s 2l3p2s 2m3p2s 2n3p2s 2r3p2s 2s3p2s 2t3p2s 2x3p2s 2y3p2s 4ps. 2b3m2n 2c3m2n 2d3m2n 2l3m2n 2m3m2n 2n3m2n 2r3m2n 2s3m2n 2t3m2n 2x3m2n 2y3m2n 4mn. 2b3g2n 2c3g2n 2d3g2n 2l3g2n 2m3g2n 2n3g2n 2r3g2n 2s3g2n 2t3g2n 2x3g2n 2y3g2n 4gn. 2b3f2t 2c3f2t 2d3f2t 2l3f2t 2m3f2t 2n3f2t 2r3f2t 2s3f2t 2t3f2t 2x3f2t 2y3f2t 4ft. 2b3p2n 2c3p2n 2d3p2n 2l3p2n 2m3p2n 2n3p2n 2r3p2n 2s3p2n 2t3p2n 2x3p2n 2y3p2n 4pn. 2b3c2z 2c3c2z 2d3c2z 2l3c2z 2m3c2z 2n3c2z 2r3c2z 2s3c2z 2t3c2z 2x3c2z 2y3c2z 4cz. 2b3t2z 2c3t2z 2d3t2z 2l3t2z 2m3t2z 2n3t2z 2r3t2z 2s3t2z 2t3t2z 2x3t2z 2y3t2z 4tz. 2b3t2s 2c3t2s 2d3t2s 2l3t2s 2m3t2s 2n3t2s 2r3t2s 2s3t2s 2t3t2s 2x3t2s 2y3t2s 4ts. san4c5t plan4c5t o1eu2 a1ae2 a1aó2 eo1á2 eo1e2 o1ae2 o1eó2 2no. 2t2l 2t2s 2t2x 2t2z tz3s4ch 4caca4 4cago4 4caga4 4cagas. 4teta. 4tetas. 4puta4 4puto4 .hu4mea .hu4meo .he4mee 4meo. 4meable. 4meables. 4pedo4 4culo4 5mente. 4i3go. 4es. 4és 4e. 4e3mos. 4éis. 4en. 4ía. 4ías. 4ía3mos. 4íais. 4ían. 4í. 4í4s3te. 4í4s3tes. 4í3tes. 4í3mos. 4ís3teis. 4e3ré. 4e3rás. 4e3rés. 4e3rís. 4e3rá. 4e3re3mos. 4e3réis. 4e3rán. 4i3ga. 4i3gas. 4i3gás. 4i3gamos. 4i3gáis. 4a4i3gan. 4e3ría. 4e3rías. 4e3ríamos. 4e3ríais. 4e3rían. 4i3gá3mosme. 4i3gá3mosmele. 4i3gá3mosmelo. 4i3gá3mos3mela. 4i3gá3mosmeles. 4i3gá3mosmelos. 4i3gá3mos3melas. 4i3gá3moste. 4i3gá3mostele. 4i3gá3mostelo. 4i3gá3mos3tela. 4i3gá3mosteles. 4i3gá3mostelos. 4i3gá3mos3telas. 4i3gá3mosle. 4i3gá3mosla. 4i3gá3moslo. 4i3gá3mosele. 4i3gá3moselo. 4i3gá3mosela. 4i3gá3moseles. 4i3gá3moselos. 4i3gá3moselas. 4i3gá3monos. 4i3gá3monosle. 4i3gá3monoslo. 4i3gá3monosla. 4i3gá3monosles. 4i3gá3monoslos. 4i3gá3monoslas. 4i3gá3moos. 4i3gá3moosle. 4i3gá3mooslo. 4i3gá3moosla. 4i3gá3moosles. 4i3gá3mooslos. 4i3gá3mooslas. 4i3gá3mosles. 4i3gá3moslas. 4i3gá3moslos. 4ed. 4é. 4edme. 4édmele. 4édmelo. 4éd3mela. 4édmeles. 4édmelos. 4éd3melas. 4edte. 4édtele. 4édtelo. 4éd3tela. 4édteles. 4édtelos. 4éd3telas. 4edle. 4eedla. 4edlo. 4édsele. 4édselo. 4édsela. 4édseles. 4édselos. 4édselas. 4ednos. 4édnosle. 4édnoslo. 4édnosla. 4édnosles. 4édnoslos. 4édnoslas. 4eos. 4éosle. 4éoslo. 4éosla. 4éosles. 4éoslos. 4éoslas. 4edles. 4edlas. 4edlos. 4er. 4erme. 4érmele. 4érmelo. 4ér3mela. 4érmeles. 4érmelos. 4ér3melas. 4erte. 4értele. 4értelo. 4ér3tela. 4érteles. 4értelos. 4ér3telas. 4erle. 4erla. 4erlo. 4erse. 4érsele. 4érselo. 4érsela. 4érseles. 4érselos. 4érselas. 4ernos. 4érnosle. 4érnoslo. 4érnosla. 4érnosles. 4érnoslos. 4érnoslas. 4e3ros. 4é3rosle. 4é3roslo. 4é3rosla. 4é3rosles. 4é3roslos. 4é3roslas. 4erles. 4erlas. 4erlos. 4í3do. 4í3da. 4í3dos. 4í3das. 4o. 4as. 4a. 4ás. 4a3mos. 4áis. 4an. 4aste. 4astes. 4ó. 4ates. 4asteis. 4a3ron. 4a3ba. 4a3bas. 4á3bamos. 4a3bais. 4a3ban. 4a3ría. 4a3rías. 4a3ríamos. 4a3ríais 4a3rían. 4a3ré. 4a3rás. 4a3rés. 4a3rís. 4a3rá. 4a3remos. 4a3réis. 4a3rán. 4a3ra. 4a3ras. 4á3ramos. 4a3rais. 4a3ran. 4a3re. 4a3res. 4á3remos. 4a3reis. 4a3ren. 4a3se. 4a3ses. 4á3semos. 4a3seis. 4a3sen. 4ad. e5r4as. e5r4a3mos. e5r4áis. e5r4an. e5r4aste. e5r4astes. e5r4ates. e5r4asteis. e5r4a3ron. e5r4a3ba. e5r4a3bas. e5r4á3bamos. e5r4a3bais. e5r4a3ban. e5r4a3ría. e5r4a3rías. e5r4a3ríamos. e5r4a3ríais e5r4a3rían. e5r4a3ré. e5r4a3rás. e5r4a3rés. e5r4a3rís. e5r4a3rá. e5r4a3remos. e5r4a3réis. e5r4a3rán. e5r4a3ra. e5r4a3ras. e5r4á3ramos. e5r4a3rais. e5r4a3ran. e5r4a3re. e5r4a3res. e5r4á3remos. e5r4a3reis. e5r4a3ren. e5r4a3se. e5r4a3ses. e5r4á3semos. e5r4a3seis. e5r4a3sen. e5r4ad. 4adme. 4ádmele. 4ádmelo. 4ád3mela. 4ádmeles. 4ádmelos. 4ád3melas. 4adte. 4ádtele. 4ádtelo. 4ád3tela. 4ádteles. 4ádtelos. 4ád3telas. 4adle. 4eadla. 4adlo. 4ádsele. 4ádselo. 4ádsela. 4ádseles. 4ádselos. 4ádselas. 4adnos. 4ádnosle. 4ádnoslo. 4ádnosla. 4ádnosles. 4ádnoslos. 4ádnoslas. 4aos. 4áosle. 4áoslo. 4áosla. 4áosles. 4áoslos. 4áoslas. 4adles. 4adlas. 4adlos. 4ar. 4a4rme. 4á4rmele. 4á4rmelo. 4á4r3mela. 4á4r3meles. 4á4r3melos. 4á4r3melas. 4a4r3te. 4á4r3tele. 4á4r3telo. 4á4r3tela. 4á4r3teles. 4á4r3telos. 4á4r3telas. 4a4r3le. 4a4r3la. 4a4r3lo. 4a4r3se. 4á4r3sele. 4á4r3selo. 4á4r3sela. 4á4r3seles. 4á4r3selos. 4á4r3selas. 4a4r3nos. 4á4r3nosle. 4á4r3noslo. 4á4r3nosla. 4á4r3nosles. 4á4r3noslos. 4á4r3noslas. 4a3ros. 4árosle. 4ároslo. 4árosla. 4árosles. 4ároslos. 4ároslas. 4a4r3les. 4a4r3las. 4a4r3los. 4a3do. 4a3da. 4a3dos. 4a3das. e5r4a3do. e5r4a3da. e5r4a3dos. e5r4a3das. 4ando 4ándole. 4ándolo. 4ándola. 4ándoles. 4ándolos. 4ándolas. 4ándonos. 4ándoos. 4ándome. 4ándomelo. 4ándomela. 4ándomele. 4ándomelos. 4ándomelas. 4ándomeles. 4ándote. 4ándoteme. 4ándotelo. 4ándotela. 4ándotele. 4ándotelos. 4ándotelas. 4ándoteles. 4ándotenos. 4ándose. 4ándoseme. 4ándoselo. 4ándosela. 4ándosele. 4ándoselos. 4ándoselas. 4ándoseles. 4ándosenos. 4a3dor. 4a3dora. 4a3dores. 4a3doras. e5r4a3dor. e5r4a3dora. e5r4a3dores. e5r4a3doras. acto1h acto1a2 acto1e2 acto1i2 acto1o2 acto1u2 acto1á2 acto1é2 acto1í2 acto1ó2 acto1ú2 aero1h aero1a2 aero1e2 aero1i2 aero1o2 aero1u2 aero1á2 aero1é2 aero1í2 aero1ó2 aero1ú2 afro1h afro1a2 afro1e2 afro1i2 afro1o2 afro1u2 afro1á2 afro1é2 afro1í2 afro1ó2 afro1ú2 .a2 .an2a2 .an2e2 .an2i2 .an2o2 .an2u2 .an2á2 .an2é2 .an2í2 .an2ó2 .an2ú2. ana3lí .aná3li .ana3li .an3aero .an3e2pigr .ane3xa .ane3xá .ane3xe .ane3xé .ane3xio .ane3xió .an3h .ani3mad .ani3mád .ani3dar .ani3ll .ani3m .aniña .ani3q .an3i2so .an3i2só .ani3vel .ano5che .ano5din .ano5mal .ano5nad .anó3nim .anó5mal .ano5nim .ano5ta .ano3tá .anua3l .anua4lm .anu3bl .anu3da .anu3l asu3b2 anfi1h anfi1a2 anfi1e2 anfi1i2 anfi1o2 anfi1u2 anfi1á2 anfi1é2 anfi1í2 anfi1ó2 anfi1ú2 anglo1h anglo1a2 anglo1e2 anglo1i2 anglo1o2 anglo1u2 anglo1á2 anglo1é2 anglo1í2 anglo1ó2 anglo1ú2 ante1h ante1a2 ante1e2 ante1i2 ante1o2 ante1u2 ante1á2 ante1é2 ante1í2 ante1ó2 ante1ú2 .ante2o3je acante2 4ísmo. 4ísmos. 4ísta. 4ístas. 4ístico. 4ísticos. 4ística. 4ísticas. pante4o3n .anteo3nes mante4a e4a3miento e4ándo tras3antea .anti1h .anti1a2 .anti1e2 .anti1i2 .anti1o2 .anti1u2 .anti1á2 .anti1é2 .anti1í2 .anti1ó2 .anti1ú2 ti2o3qu ti2o3co archi1h archi1a2 archi1e2 archi1i2 archi1o2 archi1u2 archi1á2 archi1é2 archi1í2 archi1ó2 archi1ú2 auto1h auto1a2 auto1e2 auto1i2 auto1o2 auto1u2 auto1á2 auto1é2 auto1í2 auto1ó2 auto1ú2 .bi1anual .bi1aur .bi1ox .bi1ó2x .bi1un biblio1h biblio1a2 biblio1e2 biblio1i2 biblio1o2 biblio1u2 biblio1á2 biblio1é2 biblio1í2 biblio1ó2 biblio1ú2 bien2 bien3h bien3v bien3q bien3m bien3t b4ien3do. .su3b4ien b4ien3das. .bie4n3and .bie4n3a4pa .bie4n3a4ve .bie4n3est .bie4n3int .bie4n3o4lie bio1h bio1a2 bio1e2 bio1i2 bio1o2 bio1u2 bio1á2 bio1é2 bio1í2 bio1ó2 bio1ú2 bi1u2ní cardio1h cardio1a2 cardio1e2 cardio1i2 cardio1o2 cardio1u2 cardio1á2 cardio1é2 cardio1í2 cardio1ó2 cardio1ú2 cefalo1h cefalo1a2 cefalo1e2 cefalo1i2 cefalo1o2 cefalo1u2 cefalo1á2 cefalo1é2 cefalo1í2 cefalo1ó2 cefalo1ú2 centi1h centi1a2 centi1e2 centi1i2 centi1o2 centi1u2 centi1á2 centi1é2 centi1í2 centi1ó2 centi1ú2 centi5área ciclo1h ciclo1a2 ciclo1e2 ciclo1i2 ciclo1o2 ciclo1u2 ciclo1á2 ciclo1é2 ciclo1í2 ciclo1ó2 ciclo1ú2 o4i3dea. o4i3deas. o4i3dal. o4i3dales. 4o2i3de. 4o2i3des. 4i2dal. 4i2dales. 4i3deo. 4i3deos. cito1h cito1a2 cito1e2 cito1i2 cito1o2 cito1u2 cito1á2 cito1é2 cito1í2 cito1ó2 cito1ú2 cnico1h cnico1a2 cnico1e2 cnico1i2 cnico1o2 cnico1u2 cnico1á2 cnico1é2 cnico1í2 cnico1ó2 cnico1ú2 .co2a2 .co2e2 .co2i2 .co3o4 .co2u2 .co2á2 .co2é2 .co2í2 .co2ó2 .co2ú2 .co3acree .coá3gul .co3agen .coa3gul .coa3lic .co3arrend .co3auto .co3edic .co3edit .co3educ .co3efici .coe3tá .co3exis .co3imput .coi3to .co4o3per .co4o3pér .co4orden .co4ordin .co4ordín .co4opt .co4ópt .co2nurb cripto1h cripto1a2 cripto1e2 cripto1i2 cripto1o2 cripto1u2 cripto1á2 cripto1é2 cripto1í2 cripto1ó2 cripto1ú2 crono1h crono1a2 crono1e2 crono1i2 crono1o2 crono1u2 crono1á2 crono1é2 crono1í2 crono1ó2 crono1ú2 contra1h contra1a2 contra1e2 contra1i2 contra1o2 contra1u2 contra1á2 contra1é2 contra1í2 contra1ó2 contra1ú2 deca1h deca1a2 deca1e2 deca1i2 deca1o2 deca1u2 deca1á2 deca1é2 deca1í2 deca1ó2 deca1ú2 4e3dro. 4e3dros. 4é3drico. 4é3dricos. 4é3drica. 4é3dricas. 4í3ble. 4í3bles. .de2sa2 .de2se2 .de2si2 .de2so2 .de2su2 .de2sá2 .de2sé2 .de2sí2 .de2só2 .de2sú2 deca2i3mient 3sa. 3sas. de2s3órde de2s3orde de2s3abast de2s3aboll de2s3aboto de2s3abr des4a3brid de2s3abroch de2s3aceit de2s3aceler desa3cert desa3ciert de2s3acobar de2s3acomod de2s3acomp de2s3acons de2s3acopl de2s3acorr de2s3acostum de2s3acot desa3craliz de2s3acredit de2s3activ de2s3acuart de2s3aderez de2s3adeud de2s3adorar de2s3adormec de2s3adorn de2s3advert de2s3aferr de2s3afic de2s3afil de2s3afin de2s3afor de2s3agu desa3gú desa3garr de2s3agraci de2s3agrad de2s3agravi de2s3agreg de2s3agrup des4a3guis de2s3aherr de2s3ahij de2s3ajust de2s3alagar de2s3alent de2s3alfom de2s3alfor de2s3alien de2s3a4line de2s3a4liné de2s3aliñ desa3liv de2s3alm de2s3almid de2s3aloj de2s3alquil de2s3alter de2s3alumbr desa3marr desa3mobl de2s3amold de2s3amort de2s3amuebl de2s3ampa de2s3and de2s3angel de3sangr de2s3anid de2s3anim de2s3aním de2s3anud desa3pañ desa3pacib de2s3apadr de2s3apare de2s3aparec de2s3aparic de2s3apeg de2s3apercib de2s3apes de2s3aplic de2s3apolill de2s3apoy de2s3aprend de2s3apret de2s3apriet de2s3aprob de2s3apropi de2s3aprovech de2s3arbol de2s3aren de2s3arm des4arme de2s3arraig de2s3arregl de2s3arrend de2s3arrim desa3rroll de2s3arrop de2s3arrug de2s3articul de2s3asent de2s3asist de2s3asn de2s3atenc de2s3atend de2s3atiend de2s3atent desa3tin de2s3atorn de2s3atranc de2s3autor de2s3avis desa3yun desa3zón desa3zon de2s3embal de2s3embál de2s3embar de2s3embár de2s3embarg de2s3embols de2s3emborr de2s3embosc de2s3embot de2s3embrag de2s3embrág de2s3embrave de2s3embráve de2s3embroll de2s3embróll de2s3embruj de2s3embrúj de3semej de2s3empañ de2s3empáñ de2s3empac de2s3empaquet de2s3empaquét de2s3emparej de2s3emparéj de2s3emparent de2s3empat de2s3empé de2s3empedr de2s3empeg de2s3empeor de2s3emperez de2s3empern de2s3emple de2s3empolv de2s3empotr de2s3empoz de2s3enam de2s3encab de2s3encad de2s3encaj de2s3encáj de2s3encall de2s3encáll de2s3encam de3sencant de2s3encap de2s3encar de2s3encár de2s3ench de2s3encl de2s3enco de2s3encr de2s3encu de2s3end de3senfad de3senfád de2s3enfi de2s3enfo de2s3enfó de3senfren de2s3enfund de2s3enfur de3sengañ de3sengáñ de2s3enganch de2s3engar de2s3engas de2s3engom de2s3engoz de2s3engra de2s3enhebr de2s3enj de2s3enlad de2s3enlaz de2s3enlo de2s3enm de2s3enr de2s3ens de2s3enta de3sentend de3sentien de3sentién de2s3enter de2s3entier de2s3entiér de2s3ento de2s3entr de2s3entu de2s3envain de3senvolvim de3seo de2s3eq de3s4erci de3s4ert de3s4ért de2s3espa de3sesperac de2s3esperanz de2s3estabil de2s3estim de3sider de3sidia de3sidio de3siert de3sign de3sigual de3silusi de2s3imagin de2s3iman de2s3impon de2s3impres de2s3incent de2s3inclin de2s3incorp de2s3incrust de3sinenc de3sinfec de3su3dar de3su3das de3su3dan de2s3inflam de2s3infl de2s3inform de2s3inhib de2s3insect de2s3instal ini3ci iní3ci de3s4integr de3s4inter de2s3intox de2s3inver de3sisten de3isti de2s3obedec de2s3oblig de2s3obstr de3socup de2s3odor de3solac de3solad de3soll de2s3orej de2s3orient de3sortij de2s3organi de3suell de3sonce de2s3ovi de2s3oxi de2s3oye de2s3oyé de3s4ubstan de3s4ustan de3s4oseg de2s3ub4ic de2s3unir de2s3unier de2s3unim .diecio2 ecano1h ecano1a2 ecano1e2 ecano1i2 ecano1o2 ecano1u2 ecano1á2 ecano1é2 ecano1í2 ecano1ó2 ecano1ú2 eco1h eco1a2 eco1e2 eco1i2 eco1o2 eco1u2 eco1á2 eco1é2 eco1í2 eco1ó2 eco1ú2 ectro1h ectro1a2 ectro1e2 ectro1i2 ectro1o2 ectro1u2 ectro1á2 ectro1é2 ectro1í2 ectro1ó2 ectro1ú2 .e2n2a2 .e2n2e2 .e2n2i2 .e2n2o2 .e2n2u2 .e2n2á2 .e2n2é2 .e2n2í2 .e2n2ó2 .e2n2ú2 .ene3mist .ene3míst .eno3jar .enu3mera .enu3merá .enu3mere .en3aceit .en3arb 4emboca 4o3lógico. 4o3lógica. 4o3lógicos. 4o3lógicas. 4o3lógicamente. 4o3logía. 4o3logías. 4ó3logo. 4ó3loga. 4ó3logos. 4ó3logas. endo1h endo1a2 endo1e2 endo1i2 endo1o2 endo1u2 endo1á2 endo1é2 endo1í2 endo1ó2 endo1ú2 ento1h ento1a2 ento1e2 ento1i2 ento1o2 ento1u2 ento1á2 ento1é2 ento1í2 ento1ó2 ento1ú2 entre1h entre1a2 entre1e2 entre1i2 entre1o2 entre1u2 entre1á2 entre1é2 entre1í2 entre1ó2 entre1ú2 euco1h euco1a2 euco1e2 euco1i2 euco1o2 euco1u2 euco1á2 euco1é2 euco1í2 euco1ó2 euco1ú2 euro1h euro1a2 euro1e2 euro1i2 euro1o2 euro1u2 euro1á2 euro1é2 euro1í2 euro1ó2 euro1ú2 .e2x2a2 .e2x2e2 .e2x2i2 .e2x2o2 .e2x2u2 .e2x2á2 .e2x2é2 .e2x2í2 .e2x2ó2 .e2x2ú2 3gono. 3gonos. 3gonal. 3gonales. exá3men exá3ri exé3ge exó3ti exa3cerb exa3ger exa3min exe3cr exe3géti exe3quia exi3ja exi3já exí3ja exi3ge exí3ge exi3gi exi3gí exi3jo exí3jo 3gua. 3guas. 3guo. 3guos. exi3lia exi3liá exí3lia exi3lie exi3lié exí3lie exi3lio exi3lió exí3lio exi3ma exi3má exí3ma exi3mi exi3mí exí3mi exi3me exi3mé exí3me exi3mo exi3mó exí3mo exi3tos exi3lar exo3ner exo3crin exo3tér exo3tic exo3tiq exo3tism exo3gami exo3gámi exu3ber exu3dar exu3dat exu3dac extra1h extra1a2 extra1e2 extra1i2 extra1o2 extra1u2 extra1á2 extra1é2 extra1í2 extra1ó2 extra1ú2 u4teri .cau5t .deu5t fono1h fono1a2 fono1e2 fono1i2 fono1o2 fono1u2 fono1á2 fono1é2 fono1í2 fono1ó2 fono1ú2 foto1h foto1a2 foto1e2 foto1i2 foto1o2 foto1u2 foto1á2 foto1é2 foto1í2 foto1ó2 foto1ú2 gastro1h gastro1a2 gastro1e2 gastro1i2 gastro1o2 gastro1u2 gastro1á2 gastro1é2 gastro1í2 gastro1ó2 gastro1ú2 geo1h geo1a2 geo1e2 geo1i2 geo1o2 geo1u2 geo1á2 geo1é2 geo1í2 geo1ó2 geo1ú2 giga1h giga1a2 giga1e2 giga1i2 giga1o2 giga1u2 giga1á2 giga1é2 giga1í2 giga1ó2 giga1ú2 gluco1h gluco1a2 gluco1e2 gluco1i2 gluco1o2 gluco1u2 gluco1á2 gluco1é2 gluco1í2 gluco1ó2 gluco1ú2 hecto1h hecto1a2 hecto1e2 hecto1i2 hecto1o2 hecto1u2 hecto1á2 hecto1é2 hecto1í2 hecto1ó2 hecto1ú2 helio1h helio1a2 helio1e2 helio1i2 helio1o2 helio1u2 helio1á2 helio1é2 helio1í2 helio1ó2 helio1ú2 hemato1h hemato1a2 hemato1e2 hemato1i2 hemato1o2 hemato1u2 hemato1á2 hemato1é2 hemato1í2 hemato1ó2 hemato1ú2 hemi1h hemi1a2 hemi1e2 hemi1i2 hemi1o2 hemi1u2 hemi1á2 hemi1é2 hemi1í2 hemi1ó2 hemi1ú2 hemo1h hemo1a2 hemo1e2 hemo1i2 hemo1o2 hemo1u2 hemo1á2 hemo1é2 hemo1í2 hemo1ó2 hemo1ú2 2al. 2ales. .hepta1e hexa1h hexa1a2 hexa1e2 hexa1i2 hexa1o2 hexa1u2 hexa1á2 hexa1é2 hexa1í2 hexa1ó2 hexa1ú2 hidro1h hidro1a2 hidro1e2 hidro1i2 hidro1o2 hidro1u2 hidro1á2 hidro1é2 hidro1í2 hidro1ó2 hidro1ú2 hipe2r3r hipe2r1a2 hipe2r1e2 hipe2r1i2 hipe2r1o2 hipe2r1u2 hipe2r1á2 hipe2r1é2 hipe2r1í2 hipe2r1ó2 hipe2r1ú2 pe3r4e3mia hipe3r4i3cíne hipe3r4o3nimi hipe3r4o3ními hipe3r4ó3nimo hipe3r4o3xia hipo1h hipo1a2 hipo1e2 hipo1i2 hipo1o2 hipo1u2 hipo1á2 hipo1é2 hipo1í2 hipo1ó2 hipo1ú2 spano1h spano1a2 spano1e2 spano1i2 spano1o2 spano1u2 spano1á2 spano1é2 spano1í2 spano1ó2 spano1ú2 histo1h histo1a2 histo1e2 histo1i2 histo1o2 histo1u2 histo1á2 histo1é2 histo1í2 histo1ó2 histo1ú2 homo1h homo1a2 homo1e2 homo1i2 homo1o2 homo1u2 homo1á2 homo1é2 homo1í2 homo1ó2 homo1ú2 ibero1h ibero1a2 ibero1e2 ibero1i2 ibero1o2 ibero1u2 ibero1á2 ibero1é2 ibero1í2 ibero1ó2 ibero1ú2 icono1h icono1a2 icono1e2 icono1i2 icono1o2 icono1u2 icono1á2 icono1é2 icono1í2 icono1ó2 icono1ú2 .i2n2a2 .i2n2e2 .i2n2i2 .i2n2o2 .i2n2u2 .i2n2á2 .i2n2é2 .i2n2í2 .i2n2ó2 .i2n2ú2 .in3abord .in3abarc .in3acent .in3aguant .in3adapt .ina3movib .in3analiz .ina3nic .in3anim .iná3nim .in3apel .in3aplic .in3aprens .in3apreci .in3arrug .in3asist .iné3dit .in3efic .in3efici .in3eludi .ine3narr ini3cia iní3cia ini3ciá ini3cie .rei3na re3ini3cia re3iní3cia re3ini3ciá re3ini3cie .ini3cuo .ini3cua .ino3cuo .ino3cua .ino3cula .ino3culá .ino3cule .inú3til .inu3tiliz infra1h infra1a2 infra1e2 infra1i2 infra1o2 infra1u2 infra1á2 infra1é2 infra1í2 infra1ó2 infra1ú2 .inte2r3r .inte2r1a2 .inte2r1e2 .inte2r1i2 .inte2r1o2 .inte2r1u2 .inte2r1á2 .inte2r1é2 .inte2r1í2 .inte2r1ó2 .inte2r1ú2 .in3ter2e3sa .in3ter2e3se .in3ter2e3so .in3ter2e3sá .in3ter2e3sé .in3ter2e3só .de3s4in3ter2e3sa .de3s4in3ter2e3se .de3s4in3ter2e3so .de3s4in3ter2e3sá .de3s4in3ter2e3sé .de3s4in3ter2e3só 4n3te3ri3n 4n4te4r5i4nsu .in3te3r4rog .in3te3r4rupc .in3te3r4rupt .in3te3r4rump inter4és inte3r4esar inte4r4i4n4 inter5ins5t inte5r4regno inte3r4ior4 4i4ano. 4i4ana. 4i4anos. 4i4anas. intra1h intra1a2 intra1e2 intra1i2 intra1o2 intra1u2 intra1á2 intra1é2 intra1í2 intra1ó2 intra1ú2 iso1h iso1a2 iso1e2 iso1i2 iso1o2 iso1u2 iso1á2 iso1é2 iso1í2 iso1ó2 iso1ú2 kilo1h kilo1a2 kilo1e2 kilo1i2 kilo1o2 kilo1u2 kilo1á2 kilo1é2 kilo1í2 kilo1ó2 kilo1ú2 macro1h macro1a2 macro1e2 macro1i2 macro1o2 macro1u2 macro1á2 macro1é2 macro1í2 macro1ó2 macro1ú2 mal2 ma4l3h .ma4l3e4du mal3b mal3c mal3d mal3f mal3g mal3m mal3p mal3q mal3s mal3t mal3v .mal1acon .mal1acos .mala1e .mal1andant .mal1andanz .mal1est .mal1int maxi1h maxi1a2 maxi1e2 maxi1i2 maxi1o2 maxi1u2 maxi1á2 maxi1é2 maxi1í2 maxi1ó2 maxi1ú2 megalo1h megalo1a2 megalo1e2 megalo1i2 megalo1o2 megalo1u2 megalo1á2 megalo1é2 megalo1í2 megalo1ó2 megalo1ú2 mega1h mega1a2 mega1e2 mega1i2 mega1o2 mega1u2 mega1á2 mega1é2 mega1í2 mega1ó2 mega1ú2 melano1h melano1a2 melano1e2 melano1i2 melano1o2 melano1u2 melano1á2 melano1é2 melano1í2 melano1ó2 melano1ú2 micro1h micro1a2 micro1e2 micro1i2 micro1o2 micro1u2 micro1á2 micro1é2 micro1í2 micro1ó2 micro1ú2 .mili1h .mili1a2 .mili1e2 .mili1i2 .mili1o2 .mili1u2 .mili1á2 .mili1é2 .mili1í2 .mili1ó2 .mili1ú2 familia3ri ia5res. amili6a a3rio a3ria li5área mili4ar mini1h mini1a2 mini1e2 mini1i2 mini1o2 mini1u2 mini1á2 mini1é2 mini1í2 mini1ó2 mini1ú2 2os. 2o3so. 2o3sos. 2o3sa. 2o3sas. 2o3samente. mini4a5tur multi1h multi1a2 multi1e2 multi1i2 multi1o2 multi1u2 multi1á2 multi1é2 multi1í2 multi1ó2 multi1ú2 miria1h miria1a2 miria1e2 miria1i2 miria1o2 miria1u2 miria1á2 miria1é2 miria1í2 miria1ó2 miria1ú2 mono1h mono1a2 mono1e2 mono1i2 mono1o2 mono1u2 mono1á2 mono1é2 mono1í2 mono1ó2 mono1ú2 2i3co. 2i3cos. 2i3ca. 2i3cas. namo1h namo1a2 namo1e2 namo1i2 namo1o2 namo1u2 namo1á2 namo1é2 namo1í2 namo1ó2 namo1ú2 necro1h necro1a2 necro1e2 necro1i2 necro1o2 necro1u2 necro1á2 necro1é2 necro1í2 necro1ó2 necro1ú2 neo1h neo1a2 neo1e2 neo1i2 neo1o2 neo1u2 neo1á2 neo1é2 neo1í2 neo1ó2 neo1ú2 3c2neor neto1h neto1a2 neto1e2 neto1i2 neto1o2 neto1u2 neto1á2 neto1é2 neto1í2 neto1ó2 neto1ú2 norte1h norte1a2 norte1e2 norte1i2 norte1o2 norte1u2 norte1á2 norte1é2 norte1í2 norte1ó2 norte1ú2 octo1h octo1a2 octo1e2 octo1i2 octo1o2 octo1u2 octo1á2 octo1é2 octo1í2 octo1ó2 octo1ú2 octa1h octa1a2 octa1e2 octa1i2 octa1o2 octa1u2 octa1á2 octa1é2 octa1í2 octa1ó2 octa1ú2 oligo1h oligo1a2 oligo1e2 oligo1i2 oligo1o2 oligo1u2 oligo1á2 oligo1é2 oligo1í2 oligo1ó2 oligo1ú2 omni1h omni1a2 omni1e2 omni1i2 omni1o2 omni1u2 omni1á2 omni1é2 omni1í2 omni1ó2 omni1ú2 i2o. i2os. paleo1h paleo1a2 paleo1e2 paleo1i2 paleo1o2 paleo1u2 paleo1á2 paleo1é2 paleo1í2 paleo1ó2 paleo1ú2 .pa4n1a4meri .pa4n1europ .pa4n1afri .pa4n1hisp .pa4n1ópti para1h para1a2 para1e2 para1i2 para1o2 para1u2 para1á2 para1é2 para1í2 para1ó2 para1ú2 para2is. aí5so. aí5sos. para4íso para4ulata penta1h penta1a2 penta1e2 penta1i2 penta1o2 penta1u2 penta1á2 penta1é2 penta1í2 penta1ó2 penta1ú2 piezo1h piezo1a2 piezo1e2 piezo1i2 piezo1o2 piezo1u2 piezo1á2 piezo1é2 piezo1í2 piezo1ó2 piezo1ú2 pluri1h pluri1a2 pluri1e2 pluri1i2 pluri1o2 pluri1u2 pluri1á2 pluri1é2 pluri1í2 pluri1ó2 pluri1ú2 poli1h poli1a2 poli1e2 poli1i2 poli1o2 poli1u2 poli1á2 poli1é2 poli1í2 poli1ó2 poli1ú2 poli4u3r poli4o5mie poli4arq poli4árq poli4éste poli4andr poli4antea poli4arca expoli4 .pos2t2a2 .pos2t2e2 .pos2t2i2 .pos2t2o2 .pos2t2u2 .pos2t2á2 .pos2t2é2 .pos2t2í2 .pos2t2ó2 .pos2t2ú2 .pos3tin .pos3tín pos3ta. pos3tas. s3te. s3tes. s3tal. s3ta3les. s3ti3lla. s3ti3llas. s3ti3llón. s3ti3llones. s3tor. s3tora. s3toras. s3tores. .pos3tó3ni .pos3terg .pos3te3ri .pos3ti3go .pos3ti3la .pos3ti3ne .pos3ti3za .pos3ti3zo .pos3tu3ra .pos3tu3la .pos3tu3lá .pos3tu3le .pos3tu3lé .post3elec .post3impr .post3ind .post3ope .pos2t3rev .pos2t3rom .pre2a2 .pre2e2 .pre2i2 .pre2o2 .pre2u2 .pre2á2 .pre2é2 .pre2í2 .pre2ó2 .pre2ú2 .pre1h2 pre3elij pre3elig pre3exis pre3emin preo3cup preo2cúp pre3olí pre3opin .pro2a2 .pro2e2 .pro2i2 .pro2o2 .pro2u2 .pro2á2 .pro2é2 .pro2í2 .pro2ó2 .pro2ú2 .pro3abort proto1h proto1a2 proto1e2 proto1i2 proto1o2 proto1u2 proto1á2 proto1é2 proto1í2 proto1ó2 proto1ú2 psico1h psico1a2 psico1e2 psico1i2 psico1o2 psico1u2 psico1á2 psico1é2 psico1í2 psico1ó2 psico1ú2 3p2sic 3p2siq quete1h quete1a2 quete1e2 quete1i2 quete1o2 quete1u2 quete1á2 quete1é2 quete1í2 quete1ó2 quete1ú2 radio1h radio1a2 radio1e2 radio1i2 radio1o2 radio1u2 radio1á2 radio1é2 radio1í2 radio1ó2 radio1ú2 ranco1h ranco1a2 ranco1e2 ranco1i2 ranco1o2 ranco1u2 ranco1á2 ranco1é2 ranco1í2 ranco1ó2 ranco1ú2 .re2a2 .re3e4 .re2i2 .re2o2 .re2u2 .re2á2 .re2é2 .re2í2 .re2ó2 .re2ú2 ea3cio. ea3cios. ea3cia. ea3cias. .re3abr .re3ábr .re3afirm .re3afírm .re3ajust .rea3júst .rea3liza .rea3lizá .rea3líza .re3alim .rea3lism .rea3list .re3anim .re3aním .re3aparec .re3ubica .re3ubíca .reu3mati .reu3máti .re3unir .re3unír .re3usar .re3usár .re3utiliz .re3utilíz .re3a2eg .re3a2q .re3a2z .re3a2grup .re3i2m .re3inc .re3ing .re3ins .re3int .re3o2b .re3oc .re3oj .re3orga .re3unt rmano1h rmano1a2 rmano1e2 rmano1i2 rmano1o2 rmano1u2 rmano1á2 rmano1é2 rmano1í2 rmano1ó2 rmano1ú2 retro1h retro1a2 retro1e2 retro1i2 retro1o2 retro1u2 retro1á2 retro1é2 retro1í2 retro1ó2 retro1ú2 romo1h romo1a2 romo1e2 romo1i2 romo1o2 romo1u2 romo1á2 romo1é2 romo1í2 romo1ó2 romo1ú2 semi1h semi1a2 semi1e2 semi1i2 semi1o2 semi1u2 semi1á2 semi1é2 semi1í2 semi1ó2 semi1ú2 i2a. i2as. 2ótic emi2o2 2seudo1h 2seudo1a2 2seudo1e2 2seudo1i2 2seudo1o2 2seudo1u2 2seudo1á2 2seudo1é2 2seudo1í2 2seudo1ó2 2seudo1ú2 o2os. .so3a4s sobre1h sobre1a2 sobre1e2 sobre1i2 sobre1o2 sobre1u2 sobre1á2 sobre1é2 sobre1í2 sobre1ó2 sobre1ú2 socio1h socio1a2 socio1e2 socio1i2 socio1o2 socio1u2 socio1á2 socio1é2 socio1í2 socio1ó2 socio1ú2 a3rio. a3rios. 3logía 4ón. 4ones. 4i4er. 4o2ico. 4o2icos. 4o2ica. 4o2icas. .su2b2a2 .su2b2e2 .su2b2i2 .su2b2o2 .su2b2u2 .su2b2á2 .su2b2é2 .su2b2í2 .su2b2ó2 .su2b2ú2 .sub2i3ll .sub2i3mien .sub3índ .sub3ími .su4b3ray .sub3aflue .sub3arr .sub3enten .sub3estim .sub3estím .sub3ofici .sub3urba .sub3alter .sub3insp .su3bién .su3bir .su3bam .su3bordin .su3bordín .sub3acuá .sub3espe .sub3esta .su3burbi .su4b5rein .su2d1a2fr .su2d1a2me .su2d1este su4d3oes .su2r1a2me .su2r1est .su2r1oes supe2r3r supe2r1a2 supe2r1e2 supe2r1i2 supe2r1o2 supe2r1u2 supe2r1á2 supe2r1é2 supe2r1í2 supe2r1ó2 supe2r1ú2 ra5ra ra5rá ra5re ra5ré ra5rí ra5ro supe3r4a4r supe3r4á4r supe3r4á3vit. supe3r4á3vits. super4ior 4a3ción. 4a3ciones. 4e3rior. 4e3riores. 4e3riora. 4e3rioras. 4e3riormente. 4e3rioridad. 4e3rioridades. 4e3r4a3ble. 4e3r4a3bles. 4e3r4a3blemente. pe5r4ante perpon5d6r supra1h supra1a2 supra1e2 supra1i2 supra1o2 supra1u2 supra1á2 supra1é2 supra1í2 supra1ó2 supra1ú2 sup6ra talmo1h talmo1a2 talmo1e2 talmo1i2 talmo1o2 talmo1u2 talmo1á2 talmo1é2 talmo1í2 talmo1ó2 talmo1ú2 tele1h tele1a2 tele1e2 tele1i2 tele1o2 tele1u2 tele1á2 tele1é2 tele1í2 tele1ó2 tele1ú2 4ósteo. 4ósteos. .tele1imp .tele1obj .tele4o3lót termo1h termo1a2 termo1e2 termo1i2 termo1o2 termo1u2 termo1á2 termo1é2 termo1í2 termo1ó2 termo1ú2 tetra1h tetra1a2 tetra1e2 tetra1i2 tetra1o2 tetra1u2 tetra1á2 tetra1é2 tetra1í2 tetra1ó2 tetra1ú2 topo1h topo1a2 topo1e2 topo1i2 topo1o2 topo1u2 topo1á2 topo1é2 topo1í2 topo1ó2 topo1ú2 .tra2sa2 .tra2se2 .tra2si2 .tra2so2 .tra2su2 .tra2sá2 .tra2sé2 .tra2sí2 .tra2só2 .tra2sú2 .tra3s2o3ñ tran2sa2 tran2se2 tran2si2 tran2so2 tran2su2 tran2sá2 tran2sé2 tran2sí2 tran2só2 tran2sú2 tran2s1alp tran2s1and tran2s1atl tran2s1oce tran2s1ur tran3sacci tran3seún tran3se3xu tran3si3cion tran3si3ción tran3si3gi tran3si3gí tran3si3ge tran3si3ja tran3si3já tran3si3jo tran3sisto tran3si3ta tran3si3tá tran3si3te tran3si3té tran3si3to tran3si3tó tran3si3tiv tran3si3tori tran3subst tran3sust .tri1ó2x tropo1h tropo1a2 tropo1e2 tropo1i2 tropo1o2 tropo1u2 tropo1á2 tropo1é2 tropo1í2 tropo1ó2 tropo1ú2 ultra1h ultra1a2 ultra1e2 ultra1i2 ultra1o2 ultra1u2 ultra1á2 ultra1é2 ultra1í2 ultra1ó2 ultra1ú2 vice1h vice1a2 vice1e2 vice1i2 vice1o2 vice1u2 vice1á2 vice1é2 vice1í2 vice1ó2 vice1ú2 video1h video1a2 video1e2 video1i2 video1o2 video1u2 video1á2 video1é2 video1í2 video1ó2 video1ú2 xeno1h xeno1a2 xeno1e2 xeno1i2 xeno1o2 xeno1u2 xeno1á2 xeno1é2 xeno1í2 xeno1ó2 xeno1ú2 zoo1h zoo1a2 zoo1e2 zoo1i2 zoo1o2 zoo1u2 zoo1á2 zoo1é2 zoo1í2 zoo1ó2 zoo1ú2 wa3s4h 3hablante 3habiente 3aficionad", + ["data"]="1b 4b. .b2 2bb 2bc 2bd 2bf 2bg 2bh 2bj 2bk 2bm 2bn 2bp 2bq 2bs 2bt 2bv 2bw 2bx 2by 2bz 1c 4c. .c2 2cb 2cc 2cd 2cf 2cg 2cj 2ck 2cm 2cn 2cp 2cq 2cs 2ct 2cv 2cw 2cx 2cy 2cz 1d 4d. .d2 2db 2dc 2dd 2df 2dg 2dh 2dj 2dk 2dl 2dm 2dn 2dp 2dq 2ds 2dt 2dv 2dw 2dx 2dy 2dz 1f 4f. .f2 2fb 2fc 2fd 2ff 2fg 2fh 2fj 2fk 2fm 2fn 2fp 2fq 2fs 2ft 2fv 2fw 2fx 2fy 2fz 1g 4g. .g2 2gb 2gc 2gd 2gf 2gg 2gh 2gj 2gk 2gm 2gn 2gp 2gq 2gs 2gt 2gv 2gw 2gx 2gy 2gz 4h. 2hb 2hc 2hd 2hf 2hg 2hh 2hj 2hk 2hl 2hm 2hn 2hp 2hq 2hr 2hs 2ht 2hv 2hw 2hx 2hy 2hz 1j 4j. .j2 2jb 2jc 2jd 2jf 2jg 2jh 2jj 2jk 2jl 2jm 2jn 2jp 2jq 2jr 2js 2jt 2jv 2jw 2jx 2jy 2jz 1k 4k. .k2 2kb 2kc 2kd 2kf 2kg 2kh 2kj 2kk 2km 2kn 2kp 2kq 2ks 2kt 2kv 2kw 2kx 2ky 2kz 1l 4l. .l2 2lb 2lc 2ld 2lf 2lg 2lh 2lj 2lk 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2lv 2lw 2lx 2ly 2lz 1m 4m. .m2 2mb 2mc 2md 2mf 2mg 2mh 2mj 2mk 2ml 2mm 2mn 2mp 2mq 2mr 2ms 2mt 2mv 2mw 2mx 2my 2mz 1n 4n. .n2 2nb 2nc 2nd 2nf 2ng 2nh 2nj 2nk 2nl 2nm 2nn 2np 2nq 2nr 2ns 2nt 2nv 2nw 2nx 2ny 2nz 1p 4p. .p2 2pb 2pc 2pd 2pf 2pg 2ph 2pj 2pk 2pm 2pn 2pp 2pq 2ps 2pt 2pv 2pw 2px 2py 2pz 1q 4q. .q2 2qb 2qc 2qd 2qf 2qg 2qh 2qj 2qk 2ql 2qm 2qn 2qp 2qq 2qr 2qs 2qt 2qv 2qw 2qx 2qy 2qz 1r 4r. .r2 2rb 2rc 2rd 2rf 2rg 2rh 2rj 2rk 2rl 2rm 2rn 2rp 2rq 2rs 2rt 2rv 2rw 2rx 2ry 2rz 1s 4s. .s2 2sb 2sc 2sd 2sf 2sg 2sh 2sj 2sk 2sl 2sm 2sn 2sp 2sq 2sr 2ss 2st 2sv 2sw 2sx 2sy 2sz 1t 4t. .t2 2tb 2tc 2td 2tf 2tg 2th 2tj 2tk 2tm 2tn 2tp 2tq 2tt 2tv 2tw 2ty 1v 4v. .v2 2vb 2vc 2vd 2vf 2vg 2vh 2vj 2vk 2vm 2vn 2vp 2vq 2vs 2vt 2vv 2vw 2vx 2vy 2vz 1w 4w. .w2 2wb 2wc 2wd 2wf 2wg 2wh 2wj 2wk 2wl 2wm 2wn 2wp 2wq 2wr 2ws 2wt 2wv 2ww 2wx 2wy 2wz 1x 4x. .x2 2xb 2xc 2xd 2xf 2xg 2xh 2xj 2xk 2xl 2xm 2xn 2xp 2xq 2xr 2xs 2xt 2xv 2xw 2xx 2xy 2xz 1y 4y. .y2 2yb 2yc 2yd 2yf 2yg 2yh 2yj 2yk 2yl 2ym 2yn 2yp 2yq 2yr 2ys 2yt 2yv 2yw 2yx 2yy 2yz 1z 4z. .z2 2zb 2zc 2zd 2zf 2zg 2zh 2zj 2zk 2zl 2zm 2zn 2zp 2zq 2zr 2zs 2zt 2zv 2zw 2zx 2zy 2zz 1ñ 4ñ. c4h 4ch. 2chb 2chc 2chd 2chf 2chg 2chh 2chj 2chk ch2l 2chm 2chn 2chp 2chq ch2r 2chs 2cht 2chv 2chw 2chx 2chy 2chz l4l 4ll. 2llb 2llc 2lld 2llf 2llg 2llh 2llj 2llk 2lll 2llm 2lln 2llp 2llq 2llr 2lls 2llt 2llv 2llw 2llx 2lly 2llz b2l 4bl. 2bl2b 2bl2c 2bl2d 2bl2f 2bl2g 2bl2h 2bl2j 2bl2k 2bl2l 2bl2m 2bl2n 2bl2p 2bl2q 2bl2r 2bl2s 2bl2t 2bl2v 2bl2w 2bl2x 2bl2y 2bl2z c2l 4cl. 2cl2b 2cl2c 2cl2d 2cl2f 2cl2g 2cl2h 2cl2j 2cl2k 2cl2l 2cl2m 2cl2n 2cl2p 2cl2q 2cl2r 2cl2s 2cl2t 2cl2v 2cl2w 2cl2x 2cl2y 2cl2z f2l 4fl. 2fl2b 2fl2c 2fl2d 2fl2f 2fl2g 2fl2h 2fl2j 2fl2k 2fl2l 2fl2m 2fl2n 2fl2p 2fl2q 2fl2r 2fl2s 2fl2t 2fl2v 2fl2w 2fl2x 2fl2y 2fl2z g2l 4gl. 2gl2b 2gl2c 2gl2d 2gl2f 2gl2g 2gl2h 2gl2j 2gl2k 2gl2l 2gl2m 2gl2n 2gl2p 2gl2q 2gl2r 2gl2s 2gl2t 2gl2v 2gl2w 2gl2x 2gl2y 2gl2z k2l 4kl. 2kl2b 2kl2c 2kl2d 2kl2f 2kl2g 2kl2h 2kl2j 2kl2k 2kl2l 2kl2m 2kl2n 2kl2p 2kl2q 2kl2r 2kl2s 2kl2t 2kl2v 2kl2w 2kl2x 2kl2y 2kl2z p2l 4pl. 2pl2b 2pl2c 2pl2d 2pl2f 2pl2g 2pl2h 2pl2j 2pl2k 2pl2l 2pl2m 2pl2n 2pl2p 2pl2q 2pl2r 2pl2s 2pl2t 2pl2v 2pl2w 2pl2x 2pl2y 2pl2z v2l 4vl. 2vl2b 2vl2c 2vl2d 2vl2f 2vl2g 2vl2h 2vl2j 2vl2k 2vl2l 2vl2m 2vl2n 2vl2p 2vl2q 2vl2r 2vl2s 2vl2t 2vl2v 2vl2w 2vl2x 2vl2y 2vl2z b2r 4br. 2br2b 2br2c 2br2d 2br2f 2br2g 2br2h 2br2j 2br2k 2br2l 2br2m 2br2n 2br2p 2br2q 2br2r 2br2s 2br2t 2br2v 2br2w 2br2x 2br2y 2br2z c2r 4cr. 2cr2b 2cr2c 2cr2d 2cr2f 2cr2g 2cr2h 2cr2j 2cr2k 2cr2l 2cr2m 2cr2n 2cr2p 2cr2q 2cr2r 2cr2s 2cr2t 2cr2v 2cr2w 2cr2x 2cr2y 2cr2z d2r 4dr. 2dr2b 2dr2c 2dr2d 2dr2f 2dr2g 2dr2h 2dr2j 2dr2k 2dr2l 2dr2m 2dr2n 2dr2p 2dr2q 2dr2r 2dr2s 2dr2t 2dr2v 2dr2w 2dr2x 2dr2y 2dr2z f2r 4fr. 2fr2b 2fr2c 2fr2d 2fr2f 2fr2g 2fr2h 2fr2j 2fr2k 2fr2l 2fr2m 2fr2n 2fr2p 2fr2q 2fr2r 2fr2s 2fr2t 2fr2v 2fr2w 2fr2x 2fr2y 2fr2z g2r 4gr. 2gr2b 2gr2c 2gr2d 2gr2f 2gr2g 2gr2h 2gr2j 2gr2k 2gr2l 2gr2m 2gr2n 2gr2p 2gr2q 2gr2r 2gr2s 2gr2t 2gr2v 2gr2w 2gr2x 2gr2y 2gr2z k2r 4kr. 2kr2b 2kr2c 2kr2d 2kr2f 2kr2g 2kr2h 2kr2j 2kr2k 2kr2l 2kr2m 2kr2n 2kr2p 2kr2q 2kr2r 2kr2s 2kr2t 2kr2v 2kr2w 2kr2x 2kr2y 2kr2z p2r 4pr. 2pr2b 2pr2c 2pr2d 2pr2f 2pr2g 2pr2h 2pr2j 2pr2k 2pr2l 2pr2m 2pr2n 2pr2p 2pr2q 2pr2r 2pr2s 2pr2t 2pr2v 2pr2w 2pr2x 2pr2y 2pr2z r2r 4rr. 2rr2b 2rr2c 2rr2d 2rr2f 2rr2g 2rr2h 2rr2j 2rr2k 2rr2l 2rr2m 2rr2n 2rr2p 2rr2q 2rr2r 2rr2s 2rr2t 2rr2v 2rr2w 2rr2x 2rr2y 2rr2z t2r 4tr. 2tr2b 2tr2c 2tr2d 2tr2f 2tr2g 2tr2h 2tr2j 2tr2k 2tr2l 2tr2m 2tr2n 2tr2p 2tr2q 2tr2r 2tr2s 2tr2t 2tr2v 2tr2w 2tr2x 2tr2y 2tr2z v2r 4vr. 2vr2b 2vr2c 2vr2d 2vr2f 2vr2g 2vr2h 2vr2j 2vr2k 2vr2l 2vr2m 2vr2n 2vr2p 2vr2q 2vr2r 2vr2s 2vr2t 2vr2v 2vr2w 2vr2x 2vr2y 2vr2z 2b3p2t 2c3p2t 2d3p2t 2l3p2t 2m3p2t 2n3p2t 2r3p2t 2s3p2t 2t3p2t 2x3p2t 2y3p2t 4pt. 2b3c2t 2c3c2t 2d3c2t 2l3c2t 2m3c2t 2n3c2t 2r3c2t 2s3c2t 2t3c2t 2x3c2t 2y3c2t 4ct. 2b3c2n 2c3c2n 2d3c2n 2l3c2n 2m3c2n 2n3c2n 2r3c2n 2s3c2n 2t3c2n 2x3c2n 2y3c2n 4cn. 2b3p2s 2c3p2s 2d3p2s 2l3p2s 2m3p2s 2n3p2s 2r3p2s 2s3p2s 2t3p2s 2x3p2s 2y3p2s 4ps. 2b3m2n 2c3m2n 2d3m2n 2l3m2n 2m3m2n 2n3m2n 2r3m2n 2s3m2n 2t3m2n 2x3m2n 2y3m2n 4mn. 2b3g2n 2c3g2n 2d3g2n 2l3g2n 2m3g2n 2n3g2n 2r3g2n 2s3g2n 2t3g2n 2x3g2n 2y3g2n 4gn. 2b3f2t 2c3f2t 2d3f2t 2l3f2t 2m3f2t 2n3f2t 2r3f2t 2s3f2t 2t3f2t 2x3f2t 2y3f2t 4ft. 2b3p2n 2c3p2n 2d3p2n 2l3p2n 2m3p2n 2n3p2n 2r3p2n 2s3p2n 2t3p2n 2x3p2n 2y3p2n 4pn. 2b3c2z 2c3c2z 2d3c2z 2l3c2z 2m3c2z 2n3c2z 2r3c2z 2s3c2z 2t3c2z 2x3c2z 2y3c2z 4cz. 2b3t2z 2c3t2z 2d3t2z 2l3t2z 2m3t2z 2n3t2z 2r3t2z 2s3t2z 2t3t2z 2x3t2z 2y3t2z 4tz. 2b3t2s 2c3t2s 2d3t2s 2l3t2s 2m3t2s 2n3t2s 2r3t2s 2s3t2s 2t3t2s 2x3t2s 2y3t2s 4ts. san4c5t plan4c5t com4p3t prom4p3t o1eu2 a1ae2 a1aó2 eo1á2 eo1e2 o1ae2 o1eó2 2no. 2t2l 2t2s 2t2x 2t2z tz3s4ch 4caca4 4cago4 4caga4 4cagas. 4teta. 4tetas. 4puta4 4puto4 .hu4mea .hu4meo .he4mee 4meo. 4meable. 4meables. 4pedo4 4culo4 5mente. 4i3go. 4es. 4és 4e. 4e3mos. 4éis. 4en. 4ía. 4ías. 4ía3mos. 4íais. 4ían. 4í. 4í4s3te. 4í4s3tes. 4í3tes. 4í3mos. 4ís3teis. 4e3ré. 4e3rás. 4e3rés. 4e3rís. 4e3rá. 4e3re3mos. 4e3réis. 4e3rán. 4i3ga. 4i3gas. 4i3gás. 4i3gamos. 4i3gáis. 4a4i3gan. 4e3ría. 4e3rías. 4e3ríamos. 4e3ríais. 4e3rían. 4i3gá3mosme. 4i3gá3mosmele. 4i3gá3mosmelo. 4i3gá3mos3mela. 4i3gá3mosmeles. 4i3gá3mosmelos. 4i3gá3mos3melas. 4i3gá3moste. 4i3gá3mostele. 4i3gá3mostelo. 4i3gá3mos3tela. 4i3gá3mosteles. 4i3gá3mostelos. 4i3gá3mos3telas. 4i3gá3mosle. 4i3gá3mosla. 4i3gá3moslo. 4i3gá3mosele. 4i3gá3moselo. 4i3gá3mosela. 4i3gá3moseles. 4i3gá3moselos. 4i3gá3moselas. 4i3gá3monos. 4i3gá3monosle. 4i3gá3monoslo. 4i3gá3monosla. 4i3gá3monosles. 4i3gá3monoslos. 4i3gá3monoslas. 4i3gá3moos. 4i3gá3moosle. 4i3gá3mooslo. 4i3gá3moosla. 4i3gá3moosles. 4i3gá3mooslos. 4i3gá3mooslas. 4i3gá3mosles. 4i3gá3moslas. 4i3gá3moslos. 4ed. 4é. 4edme. 4édmele. 4édmelo. 4éd3mela. 4édmeles. 4édmelos. 4éd3melas. 4edte. 4édtele. 4édtelo. 4éd3tela. 4édteles. 4édtelos. 4éd3telas. 4edle. 4eedla. 4edlo. 4édsele. 4édselo. 4édsela. 4édseles. 4édselos. 4édselas. 4ednos. 4édnosle. 4édnoslo. 4édnosla. 4édnosles. 4édnoslos. 4édnoslas. 4eos. 4éosle. 4éoslo. 4éosla. 4éosles. 4éoslos. 4éoslas. 4edles. 4edlas. 4edlos. 4er. 4erme. 4érmele. 4érmelo. 4ér3mela. 4érmeles. 4érmelos. 4ér3melas. 4erte. 4értele. 4értelo. 4ér3tela. 4érteles. 4értelos. 4ér3telas. 4erle. 4erla. 4erlo. 4erse. 4érsele. 4érselo. 4érsela. 4érseles. 4érselos. 4érselas. 4ernos. 4érnosle. 4érnoslo. 4érnosla. 4érnosles. 4érnoslos. 4érnoslas. 4e3ros. 4é3rosle. 4é3roslo. 4é3rosla. 4é3rosles. 4é3roslos. 4é3roslas. 4erles. 4erlas. 4erlos. 4í3do. 4í3da. 4í3dos. 4í3das. 4o. 4as. 4a. 4ás. 4a3mos. 4áis. 4an. 4aste. 4astes. 4ó. 4ates. 4asteis. 4a3ron. 4a3ba. 4a3bas. 4á3bamos. 4a3bais. 4a3ban. 4a3ría. 4a3rías. 4a3ríamos. 4a3ríais 4a3rían. 4a3ré. 4a3rás. 4a3rés. 4a3rís. 4a3rá. 4a3remos. 4a3réis. 4a3rán. 4a3ra. 4a3ras. 4á3ramos. 4a3rais. 4a3ran. 4a3re. 4a3res. 4á3remos. 4a3reis. 4a3ren. 4a3se. 4a3ses. 4á3semos. 4a3seis. 4a3sen. 4ad. e5r4as. e5r4a3mos. e5r4áis. e5r4an. e5r4aste. e5r4astes. e5r4ates. e5r4asteis. e5r4a3ron. e5r4a3ba. e5r4a3bas. e5r4á3bamos. e5r4a3bais. e5r4a3ban. e5r4a3ría. e5r4a3rías. e5r4a3ríamos. e5r4a3ríais e5r4a3rían. e5r4a3ré. e5r4a3rás. e5r4a3rés. e5r4a3rís. e5r4a3rá. e5r4a3remos. e5r4a3réis. e5r4a3rán. e5r4a3ra. e5r4a3ras. e5r4á3ramos. e5r4a3rais. e5r4a3ran. e5r4a3re. e5r4a3res. e5r4á3remos. e5r4a3reis. e5r4a3ren. e5r4a3se. e5r4a3ses. e5r4á3semos. e5r4a3seis. e5r4a3sen. e5r4ad. 4adme. 4ádmele. 4ádmelo. 4ád3mela. 4ádmeles. 4ádmelos. 4ád3melas. 4adte. 4ádtele. 4ádtelo. 4ád3tela. 4ádteles. 4ádtelos. 4ád3telas. 4adle. 4eadla. 4adlo. 4ádsele. 4ádselo. 4ádsela. 4ádseles. 4ádselos. 4ádselas. 4adnos. 4ádnosle. 4ádnoslo. 4ádnosla. 4ádnosles. 4ádnoslos. 4ádnoslas. 4aos. 4áosle. 4áoslo. 4áosla. 4áosles. 4áoslos. 4áoslas. 4adles. 4adlas. 4adlos. 4ar. 4a4rme. 4á4rmele. 4á4rmelo. 4á4r3mela. 4á4r3meles. 4á4r3melos. 4á4r3melas. 4a4r3te. 4á4r3tele. 4á4r3telo. 4á4r3tela. 4á4r3teles. 4á4r3telos. 4á4r3telas. 4a4r3le. 4a4r3la. 4a4r3lo. 4a4r3se. 4á4r3sele. 4á4r3selo. 4á4r3sela. 4á4r3seles. 4á4r3selos. 4á4r3selas. 4a4r3nos. 4á4r3nosle. 4á4r3noslo. 4á4r3nosla. 4á4r3nosles. 4á4r3noslos. 4á4r3noslas. 4a3ros. 4árosle. 4ároslo. 4árosla. 4árosles. 4ároslos. 4ároslas. 4a4r3les. 4a4r3las. 4a4r3los. 4a3do. 4a3da. 4a3dos. 4a3das. e5r4a3do. e5r4a3da. e5r4a3dos. e5r4a3das. 4ando 4ándole. 4ándolo. 4ándola. 4ándoles. 4ándolos. 4ándolas. 4ándonos. 4ándoos. 4ándome. 4ándomelo. 4ándomela. 4ándomele. 4ándomelos. 4ándomelas. 4ándomeles. 4ándote. 4ándoteme. 4ándotelo. 4ándotela. 4ándotele. 4ándotelos. 4ándotelas. 4ándoteles. 4ándotenos. 4ándose. 4ándoseme. 4ándoselo. 4ándosela. 4ándosele. 4ándoselos. 4ándoselas. 4ándoseles. 4ándosenos. 4a3dor. 4a3dora. 4a3dores. 4a3doras. e5r4a3dor. e5r4a3dora. e5r4a3dores. e5r4a3doras. .a4 .abre1h .abre1a2 .abre1e2 .abre1i2 .abre1o2 .abre1u2 .abre1á2 .abre1é2 .abre1í2 .abre1ó2 .abre1ú2 .acro1h .acro1a2 .acro1e2 .acro1i2 .acro1o2 .acro1u2 .acro1á2 .acro1é2 .acro1í2 .acro1ó2 .acro1ú2 acto1h acto1a2 acto1e2 acto1i2 acto1o2 acto1u2 acto1á2 acto1é2 acto1í2 acto1ó2 acto1ú2 adeno1h adeno1a2 adeno1e2 adeno1i2 adeno1o2 adeno1u2 adeno1á2 adeno1é2 adeno1í2 adeno1ó2 adeno1ú2 4i3ditis. aero1h aero1a2 aero1e2 aero1i2 aero1o2 aero1u2 aero1á2 aero1é2 aero1í2 aero1ó2 aero1ú2 afro1h afro1a2 afro1e2 afro1i2 afro1o2 afro1u2 afro1á2 afro1é2 afro1í2 afro1ó2 afro1ú2 agro1h agro1a2 agro1e2 agro1i2 agro1o2 agro1u2 agro1á2 agro1é2 agro1í2 agro1ó2 agro1ú2 .an3e2pigr .an3a2lcoh .an3amnio .an3i4so .an3i4só .an3aero andro1h andro1a2 andro1e2 andro1i2 andro1o2 andro1u2 andro1á2 andro1é2 andro1í2 andro1ó2 andro1ú2 anfi1h anfi1a2 anfi1e2 anfi1i2 anfi1o2 anfi1u2 anfi1á2 anfi1é2 anfi1í2 anfi1ó2 anfi1ú2 4o3xo. 4o3xos. anglo1h anglo1a2 anglo1e2 anglo1i2 anglo1o2 anglo1u2 anglo1á2 anglo1é2 anglo1í2 anglo1ó2 anglo1ú2 ante1h ante1a2 ante1e2 ante1i2 ante1o2 ante1u2 ante1á2 ante1é2 ante1í2 ante1ó2 ante1ú2 .ante2o3je acante2 4ísmo. 4ísmos. 4ísta. 4ístas. 4ismo. 4ismos. 4ista. 4istas. 4ístico. 4ísticos. 4ística. 4ísticas. pante4o3n .anteo3nes mante4a e4a3miento e4ándo tras3antea 2huelo. 2huela. 2huelos. 2huelas. .anti1h .anti1a2 .anti1e2 .anti1i2 .anti1o2 .anti1u2 .anti1á2 .anti1é2 .anti1í2 .anti1ó2 .anti1ú2 ti2o3qu ti2o3co apico1h apico1a2 apico1e2 apico1i2 apico1o2 apico1u2 apico1á2 apico1é2 apico1í2 apico1ó2 apico1ú2 archi1h archi1a2 archi1e2 archi1i2 archi1o2 archi1u2 archi1á2 archi1é2 archi1í2 archi1ó2 archi1ú2 .atto1h .atto1a2 .atto1e2 .atto1i2 .atto1o2 .atto1u2 .atto1á2 .atto1é2 .atto1í2 .atto1ó2 .atto1ú2 audio1h audio1a2 audio1e2 audio1i2 audio1o2 audio1u2 audio1á2 audio1é2 audio1í2 audio1ó2 audio1ú2 austro1h austro1a2 austro1e2 austro1i2 austro1o2 austro1u2 austro1á2 austro1é2 austro1í2 austro1ó2 austro1ú2 auto1h auto1a2 auto1e2 auto1i2 auto1o2 auto1u2 auto1á2 auto1é2 auto1í2 auto1ó2 auto1ú2 .bi1anual .bi1aur .bi1ox .bi1ó2x .bi1un bi1u2ní biblio1h biblio1a2 biblio1e2 biblio1i2 biblio1o2 biblio1u2 biblio1á2 biblio1é2 biblio1í2 biblio1ó2 biblio1ú2 bien2 bien3b bien3c bien3d bien3f bien3g bien3h bien3l bien3m bien3p bien3q bien3s bien3t bien3v bien3z .bie4n3and .bie4n3a4pa .bie4n3a4ve .bie4n3est .bie4n3int .bie4n3o4lie b4ien3do. .su3b4ien b4ien3das. bio1h bio1a2 bio1e2 bio1i2 bio1o2 bio1u2 bio1á2 bio1é2 bio1í2 bio1ó2 bio1ú2 busca1h busca1a2 busca1e2 busca1i2 busca1o2 busca1u2 busca1á2 busca1é2 busca1í2 busca1ó2 busca1ú2 cardio1h cardio1a2 cardio1e2 cardio1i2 cardio1o2 cardio1u2 cardio1á2 cardio1é2 cardio1í2 cardio1ó2 cardio1ú2 cefalo1h cefalo1a2 cefalo1e2 cefalo1i2 cefalo1o2 cefalo1u2 cefalo1á2 cefalo1é2 cefalo1í2 cefalo1ó2 cefalo1ú2 centi1h centi1a2 centi1e2 centi1i2 centi1o2 centi1u2 centi1á2 centi1é2 centi1í2 centi1ó2 centi1ú2 cian1h ciano1h ciano1a2 ciano1e2 ciano1i2 ciano1o2 ciano1u2 ciano1á2 ciano1é2 ciano1í2 ciano1ó2 ciano1ú2 cibe2r3r cibe2r1h cibe2r1a2 cibe2r1e2 cibe2r1i2 cibe2r1o2 cibe2r1u2 cibe2r1á2 cibe2r1é2 cibe2r1í2 cibe2r1ó2 cibe2r1ú2 centi5área ciclo1h ciclo1a2 ciclo1e2 ciclo1i2 ciclo1o2 ciclo1u2 ciclo1á2 ciclo1é2 ciclo1í2 ciclo1ó2 ciclo1ú2 cito1h cito1a2 cito1e2 cito1i2 cito1o2 cito1u2 cito1á2 cito1é2 cito1í2 cito1ó2 cito1ú2 clepto1h clepto1a2 clepto1e2 clepto1i2 clepto1o2 clepto1u2 clepto1á2 clepto1é2 clepto1í2 clepto1ó2 clepto1ú2 cnico1h cnico1a2 cnico1e2 cnico1i2 cnico1o2 cnico1u2 cnico1á2 cnico1é2 cnico1í2 cnico1ó2 cnico1ú2 .co1h .co2a2 .co2e2 .co2i2 .co3o4 .co2u2 .co2á2 .co2é2 .co2í2 .co2ó2 .co2ú2 .co3acer .co3acree .coá3gul .co3agen .coa3gul .co3apóst .coa3lesc .coa3lic .co3arrend .coa3xial .co3auto .co3edic .co3edit .co3educ .co3efici .coe3tá .co3exis .co6hib .co4hech .co4hesi .co4heso .co4herent .co4het .co3imput .coi3to .co4o5ki .co4o3per .co4o3pér .co4orden .co4ordin .co4ordín .co4opt .co4ópt .co2nurb cou3lomb corta1h corta1a2 corta1e2 corta1i2 corta1o2 corta1u2 corta1á2 corta1é2 corta1í2 corta1ó2 corta1ú2 cosmo1h cosmo1a2 cosmo1e2 cosmo1i2 cosmo1o2 cosmo1u2 cosmo1á2 cosmo1é2 cosmo1í2 cosmo1ó2 cosmo1ú2 crio1h crio1a2 crio1e2 crio1i2 crio1o2 crio1u2 crio1á2 crio1é2 crio1í2 crio1ó2 crio1ú2 cripto1h cripto1a2 cripto1e2 cripto1i2 cripto1o2 cripto1u2 cripto1á2 cripto1é2 cripto1í2 cripto1ó2 cripto1ú2 crono1h crono1a2 crono1e2 crono1i2 crono1o2 crono1u2 crono1á2 crono1é2 crono1í2 crono1ó2 crono1ú2 contra1h contra1a2 contra1e2 contra1i2 contra1o2 contra1u2 contra1á2 contra1é2 contra1í2 contra1ó2 contra1ú2 cuadru1h cuadru1a2 cuadru1e2 cuadru1i2 cuadru1o2 cuadru1u2 cuadru1á2 cuadru1é2 cuadru1í2 cuadru1ó2 cuadru1ú2 cuasi1h cuasi1a2 cuasi1e2 cuasi1i2 cuasi1o2 cuasi1u2 cuasi1á2 cuasi1é2 cuasi1í2 cuasi1ó2 cuasi1ú2 deca1h deca1a2 deca1e2 deca1i2 deca1o2 deca1u2 deca1á2 deca1é2 deca1í2 deca1ó2 deca1ú2 dento1h dento1a2 dento1e2 dento1i2 dento1o2 dento1u2 dento1á2 dento1é2 dento1í2 dento1ó2 dento1ú2 dermato1h dermato1a2 dermato1e2 dermato1i2 dermato1o2 dermato1u2 dermato1á2 dermato1é2 dermato1í2 dermato1ó2 dermato1ú2 dermo1h dermo1a2 dermo1e2 dermo1i2 dermo1o2 dermo1u2 dermo1á2 dermo1é2 dermo1í2 dermo1ó2 dermo1ú2 .de2s1h .de2s3a2 .de2se2 .de2si2 .de2so2 .de2su2 .de2s3á2 .de2sé2 .de2sí2 .de2só2 .de2sú2 deca2i3mient 3sa. 3sas. de2s3órde de2s3orde de3s4a3brid de3s4a3bor de3s4a3craliz de3s4a3cralic de3s4a3fia de3s4a3fía de3s4a3fiá de3s4a3fíe de3s4a3fié de3s4a3fío de3s4a3fió des5a4gua de3s4ahuci de3s4áhuci de3s4a3guis des4ala des4ála de3s4a3liv de3s4a3liniz de3s4a3liníz de3s4a3linic de3s4a3liníc de3s4angr de3s4angel de3s4a3prensiv de3s4a3rroll desa4sa desa4se des5a4tes de3s4astr de3s4a3yun de3s4a3zón de3s4a3zon .des3em de3s4e3meja de3s4e3méja de3s4e3mejá de3s4e3meje de3s4e3méje de3s4e3mejé de3s4e3mejo de3s4e3méjo de3s4e3mejó de3s4empeñ de3s4empéñ .des3en de3s4enfren de3s4enfrén de3seo de3sea de3sean de3seán de3sear de3seár de3seab de3seáb de3sead de3seád de3seam de3seám de3seas de3seás de3se3co de3se3ca de3se3cá de3se3có de3s4e3que de3s4e3qué de3se3can de3se3cán de3se3car de3se3cár de3se3cab de3se3cáb de3se3cad de3se3cád de3se3cam de3se3cám de3se3cas de3se3cás de3se3cha de3sé3cha de3se3chá de3se3ché de3se3che de3sé3che de3se3chó de3se3cho de2s3edif de2s3educ de2s3eduq de2s3escombr de2s3eq de3s4erci de3s4ert de3s4ért de2s3espa de3sesperac de2s3esperanz de2s3espin de2s3espum de2s3estabil de2s3estaci de2s3estalin de2s3estim de2s3estres de2s3estruc de3sider de3sidia de2s3ideol de3sidio de3siert de3sign de2s3igual de2s3iguál de2s3ilusion de2s3ilusión de2s3imagin de2s3iman de2s3impon de2s3impres de2s3incent de2s3inclin de2s3incorp de2s3incrust de3si3nenc de3si3nent de3sinfec de3su3dar de3su3das de3su3dan de2s3infart de2s3inflam de2s3infl de2s3inform de2s3inhib de2s3insect de2s3instal ini3ci iní3ci de3s4integr de3s4inter de2s3intox de2s3intub de2s3inver de3sisten de3isti de2s3obedec de2s3obedez de2s3obedien de2s3oblig de2s3obstr de3so3cas de2s3ocup de2s3ocúp de2s3odor de3so3la de3só3la de3so3lá de3so3le de3so3lé de3so3lo de3so3ló de3solac de3solad de3soll de2s3oprim de2s3orej de2s3orill de2s3orient de3sortij de2s3organi de2s3ornam de3suell de3sonce de2s3ova de2s3ová de2s3ové de2s3ovi de2s3oxi de2s3oye de2s3oyé de3s4ubstan de3s4ustan de3s4oseg de2s3ub4ic de2s3ub4iq de2s3unir de2s3unan de2s3unas de2s3une de2s3unid de2s3unien de2s3uniera de2s3unies de2s3unién de2s3uniér de2s3uniés de2s3unió de2s3uno de2s3uná de2s3uní de2s3unía de2s3unier de2s3unim de2s3uña de2s3uñá de2s3urbani .diecio2 .diecio3ch ecano1h ecano1a2 ecano1e2 ecano1i2 ecano1o2 ecano1u2 ecano1á2 ecano1é2 ecano1í2 ecano1ó2 ecano1ú2 eco1h eco1a2 eco1e2 eco1i2 eco1o2 eco1u2 eco1á2 eco1é2 eco1í2 eco1ó2 eco1ú2 ecto1h ecto1a2 ecto1e2 ecto1i2 ecto1o2 ecto1u2 ecto1á2 ecto1é2 ecto1í2 ecto1ó2 ecto1ú2 ectro1h ectro1a2 ectro1e2 ectro1i2 ectro1o2 ectro1u2 ectro1á2 ectro1é2 ectro1í2 ectro1ó2 ectro1ú2 .e2n1h .e2n2a2 .e2n2e2 .e2n2i2 .e2n2o2 .e2n2u2 .e2n2á2 .e2n2é2 .e2n2í2 .e2n2ó2 .e2n2ú2 .ena3mor .en3amór .ene3mist .ene3míst .eno3jar .enu3mera .enu3merá .enu3mere .en3aceit .ena3jen .ena3jén .eno3ja .eno3já .eno3je .eno3jé .eno3jo .eno3jó .enó3j .en3arb en1hebr .en2hest 4emboca 4o3lógico. 4o3lógica. 4o3lógicos. 4o3lógicas. 4o3lógicamente. 4o3logía. 4o3logías. 4ó3logo. 4ó3loga. 4ó3logos. 4ó3logas. endo1h endo1a2 endo1e2 endo1i2 endo1o2 endo1u2 endo1á2 endo1é2 endo1í2 endo1ó2 endo1ú2 enea1h enea1a2 enea1e2 enea1i2 enea1o2 enea1u2 enea1á2 enea1é2 enea1í2 enea1ó2 enea1ú2 entero1h entero1a2 entero1e2 entero1i2 entero1o2 entero1u2 entero1á2 entero1é2 entero1í2 entero1ó2 entero1ú2 ento1h ento1a2 ento1e2 ento1i2 ento1o2 ento1u2 ento1á2 ento1é2 ento1í2 ento1ó2 ento1ú2 entre1h entre1a2 entre1e2 entre1i2 entre1o2 entre1u2 entre1á2 entre1é2 entre1í2 entre1ó2 entre1ú2 esclero1h esclero1a2 esclero1e2 esclero1i2 esclero1o2 esclero1u2 esclero1á2 esclero1é2 esclero1í2 esclero1ó2 esclero1ú2 estereo1h estereo1a2 estereo1e2 estereo1i2 estereo1o2 estereo1u2 estereo1á2 estereo1é2 estereo1í2 estereo1ó2 estereo1ú2 etno1h etno1a2 etno1e2 etno1i2 etno1o2 etno1u2 etno1á2 etno1é2 etno1í2 etno1ó2 etno1ú2 euco1h euco1a2 euco1e2 euco1i2 euco1o2 euco1u2 euco1á2 euco1é2 euco1í2 euco1ó2 euco1ú2 euro1h euro1a2 euro1e2 euro1i2 euro1o2 euro1u2 euro1á2 euro1é2 euro1í2 euro1ó2 euro1ú2 .e2x1h .e2x2a2 .e2x2e2 .e2x2i2 .e2x2o2 .e2x2u2 .e2x2á2 .e2x2é2 .e2x2í2 .e2x2ó2 .e2x2ú2 .ex2hal .ex2hál .ex2haus .ex2hib .ex2híb .ex2hort .ex2hórt .ex2hum .ex2húm 3gono. 3gonos. 3gonal. 3gonales. exá3men exá3ri exé3ge exó3ti exa3cerb exa3ger ex3alum exa3min exe3cr exe3géti exe3quia exi3ja exi3já exí3ja exi3ge exí3ge exi3gi exi3gí exi3jo exí3jo exi3lia exi3liá exí3lia exi3lie exi3lié exí3lie exi3lio exi3lió exí3lio exi3ma exi3má exí3ma exi3mi exi3mí exí3mi exi3me exi3mé exí3me exi3mo exi3mó exí3mo exi3tos exi3lar exo3bió exo3ner exo3crin exo3tér exo3tic exo3tiq exo3tism exo3gami exo3esq exo3plan exo3gámi exu3ber exu3dar exu3dat exu3dac extra1h extra1a2 extra1e2 extra1i2 extra1o2 extra1u2 extra1á2 extra1é2 extra1í2 extra1ó2 extra1ú2 u4teri .cau5t .deu5t femto1h femto1a2 femto1e2 femto1i2 femto1o2 femto1u2 femto1á2 femto1é2 femto1í2 femto1ó2 femto1ú2 ferro1h ferro1a2 ferro1e2 ferro1i2 ferro1o2 ferro1u2 ferro1á2 ferro1é2 ferro1í2 ferro1ó2 ferro1ú2 filo1h filo1a2 filo1e2 filo1i2 filo1o2 filo1u2 filo1á2 filo1é2 filo1í2 filo1ó2 filo1ú2 fisio1h fisio1a2 fisio1e2 fisio1i2 fisio1o2 fisio1u2 fisio1á2 fisio1é2 fisio1í2 fisio1ó2 fisio1ú2 fito1h fito1a2 fito1e2 fito1i2 fito1o2 fito1u2 fito1á2 fito1é2 fito1í2 fito1ó2 fito1ú2 fono1h fono1a2 fono1e2 fono1i2 fono1o2 fono1u2 fono1á2 fono1é2 fono1í2 fono1ó2 fono1ú2 foto1h foto1a2 foto1e2 foto1i2 foto1o2 foto1u2 foto1á2 foto1é2 foto1í2 foto1ó2 foto1ú2 galo1h galo1a2 galo1e2 galo1i2 galo1o2 galo1u2 galo1á2 galo1é2 galo1í2 galo1ó2 galo1ú2 gastero1h gastero1a2 gastero1e2 gastero1i2 gastero1o2 gastero1u2 gastero1á2 gastero1é2 gastero1í2 gastero1ó2 gastero1ú2 gastro1h gastro1a2 gastro1e2 gastro1i2 gastro1o2 gastro1u2 gastro1á2 gastro1é2 gastro1í2 gastro1ó2 gastro1ú2 geo1h geo1a2 geo1e2 geo1i2 geo1o2 geo1u2 geo1á2 geo1é2 geo1í2 geo1ó2 geo1ú2 geronto1h geronto1a2 geronto1e2 geronto1i2 geronto1o2 geronto1u2 geronto1á2 geronto1é2 geronto1í2 geronto1ó2 geronto1ú2 gineco1h gineco1a2 gineco1e2 gineco1i2 gineco1o2 gineco1u2 gineco1á2 gineco1é2 gineco1í2 gineco1ó2 gineco1ú2 giga1h giga1a2 giga1e2 giga1i2 giga1o2 giga1u2 giga1á2 giga1é2 giga1í2 giga1ó2 giga1ú2 gluco1h gluco1a2 gluco1e2 gluco1i2 gluco1o2 gluco1u2 gluco1á2 gluco1é2 gluco1í2 gluco1ó2 gluco1ú2 grafo1h grafo1a2 grafo1e2 grafo1i2 grafo1o2 grafo1u2 grafo1á2 grafo1é2 grafo1í2 grafo1ó2 grafo1ú2 guarda1h guarda1a2 guarda1e2 guarda1i2 guarda1o2 guarda1u2 guarda1á2 guarda1é2 guarda1í2 guarda1ó2 guarda1ú2 halo1h halo1a2 halo1e2 halo1i2 halo1o2 halo1u2 halo1á2 halo1é2 halo1í2 halo1ó2 halo1ú2 hecto1h hecto1a2 hecto1e2 hecto1i2 hecto1o2 hecto1u2 hecto1á2 hecto1é2 hecto1í2 hecto1ó2 hecto1ú2 helico1h helico1a2 helico1e2 helico1i2 helico1o2 helico1u2 helico1á2 helico1é2 helico1í2 helico1ó2 helico1ú2 helio1h helio1a2 helio1e2 helio1i2 helio1o2 helio1u2 helio1á2 helio1é2 helio1í2 helio1ó2 helio1ú2 hemato1h hemato1a2 hemato1e2 hemato1i2 hemato1o2 hemato1u2 hemato1á2 hemato1é2 hemato1í2 hemato1ó2 hemato1ú2 hemi1h hemi1a2 hemi1e2 hemi1i2 hemi1o2 hemi1u2 hemi1á2 hemi1é2 hemi1í2 hemi1ó2 hemi1ú2 hemio3la. hemio3las. hemo1h hemo1a2 hemo1e2 hemo1i2 hemo1o2 hemo1u2 hemo1á2 hemo1é2 hemo1í2 hemo1ó2 hemo1ú2 hepato1h hepato1a2 hepato1e2 hepato1i2 hepato1o2 hepato1u2 hepato1á2 hepato1é2 hepato1í2 hepato1ó2 hepato1ú2 hepta1h hepta1a2 hepta1e2 hepta1i2 hepta1o2 hepta1u2 hepta1á2 hepta1é2 hepta1í2 hepta1ó2 hepta1ú2 hetero1h hetero1a2 hetero1e2 hetero1i2 hetero1o2 hetero1u2 hetero1á2 hetero1é2 hetero1í2 hetero1ó2 hetero1ú2 2al. 2ales. hexa1h hexa1a2 hexa1e2 hexa1i2 hexa1o2 hexa1u2 hexa1á2 hexa1é2 hexa1í2 hexa1ó2 hexa1ú2 hidro1h hidro1a2 hidro1e2 hidro1i2 hidro1o2 hidro1u2 hidro1á2 hidro1é2 hidro1í2 hidro1ó2 hidro1ú2 holo1h holo1a2 holo1e2 holo1i2 holo1o2 holo1u2 holo1á2 holo1é2 holo1í2 holo1ó2 holo1ú2 hipe2r3r hipe2r1h hipe2r1a2 hipe2r1e2 hipe2r1i2 hipe2r1o2 hipe2r1u2 hipe2r1á2 hipe2r1é2 hipe2r1í2 hipe2r1ó2 hipe2r1ú2 pe3r4e3mia hipe3r4i3cíne hipe3r4o3nimi hipe3r4o3ními hipe3r4ó3nimo hipe3r4o3xia hipo1h hipo1a2 hipo1e2 hipo1i2 hipo1o2 hipo1u2 hipo1á2 hipo1é2 hipo1í2 hipo1ó2 hipo1ú2 spano1h spano1a2 spano1e2 spano1i2 spano1o2 spano1u2 spano1á2 spano1é2 spano1í2 spano1ó2 spano1ú2 histo1h histo1a2 histo1e2 histo1i2 histo1o2 histo1u2 histo1á2 histo1é2 histo1í2 histo1ó2 histo1ú2 homo1h homo1a2 homo1e2 homo1i2 homo1o2 homo1u2 homo1á2 homo1é2 homo1í2 homo1ó2 homo1ú2 homeo1h homeo1a2 homeo1e2 homeo1i2 homeo1o2 homeo1u2 homeo1á2 homeo1é2 homeo1í2 homeo1ó2 homeo1ú2 ibero1h ibero1a2 ibero1e2 ibero1i2 ibero1o2 ibero1u2 ibero1á2 ibero1é2 ibero1í2 ibero1ó2 ibero1ú2 icono1h icono1a2 icono1e2 icono1i2 icono1o2 icono1u2 icono1á2 icono1é2 icono1í2 icono1ó2 icono1ú2 .i2n1h .i2n2a2 .i2n2e2 .i2n2i2 .i2n2o2 .i2n2u2 .i2n2á2 .i2n2é2 .i2n2í2 .i2n2ó2 .i2n2ú2 in4hib in4híb in4hal in4hál in4hest in4hést in4hum in4húm in4hiest in4hiést in4herent in4hóspit in4hesi .in3abarc .in3abord .in3acent .in3acept .in3adapt .in3adopt .in3aguant .in3alámb .in3alien .in3analiz .in3anim .in3apagab .in3afect .in3apel .in3aplaz .in3aplic .in3apreci .in3aprehen .in3aprens .in3armón .in3arrug .in3asist .in3atent .in3efic .in3efici .in3eludi .in3encont .in3equid .in3exact .in3evit .ina3movib .ina3nic .ine3narr .ine3quív .iná3nim .iné3dit .in3eleg .in3exha .in3ex ini3cia iní3cia ini3ciá ini3cie re3ini3cia re3iní3cia re3ini3ciá re3ini3cie .ini3cuo .ini3cua .in3igualab .in3in .in3obser .ino3cuo .ino3cua .ino3cenc .ino3cent .in3ocult .ino3fens .ino3cula .ino3culá .ino3cule .in3oport .inú3til .inu3tiliz infra1h infra1a2 infra1e2 infra1i2 infra1o2 infra1u2 infra1á2 infra1é2 infra1í2 infra1ó2 infra1ú2 inmuno1h inmuno1a2 inmuno1e2 inmuno1i2 inmuno1o2 inmuno1u2 inmuno1á2 inmuno1é2 inmuno1í2 inmuno1ó2 inmuno1ú2 .inte2r3r .inte2r1h .inte2r1a2 .inte2r1e2 .inte2r1i2 .inte2r1o2 .inte2r1u2 .inte2r1á2 .inte2r1é2 .inte2r1í2 .inte2r1ó2 .inte2r1ú2 .in3ter2e3sa .in3ter2e3se .in3ter2e3so .in3ter2e3sá .in3ter2e3sé .in3ter2e3só .de3s4in3ter2e3sa .de3s4in3ter2e3se .de3s4in3ter2e3so .de3s4in3ter2e3sá .de3s4in3ter2e3sé .de3s4in3ter2e3só 4n5te5r2i3n inte6r5i4nsu inte6r5i4nst inte6r5i4nd 4ino. 4inos. 4ina. 4inas. .in3te3r4rog .in3te3r4rupc .in3te3r4rupt .in3te3r4rump inter4és inte3r4esar inte5r4regno inte3r4ior4 in3te3r4im. 4i4ano. 4i4ana. 4i4anos. 4i4anas. intra1h intra1a2 intra1e2 intra1i2 intra1o2 intra1u2 intra1á2 intra1é2 intra1í2 intra1ó2 intra1ú2 islamo1h islamo1a2 islamo1e2 islamo1i2 islamo1o2 islamo1u2 islamo1á2 islamo1é2 islamo1í2 islamo1ó2 islamo1ú2 italo1h italo1a2 italo1e2 italo1i2 italo1o2 italo1u2 italo1á2 italo1é2 italo1í2 italo1ó2 italo1ú2 iso1h iso1a2 iso1e2 iso1i2 iso1o2 iso1u2 iso1á2 iso1é2 iso1í2 iso1ó2 iso1ú2 kilo1h kilo1a2 kilo1e2 kilo1i2 kilo1o2 kilo1u2 kilo1á2 kilo1é2 kilo1í2 kilo1ó2 kilo1ú2 leuco1h leuco1a2 leuco1e2 leuco1i2 leuco1o2 leuco1u2 leuco1á2 leuco1é2 leuco1í2 leuco1ó2 leuco1ú2 linfo1h linfo1a2 linfo1e2 linfo1i2 linfo1o2 linfo1u2 linfo1á2 linfo1é2 linfo1í2 linfo1ó2 linfo1ú2 lipo1h lipo1a2 lipo1e2 lipo1i2 lipo1o2 lipo1u2 lipo1á2 lipo1é2 lipo1í2 lipo1ó2 lipo1ú2 lito1h lito1a2 lito1e2 lito1i2 lito1o2 lito1u2 lito1á2 lito1é2 lito1í2 lito1ó2 lito1ú2 macro1h macro1a2 macro1e2 macro1i2 macro1o2 macro1u2 macro1á2 macro1é2 macro1í2 macro1ó2 macro1ú2 mal2 ma4l3h .ma4l3e4du mal3b mal3c mal3d mal3f mal3g mal3m mal3p mal3q mal3s mal3t mal3v .mal1acon .mal1acos .mala1e .mal1andant .mal1andanz .mal1est .mal1int maxi1h maxi1a2 maxi1e2 maxi1i2 maxi1o2 maxi1u2 maxi1á2 maxi1é2 maxi1í2 maxi1ó2 maxi1ú2 megalo1h megalo1a2 megalo1e2 megalo1i2 megalo1o2 megalo1u2 megalo1á2 megalo1é2 megalo1í2 megalo1ó2 megalo1ú2 mega1h mega1a2 mega1e2 mega1i2 mega1o2 mega1u2 mega1á2 mega1é2 mega1í2 mega1ó2 mega1ú2 melano1h melano1a2 melano1e2 melano1i2 melano1o2 melano1u2 melano1á2 melano1é2 melano1í2 melano1ó2 melano1ú2 meso1h meso1a2 meso1e2 meso1i2 meso1o2 meso1u2 meso1á2 meso1é2 meso1í2 meso1ó2 meso1ú2 meta1h meta1a2 meta1e2 meta1i2 meta1o2 meta1u2 meta1á2 meta1é2 meta1í2 meta1ó2 meta1ú2 micro1h micro1a2 micro1e2 micro1i2 micro1o2 micro1u2 micro1á2 micro1é2 micro1í2 micro1ó2 micro1ú2 .mili1h .mili1a2 .mili1e2 .mili1i2 .mili1o2 .mili1u2 .mili1á2 .mili1é2 .mili1í2 .mili1ó2 .mili1ú2 familia3ri ia5res. amili6a a3rio a3ria li5á4rea mili4ar mini1h mini1a2 mini1e2 mini1i2 mini1o2 mini1u2 mini1á2 mini1é2 mini1í2 mini1ó2 mini1ú2 2os. 2o3so. 2o3sos. 2o3sa. 2o3sas. 2o3samente. mini4a5tur .mio1h .mio1a2 .mio1e2 .mio1i2 .mio1o2 .mio1u2 .mio1á2 .mio1é2 .mio1í2 .mio1ó2 .mio1ú2 multi1h multi1a2 multi1e2 multi1i2 multi1o2 multi1u2 multi1á2 multi1é2 multi1í2 multi1ó2 multi1ú2 miria1h miria1a2 miria1e2 miria1i2 miria1o2 miria1u2 miria1á2 miria1é2 miria1í2 miria1ó2 miria1ú2 mono1h mono1a2 mono1e2 mono1i2 mono1o2 mono1u2 mono1á2 mono1é2 mono1í2 mono1ó2 mono1ú2 morfo1h morfo1a2 morfo1e2 morfo1i2 morfo1o2 morfo1u2 morfo1á2 morfo1é2 morfo1í2 morfo1ó2 morfo1ú2 moto1h moto1a2 moto1e2 moto1i2 moto1o2 moto1u2 moto1á2 moto1é2 moto1í2 moto1ó2 moto1ú2 namo1h namo1a2 namo1e2 namo1i2 namo1o2 namo1u2 namo1á2 namo1é2 namo1í2 namo1ó2 namo1ú2 nano1h nano1a2 nano1e2 nano1i2 nano1o2 nano1u2 nano1á2 nano1é2 nano1í2 nano1ó2 nano1ú2 narco1h narco1a2 narco1e2 narco1i2 narco1o2 narco1u2 narco1á2 narco1é2 narco1í2 narco1ó2 narco1ú2 necro1h necro1a2 necro1e2 necro1i2 necro1o2 necro1u2 necro1á2 necro1é2 necro1í2 necro1ó2 necro1ú2 nefro1h nefro1a2 nefro1e2 nefro1i2 nefro1o2 nefro1u2 nefro1á2 nefro1é2 nefro1í2 nefro1ó2 nefro1ú2 neo1h neo1a2 neo1e2 neo1i2 neo1o2 neo1u2 neo1á2 neo1é2 neo1í2 neo1ó2 neo1ú2 3c2neor neto1h neto1a2 neto1e2 neto1i2 neto1o2 neto1u2 neto1á2 neto1é2 neto1í2 neto1ó2 neto1ú2 neumo1h neumo1a2 neumo1e2 neumo1i2 neumo1o2 neumo1u2 neumo1á2 neumo1é2 neumo1í2 neumo1ó2 neumo1ú2 norte1h norte1a2 norte1e2 norte1i2 norte1o2 norte1u2 norte1á2 norte1é2 norte1í2 norte1ó2 norte1ú2 octo1h octo1a2 octo1e2 octo1i2 octo1o2 octo1u2 octo1á2 octo1é2 octo1í2 octo1ó2 octo1ú2 octa1h octa1a2 octa1e2 octa1i2 octa1o2 octa1u2 octa1á2 octa1é2 octa1í2 octa1ó2 octa1ú2 oligo1h oligo1a2 oligo1e2 oligo1i2 oligo1o2 oligo1u2 oligo1á2 oligo1é2 oligo1í2 oligo1ó2 oligo1ú2 omni1h omni1a2 omni1e2 omni1i2 omni1o2 omni1u2 omni1á2 omni1é2 omni1í2 omni1ó2 omni1ú2 onco1h onco1a2 onco1e2 onco1i2 onco1o2 onco1u2 onco1á2 onco1é2 onco1í2 onco1ó2 onco1ú2 onto1h onto1a2 onto1e2 onto1i2 onto1o2 onto1u2 onto1á2 onto1é2 onto1í2 onto1ó2 onto1ú2 opto1h opto1a2 opto1e2 opto1i2 opto1o2 opto1u2 opto1á2 opto1é2 opto1í2 opto1ó2 opto1ú2 ornito1h ornito1a2 ornito1e2 ornito1i2 ornito1o2 ornito1u2 ornito1á2 ornito1é2 ornito1í2 ornito1ó2 ornito1ú2 orto1h orto1a2 orto1e2 orto1i2 orto1o2 orto1u2 orto1á2 orto1é2 orto1í2 orto1ó2 orto1ú2 orto4e3pía osteo1h osteo1a2 osteo1e2 osteo1i2 osteo1o2 osteo1u2 osteo1á2 osteo1é2 osteo1í2 osteo1ó2 osteo1ú2 paleo1h paleo1a2 paleo1e2 paleo1i2 paleo1o2 paleo1u2 paleo1á2 paleo1é2 paleo1í2 paleo1ó2 paleo1ú2 .pa4n1a4fri .pa4n1a4meri .pa4n1á4rab .pa4n1a4ráb .pa4n1a4rab .pa4n1europ .pa4n1islam .pa4n1islám .pa4n5hisp .pa4n1hel .pa4n1ópti para1h para1a2 para1e2 para1i2 para1o2 para1u2 para1á2 para1é2 para1í2 para1ó2 para1ú2 para2is. aí5so. aí5sos. para4íso para4i3señ para4ulata penta1h penta1a2 penta1e2 penta1i2 penta1o2 penta1u2 penta1á2 penta1é2 penta1í2 penta1ó2 penta1ú2 peta1h peta1a2 peta1e2 peta1i2 peta1o2 peta1u2 peta1á2 peta1é2 peta1í2 peta1ó2 peta1ú2 pico1h pico1a2 pico1e2 pico1i2 pico1o2 pico1u2 pico1á2 pico1é2 pico1í2 pico1ó2 pico1ú2 piezo1h piezo1a2 piezo1e2 piezo1i2 piezo1o2 piezo1u2 piezo1á2 piezo1é2 piezo1í2 piezo1ó2 piezo1ú2 piro1h piro1a2 piro1e2 piro1i2 piro1o2 piro1u2 piro1á2 piro1é2 piro1í2 piro1ó2 piro1ú2 pluri1h pluri1a2 pluri1e2 pluri1i2 pluri1o2 pluri1u2 pluri1á2 pluri1é2 pluri1í2 pluri1ó2 pluri1ú2 poli1h poli1a2 poli1e2 poli1i2 poli1o2 poli1u2 poli1á2 poli1é2 poli1í2 poli1ó2 poli1ú2 poli4u3r poli4o5mie poli4arq poli4árq poli4éste poli4andr poli4antea poli4arca expoli4 porta1h porta1a2 porta1e2 porta1i2 porta1o2 porta1u2 porta1á2 porta1é2 porta1í2 porta1ó2 porta1ú2 porta4e3ro .pos2t1h .pos2t2a2 .pos2t2e2 .pos2t2i2 .pos2t2o2 .pos2t2u2 .pos2t2á2 .pos2t2é2 .pos2t2í2 .pos2t2ó2 .pos2t2ú2 po4s3impr po4s3o2per po4s3ind po4s3e4lect po4s3estr .pos3tin .pos3tín .pos4t3ind pos3ta. pos3tas. pos4t5s s3te. s3tes. s3tal. s3ta3les. s3ti3lla. s3ti3llas. s3ti3llón. s3ti3llones. s3tor. s3tora. s3toras. s3tores. .pos3tó3ni .pos3terg .pos3te3ri .pos3ti3go .pos3ti3la .pos3ti3ne .pos3ti3za .pos3ti3zo .pos3tu3ra .pos3tu3la .pos3tu3lá .pos3tu3le .pos3tu3lé .pos2t3elec .pos2t3impr .pos2t3ope .pos2t3rev .pos2t3rom .pos3taci .pos3tar .pos3tear .pos3te3me .pos3ta3je .pos3te3ler .pos3te3ma .pos3te3mi .pos3te3río .pos3te3ta .pos3ti3le .pos3ti3llo .pos3ti3lo .pos3ti3lá .pos3ti3lé .pos3ti3ló .posti3nudo .posto3res .pos3tu3lo .pos3tu3ló .pos3tón .pos3te3mas .pos3ti3cer .pos3tism .pos3tu3reo .pos3te3lera .pos3teo .pos3ti3ll .pos3tista .pre1h .pre1a2 .pre1e2 .pre1i2 .pre1o2 .pre1u2 .pre1á2 .pre1é2 .pre1í2 .pre1ó2 .pre1ú2 .pre4ámbul .pre4o3cup .pre4o3cúp .pre4ordin .pre4ordín .pro1h .pro2a2 .pro2e2 .pro2i2 .pro2o2 .pro2u2 .pro2á2 .pro2é2 .pro2í2 .pro2ó2 .pro2ú2 .pro3abort .pro3etarr .pro4hiba .pro4híba .pro4hibá .pro4hibe .pro4híb .pro4híbo .pro4hibi .pro4hibí proto1h proto1a2 proto1e2 proto1i2 proto1o2 proto1u2 proto1á2 proto1é2 proto1í2 proto1ó2 proto1ú2 psico1h psico1a2 psico1e2 psico1i2 psico1o2 psico1u2 psico1á2 psico1é2 psico1í2 psico1ó2 psico1ú2 3p2sic 3p2siq ptero1h ptero1a2 ptero1e2 ptero1i2 ptero1o2 ptero1u2 ptero1á2 ptero1é2 ptero1í2 ptero1ó2 ptero1ú2 quete1h quete1a2 quete1e2 quete1i2 quete1o2 quete1u2 quete1á2 quete1é2 quete1í2 quete1ó2 quete1ú2 quimio1h quimio1a2 quimio1e2 quimio1i2 quimio1o2 quimio1u2 quimio1á2 quimio1é2 quimio1í2 quimio1ó2 quimio1ú2 quiro1h quiro1a2 quiro1e2 quiro1i2 quiro1o2 quiro1u2 quiro1á2 quiro1é2 quiro1í2 quiro1ó2 quiro1ú2 radio1h radio1a2 radio1e2 radio1i2 radio1o2 radio1u2 radio1á2 radio1é2 radio1í2 radio1ó2 radio1ú2 ranco1h ranco1a2 ranco1e2 ranco1i2 ranco1o2 ranco1u2 ranco1á2 ranco1é2 ranco1í2 ranco1ó2 ranco1ú2 .re2a2 .re3e4 .re2i2 .re2o2 .re2u2 .re2á2 .re2é2 .re2í2 .re2ó2 .re2ú2 ea3cio. ea3cios. ea3cia. ea3cias. .re3abr .re3ábr .re3abiert .re3absor .re3absór .re3admis .re3admit .re3admít .re3afirm .re3afírm .re3agrav .re3agráv .re3acondic .re3acuñ .re3acúñ .re3ajust .rea3júst .re3alegr .re3alégr .rea3liza .rea3lizá .rea3líza .re3alim .rea3lism .rea3list .re3aloj .re3alój .re3alq .re3anim .re3aním .re3ama .re3áma .re3amá .re3ame .re3áme .re3amé .re3amo .re3ámo .re3amó .re3aparec .re3aprend .re3aprénd .re3apret .reapríet .rei3no .re3ubica .re3ubíca .re3ubicá .re3ubico .re3ubicó .re3ubiq .re3ubíq .reu3mati .reu3máti .reu3nir .reu3nír .reu3nia .reu3ní .reu3nis .reunim .reu3ná .reu3nie .reu3nié .reu3nid .reu3nió .re3unif .re3usar .re3usár .re3utiliz .re3utilíz .re3a2eg .re3a2q .re3a2z .re3asum .re3asúm .re3a2grup .re3i2m .re3inc .re3inic .re3inf .re3ing .re3inv .rei3na .re3ins .re3int .re3o2b .re3orient .rei3vind .re3oc .re4o3j .re3orga .re3unt .reu3ma rete1h rete1a2 rete1e2 rete1i2 rete1o2 rete1u2 rete1á2 rete1é2 rete1í2 rete1ó2 rete1ú2 rmano1h rmano1a2 rmano1e2 rmano1i2 rmano1o2 rmano1u2 rmano1á2 rmano1é2 rmano1í2 rmano1ó2 rmano1ú2 retro1h retro1a2 retro1e2 retro1i2 retro1o2 retro1u2 retro1á2 retro1é2 retro1í2 retro1ó2 retro1ú2 romo1h romo1a2 romo1e2 romo1i2 romo1o2 romo1u2 romo1á2 romo1é2 romo1í2 romo1ó2 romo1ú2 salva1h salva1a2 salva1e2 salva1i2 salva1o2 salva1u2 salva1á2 salva1é2 salva1í2 salva1ó2 salva1ú2 seleno1h seleno1a2 seleno1e2 seleno1i2 seleno1o2 seleno1u2 seleno1á2 seleno1é2 seleno1í2 seleno1ó2 seleno1ú2 semi1h semi1a2 semi1e2 semi1i2 semi1o2 semi1u2 semi1á2 semi1é2 semi1í2 semi1ó2 semi1ú2 i2a. i2as. 2ótic emi2o2 servo1h servo1a2 servo1e2 servo1i2 servo1o2 servo1u2 servo1á2 servo1é2 servo1í2 servo1ó2 servo1ú2 2seudo1h 2seudo1a2 2seudo1e2 2seudo1i2 2seudo1o2 2seudo1u2 2seudo1á2 2seudo1é2 2seudo1í2 2seudo1ó2 2seudo1ú2 o2os. .so3a4s sobre1h sobre1a2 sobre1e2 sobre1i2 sobre1o2 sobre1u2 sobre1á2 sobre1é2 sobre1í2 sobre1ó2 sobre1ú2 sobre3a4sa sobre3a4sas socio1h socio1a2 socio1e2 socio1i2 socio1o2 socio1u2 socio1á2 socio1é2 socio1í2 socio1ó2 socio1ú2 4a3rio. 4a3rios. 4a3ria. 4a3rias. 3logía 4ón. 4ones. 4i4er. 4o2ico. 4o2icos. 4o2ica. 4o2icas. .su2b1h .su2b2a2 .su2b2e2 .su2b2i2 .su2b2o2 .su2b2u2 .su2b2á2 .su2b2é2 .su2b2í2 .su2b2ó2 .su2b2ú2 .sub3acuát .subi3ll .su3bi3da .su3bi3dor .su3bi3do .su3bi3dón .su3basta .su3básta .su3bastá .su3baste .su3básté .su3basto .su3bástó .sub3índ .sub3ími .su4b3ray .sub3acepc .sub3acet .sub3aflue .sub3alcai .sub3arr .sub3ártic .sub3atómic .sub3ejecut .sub3elemen .sub3emple .sub3enten .seb3entrad .sub3espec .sub3estac .sub3estim .sub3estím .sub3estruc .sub3occipit .sub3ofici .su3bordin .su3bordín .sub3urba .sub3aliment .su3balter .sub3insp .sub3intenden .su3bir .su3bír .su3bién .su3bi3mien .su3bier .su3bies .su2r1est .su2r1oes supe2r3r supe2r1h supe2r1a2 supe2r1e2 supe2r1i2 supe2r1o2 supe2r1u2 supe2r1á2 supe2r1é2 supe2r1í2 supe2r1ó2 supe2r1ú2 ra5ra ra5rá ra5re ra5ré ra5rí ra5ro supe3r4a4r supe3r4á4r supe3r4á3vit. supe3r4á3vits. super4ior 4a3ción. 4a3ciones. 4e3rior. 4e3riores. 4e3riora. 4e3rioras. 4e3riormente. 4e3rioridad. 4e3rioridades. 4e3r4a3ble. 4e3r4a3bles. 4e3r4a3blemente. pe5r4ante perpon5d6r supra1h supra1a2 supra1e2 supra1i2 supra1o2 supra1u2 supra1á2 supra1é2 supra1í2 supra1ó2 supra1ú2 sup6ra talmo1h talmo1a2 talmo1e2 talmo1i2 talmo1o2 talmo1u2 talmo1á2 talmo1é2 talmo1í2 talmo1ó2 talmo1ú2 tele1h tele1a2 tele1e2 tele1i2 tele1o2 tele1u2 tele1á2 tele1é2 tele1í2 tele1ó2 tele1ú2 4ósteo. 4ósteos. tecno1h tecno1a2 tecno1e2 tecno1i2 tecno1o2 tecno1u2 tecno1á2 tecno1é2 tecno1í2 tecno1ó2 tecno1ú2 .tele1imp .tele1obj .tele4o3lót tera1h tera1a2 tera1e2 tera1i2 tera1o2 tera1u2 tera1á2 tera1é2 tera1í2 tera1ó2 tera1ú2 termo1h termo1a2 termo1e2 termo1i2 termo1o2 termo1u2 termo1á2 termo1é2 termo1í2 termo1ó2 termo1ú2 tetra1h tetra1a2 tetra1e2 tetra1i2 tetra1o2 tetra1u2 tetra1á2 tetra1é2 tetra1í2 tetra1ó2 tetra1ú2 topo1h topo1a2 topo1e2 topo1i2 topo1o2 topo1u2 topo1á2 topo1é2 topo1í2 topo1ó2 topo1ú2 .tra2s1h .tra2sa2 .tra2se2 .tra2si2 .tra2so2 .tra2su2 .tra2sá2 .tra2sé2 .tra2sí2 .tra2só2 .tra2sú2 tras1abuel tras1alcob tras1alp tras1altar tras1andin tras1atlánt tras1oceán tra3se3ro. tra3se3ros. tra3se3ra. tra3se3ras. .tra3su3da .tra3su3dá .tra3su3de .tra3su3dé .tra3su3do .tra3su3dó .tra3sunta .tra3suntá .tra3sunte .tra3sunté .tra3sunto .tra3suntó .tra3so3ñ .tra3se3g .tra3sieg tran2s1h tran2sa2 tran2se2 tran2si2 tran2so2 tran2su2 tran2sá2 tran2sé2 tran2sí2 tran2só2 tran2sú2 trans3aminas tran2s1and tran2s1atl tran2s1oce tran2s1ur tran3sacci tran3sactiv tran3seún tran3se3xu tran3si3berian tran3si3cion tran3si3ción tran3sido. tran3sidos. tran3sida. tran3sidas. tran3si3gi tran3si3gí tran3si3ge tran3si3ja tran3si3já tran3si3jo tran3silvan tran3sisto tran3si3ta tran3si3tá tran3si3te tran3si3té tran3si3to tran3si3tó tran3si3tiv tran3si3tori trans3oraci tran3subst tran3sust .tri1ó2x tropo1h tropo1a2 tropo1e2 tropo1i2 tropo1o2 tropo1u2 tropo1á2 tropo1é2 tropo1í2 tropo1ó2 tropo1ú2 turbo1h turbo1a2 turbo1e2 turbo1i2 turbo1o2 turbo1u2 turbo1á2 turbo1é2 turbo1í2 turbo1ó2 turbo1ú2 ultra1h ultra1a2 ultra1e2 ultra1i2 ultra1o2 ultra1u2 ultra1á2 ultra1é2 ultra1í2 ultra1ó2 ultra1ú2 vice1h vice1a2 vice1e2 vice1i2 vice1o2 vice1u2 vice1á2 vice1é2 vice1í2 vice1ó2 vice1ú2 video1h video1a2 video1e2 video1i2 video1o2 video1u2 video1á2 video1é2 video1í2 video1ó2 video1ú2 xeno1h xeno1a2 xeno1e2 xeno1i2 xeno1o2 xeno1u2 xeno1á2 xeno1é2 xeno1í2 xeno1ó2 xeno1ú2 xero1h xero1a2 xero1e2 xero1i2 xero1o2 xero1u2 xero1á2 xero1é2 xero1í2 xero1ó2 xero1ú2 xilo1h xilo1a2 xilo1e2 xilo1i2 xilo1o2 xilo1u2 xilo1á2 xilo1é2 xilo1í2 xilo1ó2 xilo1ú2 zoo1h zoo1a2 zoo1e2 zoo1i2 zoo1o2 zoo1u2 zoo1á2 zoo1é2 zoo1í2 zoo1ó2 zoo1ú2 wa3s4h 3grafo. 3grafa. 3grafos. 3grafas. 3grafía. 3grafías. o4i3dea. o4i3deas. o4i3dal. o4i3dales. 4o2i3de. 4o2i3des. 4i2dal. 4i2dales. 4i3deo. 4i3deos. i2o. i2os. 2i3co. 2i3cos. 2i3ca. 2i3cas. 4e3dro. 4e3dros. 4é3drico. 4é3dricos. 4é3drica. 4é3dricas. 4í3ble. 4í3bles. 3hablante 3habiente 5humano 5humana 3a4ficionad 3a4merican su2d3a4merican su2r3a4merican 3e4lectr 3e4léctr di4e5lec di4e5léc 5i4ndustr 5islámi 5islami 5ingenier 5técnic 5biología 5céntrico 5e4cuatorial 7u4niversid 5u4niversit", ["lefthyphenmin"]=1, - ["length"]=29622, - ["n"]=3591, + ["length"]=39988, + ["n"]=4694, ["righthyphenmax"]=1, }, ["version"]="1.001", diff --git a/tex/context/patterns/mkiv/lang-fr.lua b/tex/context/patterns/mkiv/lang-fr.lua index 615dd2b90..db99d60a1 100644 --- a/tex/context/patterns/mkiv/lang-fr.lua +++ b/tex/context/patterns/mkiv/lang-fr.lua @@ -9,11 +9,11 @@ return { ["texcomment"]="% no comment", }, ["patterns"]={ - ["characters"]="'abcdefghijklmnopqrstuvwxyzàâçèéêîïôûœ’", - ["data"]="2'2 2’2 .a4 'a4 ’a4 .â4 'â4 ’â4 ab2h .ab3réa 'ab3réa ’ab3réa ad2h a1è2dre .ae3s4ch 'ae3s4ch ’ae3s4ch 1alcool '2alcool ’2alcool a2l1algi .amino1a2c 'amino1a2c ’amino1a2c .ana3s4tr 'ana3s4tr ’ana3s4tr 1a2nesthési '2a2nesthési ’2a2nesthési .anti1a2 'anti1a2 ’anti1a2 .anti1e2 'anti1e2 ’anti1e2 .anti1é2 .anti2enne 'anti2enne ’anti2enne 'anti1é2 ’anti1é2 .anti1s2 'anti1s2 ’anti1s2 .apo2s3ta 'apo2s3ta ’apo2s3ta apo2s3tr archi1é2pis .as2ta 'as2ta ’as2ta a2s3tro 1ba 1bâ .bai2se3main 1be 1bé 1bè 1bê 4be. 4bes. 2bent. 1bi 1bî .bi1a2c .bi1a2t .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l 4ble. 4bles. 2blent. 1bo 1bô 1b2r 4bre. 4bres. 2brent. 1bu 1bû 1by 1ç 1ca 1câ ca3ou3t2 1ce 1cé 1cè 1cê 4ce. 4ces. 2cent. ja3cent. ac3cent. é3cent. munifi3cent. réti3cent. privatdo3cent. inno3cent. es3cent. acquies4cent. is3cent. immis4cent. .ch4 1c2h 4ch. 2chb 4che. 4ches. 2chent. .chè2vre3feuille 2chg ch2l 4chle. 4chles. chlo2r3a2c chlo2r3é2t 2chm 2chn 2chp ch2r 4chre. 4chres. 2chs 2cht 2chw 1ci 1cî .ci2s1alp 1c2k 4ck. 2ckb 4cke. 4ckes. 2ckent. 2ckf 2ckg 2ck3h 2ckp 2cks 2ckt 1c2l 4cle. 4cles. 2clent. 1co 1cô co1acc co1acq co1a2d co1ap co1ar co1assoc co1assur co1au co1ax 1cœ co1é2 co1ef co1en co1ex .con4 .cons4 .contre1s2c .contre3maître co2nurb .co1o2 .co2o3lie 1c2r 4cre. 4cres. 2crent. 1cu 1cû 1cy .cul4 1d' 1d’ 1da 1dâ .dacryo1a2 d1d2h 1de 1dé 1dè 1dê 4de. 4des. 2dent. déca3dent. é3dent. cci3dent. inci3dent. confi3dent. tri3dent. dissi3dent. chien3dent. .ar3dent. impu3dent. pru3dent. .dé1a2 .dé1io .dé1o2 .dé2s .dé3s2a3cr .dés2a3m .dé3s2a3tell .dé3s2astr .dé3s2c .dé2s1é2 .dé3s2é3gr .dé3s2ensib .dé3s2ert .dé3s2exu .dé2s1i2 .dé3s2i3d .dé3s2i3gn .dé3s2i3li .dé3s2i3nen .dé3s2invo .dé3s2i3r .dé3s2ist .dé3s2o3dé .dé2s1œ .dé3s2o3l .dé3s2o3pil .dé3s2orm .dé3s2orp .dé3s2oufr .dé3s2p .dé3s2t .dé2s1u2n 3d2hal 3d2houd 1di 1dî di2s3cop .di1a2cé .di1a2cid .di1ald .di1a2mi .di1a2tom .di1e2n .di2s3h 2dlent. 1do 1dô 1d2r 4dre. 4dres. 2drent. d1s2 1du 1dû 1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 .dy2s1u2 .e4 'e4 ’e4 .ê4 'ê4 ’ê4 .é4 'é4 ’é4 .è4 'è4 ’è4 éd2hi 1é2drie 1é2drique 1é2lectr 1é2lément .en1a2 'en1a2 ’en1a2 1é2nerg e2n1i2vr .en1o2 'en1o2 ’en1o2 épi2s3cop épi3s4cope e2s3cop .eu2r1a2 'eu2r1a2 ’eu2r1a2 eu1s2tat extra1 extra2c extra2i 1fa 1fâ 1fe 1fé 1fè 1fê 4fe. 4fes. 2fent. 1fi 1fî 1f2l 4fle. 4fles. 2flent. 1fo 1fô 1f2r 4fre. 4fres. 2frent. f1s2 1fu 1fû 1fy 1ga 1gâ 1ge 1gé 1gè 1gê 4ge. 4ges. 2gent. ré3gent. entre3gent. indi3gent. dili3gent. intelli3gent. indul3gent. tan3gent. rin3gent. contin3gent. .ar3gent. 'ar3gent. ’ar3gent. ser3gent. ter3gent. résur3gent. 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1gî 1g2l 4gle. 4gles. 2glent. 1g2n 'a2g3nat ’a2g3nat .a2g3nat a2g3nos co2g3niti 'i2g3né ’i2g3né .i2g3né 'i2g3ni ’i2g3ni .i2g3ni .ma2g3nicide .ma2g3nificat .ma2g3num o2g3nomoni o2g3nosi .pro2g3nath pu2g3nable pu2g3nac .sta2g3n .syn2g3nath wa2g3n 4gne. 4gnes. 2gnent. 1go 1gô 1g2r 4gre. 4gres. 2grent. 1gu 1gû g1s2 4gue. 4gues. 2guent. .on3guent. 'on3guent. ’on3guent. 1gy 1ha 1hâ 1he 1hé 1hè 1hê hémi1é hémo1p2t 4he. 4hes. 1hi 1hî 1ho 1hô 1hu 1hû 1hy hypera2 hypere2 hyperé2 hyperi2 hypero2 hypers2 hype4r1 hyperu2 hypo1a2 hypo1e2 hypo1é2 hypo1i2 hypo1o2 hypo1s2 hypo1u2 .i4 'i4 ’i4 .î4 'î4 ’î4 i1algi i1arthr i1è2dre il2l cil3l rcil4l ucil4l vacil4l gil3l hil3l lil3l l3lion mil3l mil4let émil4l semil4l rmil4l armil5l capil3l papil3la papil3le papil3li papil3lom pupil3l piril3l thril3l cyril3l ibril3l pusil3l .stil3l distil3l instil3l fritil3l boutil3l vanil3lin vanil3lis vil3l avil4l chevil4l uevil4l uvil4l xil3l 1informat '2informat ’2informat .in1a2 'in1a2 ’in1a2 .in2a3nit 'in2a3nit ’in2a3nit .in2augur 'in2augur ’in2augur .in1e2 'in1e2 ’in1e2 .in1é2 'in1é2 ’in1é2 .in2effab 'in2effab ’in2effab .in2é3lucta 'in2é3lucta ’in2é3lucta .in2é3narra 'in2é3narra ’in2é3narra .in2ept 'in2ept ’in2ept .in2er 'in2er ’in2er .in2exora 'in2exora ’in2exora .in1i2 'in1i2 ’in1i2 .in2i3miti 'in2i3miti ’in2i3miti .in2i3q 'in2i3q ’in2i3q .in2i3t 'in2i3t ’in2i3t .in1o2 'in1o2 ’in1o2 .in2o3cul 'in2o3cul ’in2o3cul .in2ond 'in2ond ’in2ond .in1s2tab 'in1s2tab ’in1s2tab 'inte4r3 ’inte4r3 .intera2 'intera2 ’intera2 .intere2 'intere2 ’intere2 .interé2 'interé2 ’interé2 .interi2 'interi2 ’interi2 .intero2 'intero2 ’intero2 .inte4r3 .interu2 'interu2 ’interu2 .inters2 'inters2 ’inters2 .in1u2 'in1u2 ’in1u2 .in2uit 'in2uit ’in2uit .in2u3l 'in2u3l ’in2u3l io1a2ct i1oxy i1s2tat 1j 2jk 4je. 4jes. 2jent. 1ka 1kâ 1ke 1ké 1kè 1kê 4ke. 4kes. 2kent. 1k2h 4kh. .kh4 1ki 1kî 1ko 1kô 1k2r 1ku 1kû 1ky 1la 1lâ 1là la2w3re 1le 1lé 1lè 1lê 4le. 4les. 2lent. .ta3lent. iva3lent. équiva4lent. monova3lent. polyva3lent. re3lent. .do3lent. indo3lent. inso3lent. turbu3lent. succu3lent. fécu3lent. trucu3lent. opu3lent. corpu3lent. ru3lent. sporu4lent. 1li 1lî 1lo 1lô l1s2t 1lu 1lû 1ly 1ma 1mâ .ma2c3k .macro1s2c .ma2l1a2dres .ma2l1a2dro .ma2l1aisé .ma2l1ap .ma2l1a2v .ma2l1en .ma2l1int .ma2l1oc .ma2l1o2d .ma2r1x 1me 1mé 1mè 1mê .mé2g1oh .mé2sa .mé3san .mé2s1es .mé2s1i .mé2s1u2s .méta1s2ta 4me. 4mes. â2ment. da2ment. fa2ment. amalga2ment. cla2ment. ra2ment. tempéra3ment. ta2ment. testa3ment. qua2ment. è2ment. carê2ment. diaphrag2ment. ryth2ment. ai2ment. rai3ment. abî2ment. éci2ment. vidi2ment. subli2ment. éli2ment. reli2ment. mi2ment. ani2ment. veni2ment. ri2ment. détri3ment. nutri3ment. inti2ment. esti2ment. l2ment. flam2ment. gram2ment. .gem2ment. om2ment. .com3ment. ô2ment. slalo2ment. chro2ment. to2ment. ar2ment. .sar3ment. er2ment. antifer3ment. .ser3ment. fir2ment. or2ment. as2ment. au2ment. écu2ment. fu2ment. hu2ment. fichu3ment. llu2ment. plu2ment. bou2ment. bru2ment. su2ment. tu2ment. 1mi 1mî .milli1am 1m2némo 1m2nès 1m2nési 1mo 1mô 1mœ .mono1a2 .mono1e2 .mono1é2 .mono1i2 .mono1ï2dé .mono1o2 .mono1u2 .mono1s2 mon2t3réal m1s2 1mu 1mû 1my moye2n1â2g 1na 1nâ 1ne 1né 1nè 1nê 4ne. 4nes. 2nent. réma3nent. imma3nent. perma3nent. .émi3nent. préémi3nent. proémi3nent. surémi3nent. immi3nent. conti3nent. perti3nent. absti3nent. 1ni 1nî 1no 1nô 1nœ .no2n1obs 1nu 1nû n3s2at. n3s2ats. n1x 1ny .o4 'o4 ’o4 'ô4 ’ô4 .ô4 o2b3long 1octet '2octet ’2octet o1d2l o1è2dre o1ioni ombud2s3 omni1s2 o1s2tas o1s2tat o1s2téro o1s2tim o1s2tom o1s2trad o1s2tratu o1s2triction .oua1ou 'oua1ou ’oua1ou .ovi1s2c 'ovi1s2c ’ovi1s2c oxy1a2 1pa 1pâ paléo1é2 .pa2n1a2f .pa2n1a2mé .pa2n1a2ra .pa2n1is .pa2n1o2ph .pa2n1opt .pa2r1a2che .pa2r1a2chè .para1s2 .pa2r3hé 1pe 1pé 1pè 1pê 4pe. 4pes. 2pent. re3pent. .ar3pent. 'ar3pent. ’ar3pent. ser3pent. .pen2ta per3h pé2nul .pe4r .per1a2 .per1e2 .per1é2 .per1i2 .per1o2 .per1u2 pé1r2é2q .péri1os .péri1s2 .péri2s3s .péri2s3ta .péri1u2 1p2h .ph4 4ph. .phalan3s2t 4phe. 4phes. 2phent. ph2l 4phle. 4phles. 2phn photo1s2 ph2r 4phre. 4phres. 2phs 2pht 3ph2talé 3ph2tis 1pi 1pî 1p2l 4ple. 4ples. 2plent. .pluri1a 1p2né 1p2neu 1po 1pô po1astre poly1a2 poly1e2 poly1é2 poly1è2 poly1i2 poly1o2 poly1s2 poly1u2 .pon2tet .pos2t3h .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r 4pre. 4pres. 2prent. .pré1a2 .pré2a3la .pré2au .pré1é2 .pré1e2 .pré1i2 .pré1o2 .pré1u2 .pré1s2 .pro1é2 .pro1s2cé pro2s3tat .prou3d2h 1p2sych .psycho1a2n 1p2tèr 1p2tér 1pu .pud1d2l 1pû 1py 1q 4que. 4ques. 2quent. é3quent. élo3quent. grandilo3quent. 1ra 1râ radio1a2 1re 1ré 1rè 1rê .ré1a2 .ré2a3le .ré2a3lis .ré2a3lit .ré2aux .ré1é2 .ré1e2 .ré2el .ré2er .ré2èr .ré1i2 .ré2i3fi .ré1o2 .re1s2 .re2s3cap .re2s3cisi .re2s3ciso .re2s3cou .re2s3cri .re2s3pect .re2s3pir .re2s3plend .re2s3pons .re2s3quil .re2s3s .re2s3t .re3s4tab .re3s4tag .re3s4tand .re3s4tat .re3s4tén .re3s4tér .re3s4tim .re3s4tip .re3s4toc .re3s4top .re3s4tr .re4s5trein .re4s5trict .re4s5trin .re3s4tu .re3s4ty .réu2 .ré2uss .rétro1a2 4re. 4res. 2rent. .pa3rent. appa3rent. transpa3rent. é3rent. tor3rent. cur3rent. 1r2h 4rhe. 4rhes. 2r3heur 2r3hydr 1ri 1rî 1ro 1rô 1ru 1rû 1ry 1sa 1sâ .sch4 1s2caph 1s2clér 1s2cop 1s2ch e2s3ch i2s3ché i2s3chia i2s3chio 4sch. 4sche. 4sches. 2schs 1se 1sé 1sè 1sê sesqui1a2 4se. 4ses. 2sent. ab3sent. pré3sent. .res3sent. .seu2le .sh4 1s2h 4sh. 4she. 4shes. 2shent. 2shm 2s3hom 2shr 2shs 1si 1sî 1s2lav 1s2lov 1so 1sô 1sœ 1s2patia 1s2perm 1s2por 1s2phèr 1s2phér 1s2piel 1s2piros 1s2tandard 1s2tein stéréo1s2 1s2tigm 1s2tock 1s2tomos 1s2troph 1s2tructu 1s2tyle 1su 1sû .su2b1a2 .su3b2alt .su2b1é2 .su3b2é3r .su2b1in .su2b3limin .su2b3lin .su2b3lu sub1s2 .su2b1ur supero2 supe4r1 supers2 .su2r1a2 su3r2ah .su3r2a3t .su2r1e2 .su3r2eau .su3r2ell .su3r2et .su2r1é2 .su2r3h .su2r1i2m .su2r1inf .su2r1int .su2r1of .su2r1ox 1sy 1ta 1tâ 1tà tachy1a2 tchin3t2 1te 1té 1tè 1tê télé1e2 télé1i2 télé1o2b télé1o2p télé1s2 4te. 4tes. 2tent. .la3tent. .pa3tent. compé3tent. éni3tent. mécon3tent. omnipo3tent. ventripo3tent. équipo3tent. impo3tent. mit3tent. .th4 1t2h 4th. 4the. 4thes. thermo1s2 2t3heur 2thl 2thm 2thn th2r 4thre. 4thres. 2ths 1ti 1tî 1to 1tô 1t2r tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p tran2s1u2 4tre. 4tres. 2trent. .tri1a2c .tri1a2n .tri1a2t .tri1o2n t1t2l 1tu 1tû tung2s3 1ty .u4 'u4 ’u4 .û4 'û4 ’û4 uni1o2v uni1a2x u2s3tr 1va 1vâ 1ve 1vé 1vè 1vê vélo1s2ki 4ve. 4ves. 2vent. conni3vent. .sou3vent. 1vi 1vî 1vo 1vô vol2t1amp 1v2r 4vre. 4vres. 2vrent. 1vu 1vû 1vy 1wa 1we 4we. 4wes. 2went. 1wi 1wo 1wu 1w2r 2xent. .y4 'y4 ’y4 y1asth y1s2tom y1algi 1za 1ze 1zé 1zè 4ze. 4zes. 2zent. privatdo3zent. 1zi 1zo 1zu 1zy", + ["characters"]="'abcdefghijklmnopqrstuvwxyzàâçèéêîïôûœ", + ["data"]="2'2 .a4 'a4 .â4 'â4 ab2h .ab3réa 'ab3réa ad2h a1è2dre .ae3s4ch 'ae3s4ch 1alcool '2alcool a2l1algi .amino1a2c 'amino1a2c .ana3s4tr 'ana3s4tr 1a2nesthési '2a2nesthési .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti1é2 .anti2enne 'anti2enne 'anti1é2 .anti1s2 'anti1s2 .apo2s3ta 'apo2s3ta apo2s3tr archi1é2pis .as2ta 'as2ta a2s3tro 1ba 1bâ .bai2se3main 1be 1bé 1bè 1bê 4be. 4bes. 2bent. 1bi 1bî .bi1a2c .bi1a2t .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l 4ble. 4bles. 2blent. 1bo 1bô 1b2r 4bre. 4bres. 2brent. 1bu 1bû 1by 1ç 1ca 1câ ca3ou3t2 1ce 1cé 1cè 1cê 4ce. 4ces. 2cent. ja3cent. ac3cent. é3cent. munifi3cent. réti3cent. privatdo3cent. inno3cent. es3cent. acquies4cent. is3cent. immis4cent. .ch4 1c2h 4ch. 2chb 4che. 4ches. 2chent. .chè2vre3feuille 2chg ch2l 4chle. 4chles. chlo2r3a2c chlo2r3é2t 2chm 2chn 2chp ch2r 4chre. 4chres. 2chs 2cht 2chw 1ci 1cî .ci2s1alp 1c2k 4ck. 2ckb 4cke. 4ckes. 2ckent. 2ckf 2ckg 2ck3h 2ckp 2cks 2ckt 1c2l 4cle. 4cles. 2clent. 1co 1cô co1acc co1acq co1a2d co1ap co1ar co1assoc co1assur co1au co1ax 1cœ co1é2 co1ef co1en co1ex .con4 .cons4 .contre1s2c .contre3maître co2nurb .co1o2 .co2o3lie 1c2r 4cre. 4cres. 2crent. 1cu 1cû 1cy .cul4 1d' 1da 1dâ .dacryo1a2 d1d2h 1de 1dé 1dè 1dê 4de. 4des. 2dent. déca3dent. é3dent. cci3dent. inci3dent. confi3dent. tri3dent. dissi3dent. chien3dent. .ar3dent. impu3dent. pru3dent. .dé1a2 .dé1io .dé1o2 .dé2s .dé3s2a3cr .dés2a3m .dé3s2a3tell .dé3s2astr .dé3s2c .dé2s1é2 .dé3s2é3gr .dé3s2ensib .dé3s2ert .dé3s2exu .dé2s1i2 .dé3s2i3d .dé3s2i3gn .dé3s2i3li .dé3s2i3nen .dé3s2invo .dé3s2i3r .dé3s2ist .dé3s2o3dé .dé2s1œ .dé3s2o3l .dé3s2o3pil .dé3s2orm .dé3s2orp .dé3s2oufr .dé3s2p .dé3s2t .dé2s1u2n 3d2hal 3d2houd 1di 1dî di2s3cop .di1a2cé .di1a2cid .di1ald .di1a2mi .di1a2tom .di1e2n .di2s3h 2dlent. 1do 1dô 1d2r 4dre. 4dres. 2drent. d1s2 1du 1dû 1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 .dy2s1u2 .e4 'e4 .ê4 'ê4 .é4 'é4 .è4 'è4 éd2hi 1é2drie 1é2drique 1é2lectr 1é2lément .en1a2 'en1a2 1é2nerg e2n1i2vr .en1o2 'en1o2 épi2s3cop épi3s4cope e2s3cop .eu2r1a2 'eu2r1a2 eu1s2tat extra1 extra2c extra2i 1fa 1fâ 1fe 1fé 1fè 1fê 4fe. 4fes. 2fent. 1fi 1fî 1f2l 4fle. 4fles. 2flent. 1fo 1fô 1f2r 4fre. 4fres. 2frent. f1s2 1fu 1fû 1fy 1ga 1gâ 1ge 1gé 1gè 1gê 4ge. 4ges. 2gent. ré3gent. entre3gent. indi3gent. dili3gent. intelli3gent. indul3gent. tan3gent. rin3gent. contin3gent. .ar3gent. 'ar3gent. ser3gent. ter3gent. résur3gent. 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1gî 1g2l 4gle. 4gles. 2glent. 1g2n 'a2g3nat .a2g3nat a2g3nos co2g3niti 'i2g3né .i2g3né 'i2g3ni .i2g3ni .ma2g3nicide .ma2g3nificat .ma2g3num o2g3nomoni o2g3nosi .pro2g3nath pu2g3nable pu2g3nac .sta2g3n .syn2g3nath wa2g3n 4gne. 4gnes. 2gnent. 1go 1gô 1g2r 4gre. 4gres. 2grent. 1gu 1gû g1s2 4gue. 4gues. 2guent. .on3guent. 'on3guent. 1gy 1ha 1hâ 1he 1hé 1hè 1hê hémi1é hémo1p2t 4he. 4hes. 1hi 1hî 1ho 1hô 1hu 1hû 1hy hypera2 hypere2 hyperé2 hyperi2 hypero2 hypers2 hype4r1 hyperu2 hypo1a2 hypo1e2 hypo1é2 hypo1i2 hypo1o2 hypo1s2 hypo1u2 .i4 'i4 .î4 'î4 i1algi i1arthr i1è2dre il2l cil3l rcil4l ucil4l vacil4l gil3l hil3l lil3l l3lion mil3l mil4let émil4l semil4l rmil4l armil5l capil3l papil3la papil3le papil3li papil3lom pupil3l piril3l thril3l cyril3l ibril3l pusil3l .stil3l distil3l instil3l fritil3l boutil3l vanil3lin vanil3lis vil3l avil4l chevil4l uevil4l uvil4l xil3l 1informat '2informat .in1a2 'in1a2 .in2a3nit 'in2a3nit .in2augur 'in2augur .in1e2 'in1e2 .in1é2 'in1é2 .in2effab 'in2effab .in2é3lucta 'in2é3lucta .in2é3narra 'in2é3narra .in2ept 'in2ept .in2er 'in2er .in2exora 'in2exora .in1i2 'in1i2 .in2i3miti 'in2i3miti .in2i3q 'in2i3q .in2i3t 'in2i3t .in1o2 'in1o2 .in2o3cul 'in2o3cul .in2ond 'in2ond .in1s2tab 'in1s2tab 'inte4r3 .intera2 'intera2 .intere2 'intere2 .interé2 'interé2 .interi2 'interi2 .intero2 'intero2 .inte4r3 .interu2 'interu2 .inters2 'inters2 .in1u2 'in1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy i1s2tat 1j 2jk 4je. 4jes. 2jent. 1ka 1kâ 1ke 1ké 1kè 1kê 4ke. 4kes. 2kent. 1k2h 4kh. .kh4 1ki 1kî 1ko 1kô 1k2r 1ku 1kû 1ky 1la 1lâ 1là la2w3re 1le 1lé 1lè 1lê 4le. 4les. 2lent. .ta3lent. iva3lent. équiva4lent. monova3lent. polyva3lent. re3lent. .do3lent. indo3lent. inso3lent. turbu3lent. succu3lent. fécu3lent. trucu3lent. opu3lent. corpu3lent. ru3lent. sporu4lent. 1li 1lî 1lo 1lô l1s2t 1lu 1lû 1ly 1ma 1mâ .ma2c3k .macro1s2c .ma2l1a2dres .ma2l1a2dro .ma2l1aisé .ma2l1ap .ma2l1a2v .ma2l1en .ma2l1int .ma2l1oc .ma2l1o2d .ma2r1x 1me 1mé 1mè 1mê .mé2g1oh .mé2sa .mé3san .mé2s1es .mé2s1i .mé2s1u2s .méta1s2ta 4me. 4mes. â2ment. da2ment. fa2ment. amalga2ment. cla2ment. ra2ment. tempéra3ment. ta2ment. testa3ment. qua2ment. è2ment. carê2ment. diaphrag2ment. ryth2ment. ai2ment. rai3ment. abî2ment. éci2ment. vidi2ment. subli2ment. éli2ment. reli2ment. mi2ment. ani2ment. veni2ment. ri2ment. détri3ment. nutri3ment. inti2ment. esti2ment. l2ment. flam2ment. gram2ment. .gem2ment. om2ment. .com3ment. ô2ment. slalo2ment. chro2ment. to2ment. ar2ment. .sar3ment. er2ment. antifer3ment. .ser3ment. fir2ment. or2ment. as2ment. au2ment. écu2ment. fu2ment. hu2ment. fichu3ment. llu2ment. plu2ment. bou2ment. bru2ment. su2ment. tu2ment. 1mi 1mî .milli1am 1m2némo 1m2nès 1m2nési 1mo 1mô 1mœ .mono1a2 .mono1e2 .mono1é2 .mono1i2 .mono1ï2dé .mono1o2 .mono1u2 .mono1s2 mon2t3réal m1s2 1mu 1mû 1my moye2n1â2g 1na 1nâ 1ne 1né 1nè 1nê 4ne. 4nes. 2nent. réma3nent. imma3nent. perma3nent. .émi3nent. préémi3nent. proémi3nent. surémi3nent. immi3nent. conti3nent. perti3nent. absti3nent. 1ni 1nî 1no 1nô 1nœ .no2n1obs 1nu 1nû n3s2at. n3s2ats. n1x 1ny .o4 'o4 'ô4 .ô4 o2b3long 1octet '2octet o1d2l o1è2dre o1ioni ombud2s3 omni1s2 o1s2tas o1s2tat o1s2téro o1s2tim o1s2tom o1s2trad o1s2tratu o1s2triction .oua1ou 'oua1ou .ovi1s2c 'ovi1s2c oxy1a2 1pa 1pâ paléo1é2 .pa2n1a2f .pa2n1a2mé .pa2n1a2ra .pa2n1is .pa2n1o2ph .pa2n1opt .pa2r1a2che .pa2r1a2chè .para1s2 .pa2r3hé 1pe 1pé 1pè 1pê 4pe. 4pes. 2pent. re3pent. .ar3pent. 'ar3pent. ser3pent. .pen2ta per3h pé2nul .pe4r .per1a2 .per1e2 .per1é2 .per1i2 .per1o2 .per1u2 pé1r2é2q .péri1os .péri1s2 .péri2s3s .péri2s3ta .péri1u2 1p2h .ph4 4ph. .phalan3s2t 4phe. 4phes. 2phent. ph2l 4phle. 4phles. 2phn photo1s2 ph2r 4phre. 4phres. 2phs 2pht 3ph2talé 3ph2tis 1pi 1pî 1p2l 4ple. 4ples. 2plent. .pluri1a 1p2né 1p2neu 1po 1pô po1astre poly1a2 poly1e2 poly1é2 poly1è2 poly1i2 poly1o2 poly1s2 poly1u2 .pon2tet .pos2t3h .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r 4pre. 4pres. 2prent. .pré1a2 .pré2a3la .pré2au .pré1é2 .pré1e2 .pré1i2 .pré1o2 .pré1u2 .pré1s2 .pro1é2 .pro1s2cé pro2s3tat .prou3d2h 1p2sych .psycho1a2n 1p2tèr 1p2tér 1pu .pud1d2l 1pû 1py 1q 4que. 4ques. 2quent. é3quent. élo3quent. grandilo3quent. 1ra 1râ radio1a2 1re 1ré 1rè 1rê .ré1a2 .ré2a3le .ré2a3lis .ré2a3lit .ré2aux .ré1é2 .ré1e2 .ré2el .ré2er .ré2èr .ré1i2 .ré2i3fi .ré1o2 .re1s2 .re2s3cap .re2s3cisi .re2s3ciso .re2s3cou .re2s3cri .re2s3pect .re2s3pir .re2s3plend .re2s3pons .re2s3quil .re2s3s .re2s3t .re3s4tab .re3s4tag .re3s4tand .re3s4tat .re3s4tén .re3s4tér .re3s4tim .re3s4tip .re3s4toc .re3s4top .re3s4tr .re4s5trein .re4s5trict .re4s5trin .re3s4tu .re3s4ty .réu2 .ré2uss .rétro1a2 4re. 4res. 2rent. .pa3rent. appa3rent. transpa3rent. é3rent. tor3rent. cur3rent. 1r2h 4rhe. 4rhes. 2r3heur 2r3hydr 1ri 1rî 1ro 1rô 1ru 1rû 1ry 1sa 1sâ .sch4 1s2caph 1s2clér 1s2cop 1s2ch e2s3ch i2s3ché i2s3chia i2s3chio 4sch. 4sche. 4sches. 2schs 1se 1sé 1sè 1sê sesqui1a2 4se. 4ses. 2sent. ab3sent. pré3sent. .res3sent. .seu2le .sh4 1s2h 4sh. 4she. 4shes. 2shent. 2shm 2s3hom 2shr 2shs 1si 1sî 1s2lav 1s2lov 1so 1sô 1sœ 1s2patia 1s2perm 1s2por 1s2phèr 1s2phér 1s2piel 1s2piros 1s2tandard 1s2tein stéréo1s2 1s2tigm 1s2tock 1s2tomos 1s2troph 1s2tructu 1s2tyle 1su 1sû .su2b1a2 .su3b2alt .su2b1é2 .su3b2é3r .su2b1in .su2b3limin .su2b3lin .su2b3lu sub1s2 .su2b1ur supero2 supe4r1 supers2 .su2r1a2 su3r2ah .su3r2a3t .su2r1e2 .su3r2eau .su3r2ell .su3r2et .su2r1é2 .su2r3h .su2r1i2m .su2r1inf .su2r1int .su2r1of .su2r1ox 1sy 1ta 1tâ 1tà tachy1a2 tchin3t2 1te 1té 1tè 1tê télé1e2 télé1i2 télé1o2b télé1o2p télé1s2 4te. 4tes. 2tent. .la3tent. .pa3tent. compé3tent. éni3tent. mécon3tent. omnipo3tent. ventripo3tent. équipo3tent. impo3tent. mit3tent. .th4 1t2h 4th. 4the. 4thes. thermo1s2 2t3heur 2thl 2thm 2thn th2r 4thre. 4thres. 2ths 1ti 1tî 1to 1tô 1t2r tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p tran2s1u2 4tre. 4tres. 2trent. .tri1a2c .tri1a2n .tri1a2t .tri1o2n t1t2l 1tu 1tû tung2s3 1ty .u4 'u4 .û4 'û4 uni1o2v uni1a2x u2s3tr 1va 1vâ 1ve 1vé 1vè 1vê vélo1s2ki 4ve. 4ves. 2vent. conni3vent. .sou3vent. 1vi 1vî 1vo 1vô vol2t1amp 1v2r 4vre. 4vres. 2vrent. 1vu 1vû 1vy 1wa 1we 4we. 4wes. 2went. 1wi 1wo 1wu 1w2r 2xent. .y4 'y4 y1asth y1s2tom y1algi 1za 1ze 1zé 1zè 4ze. 4zes. 2zent. privatdo3zent. 1zi 1zo 1zu 1zy", ["lefthyphenmin"]=1, - ["length"]=9673, - ["n"]=1216, + ["length"]=8953, + ["n"]=1145, ["righthyphenmax"]=1, }, ["version"]="1.001", diff --git a/tex/context/patterns/mkiv/lang-it.lua b/tex/context/patterns/mkiv/lang-it.lua index 20d8648a0..3d0aa6408 100644 --- a/tex/context/patterns/mkiv/lang-it.lua +++ b/tex/context/patterns/mkiv/lang-it.lua @@ -9,11 +9,11 @@ return { ["texcomment"]="% no comment", }, ["patterns"]={ - ["characters"]="'abcdefghijklmnopqrstuvwxyz’", - ["data"]=".a3p2n .anti1 .anti3m2n .bio1 .ca4p3s .circu2m1 .contro1 .di2s3cine .e2x1eu .fran2k3 .free3 .li3p2sa .narco1 .opto1 .orto3p2 .para1 .ph2l .ph2r .poli3p2 .pre1 .p2s .re1i2scr .sha2re3 .tran2s3c .tran2s3d .tran2s3l .tran2s3n .tran2s3p .tran2s3r .tran2s3t .su2b3lu .su2b3r .wa2g3n .wel2t1 2'2 2’2 a1ia a1ie a1io a1iu a1uo a1ya 2at. e1iu e2w o1ia o1ie o1io o1iu 1b 2bb 2bc 2bd 2bf 2bm 2bn 2bp 2bs 2bt 2bv b2l b2r 2b. 2b' 2b’ 1c 2cb 2cc 2cd 2cf 2ck 2cm 2cn 2cq 2cs 2ct 2cz 2chh c2h 2ch. 2ch'. 2ch’. 2ch''. 2ch’’. 2chb ch2r 2chn c2l c2r 2c. 2c' 2c’ .c2 1d 2db 2dd 2dg 2dl 2dm 2dn 2dp d2r 2ds 2dt 2dv 2dw 2d. 2d' 2d’ .d2 1f 2fb 2fg 2ff 2fn f2l f2r 2fs 2ft 2f. 2f' 2f’ 1g 2gb 2gd 2gf 2gg g2h g2l 2gm g2n 2gp g2r 2gs 2gt 2gv 2gw 2gz 2gh2t 2g. 2g' 2g’ .h2 1h 2hb 2hd 2hh hi3p2n h2l 2hm 2hn 2hr 2hv 2h. 2h' 2h’ .j2 1j 2j. 2j' 2j’ .k2 1k 2kg 2kf k2h 2kk k2l 2km k2r 2ks 2kt 2k. 2k' 2k’ 1l 2lb 2lc 2ld 2l3f2 2lg l2h l2j 2lk 2ll 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2lv 2lw 2lz 2l. 2l'. 2l’. 2l'' 2l’’ 1m 2mb 2mc 2mf 2ml 2mm 2mn 2mp 2mq 2mr 2ms 2mt 2mv 2mw 2m. 2m' 2m’ 1n 2nb 2nc 2nd 2nf 2ng 2nk 2nl 2nm 2nn 2np 2nq 2nr 2ns n2s3fer 2nt 2nv 2nz n2g3n 2nheit 2n. 2n' 2n’ 1p 2pd p2h p2l 2pn 3p2ne 2pp p2r 2ps 3p2sic 2pt 2pz 2p. 2p' 2p’ 1q 2qq 2q. 2q' 2q’ 1r 2rb 2rc 2rd 2rf r2h 2rg 2rk 2rl 2rm 2rn 2rp 2rq 2rr 2rs 2rt r2t2s3 2rv 2rx 2rw 2rz 2r. 2r' 2r’ 1s2 2shm 2sh. 2sh' 2sh’ 2s3s s4s3m 2s3p2n 2stb 2stc 2std 2stf 2stg 2stm 2stn 2stp 2sts 2stt 2stv 2sz 4s. 4s'. 4s’. 4s'' 4s’’ .t2 1t 2tb 2tc 2td 2tf 2tg t2h 2th. t2l 2tm 2tn 2tp t2r t2s 3t2sch 2tt t2t3s 2tv 2tw t2z 2tzk tz2s 2t. 2t'. 2t’. 2t'' 2t’’ 1v 2vc v2l v2r 2vv 2v. 2v'. 2v’. 2v'' 2v’’ 1w w2h wa2r 2w1y 2w. 2w' 2w’ 1x 2xb 2xc 2xf 2xh 2xm 2xp 2xt 2xw 2x. 2x' 2x’ y1ou y1i 1z 2zb 2zd 2zl 2zn 2zp 2zt 2zs 2zv 2zz 2z. 2z'. 2z’. 2z'' 2z’’ .z2", + ["characters"]="'abcdefghijklmnopqrstuvwxyz", + ["data"]=".a3p2n .anti1 .anti3m2n .bio1 .ca4p3s .circu2m1 .contro1 .di2s3cine .e2x1eu .fran2k3 .free3 .li3p2sa .narco1 .opto1 .orto3p2 .para1 .ph2l .ph2r .poli3p2 .pre1 .p2s .re1i2scr .sha2re3 .tran2s3c .tran2s3d .tran2s3l .tran2s3n .tran2s3p .tran2s3r .tran2s3t .su2b3lu .su2b3r .wa2g3n .wel2t1 2'2 a1ia a1ie a1io a1iu a1uo a1ya 2at. e1iu e2w o1ia o1ie o1io o1iu 1b 2bb 2bc 2bd 2bf 2bm 2bn 2bp 2bs 2bt 2bv b2l b2r 2b. 2b' 1c 2cb 2cc 2cd 2cf 2ck 2cm 2cn 2cq 2cs 2ct 2cz 2chh c2h 2ch. 2ch'. 2ch''. 2chb ch2r 2chn c2l c2r 2c. 2c' .c2 1d 2db 2dd 2dg 2dl 2dm 2dn 2dp d2r 2ds 2dt 2dv 2dw 2d. 2d' .d2 1f 2fb 2fg 2ff 2fn f2l f2r 2fs 2ft 2f. 2f' 1g 2gb 2gd 2gf 2gg g2h g2l 2gm g2n 2gp g2r 2gs 2gt 2gv 2gw 2gz 2gh2t 2g. 2g' .h2 1h 2hb 2hd 2hh hi3p2n h2l 2hm 2hn 2hr 2hv 2h. 2h' .j2 1j 2j. 2j' .k2 1k 2kg 2kf k2h 2kk k2l 2km k2r 2ks 2kt 2k. 2k' 1l 2lb 2lc 2ld 2l3f2 2lg l2h l2j 2lk 2ll 2lm 2ln 2lp 2lq 2lr 2ls 2lt 2lv 2lw 2lz 2l. 2l'. 2l'' 1m 2mb 2mc 2mf 2ml 2mm 2mn 2mp 2mq 2mr 2ms 2mt 2mv 2mw 2m. 2m' 1n 2nb 2nc 2nd 2nf 2ng 2nk 2nl 2nm 2nn 2np 2nq 2nr 2ns n2s3fer 2nt 2nv 2nz n2g3n 2nheit 2n. 2n' 1p 2pd p2h p2l 2pn 3p2ne 2pp p2r 2ps 3p2sic 2pt 2pz 2p. 2p' 1q 2qq 2q. 2q' 1r 2rb 2rc 2rd 2rf r2h 2rg 2rk 2rl 2rm 2rn 2rp 2rq 2rr 2rs 2rt r2t2s3 2rv 2rx 2rw 2rz 2r. 2r' 1s2 2shm 2sh. 2sh' 2s3s s4s3m 2s3p2n 2stb 2stc 2std 2stf 2stg 2stm 2stn 2stp 2sts 2stt 2stv 2sz 4s. 4s'. 4s'' .t2 1t 2tb 2tc 2td 2tf 2tg t2h 2th. t2l 2tm 2tn 2tp t2r t2s 3t2sch 2tt t2t3s 2tv 2tw t2z 2tzk tz2s 2t. 2t'. 2t'' 1v 2vc v2l v2r 2vv 2v. 2v'. 2v'' 1w w2h wa2r 2w1y 2w. 2w' 1x 2xb 2xc 2xf 2xh 2xm 2xp 2xt 2xw 2x. 2x' y1ou y1i 1z 2zb 2zd 2zl 2zn 2zp 2zt 2zs 2zv 2zz 2z. 2z'. 2z'' .z2", ["lefthyphenmin"]=1, - ["length"]=1839, - ["n"]=384, + ["length"]=1637, + ["n"]=355, ["righthyphenmax"]=1, }, ["version"]="1.001", diff --git a/tex/context/patterns/mkiv/lang-nb.lua b/tex/context/patterns/mkiv/lang-nb.lua index 1ee9e55fd..34e5e0ff8 100644 --- a/tex/context/patterns/mkiv/lang-nb.lua +++ b/tex/context/patterns/mkiv/lang-nb.lua @@ -1,10 +1,10 @@ return { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ - ["characters"]="abdenrt", - ["data"]="at-ten-de be-tre", - ["length"]=16, - ["n"]=2, + ["characters"]="ABDGHKMNSZabcdefghijklmnoprstuvwyzåæøü", + ["data"]="Ant-wer-pen Arm-strong Arm-strongs Beo-grad Beo-grads Brynj-ulf Brynj-ulfs Brynj-ulv Brynj-ulvs Dansk-øya Demo-sthe-nes Gan-dhi Gan-dhis Helmut Kam-tsjat-ka Me-dina Nielsen Nielsens Not-odden Not-oddens Sien-kie-wicz Steinar Steinars Steins-land Stendhal Stendhals Zara-thust-ra Zara-thust-ras atten-de aust-røn av-ise aviser betre bil-skyss bil-skyssen bord-ende bortan-for bortre båt-skyss båt-skyssen celle-ska-de celle-ska-den celle-ska-der celle-ska-dene cheese dess-uak-tet dit-over elev-skys-sen elev-skyss et-steds finger-spitzen-ge-fühl finger-spitz-ge-fühl fram-ifrå før-enn gi-vet-vis her-etter her-etter-dags hes-te-skyss hes-te-skyssen hvor-over inn-yver høist-ære-de kaste-sting lands-øl lands-ølet lands-ølets langt-ifra maling-slitt maling-slitte midt-etter midt-skys-sen midt-skyss ned-imot ned-om ned-yver noens næs-ten nøye-reg-nen-de opp-imot oven-ikjø-pet po-lar-is po-lar-isen polis polisen promp-te sel-ves-te skole-skys-sen skole-skyss skrov-is skrov-isen smal-enden spleen stokk-ende svart-svidd svart-svidde syd-enden sørpe-is sørpe-isen treskje tvert-om ukes-kor-tet ukes-kort ukes-kort-ene upp-yver ut-ørk ut-ørken velan velet", + ["length"]=1174, + ["n"]=108, }, ["metadata"]={ ["mnemonic"]="nb", diff --git a/tex/context/patterns/mkiv/lang-nn.lua b/tex/context/patterns/mkiv/lang-nn.lua index 84062f208..d2e484f7d 100644 --- a/tex/context/patterns/mkiv/lang-nn.lua +++ b/tex/context/patterns/mkiv/lang-nn.lua @@ -1,10 +1,10 @@ return { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ - ["characters"]="abdenrt", - ["data"]="att-en-de bet-re", - ["length"]=16, - ["n"]=2, + ["characters"]="ABDGHKMNSZabcdefghijklmnoprstuvwyzåæøü", + ["data"]="Ant-wer-pen Arm-strong Arm-strongs Beo-grad Beo-grads Brynj-ulf Brynj-ulfs Brynj-ulv Brynj-ulvs Dansk-øya Demo-sthe-nes Gan-dhi Gan-dhis Helmut Kam-tsjat-ka Me-dina Nielsen Nielsens Not-odden Not-oddens Sien-kie-wicz Steinar Steinars Steins-land Stendhal Stendhals Zara-thust-ra Zara-thust-ras atten-de aust-røn av-ise aviser betre bil-skyss bil-skyssen bord-ende bortan-for bortre båt-skyss båt-skyssen celle-ska-de celle-ska-den celle-ska-der celle-ska-dene cheese dess-uak-tet dit-over elev-skys-sen elev-skyss et-steds finger-spitzen-ge-fühl finger-spitz-ge-fühl fram-ifrå før-enn gi-vet-vis her-etter her-etter-dags hes-te-skyss hes-te-skyssen hvor-over inn-yver høist-ære-de kaste-sting lands-øl lands-ølet lands-ølets langt-ifra maling-slitt maling-slitte midt-etter midt-skys-sen midt-skyss ned-imot ned-om ned-yver noens næs-ten nøye-reg-nen-de opp-imot oven-ikjø-pet po-lar-is po-lar-isen polis polisen promp-te sel-ves-te skole-skys-sen skole-skyss skrov-is skrov-isen smal-enden spleen stokk-ende svart-svidd svart-svidde syd-enden sørpe-is sørpe-isen treskje tvert-om ukes-kor-tet ukes-kort ukes-kort-ene upp-yver ut-ørk ut-ørken velan velet", + ["length"]=1174, + ["n"]=108, }, ["metadata"]={ ["mnemonic"]="nn", diff --git a/tex/context/patterns/mkiv/lang-uk.lua b/tex/context/patterns/mkiv/lang-uk.lua index 32634ae76..b1cc1dea4 100644 --- a/tex/context/patterns/mkiv/lang-uk.lua +++ b/tex/context/patterns/mkiv/lang-uk.lua @@ -9,11 +9,11 @@ return { ["texcomment"]="% no comment", }, ["patterns"]={ - ["characters"]="'-абвгдежзийклмнопрстуфхцчшщьюяєіїґ’", - ["data"]="2а1 а3а а3е а3і а3о а3у а3ю а3я а3є а3ї 2е1 е3а е3е е3і е3о е3у е3ю е3я е3є е3ї 2и1 и3а и3е и3і и3о и3у и3ю и3я и3є и3ї 2і1 і3а і3е і3и і3о і3у і3ю і3я і3є і3ї 2о1 о3а о3е о3і о3о о3у о3ю о3я о3є о3ї 2у1 у3а у3е у3і у3о у3у у3ю у3я у3є у3ї 2ю1 ю3а ю3е ю3і ю3о ю3у ю3ю ю3я ю3є ю3ї 2я1 я3а я3е я3о я3у я3ю я3я я3є я3ї 2є1 є3у є3ю є3є є3ї 2ї1 ї3е ї3о ї3ю 2б1к 2б1п 2б1с 2б1т 2б1ф 2б1х 2б1ц 2б1ч 2б1ш 2б1щ 2в1б 2в1г 2в1д 2в1ж 2в1з 2в1к 2в1л 2в1м 2в1н 2в1п 2в1р 2в1с 2в1т 2в1ф 2в1х 2в1ц 2в1ч 2в1ш 2в1щ 2в1й 2в'3 2в’3 2г1к 2г1п 2г1с 2г1т 2г1ф 2г1ц 2г1ч 2г1ш 2д1к 2д1п 2д1с 2д1т 2д1ф 2д1х 2д1ц 2д1ч 2д1ш 2д1щ 2ж1к 2ж1п 2ж1с 2ж1т 2ж1ф 2ж1х 2ж1ц 2ж1ч 2ж1ш 2з1к 2з1п 2з1с 2з1т 2з1ф 2з1х 2з1ц 2з1ч 2з1ш 2з1щ 2к1б 2к1г 2к1д 2к1з 2л1б 2л1в 2л1г 2л1ґ 2л1д 2л1ж 2л1з 2л1к 2л1м 2л1н 2л1п 2л1р 2л1с 2л1т 2л1ф 2л1х 2л1ц 2л1ч 2м1б 2м1в 2м1г 2м1д 2м1ж 2м1з 2м1к 2м1л 2м1н 2м1п 2м1р 2м1с 2м1т 2м1ф 2м1х 2м1ц 2м1ч 2м1ш 2м1щ 2м'3 2м’3 2н1б 2н1в 2н1г 2н1д 2н1ж 2н1з 2н1к 2н1л 2н1м 2н1п 2н1р 2н1с 2н1т 2н1ф 2н1х 2н1ц 2н1ч 2н1ш 2н1щ 2н'3 2н’3 2п1б 2п1д 2п1з 2р1б 2р1в 2р1г 2р1ґ 2р1д 2р1ж 2р1з 2р1к 2р1л 2р1м 2р1н 2р1п 2р1с 2р1т 2р1ф 2р1х 2р1ц 2р1ч 2р1ш 2р1щ 2р1й 2р'3 2р’3 2с1б 2с1г 2с1д 2т1б 2т1г 2т1д 2т1ж 2т1з 2ф1б 2ф1г 2ф1з 2х1г 2х1д 2ц1б 2ц1г 2ц1д 2ц1з 2ч1б 2ч1д 2ч1ж 2ш1б 2ш1г 2й1б 2й1в 2й1г 2й1д 2й1ж 2й1з 2й1к 2й1л 2й1м 2й1н 2й1п 2й1р 2й1с 2й1т 2й1ф 2й1х 2й1ц 2й1ч 2й1ш 2й1щ 2дь1к 2дь1с 2дь1т 2дь1ц 2зь1к 2зь1с 2зь1т 2ль1б 2ль1в 2ль1г 2ль1д 2ль1ж 2ль1з 2ль1к 2ль1м 2ль1н 2ль1п 2ль1р 2ль1с 2ль1т 2ль1ф 2ль1х 2ль1ц 2ль1ч 2ль1ш 2ль1щ 2ль1й 2нь1б 2нь1г 2нь1з 2нь1к 2нь1л 2нь1м 2нь1с 2нь1т 2нь1х 2нь1ц 2нь1ч 2нь1ш 2нь1й 2рь1к 2рь1ц 2сь1б 2сь1д 2ть1б 2к1сп 2к1ст 2к1ськ 2п1сп 2п1ст 2п1ськ 2с1пк 2с1пп 2с1пс 2с1пт 2с1пх 2с1пч 2с1ськ 2с1тк 2с1тп 2с1тс 2с1тсь 2с1тт 2с1тф 2с1тц 2с1шт 2сь1кк 2сь1кс 2сь1кт 2т1ск 2т1сп 2т1ст 2т1ськ 2т1шк 2ф1сп 2ф1ст 2ф1ськ 2ф1шт 2х1ст 2х1ськ 2ц1ст 2ц1шк 2ш1тк 2ш1тсь 2б1б 2в1в 2г1г 2ґ1ґ 2д1д 2ж1ж 2з1з 2к1к 2л1л 2м1м 2н1н 2п1п 2р1р 2с1с 2т1т 2ф1ф 2х1х 2ц1ц 2ч1ч 2ш1ш 2щ1щ 2й1й 3ння 3ття 3ттю 3лля 3ллє 3ллю 3ддя д4ж д4з а2й е2й и2й і2й о2й у2й ю2й я2й є2й ї2й 3й6о ь6о 6' 6’ 6ь .б'8 .б’8 .в'8 .в’8 .д'8 .д’8 .з'8 .з’8 .м'8 .м’8 .н'8 .н’8 .п'8 .п’8 .р'8 .р’8 .т'8 .т’8 .ф'8 .ф’8 .ш'8 .ш’8 .бд6 .бр6 .вб6 .вб6'6 .вб6’6 .вв6'6 .вв6’6 .вг6 .вд6 .вж6 .вз6 .вз6д6 .вк6 .вл6 .вм6 .вм6'6 .вм6’6 .вп6 .вп6'6 .вп6’6 .вп6х6 .вс6 .вс6т6 .вт6 .вш6к6 .дж6 .дз6 .дл6 .дс6 .зб6 .зв6'6 .зв6’6 .зг6 .зд6 .зд6з6 .зл6 .зм6'6 .зм6’6 .зс6 .зс6к6 .зс6т6 .зч6 .зш6 .зш6к6 .зґ6 .йш6 .кл6 .кп6 .кс6 .кх6 .кш6 .лк6с6 .лс6 .ль6 .мс6 .мф6 .нб6 .пр6 .пс6 .пх6 .рт6 .ск6 .ск6л6 .сл6 .сп6 .сп6'6 .сп6’6 .сп6л6 .сп6х6 .ст6 .сх6 .сх6л6 .тк6 .тр6 .тх6 .ть6 .фл6 .хл6 .ць6 .чх6 .шк6 .шл6 .шп6 .шт6 6бв. 6бз. 6бй. 6бл. 6б6ль. 6бн. 6бр. 6бс. 6б6ст. 6б6с6тв. 6б6с6тр. 6б6с6ьк. 6б6ць. 6вб. 6вв. 6вд. 6в6др. 6в6дь. 6вж. 6вз. 6в6зь. 6вй. 6вк. 6вл. 6в6ль. 6вм. 6вн. 6вп. 6вр. 6вс. 6в6с6тв. 6в6с6ть. 6в6сь. 6в6с6ьк. 6вт. 6вх. 6в6ць. 6вч. 6вш. 6вщ. 6гв. 6гг. 6гд. 6гл. 6г6ль. 6гм. 6гн. 6гр. 6гс. 6г6с6тв. 6г6сь. 6гт. 6дж. 6дз. 6д6зь. 6дл. 6дм. 6дн. 6др. 6д6с6тв. 6д6с6ьк. 6дт. 6дь. 6д6ь6сь. 6жб. 6жв. 6ж6дь. 6ж6сь. 6зв. 6зг. 6зд. 6з6дв. 6з6дн. 6з6дь. 6зк. 6зл. 6зм. 6зн. 6з6нь. 6зр. 6з6сь. 6зь. 6з6ьб. 6з6ьк. 6йб. 6йв. 6йг. 6йд. 6йз. 6йк. 6й6кл. 6йл. 6й6ль. 6йм. 6й6мс. 6йн. 6й6нс. 6йп. 6йр. 6йс. 6й6ст. 6й6с6тв. 6й6с6тр. 6й6сь. 6й6с6ьк. 6йт. 6й6тс. 6йф. 6йх. 6йц. 6йч. 6йш. 6кв. 6кк. 6кл. 6к6ль. 6кр. 6кс. 6к6ст. 6к6сь. 6кт. 6к6тр. 6кх. 6кш. 6лб. 6лг. 6лд. 6лк. 6лл. 6л6ль. 6лм. 6л6мс. 6лн. 6лп. 6лс. 6лт. 6л6хв. 6ль. 6л6ьб. 6л6ьв. 6л6ьг. 6л6ьд. 6л6ь6дс. 6л6ьз. 6л6ьк. 6л6ьм. 6л6ьн. 6л6ьп. 6л6ьс. 6л6ь6ств. 6л6ь6сь. 6л6ь6ськ. 6л6ьт. 6л6ь6тр. 6л6ьф. 6л6ьх. 6л6ьц. 6л6ьч. 6л6ьш. 6л6ьщ. 6мб. 6м6б6ль. 6м6бр. 6мг. 6мж. 6мк. 6мл. 6м6ль. 6мм. 6мн. 6мп. 6мр. 6мс. 6м6с6тв. 6м6сь. 6м6с6ьк. 6мт. 6мф. 6мх. 6мш. 6нв. 6нг. 6н6гл. 6н6г6ль. 6н6гр. 6н6гс. 6нд. 6н6дж. 6н6дз. 6н6дп. 6н6др. 6нж. 6нз. 6нк. 6н6кс. 6н6кт. 6нм. 6нн. 6нр. 6нс. 6н6ск. 6н6ст. 6н6с6тв. 6н6с6тр. 6н6с6ьк. 6н6с6ькй. 6нт. 6н6тк. 6н6тр. 6н6т6ств. 6н6ть. 6нф. 6нх. 6нц. 6н6ць. 6нч. 6нш. 6нь. 6н6ьб. 6н6ьг. 6н6ьк. 6н6ь6сь. 6пд. 6пл. 6пр. 6пс. 6п6с6тв. 6п6сь. 6пт. 6п6тр. 6пф. 6пц. 6рб. 6рв. 6рг. 6рд. 6р6дв. 6р6дж. 6р6дь. 6рж. 6рз. 6р6зн. 6р6зь. 6рк. 6р6кс. 6р6кт. 6рл. 6р6ль. 6р6л6ьз. 6рм. 6рн. 6р6нс. 6р6н6ст. 6р6нь. 6рп. 6рр. 6рс. 6р6ср. 6р6ст. 6р6с6тв. 6р6с6ть. 6р6сь. 6р6с6ьк. 6рт. 6р6тв. 6р6тр. 6р6ть. 6рф. 6рх. 6рц. 6р6ць. 6рч. 6рш. 6рщ. 6р6щ6сь. 6рь. 6с6дп. 6с6д6рп. 6ск. 6сл. 6с6ль. 6см. 6сн. 6сп. 6сс. 6ст. 6с6тв. 6с6тй. 6с6тм. 6с6тр. 6с6т6рь. 6с6ть. 6с6ць. 6сь. 6с6ьб. 6с6ьк. 6с6ьм. 6тв. 6т6вт. 6т6зт. 6тл. 6т6ль. 6тм. 6т6мр. 6тр. 6тс. 6т6с6тв. 6т6с6ьк. 6тт. 6тц. 6тч. 6ть. 6т6ь6сь. 6фм. 6фр. 6ф6с6тв. 6фт. 6ф6ть. 6фф. 6фь. 6хв. 6хм. 6хн. 6хр. 6хт. 6хш. 6ц6тв. 6ць. 6ц6ьк. 6чб. 6чм. 6чн. 6чт. 6шв. 6ш6ль. 6шм. 6шн. 6ш6нл. 6ш6сь. 6шт. 6ш6тв. 6щ6сь. .бе4з'3 .бе4з’3 .бе4з3 .безу4 .бе5з4о3д .без5о4соб .безві4д3 .без3ро4з3 виї4 .ві5д4ом .ві5д4озв .ві5д4ун віду4ч .ві5д4а .ві5д4ер .ві5д4і .ві4д3 .від'3 .від’3 .мі4ж3 безві4д3 ові4д3 ді4єві4д3 за4вві4д3 неві4д'3 неві4д’3 неві4д3 про4ф3ві4д3 спе4ц3ві4д3 співві4д3 те4х3ві4д3 .пере4д3бач .пере4д3виб .пере4д3г .пере4д3д .пере4д3м .пере4д3ост .пере4д3пла .пере4д3пок .пере4д3р .пере4д3св .пере4д3умов .пере4д3усі .пере4д3фр .пере4д3ч .пере4д'3 .пере4д’3 .пере3 .пона4д3 .пона5д4і .пона5д4и .пона5д4я 3п4ре 3п4ри приї4 3п4ро 3п4рі .пі5д4о .пі5д4і .під'3 .під’3 .пі4д3 .пі5д4е .пі5д4и .пі5д4у .пі4в3 .спі4в3 .напі4в3 .ро5з4і .ро5з4е ро5з4йом .ро5з4а .ро4з'3 .ро4з’3 .ро4з3 .чере4з'3 .чере4з’3 .чере4з3 оо4б ооб'3 ооб’3 ооб3м ооб3ро об'3 об’3 од'3 од’3 на4д'3 на4д’3 за5о4р до5о4р по5о4р пере5о4р пі6д5о4р бе4з5і4дей до3в'4є до3в’4є за3в'4є за3в’4є зі3в'4є зі3в’4є обі3в'4є обі3в’4є по3в'4є по3в’4є уі3в'4є уі3в’4є з3в'4я з3в’4я по3в'4я по3в’4я від3в'4я від3в’4я за3в'4я за3в’4я зі3в'4я зі3в’4я за3ю4ш на3в'4я на3в’4я непо3в'4я непо3в’4я об3в'4я об3в’4я при3в'4я при3в’4я під3в'4я під3в’4я у3в'4я у3в’4я з3м'4я з3м’4я зі3м'4я зі3м’4я у3м'4я у3м’4я в3м'4я в3м’4я но3м'4я но3м’4я за3м'4я за3м’4я на3м'4я на3м’4я об3м'4я об3м’4я пере3м'4я пере3м’4я по3м'4я по3м’4я при3м'4я при3м’4я піді3м'4я піді3м’4я су3м'4я су3м’4я до3в'4ю до3в’4ю за3в'4ю за3в’4ю зі3в'4ю зі3в’4ю на3в'4ю на3в’4ю по3в'4ю по3в’4ю уі3в'4ю уі3в’4ю інтер3в'4ю інтер3в’4ю за3я4ло коу4роч зу4роч наду4роч позау4роч поу4роч приу4роч на4й3у4бог нао4р прио4р неу4к 3в4б4лаг 3в4к4лад 3в4п4лив 3в4п4равн 3в4р4одлив 3в4т4рут 3в4т4руч 3з4б4рой 3з4б4рою 3з4б4роє 3з4в4'яз 3з4в4’яз 3й4ш4л 3м4к4не 3м4к4ну 3м4к4ні 3п4с4ков 3с4к4лад 3с4к4ле 3с4к4лит 3с4к4ло 3с4к4рипт 3с4п4лав 3с4п4лат 3с4п4лач 3с4п4рав 3с4п4ритн 3с4п4рият 3с4п4ромо 3с4т4вор 3с4т4ражд 3с4т4рах 3с4т4риб 3с4т4риж 3с4т4рой 3с4т4рок 3с4т4ром 3с4т4роф 3с4т4роч 3с4т4рою 3с4т4роя 3с4т4роє 3с4т4рої 3с4т4рукт 3с4т4рукц 3с4т4рій 3с4т4ріл 3с4т4річ 3т4к4нен 3т4ь4мар 3т4ь4мяні 3у4п4рав 3блаж 3ближ 3близ 3блиск 3блок 3блоці 3бран 3брати 3брест 3бризк 3британ 3бруд 3в4бив 3в4веден 3в4дал 3в4довз 3в4довол 3в4живан 3в4лад 3в4ласн 3в4лашт 3в4лов 3в4певн 3в4поряд 3в4разлив 3в4рожай 3в4сюд 3в4тіл 3глад 3глиб 3глин 3глоб 3глуз 3глуш 3гляд 3глян 3гнан 3гнил 3гноз 3гнучк 3грав 3град 3грай 3грам 3гран 3грати 3граф 3граш 3граю 3грає 3грес 3грець 3гроб 3грож 3гроз 3громад 3груван 3грунт 3груп 3грів 3гріт 3гріш 3г4ідро 3д4ан 3д4бав 3д4бал 3д4бан 3д4бат 3д4бає 3двиг 3двою 3двоє 3двій 3двір 3двічі 3драж 3дром 3друж 3друк 3дряп 3дріб 3дріма 3жвав 3жміть 3жріть 3з4бага 3з4баланс 3з4був 3з4бут 3зваж 3зван 3звед 3звел 3звест 3звись 3звич 3звищ 3зворуш 3звук 3звуч 3звіт 3з4год 3з4дат 3з4довж 3з4доров 3з4дійсн 3змін 3зйом 3зміш 3знав 3знай 3знак 3знал 3знан 3знат 3знаход 3знач 3знаю 3знає 3зниж 3знім 3зрозум 3зрюв 3зрів 3зріл 3зрін 3з4чеп 3й4ма 3й4менн 3й4мищ 3й4мовірн 3й4му. 3й4муть 3й4міть 3й4шов 3м4нож 3м4ріть 3м4щен 3п4сов 3п4сон 3п4сув 3р4вав 3р4вати 3р4віть 3с4кид 3с4кок 3с4коп 3с4кор 3с4короч 3с4коч 3с4кіль 3с4кіпл 3с4пад 3с4пект 3с4перм 3с4пин 3с4повід 3с4пожив 3с4постер 3с4пі 3с4піть 3с4піш 3с4табіл 3с4тав 3с4тад 3с4таз 3с4тайн 3с4тал 3с4тан 3с4тар 3с4тара 3с4тат 3с4тач 3с4тає 3с4теп 3с4тереж 3с4теріг 3с4тиг 3с4тиж 3с4тисл 3с4титу 3с4товб 3с4той 3с4торон 3с4торін 3с4тосо 3с4тосу 3с4тою 3с4тоян 3с4туп 3с4тяг 3с4тіб 3с4тій 3с4тіль 3с4тір 3с4фер 3с4хил 3с4хов 3с4хід 3т4кан 3х4то 3ш4код 3ш4кол 3ш4кідл 3ш4кіл 3ш4кір 3ш4таб 3ш4туч 3ґрунт 3а4вторит 3а4гент 3а4грес 3а4декват 3а4дитив 3а4зарт 3а4ктив 3а4ктуал 3а4курат 3а4куст 3а4кцепт 3а4кциз 3а4лергі 3а4матор 3а4наліз 3а4натом 3а4парат 3а4пеляц 3а4постол 3а4птеч 3а4ргумен 3а4ромат 3а4соці 3а4спект 3а4тлет 3а4халі 3е4колог 3е4коном 3е4легант 3е4лектр 3е4лемент 3е4моці 3е4мігр 3е4нерг 3е4стакад 3е4стет 3е4тап 3о4б'єдн 3о4б’єдн 3о4б'єкт 3о4б’єкт 3о4береж 3о4бира 3о4борон 3о4бід 3о4біц 3о4даль 3о4дяг 3о4збро 3о4крем 3о4перат 3о4плат 3о4птим 3о4пуст 3о4пуше 3о4пуще 3о4рдинац 3о4ренд 3о4соб 3о4сяжн 3о4холо 3о4хорон 3о4хоч 3о4чисн 3о4чищ 3у4ваг 3у4важ 3у4гав 3у4згод 3у4клад 3у4компл 3у4крупн 3у4люблен 3у4мит 3у4міл 3у4перед 3у4разлив 3у4рбан 3у4рочист 3у4ряд 3у4рядов 3у4спіш 3у4станов 3у4стпіш 3у4сувати 3у4твор 3у4тробн 3я4дерн 3я4зик 3я4кіс 3я4рус 3я4скрав 3є4д3н 3є4дин 3є4писк 3є4рей 3і4зотоп 3і4люстр 3і4мовір 3і4нтенс 3і4нформ 3і4ніціат 3і4снув 3ї4ждж 3ї4зд 3ї4ст 3ї4хав 3ї4хат .заї4к .заї4ц .заї4ч .наї4д 'ї4в ’ї4в 'ї4з ’ї4з 'ї4д ’ї4д 'ї4ж ’ї4ж 'ї4л ’ї4л 'ї4м ’ї4м 'ї4с ’ї4с 'ї4х ’ї4х аві4а авої4д ае4тил альбі5он ахої4д ауді4о ай4с3берг бактері4о ба4с3енер ба4с3антра .бе5зе. бей4сбол бе5кон б'4єть б’4єть бйор4нс бі4о3 бо4г3дан бран4д брі4дж3порт без5і4мен бо4є3гол бо4є3гот бо4є3зап бо4є3здат бо4є3комп бо4є3пост бо4є3прип бори4с5п 4в3антрац вер4х3н ви3й4д вина3й4д ви3й4т вина3й4т від7зна ві5д4ен ві5д4е4о ві5д4ом від5о4браж від5о4браз во4с5ко водо5с4ток водо5з4бір воль4т3метр воль4т3ампер 3в'4яз 3в’4яз ге2ть3ман ге4о го4с4п5роз гі4д5ро5мет 4д7зем дер4ж5а4том дер4ж5а4дм дер4ж5бюдж дер4ж5вид дер4ж5дум дер4ж5замов дер4ж5ком дер4ж5нафт дер4ж5реєс дер4ж3без дер4ж3резерв дер4ж5стр дер4ж5служ двох4а5том джен4тль дисбаланс ди4с3гарм ди4с3квал ди4с3комф ди4с3конт ди4с3кред ди4с3крет ди4с3крец ди4с3крим ди4с3кусі ди4с3куту ди4с3лок ди4с3парит ди4с3перс ди4с3петч ди4с3пле ди4с3плей ди4с3пози ди4с3проп ди4с3пут ди4с3тил ди4с3триб ди4с3троф ди4с3функц ді3й4т ді3й4д д4ні3п4р .дої4в .дої4л .дої5ль дої4д дої4м дої4х дої4ж дої4ст до3з4вол до3з4віл дорого5в4каз еу4стр ео4сві енерго3з4береж енерго3з4беріг ек2с1к ек2с1п ек2с1т ек2с1ц єв4р3атом єпі4с5коп єпи4с5коп за4п3част заї4д заї4ж заї4з заї4л заї4м заї4х зе4кономити 3з'4ясо 3з’4ясо зна3й4д зна3й4т зо4ка зо4ке зо4ки зо4ку зо4кі игої4д ий4ти іе4тил і4л3е4тил ій4ти інфор4м3аген йо4сві каза4х3стан квої4д корої4д квар4т3плат киї4венер кон4трре кон4тр3арг жко4м5а4том кому4ненерг мі4н5е4ко мі4н5е4нер мо4к5рий 3м'4якш 3м’4якш 3м'4ят 3м’4ят на3б4лиз на3в4ряд на3в4ча на3з4в на4д7з4в наї4вс наї4вш наї4ж наї4з наї4л наї4м наї4с наї4х на4й3а на4й3е на4й3обереж на4й7о4бер на4й7о4гид на4й7о4гол на4й7о4гряд на4й7о4пук на4й7о4хай на4й3масл на4й3спри на4й3якіс на3в4чен на3в4чіть не3в4том не3д4бан на3д4бан не3з4вич не3з4важ нео4пал недої4 неї4ст на5п4лив ні4т5рат оної4д оо4пал ео4пал обі3д4ран обі3й4д обі3й4т об5у4мов онаї4д оо4сві оо4к оу4стр оа4том об4лдер4ж об4л3а4дмін переї4д переї4ж переї4з переї4л переї4с переї4х пере5п4лив пере3й4д пре4й4с пере3й4т перег4ній перед5о4бід пере3в4том пере4д5см перед5у4мов під5о4дин пів5о4с4тр пі5в4ень по3б4лизу по3в4тор поч4не поч4ни поч4ну поя4в по3в4чен по3в4чіть по3д4роб по3д4раз по3д4во по5ж4ніть по5з4бав .пої4 пої4д прої4 пої4зд по4с4т5радян по4с4т5кому по4с4т3декр по4с4т3контра по4с4т3менопауз по4с4тприват по4с4т3раді по4с4т5соці пос4т3кап пос4т3ком пос4т3нат пос4т3проц пос4т3соц пос4т3фікс при3й4т про3с4тирад про4ф3с полі4т5екон пор4т3н пор4т3рет пор4т3фел при3й4д при4нцип про4ект3н про3б4лем про4м3май пр4о5плат раді4о рай3в4но ро4з5д4во ро4з5мінний роз5у4чен роз5і4мен роз5вант роз5вин роз5вит ро4з5діл ро4з5гор ро4з5вер ро4з5чеп ро4з'5єдн ро4з’5єдн з'4єдн з’4єдн руко5с4тиск ро5з4ум ро4з3гром ро4з3лив рмої4д сан4к4т3 сеї4д серцеї4д спе4ц3кур спе4ц3мон спе4цпр спе4ц3с спор4т3вир спор4т3зал спор4т3ком спор4т3клуб спор4т3май спор4т4с3ме сор4тн 3с4промож сь4квуг стат5упр тор4г3пред тран4с3 тур4к3мен цук3ро у4к4р укр3а4вт укр3а4гр укр3е4кс укр3і4н4банк убої4д чорно3б4рив цен4т4р3енерг ясої4д ви3у4ч за3у4ч на3у4ч недо3у4ч не3у4ч під3у4ч пед3у4чи пере3у4ч само3у4ч вия4в з'я4в з’я4в зая4в ная4в уя4в во4євод во4єнач сво4єчас сво4єкорис сво4єрід хво4є3г4риз гелі4о ді4о еті4о мі4о і4он полі4о соці4о фізі4о хімі4о гоме4о ді4алог ді4оген дея4к оо4динок ао4пік ао4ха ео4ха зо6о ка5нал оі4зол міжу4соб мете4о абия4к нія4к вия4сн най3я4сн нея4сн поя4сн проя4сн роз'я4сн роз’я4сн ро5з4ора. ро5з4о5рам ро5з4орах ро5з4ори ро5з4оро ро5з4ору ро5з4оря ро5з4орю ро5з4орі ро6з5о4ри. розо4ра розо4ре розо4реш розо4рн напоу4м неа4би ео4цін оо4цін доу4к доу4м ео4бур ео4голош ео4зор бальне4о не4оліт не4омальт не4оклас не4окомун не4оландш не4олог не4олібер не4онац не4офіт нею4н нея4к нея4рок но4к3а4ут пі5в4оні піво4с пале4о па4н3о4тець .пе4ом. д3у4сім п4о5бере ао4хот ое4ко ео4хот ео4щад ао4щад оо4чищ поя4с роз'я4р роз’я4р те4одоліт те4олог те4ософ оо4біг оу4сун оу4ком пів3о4вал а3у4дар о3у4дар з3у4дар в3у4дар контр3у4дар о3о4кисл и3о4кисл ень7о4кисл е3о4кисл х3о4кисл и3і4стор о3і4стор і3і4стор а3і4стор я3і4стор е3і4стор наді4стор най3і4стор пів3і4стор перед3і4стор пост3і4стор ар4т3афіш ар4т3взвод ар4т3десант ар4т3кафе ар4т3майс ар4т3медіа ар4т3мейс ар4т3мін ар4т3о4бстр ар4т3о4дин ар4т3о4збр ар4т3під ар4т3рин ар4т3у4стан ар4т3факт ар4т3хім ар4т3центр наді4стот найі4стот еі4стот оі4стот ау4т3екол оо4чист з3а4кт оа4кт еа4кт гіпер3а4кт найа4кт піва4кт ао4браз ео4браз оо4браз граф3о4браз най3о4браз супер3о4браз ар4т3мейст баге4р3мейст бале4т3мейст бран4д3мейст ва4ль4д3мейст ве4ль4т3мейст го4ф3мейст гро4с3мейст декре4т3мейст до4к3мейст капе4ль3мейст кварти4р3мейст конце4р4т3мейст кра4н3мейст полі4ц3мейст по4ш4т3мейст фо4р4с4т3мейст хо4р3мейст шапі4т3мейст шта4л3мейст єге4р3мейст иа4варі яа4варі оа4варі еа4варі беза4варі між3а4варі над3а4варі пост3а4варі напів3а4варі перед3а4варі супер3а4варі аа4дрес еа4дрес оа4дрес іа4дрес без3а4дрес ае4фект ее4фект ое4фект най3е4фект супер3е4фект ое4місі ие4місі яе4місі ее4місі безе4місі гіпер3е4місі еу4бог й3у4бог ий4ня зай4ня здій4ня най4ня обій4ня перей4ня підій4ня прий4м пій4м дій4ма вий4м най4ма зай4м д4о3й4м обой4м прой4м обій4м перей4м безу4гл безу4пин бло4к3пост .блі4ц3ана .блі4ц3криг .блі4ц3опит .блі4ц3торг .блі4ц3тур .блі4ц3і4спит о3а4наліз бак3а4наліз ц3а4наліз ген3а4наліз з3а4наліз м3а4наліз нт3а4наліз між3а4наліз полі3а4наліз ре3а4наліз оу4год ау4год еу4год пів3у4год роз3у4год гос4п3у4год ео4пис оо4пис ао4пис бо4р4т3мех бо4р4т3о4пер бо4р4т3про бо4р4т3рад бо4р4т3і4нж оа4каці оу4с оо4держ оа4на біблі4о .на3в4ч .ви3в4ч .до3в4ч .за3в4ч .по3в4ч .при3в4ч ана3в4ч ена3в4ч мона3в4ч жона3в4ч іона3в4ч ови3в4ч еви3в4ч едо3в4ч оза3в4ч по3в4ча .ом4рі е3м4рій .ви3м4р .віді3м4р .зав3м4р .за3м4р .зі3м4р .на3м4р .пере3м4р .по3м4р .при3м4р .роз3м4р .ум4ри .ум4рі .ум4ру .ум4ре во4станнє най3о4станн перед3о4станн ие4стет ое4стет ее4стет й3е4стет пан3е4стет пар3е4стет оо4ктан іо4ктан оо4плачув ео4плачув перед3о4пла виу4ди о3в4каз е3в4каз 8-7 --8 .а-8 .б-8 .в-8 .г-8 .ґ-8 .д-8 .е-8 .є-8 .ж-8 .з-8 .и-8 .і-8 .ї-8 .й-8 .к-8 .л-8 .м-8 .н-8 .о-8 .п-8 .р-8 .с-8 .т-8 .у-8 .ф-8 .х-8 .ц-8 .ч-8 .ш-8 .щ-8 .ь-8 .ю-8 .я-8 .'-8 .’-8 -а8а8 8а8а- -а8б8 8а8б- -а8в8 8а8в- -а8г8 8а8г- -а8ґ8 8а8ґ- -а8д8 8а8д- -а8е8 8а8е- -а8є8 8а8є- -а8ж8 8а8ж- -а8з8 8а8з- -а8и8 8а8и- -а8і8 8а8і- -а8ї8 8а8ї- -а8й8 8а8й- -а8к8 8а8к- -а8л8 8а8л- -а8м8 8а8м- -а8н8 8а8н- -а8о8 8а8о- -а8п8 8а8п- -а8р8 8а8р- -а8с8 8а8с- -а8т8 8а8т- -а8у8 8а8у- -а8ф8 8а8ф- -а8х8 8а8х- -а8ц8 8а8ц- -а8ч8 8а8ч- -а8ш8 8а8ш- -а8щ8 8а8щ- -а8ь8 8а8ь- -а8ю8 8а8ю- -а8я8 8а8я- -а8'8 -а8’8 8а8'- 8а8’- -б8а8 8б8а- -б8б8 8б8б- -б8в8 8б8в- -б8г8 8б8г- -б8ґ8 8б8ґ- -б8д8 8б8д- -б8е8 8б8е- -б8є8 8б8є- -б8ж8 8б8ж- -б8з8 8б8з- -б8и8 8б8и- -б8і8 8б8і- -б8ї8 8б8ї- -б8й8 8б8й- -б8к8 8б8к- -б8л8 8б8л- -б8м8 8б8м- -б8н8 8б8н- -б8о8 8б8о- -б8п8 8б8п- -б8р8 8б8р- -б8с8 8б8с- -б8т8 8б8т- -б8у8 8б8у- -б8ф8 8б8ф- -б8х8 8б8х- -б8ц8 8б8ц- -б8ч8 8б8ч- -б8ш8 8б8ш- -б8щ8 8б8щ- -б8ь8 8б8ь- -б8ю8 8б8ю- -б8я8 8б8я- -б8'8 -б8’8 8б8'- 8б8’- -в8а8 8в8а- -в8б8 8в8б- -в8в8 8в8в- -в8г8 8в8г- -в8ґ8 8в8ґ- -в8д8 8в8д- -в8е8 8в8е- -в8є8 8в8є- -в8ж8 8в8ж- -в8з8 8в8з- -в8и8 8в8и- -в8і8 8в8і- -в8ї8 8в8ї- -в8й8 8в8й- -в8к8 8в8к- -в8л8 8в8л- -в8м8 8в8м- -в8н8 8в8н- -в8о8 8в8о- -в8п8 8в8п- -в8р8 8в8р- -в8с8 8в8с- -в8т8 8в8т- -в8у8 8в8у- -в8ф8 8в8ф- -в8х8 8в8х- -в8ц8 8в8ц- -в8ч8 8в8ч- -в8ш8 8в8ш- -в8щ8 8в8щ- -в8ь8 8в8ь- -в8ю8 8в8ю- -в8я8 8в8я- -в8'8 -в8’8 8в8'- 8в8’- -г8а8 8г8а- -г8б8 8г8б- -г8в8 8г8в- -г8г8 8г8г- -г8ґ8 8г8ґ- -г8д8 8г8д- -г8е8 8г8е- -г8є8 8г8є- -г8ж8 8г8ж- -г8з8 8г8з- -г8и8 8г8и- -г8і8 8г8і- -г8ї8 8г8ї- -г8й8 8г8й- -г8к8 8г8к- -г8л8 8г8л- -г8м8 8г8м- -г8н8 8г8н- -г8о8 8г8о- -г8п8 8г8п- -г8р8 8г8р- -г8с8 8г8с- -г8т8 8г8т- -г8у8 8г8у- -г8ф8 8г8ф- -г8х8 8г8х- -г8ц8 8г8ц- -г8ч8 8г8ч- -г8ш8 8г8ш- -г8щ8 8г8щ- -г8ь8 8г8ь- -г8ю8 8г8ю- -г8я8 8г8я- -г8'8 -г8’8 8г8'- 8г8’- -ґ8а8 8ґ8а- -ґ8б8 8ґ8б- -ґ8в8 8ґ8в- -ґ8г8 8ґ8г- -ґ8ґ8 8ґ8ґ- -ґ8д8 8ґ8д- -ґ8е8 8ґ8е- -ґ8є8 8ґ8є- -ґ8ж8 8ґ8ж- -ґ8з8 8ґ8з- -ґ8и8 8ґ8и- -ґ8і8 8ґ8і- -ґ8ї8 8ґ8ї- -ґ8й8 8ґ8й- -ґ8к8 8ґ8к- -ґ8л8 8ґ8л- -ґ8м8 8ґ8м- -ґ8н8 8ґ8н- -ґ8о8 8ґ8о- -ґ8п8 8ґ8п- -ґ8р8 8ґ8р- -ґ8с8 8ґ8с- -ґ8т8 8ґ8т- -ґ8у8 8ґ8у- -ґ8ф8 8ґ8ф- -ґ8х8 8ґ8х- -ґ8ц8 8ґ8ц- -ґ8ч8 8ґ8ч- -ґ8ш8 8ґ8ш- -ґ8щ8 8ґ8щ- -ґ8ь8 8ґ8ь- -ґ8ю8 8ґ8ю- -ґ8я8 8ґ8я- -ґ8'8 -ґ8’8 8ґ8'- 8ґ8’- -д8а8 8д8а- -д8б8 8д8б- -д8в8 8д8в- -д8г8 8д8г- -д8ґ8 8д8ґ- -д8д8 8д8д- -д8е8 8д8е- -д8є8 8д8є- -д8ж8 8д8ж- -д8з8 8д8з- -д8и8 8д8и- -д8і8 8д8і- -д8ї8 8д8ї- -д8й8 8д8й- -д8к8 8д8к- -д8л8 8д8л- -д8м8 8д8м- -д8н8 8д8н- -д8о8 8д8о- -д8п8 8д8п- -д8р8 8д8р- -д8с8 8д8с- -д8т8 8д8т- -д8у8 8д8у- -д8ф8 8д8ф- -д8х8 8д8х- -д8ц8 8д8ц- -д8ч8 8д8ч- -д8ш8 8д8ш- -д8щ8 8д8щ- -д8ь8 8д8ь- -д8ю8 8д8ю- -д8я8 8д8я- -д8'8 -д8’8 8д8'- 8д8’- -е8а8 8е8а- -е8б8 8е8б- -е8в8 8е8в- -е8г8 8е8г- -е8ґ8 8е8ґ- -е8д8 8е8д- -е8е8 8е8е- -е8є8 8е8є- -е8ж8 8е8ж- -е8з8 8е8з- -е8и8 8е8и- -е8і8 8е8і- -е8ї8 8е8ї- -е8й8 8е8й- -е8к8 8е8к- -е8л8 8е8л- -е8м8 8е8м- -е8н8 8е8н- -е8о8 8е8о- -е8п8 8е8п- -е8р8 8е8р- -е8с8 8е8с- -е8т8 8е8т- -е8у8 8е8у- -е8ф8 8е8ф- -е8х8 8е8х- -е8ц8 8е8ц- -е8ч8 8е8ч- -е8ш8 8е8ш- -е8щ8 8е8щ- -е8ь8 8е8ь- -е8ю8 8е8ю- -е8я8 8е8я- -е8'8 -е8’8 8е8'- 8е8’- -є8а8 8є8а- -є8б8 8є8б- -є8в8 8є8в- -є8г8 8є8г- -є8ґ8 8є8ґ- -є8д8 8є8д- -є8е8 8є8е- -є8є8 8є8є- -є8ж8 8є8ж- -є8з8 8є8з- -є8и8 8є8и- -є8і8 8є8і- -є8ї8 8є8ї- -є8й8 8є8й- -є8к8 8є8к- -є8л8 8є8л- -є8м8 8є8м- -є8н8 8є8н- -є8о8 8є8о- -є8п8 8є8п- -є8р8 8є8р- -є8с8 8є8с- -є8т8 8є8т- -є8у8 8є8у- -є8ф8 8є8ф- -є8х8 8є8х- -є8ц8 8є8ц- -є8ч8 8є8ч- -є8ш8 8є8ш- -є8щ8 8є8щ- -є8ь8 8є8ь- -є8ю8 8є8ю- -є8я8 8є8я- -є8'8 -є8’8 8є8'- 8є8’- -ж8а8 8ж8а- -ж8б8 8ж8б- -ж8в8 8ж8в- -ж8г8 8ж8г- -ж8ґ8 8ж8ґ- -ж8д8 8ж8д- -ж8е8 8ж8е- -ж8є8 8ж8є- -ж8ж8 8ж8ж- -ж8з8 8ж8з- -ж8и8 8ж8и- -ж8і8 8ж8і- -ж8ї8 8ж8ї- -ж8й8 8ж8й- -ж8к8 8ж8к- -ж8л8 8ж8л- -ж8м8 8ж8м- -ж8н8 8ж8н- -ж8о8 8ж8о- -ж8п8 8ж8п- -ж8р8 8ж8р- -ж8с8 8ж8с- -ж8т8 8ж8т- -ж8у8 8ж8у- -ж8ф8 8ж8ф- -ж8х8 8ж8х- -ж8ц8 8ж8ц- -ж8ч8 8ж8ч- -ж8ш8 8ж8ш- -ж8щ8 8ж8щ- -ж8ь8 8ж8ь- -ж8ю8 8ж8ю- -ж8я8 8ж8я- -ж8'8 -ж8’8 8ж8'- 8ж8’- -з8а8 8з8а- -з8б8 8з8б- -з8в8 8з8в- -з8г8 8з8г- -з8ґ8 8з8ґ- -з8д8 8з8д- -з8е8 8з8е- -з8є8 8з8є- -з8ж8 8з8ж- -з8з8 8з8з- -з8и8 8з8и- -з8і8 8з8і- -з8ї8 8з8ї- -з8й8 8з8й- -з8к8 8з8к- -з8л8 8з8л- -з8м8 8з8м- -з8н8 8з8н- -з8о8 8з8о- -з8п8 8з8п- -з8р8 8з8р- -з8с8 8з8с- -з8т8 8з8т- -з8у8 8з8у- -з8ф8 8з8ф- -з8х8 8з8х- -з8ц8 8з8ц- -з8ч8 8з8ч- -з8ш8 8з8ш- -з8щ8 8з8щ- -з8ь8 8з8ь- -з8ю8 8з8ю- -з8я8 8з8я- -з8'8 -з8’8 8з8'- 8з8’- -и8а8 8и8а- -и8б8 8и8б- -и8в8 8и8в- -и8г8 8и8г- -и8ґ8 8и8ґ- -и8д8 8и8д- -и8е8 8и8е- -и8є8 8и8є- -и8ж8 8и8ж- -и8з8 8и8з- -и8и8 8и8и- -и8і8 8и8і- -и8ї8 8и8ї- -и8й8 8и8й- -и8к8 8и8к- -и8л8 8и8л- -и8м8 8и8м- -и8н8 8и8н- -и8о8 8и8о- -и8п8 8и8п- -и8р8 8и8р- -и8с8 8и8с- -и8т8 8и8т- -и8у8 8и8у- -и8ф8 8и8ф- -и8х8 8и8х- -и8ц8 8и8ц- -и8ч8 8и8ч- -и8ш8 8и8ш- -и8щ8 8и8щ- -и8ь8 8и8ь- -и8ю8 8и8ю- -и8я8 8и8я- -и8'8 -и8’8 8и8'- 8и8’- -і8а8 8і8а- -і8б8 8і8б- -і8в8 8і8в- -і8г8 8і8г- -і8ґ8 8і8ґ- -і8д8 8і8д- -і8е8 8і8е- -і8є8 8і8є- -і8ж8 8і8ж- -і8з8 8і8з- -і8и8 8і8и- -і8і8 8і8і- -і8ї8 8і8ї- -і8й8 8і8й- -і8к8 8і8к- -і8л8 8і8л- -і8м8 8і8м- -і8н8 8і8н- -і8о8 8і8о- -і8п8 8і8п- -і8р8 8і8р- -і8с8 8і8с- -і8т8 8і8т- -і8у8 8і8у- -і8ф8 8і8ф- -і8х8 8і8х- -і8ц8 8і8ц- -і8ч8 8і8ч- -і8ш8 8і8ш- -і8щ8 8і8щ- -і8ь8 8і8ь- -і8ю8 8і8ю- -і8я8 8і8я- -і8'8 -і8’8 8і8'- 8і8’- -ї8а8 8ї8а- -ї8б8 8ї8б- -ї8в8 8ї8в- -ї8г8 8ї8г- -ї8ґ8 8ї8ґ- -ї8д8 8ї8д- -ї8е8 8ї8е- -ї8є8 8ї8є- -ї8ж8 8ї8ж- -ї8з8 8ї8з- -ї8и8 8ї8и- -ї8і8 8ї8і- -ї8ї8 8ї8ї- -ї8й8 8ї8й- -ї8к8 8ї8к- -ї8л8 8ї8л- -ї8м8 8ї8м- -ї8н8 8ї8н- -ї8о8 8ї8о- -ї8п8 8ї8п- -ї8р8 8ї8р- -ї8с8 8ї8с- -ї8т8 8ї8т- -ї8у8 8ї8у- -ї8ф8 8ї8ф- -ї8х8 8ї8х- -ї8ц8 8ї8ц- -ї8ч8 8ї8ч- -ї8ш8 8ї8ш- -ї8щ8 8ї8щ- -ї8ь8 8ї8ь- -ї8ю8 8ї8ю- -ї8я8 8ї8я- -ї8'8 -ї8’8 8ї8'- 8ї8’- -й8а8 8й8а- -й8б8 8й8б- -й8в8 8й8в- -й8г8 8й8г- -й8ґ8 8й8ґ- -й8д8 8й8д- -й8е8 8й8е- -й8є8 8й8є- -й8ж8 8й8ж- -й8з8 8й8з- -й8и8 8й8и- -й8і8 8й8і- -й8ї8 8й8ї- -й8й8 8й8й- -й8к8 8й8к- -й8л8 8й8л- -й8м8 8й8м- -й8н8 8й8н- -й8о8 8й8о- -й8п8 8й8п- -й8р8 8й8р- -й8с8 8й8с- -й8т8 8й8т- -й8у8 8й8у- -й8ф8 8й8ф- -й8х8 8й8х- -й8ц8 8й8ц- -й8ч8 8й8ч- -й8ш8 8й8ш- -й8щ8 8й8щ- -й8ь8 8й8ь- -й8ю8 8й8ю- -й8я8 8й8я- -й8'8 -й8’8 8й8'- 8й8’- -к8а8 8к8а- -к8б8 8к8б- -к8в8 8к8в- -к8г8 8к8г- -к8ґ8 8к8ґ- -к8д8 8к8д- -к8е8 8к8е- -к8є8 8к8є- -к8ж8 8к8ж- -к8з8 8к8з- -к8и8 8к8и- -к8і8 8к8і- -к8ї8 8к8ї- -к8й8 8к8й- -к8к8 8к8к- -к8л8 8к8л- -к8м8 8к8м- -к8н8 8к8н- -к8о8 8к8о- -к8п8 8к8п- -к8р8 8к8р- -к8с8 8к8с- -к8т8 8к8т- -к8у8 8к8у- -к8ф8 8к8ф- -к8х8 8к8х- -к8ц8 8к8ц- -к8ч8 8к8ч- -к8ш8 8к8ш- -к8щ8 8к8щ- -к8ь8 8к8ь- -к8ю8 8к8ю- -к8я8 8к8я- -к8'8 -к8’8 8к8'- 8к8’- -л8а8 8л8а- -л8б8 8л8б- -л8в8 8л8в- -л8г8 8л8г- -л8ґ8 8л8ґ- -л8д8 8л8д- -л8е8 8л8е- -л8є8 8л8є- -л8ж8 8л8ж- -л8з8 8л8з- -л8и8 8л8и- -л8і8 8л8і- -л8ї8 8л8ї- -л8й8 8л8й- -л8к8 8л8к- -л8л8 8л8л- -л8м8 8л8м- -л8н8 8л8н- -л8о8 8л8о- -л8п8 8л8п- -л8р8 8л8р- -л8с8 8л8с- -л8т8 8л8т- -л8у8 8л8у- -л8ф8 8л8ф- -л8х8 8л8х- -л8ц8 8л8ц- -л8ч8 8л8ч- -л8ш8 8л8ш- -л8щ8 8л8щ- -л8ь8 8л8ь- -л8ю8 8л8ю- -л8я8 8л8я- -л8'8 -л8’8 8л8'- 8л8’- -м8а8 8м8а- -м8б8 8м8б- -м8в8 8м8в- -м8г8 8м8г- -м8ґ8 8м8ґ- -м8д8 8м8д- -м8е8 8м8е- -м8є8 8м8є- -м8ж8 8м8ж- -м8з8 8м8з- -м8и8 8м8и- -м8і8 8м8і- -м8ї8 8м8ї- -м8й8 8м8й- -м8к8 8м8к- -м8л8 8м8л- -м8м8 8м8м- -м8н8 8м8н- -м8о8 8м8о- -м8п8 8м8п- -м8р8 8м8р- -м8с8 8м8с- -м8т8 8м8т- -м8у8 8м8у- -м8ф8 8м8ф- -м8х8 8м8х- -м8ц8 8м8ц- -м8ч8 8м8ч- -м8ш8 8м8ш- -м8щ8 8м8щ- -м8ь8 8м8ь- -м8ю8 8м8ю- -м8я8 8м8я- -м8'8 -м8’8 8м8'- 8м8’- -н8а8 8н8а- -н8б8 8н8б- -н8в8 8н8в- -н8г8 8н8г- -н8ґ8 8н8ґ- -н8д8 8н8д- -н8е8 8н8е- -н8є8 8н8є- -н8ж8 8н8ж- -н8з8 8н8з- -н8и8 8н8и- -н8і8 8н8і- -н8ї8 8н8ї- -н8й8 8н8й- -н8к8 8н8к- -н8л8 8н8л- -н8м8 8н8м- -н8н8 8н8н- -н8о8 8н8о- -н8п8 8н8п- -н8р8 8н8р- -н8с8 8н8с- -н8т8 8н8т- -н8у8 8н8у- -н8ф8 8н8ф- -н8х8 8н8х- -н8ц8 8н8ц- -н8ч8 8н8ч- -н8ш8 8н8ш- -н8щ8 8н8щ- -н8ь8 8н8ь- -н8ю8 8н8ю- -н8я8 8н8я- -н8'8 -н8’8 8н8'- 8н8’- -о8а8 8о8а- -о8б8 8о8б- -о8в8 8о8в- -о8г8 8о8г- -о8ґ8 8о8ґ- -о8д8 8о8д- -о8е8 8о8е- -о8є8 8о8є- -о8ж8 8о8ж- -о8з8 8о8з- -о8и8 8о8и- -о8і8 8о8і- -о8ї8 8о8ї- -о8й8 8о8й- -о8к8 8о8к- -о8л8 8о8л- -о8м8 8о8м- -о8н8 8о8н- -о8о8 8о8о- -о8п8 8о8п- -о8р8 8о8р- -о8с8 8о8с- -о8т8 8о8т- -о8у8 8о8у- -о8ф8 8о8ф- -о8х8 8о8х- -о8ц8 8о8ц- -о8ч8 8о8ч- -о8ш8 8о8ш- -о8щ8 8о8щ- -о8ь8 8о8ь- -о8ю8 8о8ю- -о8я8 8о8я- -о8'8 -о8’8 8о8'- 8о8’- -п8а8 8п8а- -п8б8 8п8б- -п8в8 8п8в- -п8г8 8п8г- -п8ґ8 8п8ґ- -п8д8 8п8д- -п8е8 8п8е- -п8є8 8п8є- -п8ж8 8п8ж- -п8з8 8п8з- -п8и8 8п8и- -п8і8 8п8і- -п8ї8 8п8ї- -п8й8 8п8й- -п8к8 8п8к- -п8л8 8п8л- -п8м8 8п8м- -п8н8 8п8н- -п8о8 8п8о- -п8п8 8п8п- -п8р8 8п8р- -п8с8 8п8с- -п8т8 8п8т- -п8у8 8п8у- -п8ф8 8п8ф- -п8х8 8п8х- -п8ц8 8п8ц- -п8ч8 8п8ч- -п8ш8 8п8ш- -п8щ8 8п8щ- -п8ь8 8п8ь- -п8ю8 8п8ю- -п8я8 8п8я- -п8'8 -п8’8 8п8'- 8п8’- -р8а8 8р8а- -р8б8 8р8б- -р8в8 8р8в- -р8г8 8р8г- -р8ґ8 8р8ґ- -р8д8 8р8д- -р8е8 8р8е- -р8є8 8р8є- -р8ж8 8р8ж- -р8з8 8р8з- -р8и8 8р8и- -р8і8 8р8і- -р8ї8 8р8ї- -р8й8 8р8й- -р8к8 8р8к- -р8л8 8р8л- -р8м8 8р8м- -р8н8 8р8н- -р8о8 8р8о- -р8п8 8р8п- -р8р8 8р8р- -р8с8 8р8с- -р8т8 8р8т- -р8у8 8р8у- -р8ф8 8р8ф- -р8х8 8р8х- -р8ц8 8р8ц- -р8ч8 8р8ч- -р8ш8 8р8ш- -р8щ8 8р8щ- -р8ь8 8р8ь- -р8ю8 8р8ю- -р8я8 8р8я- -р8'8 -р8’8 8р8'- 8р8’- -с8а8 8с8а- -с8б8 8с8б- -с8в8 8с8в- -с8г8 8с8г- -с8ґ8 8с8ґ- -с8д8 8с8д- -с8е8 8с8е- -с8є8 8с8є- -с8ж8 8с8ж- -с8з8 8с8з- -с8и8 8с8и- -с8і8 8с8і- -с8ї8 8с8ї- -с8й8 8с8й- -с8к8 8с8к- -с8л8 8с8л- -с8м8 8с8м- -с8н8 8с8н- -с8о8 8с8о- -с8п8 8с8п- -с8р8 8с8р- -с8с8 8с8с- -с8т8 8с8т- -с8у8 8с8у- -с8ф8 8с8ф- -с8х8 8с8х- -с8ц8 8с8ц- -с8ч8 8с8ч- -с8ш8 8с8ш- -с8щ8 8с8щ- -с8ь8 8с8ь- -с8ю8 8с8ю- -с8я8 8с8я- -с8'8 -с8’8 8с8'- 8с8’- -т8а8 8т8а- -т8б8 8т8б- -т8в8 8т8в- -т8г8 8т8г- -т8ґ8 8т8ґ- -т8д8 8т8д- -т8е8 8т8е- -т8є8 8т8є- -т8ж8 8т8ж- -т8з8 8т8з- -т8и8 8т8и- -т8і8 8т8і- -т8ї8 8т8ї- -т8й8 8т8й- -т8к8 8т8к- -т8л8 8т8л- -т8м8 8т8м- -т8н8 8т8н- -т8о8 8т8о- -т8п8 8т8п- -т8р8 8т8р- -т8с8 8т8с- -т8т8 8т8т- -т8у8 8т8у- -т8ф8 8т8ф- -т8х8 8т8х- -т8ц8 8т8ц- -т8ч8 8т8ч- -т8ш8 8т8ш- -т8щ8 8т8щ- -т8ь8 8т8ь- -т8ю8 8т8ю- -т8я8 8т8я- -т8'8 -т8’8 8т8'- 8т8’- -у8а8 8у8а- -у8б8 8у8б- -у8в8 8у8в- -у8г8 8у8г- -у8ґ8 8у8ґ- -у8д8 8у8д- -у8е8 8у8е- -у8є8 8у8є- -у8ж8 8у8ж- -у8з8 8у8з- -у8и8 8у8и- -у8і8 8у8і- -у8ї8 8у8ї- -у8й8 8у8й- -у8к8 8у8к- -у8л8 8у8л- -у8м8 8у8м- -у8н8 8у8н- -у8о8 8у8о- -у8п8 8у8п- -у8р8 8у8р- -у8с8 8у8с- -у8т8 8у8т- -у8у8 8у8у- -у8ф8 8у8ф- -у8х8 8у8х- -у8ц8 8у8ц- -у8ч8 8у8ч- -у8ш8 8у8ш- -у8щ8 8у8щ- -у8ь8 8у8ь- -у8ю8 8у8ю- -у8я8 8у8я- -у8'8 -у8’8 8у8'- 8у8’- -ф8а8 8ф8а- -ф8б8 8ф8б- -ф8в8 8ф8в- -ф8г8 8ф8г- -ф8ґ8 8ф8ґ- -ф8д8 8ф8д- -ф8е8 8ф8е- -ф8є8 8ф8є- -ф8ж8 8ф8ж- -ф8з8 8ф8з- -ф8и8 8ф8и- -ф8і8 8ф8і- -ф8ї8 8ф8ї- -ф8й8 8ф8й- -ф8к8 8ф8к- -ф8л8 8ф8л- -ф8м8 8ф8м- -ф8н8 8ф8н- -ф8о8 8ф8о- -ф8п8 8ф8п- -ф8р8 8ф8р- -ф8с8 8ф8с- -ф8т8 8ф8т- -ф8у8 8ф8у- -ф8ф8 8ф8ф- -ф8х8 8ф8х- -ф8ц8 8ф8ц- -ф8ч8 8ф8ч- -ф8ш8 8ф8ш- -ф8щ8 8ф8щ- -ф8ь8 8ф8ь- -ф8ю8 8ф8ю- -ф8я8 8ф8я- -ф8'8 -ф8’8 8ф8'- 8ф8’- -х8а8 8х8а- -х8б8 8х8б- -х8в8 8х8в- -х8г8 8х8г- -х8ґ8 8х8ґ- -х8д8 8х8д- -х8е8 8х8е- -х8є8 8х8є- -х8ж8 8х8ж- -х8з8 8х8з- -х8и8 8х8и- -х8і8 8х8і- -х8ї8 8х8ї- -х8й8 8х8й- -х8к8 8х8к- -х8л8 8х8л- -х8м8 8х8м- -х8н8 8х8н- -х8о8 8х8о- -х8п8 8х8п- -х8р8 8х8р- -х8с8 8х8с- -х8т8 8х8т- -х8у8 8х8у- -х8ф8 8х8ф- -х8х8 8х8х- -х8ц8 8х8ц- -х8ч8 8х8ч- -х8ш8 8х8ш- -х8щ8 8х8щ- -х8ь8 8х8ь- -х8ю8 8х8ю- -х8я8 8х8я- -х8'8 -х8’8 8х8'- 8х8’- -ц8а8 8ц8а- -ц8б8 8ц8б- -ц8в8 8ц8в- -ц8г8 8ц8г- -ц8ґ8 8ц8ґ- -ц8д8 8ц8д- -ц8е8 8ц8е- -ц8є8 8ц8є- -ц8ж8 8ц8ж- -ц8з8 8ц8з- -ц8и8 8ц8и- -ц8і8 8ц8і- -ц8ї8 8ц8ї- -ц8й8 8ц8й- -ц8к8 8ц8к- -ц8л8 8ц8л- -ц8м8 8ц8м- -ц8н8 8ц8н- -ц8о8 8ц8о- -ц8п8 8ц8п- -ц8р8 8ц8р- -ц8с8 8ц8с- -ц8т8 8ц8т- -ц8у8 8ц8у- -ц8ф8 8ц8ф- -ц8х8 8ц8х- -ц8ц8 8ц8ц- -ц8ч8 8ц8ч- -ц8ш8 8ц8ш- -ц8щ8 8ц8щ- -ц8ь8 8ц8ь- -ц8ю8 8ц8ю- -ц8я8 8ц8я- -ц8'8 -ц8’8 8ц8'- 8ц8’- -ч8а8 8ч8а- -ч8б8 8ч8б- -ч8в8 8ч8в- -ч8г8 8ч8г- -ч8ґ8 8ч8ґ- -ч8д8 8ч8д- -ч8е8 8ч8е- -ч8є8 8ч8є- -ч8ж8 8ч8ж- -ч8з8 8ч8з- -ч8и8 8ч8и- -ч8і8 8ч8і- -ч8ї8 8ч8ї- -ч8й8 8ч8й- -ч8к8 8ч8к- -ч8л8 8ч8л- -ч8м8 8ч8м- -ч8н8 8ч8н- -ч8о8 8ч8о- -ч8п8 8ч8п- -ч8р8 8ч8р- -ч8с8 8ч8с- -ч8т8 8ч8т- -ч8у8 8ч8у- -ч8ф8 8ч8ф- -ч8х8 8ч8х- -ч8ц8 8ч8ц- -ч8ч8 8ч8ч- -ч8ш8 8ч8ш- -ч8щ8 8ч8щ- -ч8ь8 8ч8ь- -ч8ю8 8ч8ю- -ч8я8 8ч8я- -ч8'8 -ч8’8 8ч8'- 8ч8’- -ш8а8 8ш8а- -ш8б8 8ш8б- -ш8в8 8ш8в- -ш8г8 8ш8г- -ш8ґ8 8ш8ґ- -ш8д8 8ш8д- -ш8е8 8ш8е- -ш8є8 8ш8є- -ш8ж8 8ш8ж- -ш8з8 8ш8з- -ш8и8 8ш8и- -ш8і8 8ш8і- -ш8ї8 8ш8ї- -ш8й8 8ш8й- -ш8к8 8ш8к- -ш8л8 8ш8л- -ш8м8 8ш8м- -ш8н8 8ш8н- -ш8о8 8ш8о- -ш8п8 8ш8п- -ш8р8 8ш8р- -ш8с8 8ш8с- -ш8т8 8ш8т- -ш8у8 8ш8у- -ш8ф8 8ш8ф- -ш8х8 8ш8х- -ш8ц8 8ш8ц- -ш8ч8 8ш8ч- -ш8ш8 8ш8ш- -ш8щ8 8ш8щ- -ш8ь8 8ш8ь- -ш8ю8 8ш8ю- -ш8я8 8ш8я- -ш8'8 -ш8’8 8ш8'- 8ш8’- -щ8а8 8щ8а- -щ8б8 8щ8б- -щ8в8 8щ8в- -щ8г8 8щ8г- -щ8ґ8 8щ8ґ- -щ8д8 8щ8д- -щ8е8 8щ8е- -щ8є8 8щ8є- -щ8ж8 8щ8ж- -щ8з8 8щ8з- -щ8и8 8щ8и- -щ8і8 8щ8і- -щ8ї8 8щ8ї- -щ8й8 8щ8й- -щ8к8 8щ8к- -щ8л8 8щ8л- -щ8м8 8щ8м- -щ8н8 8щ8н- -щ8о8 8щ8о- -щ8п8 8щ8п- -щ8р8 8щ8р- -щ8с8 8щ8с- -щ8т8 8щ8т- -щ8у8 8щ8у- -щ8ф8 8щ8ф- -щ8х8 8щ8х- -щ8ц8 8щ8ц- -щ8ч8 8щ8ч- -щ8ш8 8щ8ш- -щ8щ8 8щ8щ- -щ8ь8 8щ8ь- -щ8ю8 8щ8ю- -щ8я8 8щ8я- -щ8'8 -щ8’8 8щ8'- 8щ8’- -ь8а8 8ь8а- -ь8б8 8ь8б- -ь8в8 8ь8в- -ь8г8 8ь8г- -ь8ґ8 8ь8ґ- -ь8д8 8ь8д- -ь8е8 8ь8е- -ь8є8 8ь8є- -ь8ж8 8ь8ж- -ь8з8 8ь8з- -ь8и8 8ь8и- -ь8і8 8ь8і- -ь8ї8 8ь8ї- -ь8й8 8ь8й- -ь8к8 8ь8к- -ь8л8 8ь8л- -ь8м8 8ь8м- -ь8н8 8ь8н- -ь8о8 8ь8о- -ь8п8 8ь8п- -ь8р8 8ь8р- -ь8с8 8ь8с- -ь8т8 8ь8т- -ь8у8 8ь8у- -ь8ф8 8ь8ф- -ь8х8 8ь8х- -ь8ц8 8ь8ц- -ь8ч8 8ь8ч- -ь8ш8 8ь8ш- -ь8щ8 8ь8щ- -ь8ь8 8ь8ь- -ь8ю8 8ь8ю- -ь8я8 8ь8я- -ь8'8 -ь8’8 8ь8'- 8ь8’- -ю8а8 8ю8а- -ю8б8 8ю8б- -ю8в8 8ю8в- -ю8г8 8ю8г- -ю8ґ8 8ю8ґ- -ю8д8 8ю8д- -ю8е8 8ю8е- -ю8є8 8ю8є- -ю8ж8 8ю8ж- -ю8з8 8ю8з- -ю8и8 8ю8и- -ю8і8 8ю8і- -ю8ї8 8ю8ї- -ю8й8 8ю8й- -ю8к8 8ю8к- -ю8л8 8ю8л- -ю8м8 8ю8м- -ю8н8 8ю8н- -ю8о8 8ю8о- -ю8п8 8ю8п- -ю8р8 8ю8р- -ю8с8 8ю8с- -ю8т8 8ю8т- -ю8у8 8ю8у- -ю8ф8 8ю8ф- -ю8х8 8ю8х- -ю8ц8 8ю8ц- -ю8ч8 8ю8ч- -ю8ш8 8ю8ш- -ю8щ8 8ю8щ- -ю8ь8 8ю8ь- -ю8ю8 8ю8ю- -ю8я8 8ю8я- -ю8'8 -ю8’8 8ю8'- 8ю8’- -я8а8 8я8а- -я8б8 8я8б- -я8в8 8я8в- -я8г8 8я8г- -я8ґ8 8я8ґ- -я8д8 8я8д- -я8е8 8я8е- -я8є8 8я8є- -я8ж8 8я8ж- -я8з8 8я8з- -я8и8 8я8и- -я8і8 8я8і- -я8ї8 8я8ї- -я8й8 8я8й- -я8к8 8я8к- -я8л8 8я8л- -я8м8 8я8м- -я8н8 8я8н- -я8о8 8я8о- -я8п8 8я8п- -я8р8 8я8р- -я8с8 8я8с- -я8т8 8я8т- -я8у8 8я8у- -я8ф8 8я8ф- -я8х8 8я8х- -я8ц8 8я8ц- -я8ч8 8я8ч- -я8ш8 8я8ш- -я8щ8 8я8щ- -я8ь8 8я8ь- -я8ю8 8я8ю- -я8я8 8я8я- -я8'8 -я8’8 8я8'- 8я8’- -'8а8 -’8а8 8'8а- 8’8а- -'8б8 -’8б8 8'8б- 8’8б- -'8в8 -’8в8 8'8в- 8’8в- -'8г8 -’8г8 8'8г- 8’8г- -'8ґ8 -’8ґ8 8'8ґ- 8’8ґ- -'8д8 -’8д8 8'8д- 8’8д- -'8е8 -’8е8 8'8е- 8’8е- -'8є8 -’8є8 8'8є- 8’8є- -'8ж8 -’8ж8 8'8ж- 8’8ж- -'8з8 -’8з8 8'8з- 8’8з- -'8и8 -’8и8 8'8и- 8’8и- -'8і8 -’8і8 8'8і- 8’8і- -'8ї8 -’8ї8 8'8ї- 8’8ї- -'8й8 -’8й8 8'8й- 8’8й- -'8к8 -’8к8 8'8к- 8’8к- -'8л8 -’8л8 8'8л- 8’8л- -'8м8 -’8м8 8'8м- 8’8м- -'8н8 -’8н8 8'8н- 8’8н- -'8о8 -’8о8 8'8о- 8’8о- -'8п8 -’8п8 8'8п- 8’8п- -'8р8 -’8р8 8'8р- 8’8р- -'8с8 -’8с8 8'8с- 8’8с- -'8т8 -’8т8 8'8т- 8’8т- -'8у8 -’8у8 8'8у- 8’8у- -'8ф8 -’8ф8 8'8ф- 8’8ф- -'8х8 -’8х8 8'8х- 8’8х- -'8ц8 -’8ц8 8'8ц- 8’8ц- -'8ч8 -’8ч8 8'8ч- 8’8ч- -'8ш8 -’8ш8 8'8ш- 8’8ш- -'8щ8 -’8щ8 8'8щ- 8’8щ- -'8ь8 -’8ь8 8'8ь- 8’8ь- -'8ю8 -’8ю8 8'8ю- 8’8ю- -'8я8 -’8я8 8'8я- 8’8я- -'8'8 -’8’8 8'8'- 8’8’-", + ["characters"]="'-абвгдежзийклмнопрстуфхцчшщьюяєіїґ", + ["data"]="2а1 а3а а3е а3і а3о а3у а3ю а3я а3є а3ї 2е1 е3а е3е е3і е3о е3у е3ю е3я е3є е3ї 2и1 и3а и3е и3і и3о и3у и3ю и3я и3є и3ї 2і1 і3а і3е і3и і3о і3у і3ю і3я і3є і3ї 2о1 о3а о3е о3і о3о о3у о3ю о3я о3є о3ї 2у1 у3а у3е у3і у3о у3у у3ю у3я у3є у3ї 2ю1 ю3а ю3е ю3і ю3о ю3у ю3ю ю3я ю3є ю3ї 2я1 я3а я3е я3о я3у я3ю я3я я3є я3ї 2є1 є3у є3ю є3є є3ї 2ї1 ї3е ї3о ї3ю 2б1к 2б1п 2б1с 2б1т 2б1ф 2б1х 2б1ц 2б1ч 2б1ш 2б1щ 2в1б 2в1г 2в1д 2в1ж 2в1з 2в1к 2в1л 2в1м 2в1н 2в1п 2в1р 2в1с 2в1т 2в1ф 2в1х 2в1ц 2в1ч 2в1ш 2в1щ 2в1й 2в'3 2г1к 2г1п 2г1с 2г1т 2г1ф 2г1ц 2г1ч 2г1ш 2д1к 2д1п 2д1с 2д1т 2д1ф 2д1х 2д1ц 2д1ч 2д1ш 2д1щ 2ж1к 2ж1п 2ж1с 2ж1т 2ж1ф 2ж1х 2ж1ц 2ж1ч 2ж1ш 2з1к 2з1п 2з1с 2з1т 2з1ф 2з1х 2з1ц 2з1ч 2з1ш 2з1щ 2к1б 2к1г 2к1д 2к1з 2л1б 2л1в 2л1г 2л1ґ 2л1д 2л1ж 2л1з 2л1к 2л1м 2л1н 2л1п 2л1р 2л1с 2л1т 2л1ф 2л1х 2л1ц 2л1ч 2м1б 2м1в 2м1г 2м1д 2м1ж 2м1з 2м1к 2м1л 2м1н 2м1п 2м1р 2м1с 2м1т 2м1ф 2м1х 2м1ц 2м1ч 2м1ш 2м1щ 2м'3 2н1б 2н1в 2н1г 2н1д 2н1ж 2н1з 2н1к 2н1л 2н1м 2н1п 2н1р 2н1с 2н1т 2н1ф 2н1х 2н1ц 2н1ч 2н1ш 2н1щ 2н'3 2п1б 2п1д 2п1з 2р1б 2р1в 2р1г 2р1ґ 2р1д 2р1ж 2р1з 2р1к 2р1л 2р1м 2р1н 2р1п 2р1с 2р1т 2р1ф 2р1х 2р1ц 2р1ч 2р1ш 2р1щ 2р1й 2р'3 2с1б 2с1г 2с1д 2т1б 2т1г 2т1д 2т1ж 2т1з 2ф1б 2ф1г 2ф1з 2х1г 2х1д 2ц1б 2ц1г 2ц1д 2ц1з 2ч1б 2ч1д 2ч1ж 2ш1б 2ш1г 2й1б 2й1в 2й1г 2й1д 2й1ж 2й1з 2й1к 2й1л 2й1м 2й1н 2й1п 2й1р 2й1с 2й1т 2й1ф 2й1х 2й1ц 2й1ч 2й1ш 2й1щ 2дь1к 2дь1с 2дь1т 2дь1ц 2зь1к 2зь1с 2зь1т 2ль1б 2ль1в 2ль1г 2ль1д 2ль1ж 2ль1з 2ль1к 2ль1м 2ль1н 2ль1п 2ль1р 2ль1с 2ль1т 2ль1ф 2ль1х 2ль1ц 2ль1ч 2ль1ш 2ль1щ 2ль1й 2нь1б 2нь1г 2нь1з 2нь1к 2нь1л 2нь1м 2нь1с 2нь1т 2нь1х 2нь1ц 2нь1ч 2нь1ш 2нь1й 2рь1к 2рь1ц 2сь1б 2сь1д 2ть1б 2к1сп 2к1ст 2к1ськ 2п1сп 2п1ст 2п1ськ 2с1пк 2с1пп 2с1пс 2с1пт 2с1пх 2с1пч 2с1ськ 2с1тк 2с1тп 2с1тс 2с1тсь 2с1тт 2с1тф 2с1тц 2с1шт 2сь1кк 2сь1кс 2сь1кт 2т1ск 2т1сп 2т1ст 2т1ськ 2т1шк 2ф1сп 2ф1ст 2ф1ськ 2ф1шт 2х1ст 2х1ськ 2ц1ст 2ц1шк 2ш1тк 2ш1тсь 2б1б 2в1в 2г1г 2ґ1ґ 2д1д 2ж1ж 2з1з 2к1к 2л1л 2м1м 2н1н 2п1п 2р1р 2с1с 2т1т 2ф1ф 2х1х 2ц1ц 2ч1ч 2ш1ш 2щ1щ 2й1й 3ння 3ття 3ттю 3лля 3ллє 3ллю 3ддя д4ж д4з а2й е2й и2й і2й о2й у2й ю2й я2й є2й ї2й 3й6о ь6о 6' 6ь .б'8 .в'8 .д'8 .з'8 .м'8 .н'8 .п'8 .р'8 .т'8 .ф'8 .ш'8 .бд6 .бр6 .вб6 .вб6'6 .вв6'6 .вг6 .вд6 .вж6 .вз6 .вз6д6 .вк6 .вл6 .вм6 .вм6'6 .вп6 .вп6'6 .вп6х6 .вс6 .вс6т6 .вт6 .вш6к6 .дж6 .дз6 .дл6 .дс6 .зб6 .зв6'6 .зг6 .зд6 .зд6з6 .зл6 .зм6'6 .зс6 .зс6к6 .зс6т6 .зч6 .зш6 .зш6к6 .зґ6 .йш6 .кл6 .кп6 .кс6 .кх6 .кш6 .лк6с6 .лс6 .ль6 .мс6 .мф6 .нб6 .пр6 .пс6 .пх6 .рт6 .ск6 .ск6л6 .сл6 .сп6 .сп6'6 .сп6л6 .сп6х6 .ст6 .сх6 .сх6л6 .тк6 .тр6 .тх6 .ть6 .фл6 .хл6 .ць6 .чх6 .шк6 .шл6 .шп6 .шт6 6бв. 6бз. 6бй. 6бл. 6б6ль. 6бн. 6бр. 6бс. 6б6ст. 6б6с6тв. 6б6с6тр. 6б6с6ьк. 6б6ць. 6вб. 6вв. 6вд. 6в6др. 6в6дь. 6вж. 6вз. 6в6зь. 6вй. 6вк. 6вл. 6в6ль. 6вм. 6вн. 6вп. 6вр. 6вс. 6в6с6тв. 6в6с6ть. 6в6сь. 6в6с6ьк. 6вт. 6вх. 6в6ць. 6вч. 6вш. 6вщ. 6гв. 6гг. 6гд. 6гл. 6г6ль. 6гм. 6гн. 6гр. 6гс. 6г6с6тв. 6г6сь. 6гт. 6дж. 6дз. 6д6зь. 6дл. 6дм. 6дн. 6др. 6д6с6тв. 6д6с6ьк. 6дт. 6дь. 6д6ь6сь. 6жб. 6жв. 6ж6дь. 6ж6сь. 6зв. 6зг. 6зд. 6з6дв. 6з6дн. 6з6дь. 6зк. 6зл. 6зм. 6зн. 6з6нь. 6зр. 6з6сь. 6зь. 6з6ьб. 6з6ьк. 6йб. 6йв. 6йг. 6йд. 6йз. 6йк. 6й6кл. 6йл. 6й6ль. 6йм. 6й6мс. 6йн. 6й6нс. 6йп. 6йр. 6йс. 6й6ст. 6й6с6тв. 6й6с6тр. 6й6сь. 6й6с6ьк. 6йт. 6й6тс. 6йф. 6йх. 6йц. 6йч. 6йш. 6кв. 6кк. 6кл. 6к6ль. 6кр. 6кс. 6к6ст. 6к6сь. 6кт. 6к6тр. 6кх. 6кш. 6лб. 6лг. 6лд. 6лк. 6лл. 6л6ль. 6лм. 6л6мс. 6лн. 6лп. 6лс. 6лт. 6л6хв. 6ль. 6л6ьб. 6л6ьв. 6л6ьг. 6л6ьд. 6л6ь6дс. 6л6ьз. 6л6ьк. 6л6ьм. 6л6ьн. 6л6ьп. 6л6ьс. 6л6ь6ств. 6л6ь6сь. 6л6ь6ськ. 6л6ьт. 6л6ь6тр. 6л6ьф. 6л6ьх. 6л6ьц. 6л6ьч. 6л6ьш. 6л6ьщ. 6мб. 6м6б6ль. 6м6бр. 6мг. 6мж. 6мк. 6мл. 6м6ль. 6мм. 6мн. 6мп. 6мр. 6мс. 6м6с6тв. 6м6сь. 6м6с6ьк. 6мт. 6мф. 6мх. 6мш. 6нв. 6нг. 6н6гл. 6н6г6ль. 6н6гр. 6н6гс. 6нд. 6н6дж. 6н6дз. 6н6дп. 6н6др. 6нж. 6нз. 6нк. 6н6кс. 6н6кт. 6нм. 6нн. 6нр. 6нс. 6н6ск. 6н6ст. 6н6с6тв. 6н6с6тр. 6н6с6ьк. 6н6с6ькй. 6нт. 6н6тк. 6н6тр. 6н6т6ств. 6н6ть. 6нф. 6нх. 6нц. 6н6ць. 6нч. 6нш. 6нь. 6н6ьб. 6н6ьг. 6н6ьк. 6н6ь6сь. 6пд. 6пл. 6пр. 6пс. 6п6с6тв. 6п6сь. 6пт. 6п6тр. 6пф. 6пц. 6рб. 6рв. 6рг. 6рд. 6р6дв. 6р6дж. 6р6дь. 6рж. 6рз. 6р6зн. 6р6зь. 6рк. 6р6кс. 6р6кт. 6рл. 6р6ль. 6р6л6ьз. 6рм. 6рн. 6р6нс. 6р6н6ст. 6р6нь. 6рп. 6рр. 6рс. 6р6ср. 6р6ст. 6р6с6тв. 6р6с6ть. 6р6сь. 6р6с6ьк. 6рт. 6р6тв. 6р6тр. 6р6ть. 6рф. 6рх. 6рц. 6р6ць. 6рч. 6рш. 6рщ. 6р6щ6сь. 6рь. 6с6дп. 6с6д6рп. 6ск. 6сл. 6с6ль. 6см. 6сн. 6сп. 6сс. 6ст. 6с6тв. 6с6тй. 6с6тм. 6с6тр. 6с6т6рь. 6с6ть. 6с6ць. 6сь. 6с6ьб. 6с6ьк. 6с6ьм. 6тв. 6т6вт. 6т6зт. 6тл. 6т6ль. 6тм. 6т6мр. 6тр. 6тс. 6т6с6тв. 6т6с6ьк. 6тт. 6тц. 6тч. 6ть. 6т6ь6сь. 6фм. 6фр. 6ф6с6тв. 6фт. 6ф6ть. 6фф. 6фь. 6хв. 6хм. 6хн. 6хр. 6хт. 6хш. 6ц6тв. 6ць. 6ц6ьк. 6чб. 6чм. 6чн. 6чт. 6шв. 6ш6ль. 6шм. 6шн. 6ш6нл. 6ш6сь. 6шт. 6ш6тв. 6щ6сь. .бе4з'3 .бе4з3 .безу4 .бе5з4о3д .без5о4соб .безві4д3 .без3ро4з3 виї4 .ві5д4ом .ві5д4озв .ві5д4ун віду4ч .ві5д4а .ві5д4ер .ві5д4і .ві4д3 .від'3 .мі4ж3 безві4д3 ові4д3 ді4єві4д3 за4вві4д3 неві4д'3 неві4д3 про4ф3ві4д3 спе4ц3ві4д3 співві4д3 те4х3ві4д3 .пере4д3бач .пере4д3виб .пере4д3г .пере4д3д .пере4д3м .пере4д3ост .пере4д3пла .пере4д3пок .пере4д3р .пере4д3св .пере4д3умов .пере4д3усі .пере4д3фр .пере4д3ч .пере4д'3 .пере3 .пона4д3 .пона5д4і .пона5д4и .пона5д4я 3п4ре 3п4ри приї4 3п4ро 3п4рі .пі5д4о .пі5д4і .під'3 .пі4д3 .пі5д4е .пі5д4и .пі5д4у .пі4в3 .спі4в3 .напі4в3 .ро5з4і .ро5з4е ро5з4йом .ро5з4а .ро4з'3 .ро4з3 .чере4з'3 .чере4з3 оо4б ооб'3 ооб3м ооб3ро об'3 од'3 на4д'3 за5о4р до5о4р по5о4р пере5о4р пі6д5о4р бе4з5і4дей до3в'4є за3в'4є зі3в'4є обі3в'4є по3в'4є уі3в'4є з3в'4я по3в'4я від3в'4я за3в'4я зі3в'4я за3ю4ш на3в'4я непо3в'4я об3в'4я при3в'4я під3в'4я у3в'4я з3м'4я зі3м'4я у3м'4я в3м'4я но3м'4я за3м'4я на3м'4я об3м'4я пере3м'4я по3м'4я при3м'4я піді3м'4я су3м'4я до3в'4ю за3в'4ю зі3в'4ю на3в'4ю по3в'4ю уі3в'4ю інтер3в'4ю за3я4ло коу4роч зу4роч наду4роч позау4роч поу4роч приу4роч на4й3у4бог нао4р прио4р неу4к 3в4б4лаг 3в4к4лад 3в4п4лив 3в4п4равн 3в4р4одлив 3в4т4рут 3в4т4руч 3з4б4рой 3з4б4рою 3з4б4роє 3з4в4'яз 3й4ш4л 3м4к4не 3м4к4ну 3м4к4ні 3п4с4ков 3с4к4лад 3с4к4ле 3с4к4лит 3с4к4ло 3с4к4рипт 3с4п4лав 3с4п4лат 3с4п4лач 3с4п4рав 3с4п4ритн 3с4п4рият 3с4п4ромо 3с4т4вор 3с4т4ражд 3с4т4рах 3с4т4риб 3с4т4риж 3с4т4рой 3с4т4рок 3с4т4ром 3с4т4роф 3с4т4роч 3с4т4рою 3с4т4роя 3с4т4роє 3с4т4рої 3с4т4рукт 3с4т4рукц 3с4т4рій 3с4т4ріл 3с4т4річ 3т4к4нен 3т4ь4мар 3т4ь4мяні 3у4п4рав 3блаж 3ближ 3близ 3блиск 3блок 3блоці 3бран 3брати 3брест 3бризк 3британ 3бруд 3в4бив 3в4веден 3в4дал 3в4довз 3в4довол 3в4живан 3в4лад 3в4ласн 3в4лашт 3в4лов 3в4певн 3в4поряд 3в4разлив 3в4рожай 3в4сюд 3в4тіл 3глад 3глиб 3глин 3глоб 3глуз 3глуш 3гляд 3глян 3гнан 3гнил 3гноз 3гнучк 3грав 3град 3грай 3грам 3гран 3грати 3граф 3граш 3граю 3грає 3грес 3грець 3гроб 3грож 3гроз 3громад 3груван 3грунт 3груп 3грів 3гріт 3гріш 3г4ідро 3д4ан 3д4бав 3д4бал 3д4бан 3д4бат 3д4бає 3двиг 3двою 3двоє 3двій 3двір 3двічі 3драж 3дром 3друж 3друк 3дряп 3дріб 3дріма 3жвав 3жміть 3жріть 3з4бага 3з4баланс 3з4був 3з4бут 3зваж 3зван 3звед 3звел 3звест 3звись 3звич 3звищ 3зворуш 3звук 3звуч 3звіт 3з4год 3з4дат 3з4довж 3з4доров 3з4дійсн 3змін 3зйом 3зміш 3знав 3знай 3знак 3знал 3знан 3знат 3знаход 3знач 3знаю 3знає 3зниж 3знім 3зрозум 3зрюв 3зрів 3зріл 3зрін 3з4чеп 3й4ма 3й4менн 3й4мищ 3й4мовірн 3й4му. 3й4муть 3й4міть 3й4шов 3м4нож 3м4ріть 3м4щен 3п4сов 3п4сон 3п4сув 3р4вав 3р4вати 3р4віть 3с4кид 3с4кок 3с4коп 3с4кор 3с4короч 3с4коч 3с4кіль 3с4кіпл 3с4пад 3с4пект 3с4перм 3с4пин 3с4повід 3с4пожив 3с4постер 3с4пі 3с4піть 3с4піш 3с4табіл 3с4тав 3с4тад 3с4таз 3с4тайн 3с4тал 3с4тан 3с4тар 3с4тара 3с4тат 3с4тач 3с4тає 3с4теп 3с4тереж 3с4теріг 3с4тиг 3с4тиж 3с4тисл 3с4титу 3с4товб 3с4той 3с4торон 3с4торін 3с4тосо 3с4тосу 3с4тою 3с4тоян 3с4туп 3с4тяг 3с4тіб 3с4тій 3с4тіль 3с4тір 3с4фер 3с4хил 3с4хов 3с4хід 3т4кан 3х4то 3ш4код 3ш4кол 3ш4кідл 3ш4кіл 3ш4кір 3ш4таб 3ш4туч 3ґрунт 3а4вторит 3а4гент 3а4грес 3а4декват 3а4дитив 3а4зарт 3а4ктив 3а4ктуал 3а4курат 3а4куст 3а4кцепт 3а4кциз 3а4лергі 3а4матор 3а4наліз 3а4натом 3а4парат 3а4пеляц 3а4постол 3а4птеч 3а4ргумен 3а4ромат 3а4соці 3а4спект 3а4тлет 3а4халі 3е4колог 3е4коном 3е4легант 3е4лектр 3е4лемент 3е4моці 3е4мігр 3е4нерг 3е4стакад 3е4стет 3е4тап 3о4б'єдн 3о4б'єкт 3о4береж 3о4бира 3о4борон 3о4бід 3о4біц 3о4даль 3о4дяг 3о4збро 3о4крем 3о4перат 3о4плат 3о4птим 3о4пуст 3о4пуше 3о4пуще 3о4рдинац 3о4ренд 3о4соб 3о4сяжн 3о4холо 3о4хорон 3о4хоч 3о4чисн 3о4чищ 3у4ваг 3у4важ 3у4гав 3у4згод 3у4клад 3у4компл 3у4крупн 3у4люблен 3у4мит 3у4міл 3у4перед 3у4разлив 3у4рбан 3у4рочист 3у4ряд 3у4рядов 3у4спіш 3у4станов 3у4стпіш 3у4сувати 3у4твор 3у4тробн 3я4дерн 3я4зик 3я4кіс 3я4рус 3я4скрав 3є4д3н 3є4дин 3є4писк 3є4рей 3і4зотоп 3і4люстр 3і4мовір 3і4нтенс 3і4нформ 3і4ніціат 3і4снув 3ї4ждж 3ї4зд 3ї4ст 3ї4хав 3ї4хат .заї4к .заї4ц .заї4ч .наї4д 'ї4в 'ї4з 'ї4д 'ї4ж 'ї4л 'ї4м 'ї4с 'ї4х аві4а авої4д ае4тил альбі5он ахої4д ауді4о ай4с3берг бактері4о ба4с3енер ба4с3антра .бе5зе. бей4сбол бе5кон б'4єть бйор4нс бі4о3 бо4г3дан бран4д брі4дж3порт без5і4мен бо4є3гол бо4є3гот бо4є3зап бо4є3здат бо4є3комп бо4є3пост бо4є3прип бори4с5п 4в3антрац вер4х3н ви3й4д вина3й4д ви3й4т вина3й4т від7зна ві5д4ен ві5д4е4о ві5д4ом від5о4браж від5о4браз во4с5ко водо5с4ток водо5з4бір воль4т3метр воль4т3ампер 3в'4яз ге2ть3ман ге4о го4с4п5роз гі4д5ро5мет 4д7зем дер4ж5а4том дер4ж5а4дм дер4ж5бюдж дер4ж5вид дер4ж5дум дер4ж5замов дер4ж5ком дер4ж5нафт дер4ж5реєс дер4ж3без дер4ж3резерв дер4ж5стр дер4ж5служ двох4а5том джен4тль дисбаланс ди4с3гарм ди4с3квал ди4с3комф ди4с3конт ди4с3кред ди4с3крет ди4с3крец ди4с3крим ди4с3кусі ди4с3куту ди4с3лок ди4с3парит ди4с3перс ди4с3петч ди4с3пле ди4с3плей ди4с3пози ди4с3проп ди4с3пут ди4с3тил ди4с3триб ди4с3троф ди4с3функц ді3й4т ді3й4д д4ні3п4р .дої4в .дої4л .дої5ль дої4д дої4м дої4х дої4ж дої4ст до3з4вол до3з4віл дорого5в4каз еу4стр ео4сві енерго3з4береж енерго3з4беріг ек2с1к ек2с1п ек2с1т ек2с1ц єв4р3атом єпі4с5коп єпи4с5коп за4п3част заї4д заї4ж заї4з заї4л заї4м заї4х зе4кономити 3з'4ясо зна3й4д зна3й4т зо4ка зо4ке зо4ки зо4ку зо4кі игої4д ий4ти іе4тил і4л3е4тил ій4ти інфор4м3аген йо4сві каза4х3стан квої4д корої4д квар4т3плат киї4венер кон4трре кон4тр3арг жко4м5а4том кому4ненерг мі4н5е4ко мі4н5е4нер мо4к5рий 3м'4якш 3м'4ят на3б4лиз на3в4ряд на3в4ча на3з4в на4д7з4в наї4вс наї4вш наї4ж наї4з наї4л наї4м наї4с наї4х на4й3а на4й3е на4й3обереж на4й7о4бер на4й7о4гид на4й7о4гол на4й7о4гряд на4й7о4пук на4й7о4хай на4й3масл на4й3спри на4й3якіс на3в4чен на3в4чіть не3в4том не3д4бан на3д4бан не3з4вич не3з4важ нео4пал недої4 неї4ст на5п4лив ні4т5рат оної4д оо4пал ео4пал обі3д4ран обі3й4д обі3й4т об5у4мов онаї4д оо4сві оо4к оу4стр оа4том об4лдер4ж об4л3а4дмін переї4д переї4ж переї4з переї4л переї4с переї4х пере5п4лив пере3й4д пре4й4с пере3й4т перег4ній перед5о4бід пере3в4том пере4д5см перед5у4мов під5о4дин пів5о4с4тр пі5в4ень по3б4лизу по3в4тор поч4не поч4ни поч4ну поя4в по3в4чен по3в4чіть по3д4роб по3д4раз по3д4во по5ж4ніть по5з4бав .пої4 пої4д прої4 пої4зд по4с4т5радян по4с4т5кому по4с4т3декр по4с4т3контра по4с4т3менопауз по4с4тприват по4с4т3раді по4с4т5соці пос4т3кап пос4т3ком пос4т3нат пос4т3проц пос4т3соц пос4т3фікс при3й4т про3с4тирад про4ф3с полі4т5екон пор4т3н пор4т3рет пор4т3фел при3й4д при4нцип про4ект3н про3б4лем про4м3май пр4о5плат раді4о рай3в4но ро4з5д4во ро4з5мінний роз5у4чен роз5і4мен роз5вант роз5вин роз5вит ро4з5діл ро4з5гор ро4з5вер ро4з5чеп ро4з'5єдн з'4єдн руко5с4тиск ро5з4ум ро4з3гром ро4з3лив рмої4д сан4к4т3 сеї4д серцеї4д спе4ц3кур спе4ц3мон спе4цпр спе4ц3с спор4т3вир спор4т3зал спор4т3ком спор4т3клуб спор4т3май спор4т4с3ме сор4тн 3с4промож сь4квуг стат5упр тор4г3пред тран4с3 тур4к3мен цук3ро у4к4р укр3а4вт укр3а4гр укр3е4кс укр3і4н4банк убої4д чорно3б4рив цен4т4р3енерг ясої4д ви3у4ч за3у4ч на3у4ч недо3у4ч не3у4ч під3у4ч пед3у4чи пере3у4ч само3у4ч вия4в з'я4в зая4в ная4в уя4в во4євод во4єнач сво4єчас сво4єкорис сво4єрід хво4є3г4риз гелі4о ді4о еті4о мі4о і4он полі4о соці4о фізі4о хімі4о гоме4о ді4алог ді4оген дея4к оо4динок ао4пік ао4ха ео4ха зо6о ка5нал оі4зол міжу4соб мете4о абия4к нія4к вия4сн най3я4сн нея4сн поя4сн проя4сн роз'я4сн ро5з4ора. ро5з4о5рам ро5з4орах ро5з4ори ро5з4оро ро5з4ору ро5з4оря ро5з4орю ро5з4орі ро6з5о4ри. розо4ра розо4ре розо4реш розо4рн напоу4м неа4би ео4цін оо4цін доу4к доу4м ео4бур ео4голош ео4зор бальне4о не4оліт не4омальт не4оклас не4окомун не4оландш не4олог не4олібер не4онац не4офіт нею4н нея4к нея4рок но4к3а4ут пі5в4оні піво4с пале4о па4н3о4тець .пе4ом. д3у4сім п4о5бере ао4хот ое4ко ео4хот ео4щад ао4щад оо4чищ поя4с роз'я4р те4одоліт те4олог те4ософ оо4біг оу4сун оу4ком пів3о4вал а3у4дар о3у4дар з3у4дар в3у4дар контр3у4дар о3о4кисл и3о4кисл ень7о4кисл е3о4кисл х3о4кисл и3і4стор о3і4стор і3і4стор а3і4стор я3і4стор е3і4стор наді4стор най3і4стор пів3і4стор перед3і4стор пост3і4стор ар4т3афіш ар4т3взвод ар4т3десант ар4т3кафе ар4т3майс ар4т3медіа ар4т3мейс ар4т3мін ар4т3о4бстр ар4т3о4дин ар4т3о4збр ар4т3під ар4т3рин ар4т3у4стан ар4т3факт ар4т3хім ар4т3центр наді4стот найі4стот еі4стот оі4стот ау4т3екол оо4чист з3а4кт оа4кт еа4кт гіпер3а4кт найа4кт піва4кт ао4браз ео4браз оо4браз граф3о4браз най3о4браз супер3о4браз ар4т3мейст баге4р3мейст бале4т3мейст бран4д3мейст ва4ль4д3мейст ве4ль4т3мейст го4ф3мейст гро4с3мейст декре4т3мейст до4к3мейст капе4ль3мейст кварти4р3мейст конце4р4т3мейст кра4н3мейст полі4ц3мейст по4ш4т3мейст фо4р4с4т3мейст хо4р3мейст шапі4т3мейст шта4л3мейст єге4р3мейст иа4варі яа4варі оа4варі еа4варі беза4варі між3а4варі над3а4варі пост3а4варі напів3а4варі перед3а4варі супер3а4варі аа4дрес еа4дрес оа4дрес іа4дрес без3а4дрес ае4фект ее4фект ое4фект най3е4фект супер3е4фект ое4місі ие4місі яе4місі ее4місі безе4місі гіпер3е4місі еу4бог й3у4бог ий4ня зай4ня здій4ня най4ня обій4ня перей4ня підій4ня прий4м пій4м дій4ма вий4м най4ма зай4м д4о3й4м обой4м прой4м обій4м перей4м безу4гл безу4пин бло4к3пост .блі4ц3ана .блі4ц3криг .блі4ц3опит .блі4ц3торг .блі4ц3тур .блі4ц3і4спит о3а4наліз бак3а4наліз ц3а4наліз ген3а4наліз з3а4наліз м3а4наліз нт3а4наліз між3а4наліз полі3а4наліз ре3а4наліз оу4год ау4год еу4год пів3у4год роз3у4год гос4п3у4год ео4пис оо4пис ао4пис бо4р4т3мех бо4р4т3о4пер бо4р4т3про бо4р4т3рад бо4р4т3і4нж оа4каці оу4с оо4держ оа4на біблі4о .на3в4ч .ви3в4ч .до3в4ч .за3в4ч .по3в4ч .при3в4ч ана3в4ч ена3в4ч мона3в4ч жона3в4ч іона3в4ч ови3в4ч еви3в4ч едо3в4ч оза3в4ч по3в4ча .ом4рі е3м4рій .ви3м4р .віді3м4р .зав3м4р .за3м4р .зі3м4р .на3м4р .пере3м4р .по3м4р .при3м4р .роз3м4р .ум4ри .ум4рі .ум4ру .ум4ре во4станнє най3о4станн перед3о4станн ие4стет ое4стет ее4стет й3е4стет пан3е4стет пар3е4стет оо4ктан іо4ктан оо4плачув ео4плачув перед3о4пла виу4ди о3в4каз е3в4каз 8-7 --8 .а-8 .б-8 .в-8 .г-8 .ґ-8 .д-8 .е-8 .є-8 .ж-8 .з-8 .и-8 .і-8 .ї-8 .й-8 .к-8 .л-8 .м-8 .н-8 .о-8 .п-8 .р-8 .с-8 .т-8 .у-8 .ф-8 .х-8 .ц-8 .ч-8 .ш-8 .щ-8 .ь-8 .ю-8 .я-8 .'-8 -а8а8 8а8а- -а8б8 8а8б- -а8в8 8а8в- -а8г8 8а8г- -а8ґ8 8а8ґ- -а8д8 8а8д- -а8е8 8а8е- -а8є8 8а8є- -а8ж8 8а8ж- -а8з8 8а8з- -а8и8 8а8и- -а8і8 8а8і- -а8ї8 8а8ї- -а8й8 8а8й- -а8к8 8а8к- -а8л8 8а8л- -а8м8 8а8м- -а8н8 8а8н- -а8о8 8а8о- -а8п8 8а8п- -а8р8 8а8р- -а8с8 8а8с- -а8т8 8а8т- -а8у8 8а8у- -а8ф8 8а8ф- -а8х8 8а8х- -а8ц8 8а8ц- -а8ч8 8а8ч- -а8ш8 8а8ш- -а8щ8 8а8щ- -а8ь8 8а8ь- -а8ю8 8а8ю- -а8я8 8а8я- -а8'8 8а8'- -б8а8 8б8а- -б8б8 8б8б- -б8в8 8б8в- -б8г8 8б8г- -б8ґ8 8б8ґ- -б8д8 8б8д- -б8е8 8б8е- -б8є8 8б8є- -б8ж8 8б8ж- -б8з8 8б8з- -б8и8 8б8и- -б8і8 8б8і- -б8ї8 8б8ї- -б8й8 8б8й- -б8к8 8б8к- -б8л8 8б8л- -б8м8 8б8м- -б8н8 8б8н- -б8о8 8б8о- -б8п8 8б8п- -б8р8 8б8р- -б8с8 8б8с- -б8т8 8б8т- -б8у8 8б8у- -б8ф8 8б8ф- -б8х8 8б8х- -б8ц8 8б8ц- -б8ч8 8б8ч- -б8ш8 8б8ш- -б8щ8 8б8щ- -б8ь8 8б8ь- -б8ю8 8б8ю- -б8я8 8б8я- -б8'8 8б8'- -в8а8 8в8а- -в8б8 8в8б- -в8в8 8в8в- -в8г8 8в8г- -в8ґ8 8в8ґ- -в8д8 8в8д- -в8е8 8в8е- -в8є8 8в8є- -в8ж8 8в8ж- -в8з8 8в8з- -в8и8 8в8и- -в8і8 8в8і- -в8ї8 8в8ї- -в8й8 8в8й- -в8к8 8в8к- -в8л8 8в8л- -в8м8 8в8м- -в8н8 8в8н- -в8о8 8в8о- -в8п8 8в8п- -в8р8 8в8р- -в8с8 8в8с- -в8т8 8в8т- -в8у8 8в8у- -в8ф8 8в8ф- -в8х8 8в8х- -в8ц8 8в8ц- -в8ч8 8в8ч- -в8ш8 8в8ш- -в8щ8 8в8щ- -в8ь8 8в8ь- -в8ю8 8в8ю- -в8я8 8в8я- -в8'8 8в8'- -г8а8 8г8а- -г8б8 8г8б- -г8в8 8г8в- -г8г8 8г8г- -г8ґ8 8г8ґ- -г8д8 8г8д- -г8е8 8г8е- -г8є8 8г8є- -г8ж8 8г8ж- -г8з8 8г8з- -г8и8 8г8и- -г8і8 8г8і- -г8ї8 8г8ї- -г8й8 8г8й- -г8к8 8г8к- -г8л8 8г8л- -г8м8 8г8м- -г8н8 8г8н- -г8о8 8г8о- -г8п8 8г8п- -г8р8 8г8р- -г8с8 8г8с- -г8т8 8г8т- -г8у8 8г8у- -г8ф8 8г8ф- -г8х8 8г8х- -г8ц8 8г8ц- -г8ч8 8г8ч- -г8ш8 8г8ш- -г8щ8 8г8щ- -г8ь8 8г8ь- -г8ю8 8г8ю- -г8я8 8г8я- -г8'8 8г8'- -ґ8а8 8ґ8а- -ґ8б8 8ґ8б- -ґ8в8 8ґ8в- -ґ8г8 8ґ8г- -ґ8ґ8 8ґ8ґ- -ґ8д8 8ґ8д- -ґ8е8 8ґ8е- -ґ8є8 8ґ8є- -ґ8ж8 8ґ8ж- -ґ8з8 8ґ8з- -ґ8и8 8ґ8и- -ґ8і8 8ґ8і- -ґ8ї8 8ґ8ї- -ґ8й8 8ґ8й- -ґ8к8 8ґ8к- -ґ8л8 8ґ8л- -ґ8м8 8ґ8м- -ґ8н8 8ґ8н- -ґ8о8 8ґ8о- -ґ8п8 8ґ8п- -ґ8р8 8ґ8р- -ґ8с8 8ґ8с- -ґ8т8 8ґ8т- -ґ8у8 8ґ8у- -ґ8ф8 8ґ8ф- -ґ8х8 8ґ8х- -ґ8ц8 8ґ8ц- -ґ8ч8 8ґ8ч- -ґ8ш8 8ґ8ш- -ґ8щ8 8ґ8щ- -ґ8ь8 8ґ8ь- -ґ8ю8 8ґ8ю- -ґ8я8 8ґ8я- -ґ8'8 8ґ8'- -д8а8 8д8а- -д8б8 8д8б- -д8в8 8д8в- -д8г8 8д8г- -д8ґ8 8д8ґ- -д8д8 8д8д- -д8е8 8д8е- -д8є8 8д8є- -д8ж8 8д8ж- -д8з8 8д8з- -д8и8 8д8и- -д8і8 8д8і- -д8ї8 8д8ї- -д8й8 8д8й- -д8к8 8д8к- -д8л8 8д8л- -д8м8 8д8м- -д8н8 8д8н- -д8о8 8д8о- -д8п8 8д8п- -д8р8 8д8р- -д8с8 8д8с- -д8т8 8д8т- -д8у8 8д8у- -д8ф8 8д8ф- -д8х8 8д8х- -д8ц8 8д8ц- -д8ч8 8д8ч- -д8ш8 8д8ш- -д8щ8 8д8щ- -д8ь8 8д8ь- -д8ю8 8д8ю- -д8я8 8д8я- -д8'8 8д8'- -е8а8 8е8а- -е8б8 8е8б- -е8в8 8е8в- -е8г8 8е8г- -е8ґ8 8е8ґ- -е8д8 8е8д- -е8е8 8е8е- -е8є8 8е8є- -е8ж8 8е8ж- -е8з8 8е8з- -е8и8 8е8и- -е8і8 8е8і- -е8ї8 8е8ї- -е8й8 8е8й- -е8к8 8е8к- -е8л8 8е8л- -е8м8 8е8м- -е8н8 8е8н- -е8о8 8е8о- -е8п8 8е8п- -е8р8 8е8р- -е8с8 8е8с- -е8т8 8е8т- -е8у8 8е8у- -е8ф8 8е8ф- -е8х8 8е8х- -е8ц8 8е8ц- -е8ч8 8е8ч- -е8ш8 8е8ш- -е8щ8 8е8щ- -е8ь8 8е8ь- -е8ю8 8е8ю- -е8я8 8е8я- -е8'8 8е8'- -є8а8 8є8а- -є8б8 8є8б- -є8в8 8є8в- -є8г8 8є8г- -є8ґ8 8є8ґ- -є8д8 8є8д- -є8е8 8є8е- -є8є8 8є8є- -є8ж8 8є8ж- -є8з8 8є8з- -є8и8 8є8и- -є8і8 8є8і- -є8ї8 8є8ї- -є8й8 8є8й- -є8к8 8є8к- -є8л8 8є8л- -є8м8 8є8м- -є8н8 8є8н- -є8о8 8є8о- -є8п8 8є8п- -є8р8 8є8р- -є8с8 8є8с- -є8т8 8є8т- -є8у8 8є8у- -є8ф8 8є8ф- -є8х8 8є8х- -є8ц8 8є8ц- -є8ч8 8є8ч- -є8ш8 8є8ш- -є8щ8 8є8щ- -є8ь8 8є8ь- -є8ю8 8є8ю- -є8я8 8є8я- -є8'8 8є8'- -ж8а8 8ж8а- -ж8б8 8ж8б- -ж8в8 8ж8в- -ж8г8 8ж8г- -ж8ґ8 8ж8ґ- -ж8д8 8ж8д- -ж8е8 8ж8е- -ж8є8 8ж8є- -ж8ж8 8ж8ж- -ж8з8 8ж8з- -ж8и8 8ж8и- -ж8і8 8ж8і- -ж8ї8 8ж8ї- -ж8й8 8ж8й- -ж8к8 8ж8к- -ж8л8 8ж8л- -ж8м8 8ж8м- -ж8н8 8ж8н- -ж8о8 8ж8о- -ж8п8 8ж8п- -ж8р8 8ж8р- -ж8с8 8ж8с- -ж8т8 8ж8т- -ж8у8 8ж8у- -ж8ф8 8ж8ф- -ж8х8 8ж8х- -ж8ц8 8ж8ц- -ж8ч8 8ж8ч- -ж8ш8 8ж8ш- -ж8щ8 8ж8щ- -ж8ь8 8ж8ь- -ж8ю8 8ж8ю- -ж8я8 8ж8я- -ж8'8 8ж8'- -з8а8 8з8а- -з8б8 8з8б- -з8в8 8з8в- -з8г8 8з8г- -з8ґ8 8з8ґ- -з8д8 8з8д- -з8е8 8з8е- -з8є8 8з8є- -з8ж8 8з8ж- -з8з8 8з8з- -з8и8 8з8и- -з8і8 8з8і- -з8ї8 8з8ї- -з8й8 8з8й- -з8к8 8з8к- -з8л8 8з8л- -з8м8 8з8м- -з8н8 8з8н- -з8о8 8з8о- -з8п8 8з8п- -з8р8 8з8р- -з8с8 8з8с- -з8т8 8з8т- -з8у8 8з8у- -з8ф8 8з8ф- -з8х8 8з8х- -з8ц8 8з8ц- -з8ч8 8з8ч- -з8ш8 8з8ш- -з8щ8 8з8щ- -з8ь8 8з8ь- -з8ю8 8з8ю- -з8я8 8з8я- -з8'8 8з8'- -и8а8 8и8а- -и8б8 8и8б- -и8в8 8и8в- -и8г8 8и8г- -и8ґ8 8и8ґ- -и8д8 8и8д- -и8е8 8и8е- -и8є8 8и8є- -и8ж8 8и8ж- -и8з8 8и8з- -и8и8 8и8и- -и8і8 8и8і- -и8ї8 8и8ї- -и8й8 8и8й- -и8к8 8и8к- -и8л8 8и8л- -и8м8 8и8м- -и8н8 8и8н- -и8о8 8и8о- -и8п8 8и8п- -и8р8 8и8р- -и8с8 8и8с- -и8т8 8и8т- -и8у8 8и8у- -и8ф8 8и8ф- -и8х8 8и8х- -и8ц8 8и8ц- -и8ч8 8и8ч- -и8ш8 8и8ш- -и8щ8 8и8щ- -и8ь8 8и8ь- -и8ю8 8и8ю- -и8я8 8и8я- -и8'8 8и8'- -і8а8 8і8а- -і8б8 8і8б- -і8в8 8і8в- -і8г8 8і8г- -і8ґ8 8і8ґ- -і8д8 8і8д- -і8е8 8і8е- -і8є8 8і8є- -і8ж8 8і8ж- -і8з8 8і8з- -і8и8 8і8и- -і8і8 8і8і- -і8ї8 8і8ї- -і8й8 8і8й- -і8к8 8і8к- -і8л8 8і8л- -і8м8 8і8м- -і8н8 8і8н- -і8о8 8і8о- -і8п8 8і8п- -і8р8 8і8р- -і8с8 8і8с- -і8т8 8і8т- -і8у8 8і8у- -і8ф8 8і8ф- -і8х8 8і8х- -і8ц8 8і8ц- -і8ч8 8і8ч- -і8ш8 8і8ш- -і8щ8 8і8щ- -і8ь8 8і8ь- -і8ю8 8і8ю- -і8я8 8і8я- -і8'8 8і8'- -ї8а8 8ї8а- -ї8б8 8ї8б- -ї8в8 8ї8в- -ї8г8 8ї8г- -ї8ґ8 8ї8ґ- -ї8д8 8ї8д- -ї8е8 8ї8е- -ї8є8 8ї8є- -ї8ж8 8ї8ж- -ї8з8 8ї8з- -ї8и8 8ї8и- -ї8і8 8ї8і- -ї8ї8 8ї8ї- -ї8й8 8ї8й- -ї8к8 8ї8к- -ї8л8 8ї8л- -ї8м8 8ї8м- -ї8н8 8ї8н- -ї8о8 8ї8о- -ї8п8 8ї8п- -ї8р8 8ї8р- -ї8с8 8ї8с- -ї8т8 8ї8т- -ї8у8 8ї8у- -ї8ф8 8ї8ф- -ї8х8 8ї8х- -ї8ц8 8ї8ц- -ї8ч8 8ї8ч- -ї8ш8 8ї8ш- -ї8щ8 8ї8щ- -ї8ь8 8ї8ь- -ї8ю8 8ї8ю- -ї8я8 8ї8я- -ї8'8 8ї8'- -й8а8 8й8а- -й8б8 8й8б- -й8в8 8й8в- -й8г8 8й8г- -й8ґ8 8й8ґ- -й8д8 8й8д- -й8е8 8й8е- -й8є8 8й8є- -й8ж8 8й8ж- -й8з8 8й8з- -й8и8 8й8и- -й8і8 8й8і- -й8ї8 8й8ї- -й8й8 8й8й- -й8к8 8й8к- -й8л8 8й8л- -й8м8 8й8м- -й8н8 8й8н- -й8о8 8й8о- -й8п8 8й8п- -й8р8 8й8р- -й8с8 8й8с- -й8т8 8й8т- -й8у8 8й8у- -й8ф8 8й8ф- -й8х8 8й8х- -й8ц8 8й8ц- -й8ч8 8й8ч- -й8ш8 8й8ш- -й8щ8 8й8щ- -й8ь8 8й8ь- -й8ю8 8й8ю- -й8я8 8й8я- -й8'8 8й8'- -к8а8 8к8а- -к8б8 8к8б- -к8в8 8к8в- -к8г8 8к8г- -к8ґ8 8к8ґ- -к8д8 8к8д- -к8е8 8к8е- -к8є8 8к8є- -к8ж8 8к8ж- -к8з8 8к8з- -к8и8 8к8и- -к8і8 8к8і- -к8ї8 8к8ї- -к8й8 8к8й- -к8к8 8к8к- -к8л8 8к8л- -к8м8 8к8м- -к8н8 8к8н- -к8о8 8к8о- -к8п8 8к8п- -к8р8 8к8р- -к8с8 8к8с- -к8т8 8к8т- -к8у8 8к8у- -к8ф8 8к8ф- -к8х8 8к8х- -к8ц8 8к8ц- -к8ч8 8к8ч- -к8ш8 8к8ш- -к8щ8 8к8щ- -к8ь8 8к8ь- -к8ю8 8к8ю- -к8я8 8к8я- -к8'8 8к8'- -л8а8 8л8а- -л8б8 8л8б- -л8в8 8л8в- -л8г8 8л8г- -л8ґ8 8л8ґ- -л8д8 8л8д- -л8е8 8л8е- -л8є8 8л8є- -л8ж8 8л8ж- -л8з8 8л8з- -л8и8 8л8и- -л8і8 8л8і- -л8ї8 8л8ї- -л8й8 8л8й- -л8к8 8л8к- -л8л8 8л8л- -л8м8 8л8м- -л8н8 8л8н- -л8о8 8л8о- -л8п8 8л8п- -л8р8 8л8р- -л8с8 8л8с- -л8т8 8л8т- -л8у8 8л8у- -л8ф8 8л8ф- -л8х8 8л8х- -л8ц8 8л8ц- -л8ч8 8л8ч- -л8ш8 8л8ш- -л8щ8 8л8щ- -л8ь8 8л8ь- -л8ю8 8л8ю- -л8я8 8л8я- -л8'8 8л8'- -м8а8 8м8а- -м8б8 8м8б- -м8в8 8м8в- -м8г8 8м8г- -м8ґ8 8м8ґ- -м8д8 8м8д- -м8е8 8м8е- -м8є8 8м8є- -м8ж8 8м8ж- -м8з8 8м8з- -м8и8 8м8и- -м8і8 8м8і- -м8ї8 8м8ї- -м8й8 8м8й- -м8к8 8м8к- -м8л8 8м8л- -м8м8 8м8м- -м8н8 8м8н- -м8о8 8м8о- -м8п8 8м8п- -м8р8 8м8р- -м8с8 8м8с- -м8т8 8м8т- -м8у8 8м8у- -м8ф8 8м8ф- -м8х8 8м8х- -м8ц8 8м8ц- -м8ч8 8м8ч- -м8ш8 8м8ш- -м8щ8 8м8щ- -м8ь8 8м8ь- -м8ю8 8м8ю- -м8я8 8м8я- -м8'8 8м8'- -н8а8 8н8а- -н8б8 8н8б- -н8в8 8н8в- -н8г8 8н8г- -н8ґ8 8н8ґ- -н8д8 8н8д- -н8е8 8н8е- -н8є8 8н8є- -н8ж8 8н8ж- -н8з8 8н8з- -н8и8 8н8и- -н8і8 8н8і- -н8ї8 8н8ї- -н8й8 8н8й- -н8к8 8н8к- -н8л8 8н8л- -н8м8 8н8м- -н8н8 8н8н- -н8о8 8н8о- -н8п8 8н8п- -н8р8 8н8р- -н8с8 8н8с- -н8т8 8н8т- -н8у8 8н8у- -н8ф8 8н8ф- -н8х8 8н8х- -н8ц8 8н8ц- -н8ч8 8н8ч- -н8ш8 8н8ш- -н8щ8 8н8щ- -н8ь8 8н8ь- -н8ю8 8н8ю- -н8я8 8н8я- -н8'8 8н8'- -о8а8 8о8а- -о8б8 8о8б- -о8в8 8о8в- -о8г8 8о8г- -о8ґ8 8о8ґ- -о8д8 8о8д- -о8е8 8о8е- -о8є8 8о8є- -о8ж8 8о8ж- -о8з8 8о8з- -о8и8 8о8и- -о8і8 8о8і- -о8ї8 8о8ї- -о8й8 8о8й- -о8к8 8о8к- -о8л8 8о8л- -о8м8 8о8м- -о8н8 8о8н- -о8о8 8о8о- -о8п8 8о8п- -о8р8 8о8р- -о8с8 8о8с- -о8т8 8о8т- -о8у8 8о8у- -о8ф8 8о8ф- -о8х8 8о8х- -о8ц8 8о8ц- -о8ч8 8о8ч- -о8ш8 8о8ш- -о8щ8 8о8щ- -о8ь8 8о8ь- -о8ю8 8о8ю- -о8я8 8о8я- -о8'8 8о8'- -п8а8 8п8а- -п8б8 8п8б- -п8в8 8п8в- -п8г8 8п8г- -п8ґ8 8п8ґ- -п8д8 8п8д- -п8е8 8п8е- -п8є8 8п8є- -п8ж8 8п8ж- -п8з8 8п8з- -п8и8 8п8и- -п8і8 8п8і- -п8ї8 8п8ї- -п8й8 8п8й- -п8к8 8п8к- -п8л8 8п8л- -п8м8 8п8м- -п8н8 8п8н- -п8о8 8п8о- -п8п8 8п8п- -п8р8 8п8р- -п8с8 8п8с- -п8т8 8п8т- -п8у8 8п8у- -п8ф8 8п8ф- -п8х8 8п8х- -п8ц8 8п8ц- -п8ч8 8п8ч- -п8ш8 8п8ш- -п8щ8 8п8щ- -п8ь8 8п8ь- -п8ю8 8п8ю- -п8я8 8п8я- -п8'8 8п8'- -р8а8 8р8а- -р8б8 8р8б- -р8в8 8р8в- -р8г8 8р8г- -р8ґ8 8р8ґ- -р8д8 8р8д- -р8е8 8р8е- -р8є8 8р8є- -р8ж8 8р8ж- -р8з8 8р8з- -р8и8 8р8и- -р8і8 8р8і- -р8ї8 8р8ї- -р8й8 8р8й- -р8к8 8р8к- -р8л8 8р8л- -р8м8 8р8м- -р8н8 8р8н- -р8о8 8р8о- -р8п8 8р8п- -р8р8 8р8р- -р8с8 8р8с- -р8т8 8р8т- -р8у8 8р8у- -р8ф8 8р8ф- -р8х8 8р8х- -р8ц8 8р8ц- -р8ч8 8р8ч- -р8ш8 8р8ш- -р8щ8 8р8щ- -р8ь8 8р8ь- -р8ю8 8р8ю- -р8я8 8р8я- -р8'8 8р8'- -с8а8 8с8а- -с8б8 8с8б- -с8в8 8с8в- -с8г8 8с8г- -с8ґ8 8с8ґ- -с8д8 8с8д- -с8е8 8с8е- -с8є8 8с8є- -с8ж8 8с8ж- -с8з8 8с8з- -с8и8 8с8и- -с8і8 8с8і- -с8ї8 8с8ї- -с8й8 8с8й- -с8к8 8с8к- -с8л8 8с8л- -с8м8 8с8м- -с8н8 8с8н- -с8о8 8с8о- -с8п8 8с8п- -с8р8 8с8р- -с8с8 8с8с- -с8т8 8с8т- -с8у8 8с8у- -с8ф8 8с8ф- -с8х8 8с8х- -с8ц8 8с8ц- -с8ч8 8с8ч- -с8ш8 8с8ш- -с8щ8 8с8щ- -с8ь8 8с8ь- -с8ю8 8с8ю- -с8я8 8с8я- -с8'8 8с8'- -т8а8 8т8а- -т8б8 8т8б- -т8в8 8т8в- -т8г8 8т8г- -т8ґ8 8т8ґ- -т8д8 8т8д- -т8е8 8т8е- -т8є8 8т8є- -т8ж8 8т8ж- -т8з8 8т8з- -т8и8 8т8и- -т8і8 8т8і- -т8ї8 8т8ї- -т8й8 8т8й- -т8к8 8т8к- -т8л8 8т8л- -т8м8 8т8м- -т8н8 8т8н- -т8о8 8т8о- -т8п8 8т8п- -т8р8 8т8р- -т8с8 8т8с- -т8т8 8т8т- -т8у8 8т8у- -т8ф8 8т8ф- -т8х8 8т8х- -т8ц8 8т8ц- -т8ч8 8т8ч- -т8ш8 8т8ш- -т8щ8 8т8щ- -т8ь8 8т8ь- -т8ю8 8т8ю- -т8я8 8т8я- -т8'8 8т8'- -у8а8 8у8а- -у8б8 8у8б- -у8в8 8у8в- -у8г8 8у8г- -у8ґ8 8у8ґ- -у8д8 8у8д- -у8е8 8у8е- -у8є8 8у8є- -у8ж8 8у8ж- -у8з8 8у8з- -у8и8 8у8и- -у8і8 8у8і- -у8ї8 8у8ї- -у8й8 8у8й- -у8к8 8у8к- -у8л8 8у8л- -у8м8 8у8м- -у8н8 8у8н- -у8о8 8у8о- -у8п8 8у8п- -у8р8 8у8р- -у8с8 8у8с- -у8т8 8у8т- -у8у8 8у8у- -у8ф8 8у8ф- -у8х8 8у8х- -у8ц8 8у8ц- -у8ч8 8у8ч- -у8ш8 8у8ш- -у8щ8 8у8щ- -у8ь8 8у8ь- -у8ю8 8у8ю- -у8я8 8у8я- -у8'8 8у8'- -ф8а8 8ф8а- -ф8б8 8ф8б- -ф8в8 8ф8в- -ф8г8 8ф8г- -ф8ґ8 8ф8ґ- -ф8д8 8ф8д- -ф8е8 8ф8е- -ф8є8 8ф8є- -ф8ж8 8ф8ж- -ф8з8 8ф8з- -ф8и8 8ф8и- -ф8і8 8ф8і- -ф8ї8 8ф8ї- -ф8й8 8ф8й- -ф8к8 8ф8к- -ф8л8 8ф8л- -ф8м8 8ф8м- -ф8н8 8ф8н- -ф8о8 8ф8о- -ф8п8 8ф8п- -ф8р8 8ф8р- -ф8с8 8ф8с- -ф8т8 8ф8т- -ф8у8 8ф8у- -ф8ф8 8ф8ф- -ф8х8 8ф8х- -ф8ц8 8ф8ц- -ф8ч8 8ф8ч- -ф8ш8 8ф8ш- -ф8щ8 8ф8щ- -ф8ь8 8ф8ь- -ф8ю8 8ф8ю- -ф8я8 8ф8я- -ф8'8 8ф8'- -х8а8 8х8а- -х8б8 8х8б- -х8в8 8х8в- -х8г8 8х8г- -х8ґ8 8х8ґ- -х8д8 8х8д- -х8е8 8х8е- -х8є8 8х8є- -х8ж8 8х8ж- -х8з8 8х8з- -х8и8 8х8и- -х8і8 8х8і- -х8ї8 8х8ї- -х8й8 8х8й- -х8к8 8х8к- -х8л8 8х8л- -х8м8 8х8м- -х8н8 8х8н- -х8о8 8х8о- -х8п8 8х8п- -х8р8 8х8р- -х8с8 8х8с- -х8т8 8х8т- -х8у8 8х8у- -х8ф8 8х8ф- -х8х8 8х8х- -х8ц8 8х8ц- -х8ч8 8х8ч- -х8ш8 8х8ш- -х8щ8 8х8щ- -х8ь8 8х8ь- -х8ю8 8х8ю- -х8я8 8х8я- -х8'8 8х8'- -ц8а8 8ц8а- -ц8б8 8ц8б- -ц8в8 8ц8в- -ц8г8 8ц8г- -ц8ґ8 8ц8ґ- -ц8д8 8ц8д- -ц8е8 8ц8е- -ц8є8 8ц8є- -ц8ж8 8ц8ж- -ц8з8 8ц8з- -ц8и8 8ц8и- -ц8і8 8ц8і- -ц8ї8 8ц8ї- -ц8й8 8ц8й- -ц8к8 8ц8к- -ц8л8 8ц8л- -ц8м8 8ц8м- -ц8н8 8ц8н- -ц8о8 8ц8о- -ц8п8 8ц8п- -ц8р8 8ц8р- -ц8с8 8ц8с- -ц8т8 8ц8т- -ц8у8 8ц8у- -ц8ф8 8ц8ф- -ц8х8 8ц8х- -ц8ц8 8ц8ц- -ц8ч8 8ц8ч- -ц8ш8 8ц8ш- -ц8щ8 8ц8щ- -ц8ь8 8ц8ь- -ц8ю8 8ц8ю- -ц8я8 8ц8я- -ц8'8 8ц8'- -ч8а8 8ч8а- -ч8б8 8ч8б- -ч8в8 8ч8в- -ч8г8 8ч8г- -ч8ґ8 8ч8ґ- -ч8д8 8ч8д- -ч8е8 8ч8е- -ч8є8 8ч8є- -ч8ж8 8ч8ж- -ч8з8 8ч8з- -ч8и8 8ч8и- -ч8і8 8ч8і- -ч8ї8 8ч8ї- -ч8й8 8ч8й- -ч8к8 8ч8к- -ч8л8 8ч8л- -ч8м8 8ч8м- -ч8н8 8ч8н- -ч8о8 8ч8о- -ч8п8 8ч8п- -ч8р8 8ч8р- -ч8с8 8ч8с- -ч8т8 8ч8т- -ч8у8 8ч8у- -ч8ф8 8ч8ф- -ч8х8 8ч8х- -ч8ц8 8ч8ц- -ч8ч8 8ч8ч- -ч8ш8 8ч8ш- -ч8щ8 8ч8щ- -ч8ь8 8ч8ь- -ч8ю8 8ч8ю- -ч8я8 8ч8я- -ч8'8 8ч8'- -ш8а8 8ш8а- -ш8б8 8ш8б- -ш8в8 8ш8в- -ш8г8 8ш8г- -ш8ґ8 8ш8ґ- -ш8д8 8ш8д- -ш8е8 8ш8е- -ш8є8 8ш8є- -ш8ж8 8ш8ж- -ш8з8 8ш8з- -ш8и8 8ш8и- -ш8і8 8ш8і- -ш8ї8 8ш8ї- -ш8й8 8ш8й- -ш8к8 8ш8к- -ш8л8 8ш8л- -ш8м8 8ш8м- -ш8н8 8ш8н- -ш8о8 8ш8о- -ш8п8 8ш8п- -ш8р8 8ш8р- -ш8с8 8ш8с- -ш8т8 8ш8т- -ш8у8 8ш8у- -ш8ф8 8ш8ф- -ш8х8 8ш8х- -ш8ц8 8ш8ц- -ш8ч8 8ш8ч- -ш8ш8 8ш8ш- -ш8щ8 8ш8щ- -ш8ь8 8ш8ь- -ш8ю8 8ш8ю- -ш8я8 8ш8я- -ш8'8 8ш8'- -щ8а8 8щ8а- -щ8б8 8щ8б- -щ8в8 8щ8в- -щ8г8 8щ8г- -щ8ґ8 8щ8ґ- -щ8д8 8щ8д- -щ8е8 8щ8е- -щ8є8 8щ8є- -щ8ж8 8щ8ж- -щ8з8 8щ8з- -щ8и8 8щ8и- -щ8і8 8щ8і- -щ8ї8 8щ8ї- -щ8й8 8щ8й- -щ8к8 8щ8к- -щ8л8 8щ8л- -щ8м8 8щ8м- -щ8н8 8щ8н- -щ8о8 8щ8о- -щ8п8 8щ8п- -щ8р8 8щ8р- -щ8с8 8щ8с- -щ8т8 8щ8т- -щ8у8 8щ8у- -щ8ф8 8щ8ф- -щ8х8 8щ8х- -щ8ц8 8щ8ц- -щ8ч8 8щ8ч- -щ8ш8 8щ8ш- -щ8щ8 8щ8щ- -щ8ь8 8щ8ь- -щ8ю8 8щ8ю- -щ8я8 8щ8я- -щ8'8 8щ8'- -ь8а8 8ь8а- -ь8б8 8ь8б- -ь8в8 8ь8в- -ь8г8 8ь8г- -ь8ґ8 8ь8ґ- -ь8д8 8ь8д- -ь8е8 8ь8е- -ь8є8 8ь8є- -ь8ж8 8ь8ж- -ь8з8 8ь8з- -ь8и8 8ь8и- -ь8і8 8ь8і- -ь8ї8 8ь8ї- -ь8й8 8ь8й- -ь8к8 8ь8к- -ь8л8 8ь8л- -ь8м8 8ь8м- -ь8н8 8ь8н- -ь8о8 8ь8о- -ь8п8 8ь8п- -ь8р8 8ь8р- -ь8с8 8ь8с- -ь8т8 8ь8т- -ь8у8 8ь8у- -ь8ф8 8ь8ф- -ь8х8 8ь8х- -ь8ц8 8ь8ц- -ь8ч8 8ь8ч- -ь8ш8 8ь8ш- -ь8щ8 8ь8щ- -ь8ь8 8ь8ь- -ь8ю8 8ь8ю- -ь8я8 8ь8я- -ь8'8 8ь8'- -ю8а8 8ю8а- -ю8б8 8ю8б- -ю8в8 8ю8в- -ю8г8 8ю8г- -ю8ґ8 8ю8ґ- -ю8д8 8ю8д- -ю8е8 8ю8е- -ю8є8 8ю8є- -ю8ж8 8ю8ж- -ю8з8 8ю8з- -ю8и8 8ю8и- -ю8і8 8ю8і- -ю8ї8 8ю8ї- -ю8й8 8ю8й- -ю8к8 8ю8к- -ю8л8 8ю8л- -ю8м8 8ю8м- -ю8н8 8ю8н- -ю8о8 8ю8о- -ю8п8 8ю8п- -ю8р8 8ю8р- -ю8с8 8ю8с- -ю8т8 8ю8т- -ю8у8 8ю8у- -ю8ф8 8ю8ф- -ю8х8 8ю8х- -ю8ц8 8ю8ц- -ю8ч8 8ю8ч- -ю8ш8 8ю8ш- -ю8щ8 8ю8щ- -ю8ь8 8ю8ь- -ю8ю8 8ю8ю- -ю8я8 8ю8я- -ю8'8 8ю8'- -я8а8 8я8а- -я8б8 8я8б- -я8в8 8я8в- -я8г8 8я8г- -я8ґ8 8я8ґ- -я8д8 8я8д- -я8е8 8я8е- -я8є8 8я8є- -я8ж8 8я8ж- -я8з8 8я8з- -я8и8 8я8и- -я8і8 8я8і- -я8ї8 8я8ї- -я8й8 8я8й- -я8к8 8я8к- -я8л8 8я8л- -я8м8 8я8м- -я8н8 8я8н- -я8о8 8я8о- -я8п8 8я8п- -я8р8 8я8р- -я8с8 8я8с- -я8т8 8я8т- -я8у8 8я8у- -я8ф8 8я8ф- -я8х8 8я8х- -я8ц8 8я8ц- -я8ч8 8я8ч- -я8ш8 8я8ш- -я8щ8 8я8щ- -я8ь8 8я8ь- -я8ю8 8я8ю- -я8я8 8я8я- -я8'8 8я8'- -'8а8 8'8а- -'8б8 8'8б- -'8в8 8'8в- -'8г8 8'8г- -'8ґ8 8'8ґ- -'8д8 8'8д- -'8е8 8'8е- -'8є8 8'8є- -'8ж8 8'8ж- -'8з8 8'8з- -'8и8 8'8и- -'8і8 8'8і- -'8ї8 8'8ї- -'8й8 8'8й- -'8к8 8'8к- -'8л8 8'8л- -'8м8 8'8м- -'8н8 8'8н- -'8о8 8'8о- -'8п8 8'8п- -'8р8 8'8р- -'8с8 8'8с- -'8т8 8'8т- -'8у8 8'8у- -'8ф8 8'8ф- -'8х8 8'8х- -'8ц8 8'8ц- -'8ч8 8'8ч- -'8ш8 8'8ш- -'8щ8 8'8щ- -'8ь8 8'8ь- -'8ю8 8'8ю- -'8я8 8'8я- -'8'8 8'8'-", ["lefthyphenmin"]=1, - ["length"]=43681, - ["n"]=4565, + ["length"]=41329, + ["n"]=4338, ["righthyphenmax"]=1, }, ["version"]="1.001", diff --git a/tex/generic/context/luatex/luatex-basics-nod.lua b/tex/generic/context/luatex/luatex-basics-nod.lua index 67abf707b..7a956f44f 100644 --- a/tex/generic/context/luatex/luatex-basics-nod.lua +++ b/tex/generic/context/luatex/luatex-basics-nod.lua @@ -107,6 +107,7 @@ nuts.getkern = direct.getkern nuts.getlist = direct.getlist nuts.getnext = direct.getnext nuts.getoffsets = direct.getoffsets +nuts.getoptions = direct.getoptions or function() return 0 end nuts.getprev = direct.getprev nuts.getsubtype = direct.getsubtype nuts.getwidth = direct.getwidth @@ -206,6 +207,19 @@ local copy_node = nuts.copy_node local glyph_code = nodes.nodecodes.glyph local ligature_code = nodes.glyphcodes.ligature +do -- this is consistent with the rest of context, not that we need it + + local p = nodecodes.localpar or nodecodes.local_par + + if p then + nodecodes.par = p + nodecodes[p] = "par" + nodecodes.localpar = p -- for old times sake + nodecodes.local_par = p -- for old times sake + end + +end + do local get_components = node.direct.getcomponents diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 85ff57d00..4095eedc5 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date : 2020-09-20 22:59 +-- merge date : 2020-10-30 22:24 do -- begin closure to overcome local limits and interference @@ -4939,6 +4939,7 @@ nuts.getkern=direct.getkern nuts.getlist=direct.getlist nuts.getnext=direct.getnext nuts.getoffsets=direct.getoffsets +nuts.getoptions=direct.getoptions or function() return 0 end nuts.getprev=direct.getprev nuts.getsubtype=direct.getsubtype nuts.getwidth=direct.getwidth @@ -5022,6 +5023,15 @@ local traverse_id=nuts.traverse_id local copy_node=nuts.copy_node local glyph_code=nodes.nodecodes.glyph local ligature_code=nodes.glyphcodes.ligature +do + local p=nodecodes.localpar or nodecodes.local_par + if p then + nodecodes.par=p + nodecodes[p]="par" + nodecodes.localpar=p + nodecodes.local_par=p + end +end do local get_components=node.direct.getcomponents local set_components=node.direct.setcomponents @@ -26639,7 +26649,7 @@ local glue_code=nodecodes.glue local disc_code=nodecodes.disc local math_code=nodecodes.math local dir_code=nodecodes.dir -local localpar_code=nodecodes.localpar +local par_code=nodecodes.par local lefttoright_code=nodes.dirvalues.lefttoright local righttoleft_code=nodes.dirvalues.righttoleft local discretionarydisc_code=disccodes.discretionary @@ -26824,8 +26834,19 @@ local function markstoligature(head,start,stop,char) return head,base end end +local no_left_ligature_code=1 +local no_right_ligature_code=2 +local no_left_kern_code=4 +local no_right_kern_code=8 +local has_glyph_option=node.direct.has_glyph_option or function(n,c) + if c==no_left_ligature_code or c==no_right_ligature_code then + return getattr(n,a_noligature)==1 + else + return false + end +end local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfound,hasmarks) - if getattr(start,a_noligature)==1 then + if has_glyph_option(start,no_right_ligature_code) then return head,start end if start==stop and getchar(start)==char then @@ -27175,78 +27196,86 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip return head,start,false,false end function handlers.gpos_single(head,start,dataset,sequence,kerns,rlmode,skiphash,step,injection) - local startchar=getchar(start) - local format=step.format - if format=="single" or type(kerns)=="table" then - local dx,dy,w,h=setposition(0,start,factor,rlmode,kerns,injection) - if trace_kerns then - logprocess("%s: shifting single %s by %s xy (%p,%p) and wh (%p,%p)",pref(dataset,sequence),gref(startchar),format,dx,dy,w,h) - end + if has_glyph_option(start,no_right_kern_code) then + return head,start,false else - local k=(format=="move" and setmove or setkern)(start,factor,rlmode,kerns,injection) - if trace_kerns then - logprocess("%s: shifting single %s by %s %p",pref(dataset,sequence),gref(startchar),format,k) + local startchar=getchar(start) + local format=step.format + if format=="single" or type(kerns)=="table" then + local dx,dy,w,h=setposition(0,start,factor,rlmode,kerns,injection) + if trace_kerns then + logprocess("%s: shifting single %s by %s xy (%p,%p) and wh (%p,%p)",pref(dataset,sequence),gref(startchar),format,dx,dy,w,h) + end + else + local k=(format=="move" and setmove or setkern)(start,factor,rlmode,kerns,injection) + if trace_kerns then + logprocess("%s: shifting single %s by %s %p",pref(dataset,sequence),gref(startchar),format,k) + end end + return head,start,true end - return head,start,true end function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,skiphash,step,injection) - local snext=getnext(start) - if not snext then + if has_glyph_option(start,no_right_kern_code) then return head,start,false else - local prev=start - while snext do - local nextchar=ischar(snext,currentfont) - if nextchar then - if skiphash and skiphash[nextchar] then - prev=snext - snext=getnext(snext) - else - local krn=kerns[nextchar] - if not krn then - break - end - local format=step.format - if format=="pair" then - local a=krn[1] - local b=krn[2] - if a==true then - elseif a then - local x,y,w,h=setposition(1,start,factor,rlmode,a,injection) - if trace_kerns then - local startchar=getchar(start) - logprocess("%s: shifting first of pair %s and %s by xy (%p,%p) and wh (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections") - end + local snext=getnext(start) + if not snext then + return head,start,false + else + local prev=start + while snext do + local nextchar=ischar(snext,currentfont) + if nextchar then + if skiphash and skiphash[nextchar] then + prev=snext + snext=getnext(snext) + else + local krn=kerns[nextchar] + if not krn then + break end - if b==true then - start=snext - elseif b then - local x,y,w,h=setposition(2,snext,factor,rlmode,b,injection) + local format=step.format + if format=="pair" then + local a=krn[1] + local b=krn[2] + if a==true then + elseif a then + local x,y,w,h=setposition(1,start,factor,rlmode,a,injection) + if trace_kerns then + local startchar=getchar(start) + logprocess("%s: shifting first of pair %s and %s by xy (%p,%p) and wh (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections") + end + end + if b==true then + start=snext + elseif b then + local x,y,w,h=setposition(2,snext,factor,rlmode,b,injection) + if trace_kerns then + local startchar=getchar(start) + logprocess("%s: shifting second of pair %s and %s by xy (%p,%p) and wh (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections") + end + start=snext + elseif forcepairadvance then + start=snext + end + return head,start,true + elseif krn~=0 then + local k=(format=="move" and setmove or setkern)(snext,factor,rlmode,krn,injection) if trace_kerns then - local startchar=getchar(start) - logprocess("%s: shifting second of pair %s and %s by xy (%p,%p) and wh (%p,%p) as %s",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h,injection or "injections") + logprocess("%s: inserting %s %p between %s and %s as %s",pref(dataset,sequence),format,k,gref(getchar(prev)),gref(nextchar),injection or "injections") end - start=snext - elseif forcepairadvance then - start=snext - end - return head,start,true - elseif krn~=0 then - local k=(format=="move" and setmove or setkern)(snext,factor,rlmode,krn,injection) - if trace_kerns then - logprocess("%s: inserting %s %p between %s and %s as %s",pref(dataset,sequence),format,k,gref(getchar(prev)),gref(nextchar),injection or "injections") + return head,start,true + else + break end - return head,start,true - else - break end + else + break end - else - break end + return head,start,false end - return head,start,false end end function handlers.gpos_mark2base(head,start,dataset,sequence,markanchors,rlmode,skiphash) @@ -27676,89 +27705,93 @@ function chainprocs.gsub_ligature(head,start,stop,dataset,sequence,currentlookup return head,start,false,0,false end function chainprocs.gpos_single(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex) - local mapping=currentlookup.mapping - if mapping==nil then - mapping=getmapping(dataset,sequence,currentlookup) - end - if mapping then - local startchar=getchar(start) - local kerns=mapping[startchar] - if kerns then - local format=currentlookup.format - if format=="single" then - local dx,dy,w,h=setposition(0,start,factor,rlmode,kerns) - if trace_kerns then - logprocess("%s: shifting single %s by %s (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),format,dx,dy,w,h) - end - else - local k=(format=="move" and setmove or setkern)(start,factor,rlmode,kerns,injection) - if trace_kerns then - logprocess("%s: shifting single %s by %s %p",cref(dataset,sequence),gref(startchar),format,k) + if has_glyph_option(start,no_right_kern_code) then + local mapping=currentlookup.mapping + if mapping==nil then + mapping=getmapping(dataset,sequence,currentlookup) + end + if mapping then + local startchar=getchar(start) + local kerns=mapping[startchar] + if kerns then + local format=currentlookup.format + if format=="single" then + local dx,dy,w,h=setposition(0,start,factor,rlmode,kerns) + if trace_kerns then + logprocess("%s: shifting single %s by %s (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),format,dx,dy,w,h) + end + else + local k=(format=="move" and setmove or setkern)(start,factor,rlmode,kerns,injection) + if trace_kerns then + logprocess("%s: shifting single %s by %s %p",cref(dataset,sequence),gref(startchar),format,k) + end end + return head,start,true end - return head,start,true end end return head,start,false end function chainprocs.gpos_pair(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex) - local mapping=currentlookup.mapping - if mapping==nil then - mapping=getmapping(dataset,sequence,currentlookup) - end - if mapping then - local snext=getnext(start) - if snext then - local startchar=getchar(start) - local kerns=mapping[startchar] - if kerns then - local prev=start - while snext do - local nextchar=ischar(snext,currentfont) - if not nextchar then - break - end - if skiphash and skiphash[nextchar] then - prev=snext - snext=getnext(snext) - else - local krn=kerns[nextchar] - if not krn then + if has_glyph_option(start,no_right_kern_code) then + local mapping=currentlookup.mapping + if mapping==nil then + mapping=getmapping(dataset,sequence,currentlookup) + end + if mapping then + local snext=getnext(start) + if snext then + local startchar=getchar(start) + local kerns=mapping[startchar] + if kerns then + local prev=start + while snext do + local nextchar=ischar(snext,currentfont) + if not nextchar then break end - local format=currentlookup.format - if format=="pair" then - local a=krn[1] - local b=krn[2] - if a==true then - elseif a then - local x,y,w,h=setposition(1,start,factor,rlmode,a,"injections") - if trace_kerns then - local startchar=getchar(start) - logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h) - end + if skiphash and skiphash[nextchar] then + prev=snext + snext=getnext(snext) + else + local krn=kerns[nextchar] + if not krn then + break end - if b==true then - start=snext - elseif b then - local x,y,w,h=setposition(2,snext,factor,rlmode,b,"injections") + local format=currentlookup.format + if format=="pair" then + local a=krn[1] + local b=krn[2] + if a==true then + elseif a then + local x,y,w,h=setposition(1,start,factor,rlmode,a,"injections") + if trace_kerns then + local startchar=getchar(start) + logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h) + end + end + if b==true then + start=snext + elseif b then + local x,y,w,h=setposition(2,snext,factor,rlmode,b,"injections") + if trace_kerns then + local startchar=getchar(start) + logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h) + end + start=snext + elseif forcepairadvance then + start=snext + end + return head,start,true + elseif krn~=0 then + local k=(format=="move" and setmove or setkern)(snext,factor,rlmode,krn) if trace_kerns then - local startchar=getchar(start) - logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",cref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h) + logprocess("%s: inserting %s %p between %s and %s",cref(dataset,sequence),format,k,gref(getchar(prev)),gref(nextchar)) end - start=snext - elseif forcepairadvance then - start=snext - end - return head,start,true - elseif krn~=0 then - local k=(format=="move" and setmove or setkern)(snext,factor,rlmode,krn) - if trace_kerns then - logprocess("%s: inserting %s %p between %s and %s",cref(dataset,sequence),format,k,gref(getchar(prev)),gref(nextchar)) + return head,start,true + else + break end - return head,start,true - else - break end end end @@ -29580,7 +29613,7 @@ do checkstep(head) end local initialrl=0 - if getid(head)==localpar_code and start_of_par(head) then + if getid(head)==par_code and start_of_par(head) then initialrl=pardirstate(head) elseif direction==righttoleft_code then initialrl=-1 -- cgit v1.2.3